НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.6 >> [I128-2675] he3: отложенный autosync после сохранения использует удаленный черновик📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.2.6 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: ИРБИС 128. Модуль he3 - Табличная форма ввода данных
Завершено: 04.09.2026 17:55
Проблема: При быстром сохранении после изменения поля в he3 может остаться запланированный debounce autosync. После CommitDraft старый draftId удаляется, а отложенный UpdateDraft выполняется по уже удаленному черновику и пользователь видит ошибку "Черновик с ID ... не найден", хотя запись сохранена.
Решение: Перед финальным sync/CommitDraft отменять pending sync timeout и сбрасывать его, чтобы после удаления черновика не отправлялся UpdateDraft со старым draftId.
Технические подробности:
Затронут modules/he3/JS/he3.core.js, метод onCommitDraft. Исправление нужно внести в release-ветку release/2026.2 и затем вернуть в develop штатным маршрутом.
I128-2675 исправляет клиентскую синхронизацию черновиков в he3 после успешного сохранения записи. PR открыт в develop и затрагивает только modules/he3/JS/he3.core.js: локальная recovery-копия очищается, совпадающая с записью копия не предлагает восстановление, а редактор после CommitDraft получает новый draftId.
Куда смотреть:
?id=WIrbis&action=he3/Show&dbName=IBIS&mfn=<существующий MFN> -> изменить запись -> нажать Сохранить -> не закрывая редактор продолжить редактирование или дождаться автосохранения; затем повторно открыть этот же MFN. Chrome: не подтверждено на PR-ветке в этом проходе: запущенный стенд не переключался на bugfix/I128-2675-he3-draft-recovery. Было: после сохранения в localStorage оставалась he3_recovery_<db>_<mfn>, при повторном открытии появлялось ложное предупреждение о восстановлении, а следующий UpdateDraft мог обращаться к удаленному серверному draftId. Стало: после успешного сохранения recovery для старого и сохраненного MFN очищается; совпадающая сохраненная копия удаляется без предупреждения; открытый редактор переинициализирует черновик и продолжает работать с новым draftId.bugfix/I128-2675-he3-draft-recovery содержит текущий origin/develop (ead8e01b9) и один commit 48d112b11; можно переключаться прямо на PR-ветку.Изменения по файлам:
modules/he3/JS/he3.core.js
localStorage нормализуется и сравнивается с текущими данными записи; если данные совпадают, ключ удаляется и диалог восстановления не показывается.getLocalRecoveryKey, clearLocalRecovery и reinitDraftAfterCommit для единообразной работы с recovery-ключом и повторной инициализации серверного черновика.syncDraft теперь пишет localStorage через общий ключ, завязанный на текущие dbName и mfn.onCommitDraft после успешного CommitDraft очищает recovery для прежнего и сохраненного MFN; если редактор остается открытым, получает новый draftId через he3/InitDraft, чтобы следующий autosave не обращался к уже удаленному черновику.В he3 при сохранении записи отменяется pending debounce autosync перед финальным syncDraft и CommitDraft.
Если пользователь быстро сохранял запись после изменения поля, ранее запланированный autosync мог выполниться уже после CommitDraft, когда старый draftId удален. Это приводило к ошибке UpdateDraft по несуществующему черновику при уже сохраненной записи.
node --check modules\he3\JS\he3.core.jsgit diff --checkРазрешение текущих конфликтов подготовлено в PR #1359 (merge/release-2026.2-to-develop-pr1358 -> develop, commit 169484ec3bf1bde29110dd8cd22cf7f5b3fae057). Обе исходные ветки защищены от прямого push; отдельный PR сохраняет направление переноса release → develop. После принятия #1359 следует повторно проверить этот PR на новые изменения релизной ветки.
Перенос всех изменений из release/2026.2, которые ещё не входят в develop.
PR создан после merge #1353: I128-2785: SocketProxy отправляет внутренние HTTPS-запросы на порт 80.
Пока этот PR открыт, последующие изменения release/2026.2 входят в него автоматически. Перед merge требуется проверить полный diff и пройти обычное review.
Перенос накопленных исправлений release/2026.2 в develop с разрешением конфликтов PR #1358.
Обе исходные ветки защищены от прямого push. Отдельная ветка содержит merge текущего release/2026.2 (e402d81e4d2a59c87254ea3bd62fbd805d6bd332) в текущий develop (df8b1a8ee2d35e0cc0c5e776d64cb71f115013e4). Новые функции develop не переносятся обратно в релизную линию. Для принятия изменений используется обычное review; PR #1358 пока остается открытым.
Разрешение конфликтов:
^, в том числе после редактирования повторений через F3. Отложенная синхронизация отменяется перед сохранением.modules/he3/tests/editor_commands_smoke.js. Существующий тест журнала статистики сохраняет путь tools/PagesStatJournalSelfTest.php.Проверки:
await Irbis.he3.testEditorCommands(). Серверное сохранение подменено; пользовательские БД не изменялись.При принятии сохранить merge-коммит и родителя release/2026.2 в истории develop (merge commit или fast-forward).
После принятия этого PR нужно повторно проверить #1358: если в release не появились новые изменения, его перенос будет полностью выполнен. Автоматизация последующих переносов release → develop не изменялась.