Nick Shirokov
a381fca0a1
refactor(web-test): returnFormState в close.mjs + filter.mjs (7 веток)
...
closeForm: platform-dialogs, save=true/false, final-escape — теперь подмешивают
state.errors через returnFormState. Ветка save=undefined (hint-return)
осознанно оставлена без errors (юзер ещё не принял решение).
filterList: simple search, advanced search — закрывают R1/R2.
unfilterList: selective (field) + clear-all — аналогично.
Phase 1 / C2 из плана upload/returnFormState-audit.md. Точечный регресс зелёный
(02-crud, 06-document, 09-filter).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-27 12:21:00 +03:00
Nick Shirokov
89efcad125
refactor(web-test): извлечён EDD-домен в dom/edd.mjs
...
Новое в dom/edd.mjs:
- readEddScript — {visible, items:[{name,x,y}]}
- isEddVisibleScript — boolean, лёгкая проверка
- clickEddItemViaDispatchScript — клик по name через dispatchEvent (bypass
div.surface); fuzzy с NBSP/ё/bracket-strip
- clickShowAllInEddScript — "Показать все" в footer
Wrappers в helpers.mjs: readEdd, isEddVisible, clickEddItemViaDispatch,
clickShowAllInEdd. row-fill clickEddItem унифицирован с select-value
вариантом (NBSP/ё normalization теперь работает и для табличных строк).
Метрики: select-value 880 → 827 LOC (−53), row-fill 1065 → 1041 LOC
(−24); evaluates row-fill 20 → 17, select-value 7 → 5. Полный регресс
зелёный.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 20:57:58 +03:00
Nick Shirokov
340142b0a2
refactor(web-test): извлечены DOM-скрипты dialog/picker UI из select-value
...
Применены shared-функции из S2 (findSearchInputScript, findNamedButton,
findCompareTypeRadio, isFormVisible). Добавлены новые для type-dialog и
picker UI:
- findPatternInputIdScript — Pattern input id (Alt+F dialog)
- isTypeDialogScript — OK + ValueList + "Выбор типа" title
- isNotInListCloudVisibleScript — "нет в списке" tooltip popup
- findChildFormByButtonScript — поиск child-form по имени кнопки
- readTypeDialogVisibleRowsScript — visible rows + fuzzy matches в ValueList
select-value.mjs: 950 → 880 LOC (−70), inline page.evaluate 24 → 7
(планировали ≤8). Регресс 06/11/13 зелёный; полный регресс зелёный
(Checkpoint-1 пройден). 04-selectvalue auto-history шаг — pre-existing
test-isolation issue (см. S1).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 20:38:01 +03:00
Nick Shirokov
85003782db
refactor(web-test): извлечены detect-new-form и edit-state из inline в dom/
...
Дедуплицированы 15 копий detect-new-form (13 в row-fill + 2 локальные
обёртки в select-value), 6 копий INPUT-focused, 4 проверки calendar/
calculator popup, 1 INPUT-focused-inside-grid.
Новое:
- dom/forms.mjs: detectNewFormScript(prev, {strict}) — объединяет broad
и strict варианты
- dom/edit-state.mjs: isInputFocusedScript({allowTextarea}),
isInputFocusedInGridScript, findOpenPopupScript
- helpers.mjs: переписан detectNewForm на dom-script; добавлены тонкие
обёртки isInputFocused, isInputFocusedInGrid, findOpenPopup
Метрики row-fill: 1235 → 1065 LOC (−170), inline page.evaluate 47 → 20.
Поведение идентично; точечный регресс зелёный (02/03/05/06/10/16).
04-selectvalue auto-history шаг — pre-existing baseline issue (state-
driven, не связан с S1, воспроизводится на HEAD).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 19:54:36 +03:00
Nick Shirokov
8bdcb9e664
refactor(web-test): form-state переехал из core/ в forms/
...
getFormState — высокоуровневая операция «прочитать состояние формы»,
семантически в forms/ ближе чем в core/ (foundational плумбинг движка).
engine/core/form-state.mjs → engine/forms/state.mjs
Все 11 importer'ов обновлены. Внутри state.mjs пути исправлены:
'./state.mjs' → '../core/state.mjs', './errors.mjs' → '../core/errors.mjs'.
03-fillfields регресс зелёный.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 16:48:08 +03:00
Nick Shirokov
ab10761667
chore(web-test): почистить устаревшие комментарии и неиспользуемые импорты
...
После полной чистки cycle-импортов в E.13 остались комментарии типа
"getFormState still in browser.mjs", которые больше не верны (он переехал
в engine/core/form-state.mjs). Сметаем устаревшие "moved to / lives in
browser.mjs" комментарии в 8 файлах.
Дополнительно в engine/table/spreadsheet.mjs:
- убраны неиспользуемые импорты readTableScript, resolveGridScript, normYo
(остались с тех пор, как readTable жил в этом файле — до этапа D.12
rename'а в grid.mjs)
- заголовочный комментарий обновлён (без упоминания readTable)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 16:42:17 +03:00
Nick Shirokov
a24c39b6de
refactor(web-test): этап E.13 — финализация (v1.17 + чистый facade + чистка)
...
1. Версия v1.16 → v1.17 во всех заголовках движка.
2. browser.mjs стал чистым facade — только re-exports, 0 функций определено.
Было: 249 LOC с 4 настоящими функциями (saveClipboard, restoreClipboard,
pasteText, getFormState) — теперь 57 LOC чистых re-export'ов.
3. engine/core/clipboard.mjs — новый модуль:
pasteText + saveClipboard + restoreClipboard (~85 LOC, был в browser.mjs).
4. engine/core/form-state.mjs — новый модуль:
getFormState — центральный читатель состояния формы (~30 LOC).
5. Убрано 12 циклических импортов из engine/* → ../../browser.mjs:
- Все читатели pasteText теперь импортят из engine/core/clipboard.mjs
- Все читатели getFormState — из engine/core/form-state.mjs
- session.mjs → nav/navigation.mjs (getPageState напрямую)
- filter.mjs → core/click.mjs (clickElement напрямую)
Граф зависимостей стал деревом (без обратных рёбер).
6. Убраны _-префиксы у 9 функций, которые стали приватными внутри своих
модулей (раньше _ означало "приватная для browser.mjs"):
_detectPlatformDialogs → detectPlatformDialogs
_closePlatformDialogs → closePlatformDialogs
_parseErrorStack → parseErrorStack
_fetchStackViaReport → fetchStackViaReport
_fetchStackViaHamburger → fetchStackViaHamburger
_logoutSlot → logoutSlot
_saveActiveSlot → saveActiveSlot
_activateSlot → activateSlot
_attachSessionListeners → attachSessionListeners
Публичный API: 56 экспортов, идентичный исходному.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 16:25:15 +03:00
Nick Shirokov
8739d1d15c
refactor(web-test): структура — engine/ wrapper для внутренних модулей
...
Перенос всей внутрянки движка под scripts/engine/:
- core/, forms/, nav/, table/, recording/ → engine/<same>/
Публичные entry-точки остаются в scripts/ корне без изменений:
- browser.mjs, dom.mjs, run.mjs — компат не ломаем.
Симметричный layout, легко читать с первого взгляда:
scripts/
browser.mjs, dom.mjs, run.mjs ← публичные entries
engine/ ← внутренности движка
(dom/, cli/ — место под будущий распил dom.mjs / run.mjs)
Технические правки после переезда:
- browser.mjs: ./core/... → ./engine/core/... (23 импорта)
- engine/*/* модули: ../browser.mjs → ../../browser.mjs (11 импортов)
- engine/*/* модули: ../dom.mjs → ../../dom.mjs (12 импортов)
- engine/recording/capture.mjs: dynamic import('../browser.mjs')
→ import('../../browser.mjs')
- engine/core/state.mjs: projectRoot пересчитан (5 → 6 уровней вверх)
- Git rename detection срабатывает — история файлов сохраняется
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 16:03:20 +03:00