diff --git a/docs/ux-ui-acceptance-candidate.md b/docs/ux-ui-acceptance-candidate.md index 4b7fe36a..fc0d1b4a 100644 --- a/docs/ux-ui-acceptance-candidate.md +++ b/docs/ux-ui-acceptance-candidate.md @@ -1,6 +1,6 @@ -# Кандидат итоговой приёмки UX/UI — 2026-10-15 +# Итоговая лабораторная приёмка UX/UI — 2026-10-15 -Статус: **основная UI-регрессия263 принята; отдельная context-регрессия264 запланирована**. Этот документ не разрешает выпуск, push или развёртывание в production. Этап12.5 пока открыт. +Статус: **основной UX/UI-план, включая этап12.5, завершён в границах предоставленного тестового стенда**. Перечисленные ниже внешние ограничения сохраняются. Production-выпуск и push не выполнялись. ## Проверенный контур @@ -19,11 +19,11 @@ | Общая оболочка, доступность и адаптивность |260/261:120 уникальных default states30 экранов, обе темы/1440 и320px; профильные клавиатурные проверки и исправленный фокус при смене URL | Результаты разных фаз сохранены; это не полный ручной screen-reader аудит и не все состояния каждой формы | | Достоверность данных и операций | Unknown/partial состояния и подтверждение операций проверены профильными наборами и реальными сценариями журнала; в259 проверены native ID/key/fingerprint, TLS и canonical dates | Успех HTTP сам по себе не принят за применение; произвольные внешние конфигурации не охвачены | | Производительность | Большие списки — локальная12.3.83;260 — synthetic timings с отдельным ожиданием ответов API;262 —10min REST soak/252 запросов | Это измерения конкретного стенда, без заявления field CWV, maximum throughput или бесконечной устойчивости | -| Сборки и регрессия | Backend257:25 profiles; certificates258:9 scripts/build/lint; frontend261:production build, source528 matched; профильные E2E260/261 пройдены | UI263:1393 initial +3 targeted =1396 unique passed,0 skipped/flaky; context-набор ожидает отдельного264, исторический результат не выдан за новый | +| Сборки и регрессия | Backend257:25 profiles; certificates258:9 scripts/build/lint; frontend261:production build, source528 matched; профильные E2E260/261 пройдены | UI263:1393 initial +3 targeted =1396 unique passed; отдельный context264:219 initial +2 targeted =221 unique passed;0 skipped/flaky в обоих наборах. Это разные прогоны, без суммирования повторов | | Реальные интеграции | Portal/Telegram195–201, Android227, S3/limited bridge restore/retention228–240, GeoIP mirror242, контейнеры248, ACME250/renewal259 | Успех этих сценариев не подтверждает все сторонние клиенты/провайдеры и многопроцессную установку | | ReUI | Frame/base-nova/установленные компоненты; semantic Badge variants; vendor/theme/motion не изменены; checklist и scoped проверки зафиксированы260/261 | Вне проверенных состояний могут оставаться проблемы; автоматический axe не является полной сертификацией WCAG | -Краткие протоколы: [UI260](ux-ui/acceptance/ui260-summary.json), [UI261](ux-ui/acceptance/ui261-summary.json), [REST262](ux-ui/acceptance/rest262-summary.json), [UI263](ux-ui/acceptance/ui263-summary.json), [ACME259](ux-ui/acceptance/acme259-native-rotation.json). +Краткие протоколы: [UI260](ux-ui/acceptance/ui260-summary.json), [UI261](ux-ui/acceptance/ui261-summary.json), [REST262](ux-ui/acceptance/rest262-summary.json), [UI263](ux-ui/acceptance/ui263-summary.json), [context264](ux-ui/acceptance/context264-summary.json), [ACME259](ux-ui/acceptance/acme259-native-rotation.json). ## Что остаётся за пределами подтверждённого контура @@ -40,10 +40,10 @@ ## Состояние стенда и сохранность -После ACME259 восстановлены исходные SSL/native certificates/files/export и приватные SQL-настройки; собственные DNS/issue jobs и приватные ACME fixtures удалены. Контрольные проверки обоих CHR успешны; пароли не менялись. Последующие260–262 не изменяли конфигурацию устройств. ECMP261 проверялся как локальный черновик, затем возвращён off. +После ACME259 восстановлены исходные SSL/native certificates/files/export и приватные SQL-настройки; собственные DNS/issue jobs и приватные ACME fixtures удалены. Контрольные проверки обоих CHR успешны; пароли не менялись. Последующие260–264 не изменяли конфигурацию устройств. ECMP261 проверялся как локальный черновик, затем возвращён off. Коммиты только локальные, без push. В полном UI-наборе263 фактический Next dev manifest направляет unmocked proxy на недоступный `127.0.0.1:9`; исходные371 screenshot-файл сохранены перед запуском и сверены:124 перезаписанных восстановлены, SHA-256 всех371 совпал; два исторических JSON также восстановлены. -## Следующий шаг +## Завершение и дальнейшая работа -Выполнить отдельный context-набор264, затем завершить акт для предоставленного лабораторного контура с сохранением перечисленных ограничений. Публикация и production-развёртывание в текущий объём не входят. +Критерии согласованного этапа12 — production build, тесты, ReUI checklist и перечень оставшихся ограничений — выполнены в указанном контуре. На предоставленном стенде обязательных незавершённых блоков основного плана нет. Для расширения покрытия следует выбрать конкретную группу из таблицы и обеспечить её условия; повторять принятые наборы без изменений не требуется. Публикация и production-развёртывание в текущий объём не входят. diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 1dbe0403..529a5bd5 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются. +Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись. IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md). @@ -18,6 +18,16 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json). +## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15) + +Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json). + +TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись. + +Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production. + +Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0. + ## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15) Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json). diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index 1ffa6402..bccf1ff1 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,9 +1,19 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются. +Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-15. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. +## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15) + +Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json). + +TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись. + +Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production. + +Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0. + ## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15) Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json). @@ -380,7 +390,7 @@ Production backend/frontend ux-backups237 собраны и развёрнуты ## Остаток приёмки по группам — 2026-10-15 -Этапы0–11 завершены в локальных границах. Этап12.5 открыт. Ниже семь групп охвата; это не семь обязательных новых этапов и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия. +Этапы0–12 завершены в пределах документированной лабораторной приёмки2026-10-15. Ниже семь групп дополнительного охвата; это не обязательные новые этапы основного плана и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия. | Группа | Подтверждено | Открытый объём / условие | | --- | --- | --- | @@ -389,8 +399,8 @@ Production backend/frontend ux-backups237 собраны и развёрнуты | Масштаб и устойчивость | Контролируемые PG lock/dedupe/loss/recovery, отдельные multi-process сценарии194/200/201 | Несколько полноценных backend/worker со всеми writers, длительный rekey/traffic, физические потери WAN/DB и maximum throughput | | Хранилища и внешние jobs | Реальные Portal/Telegram195–201, Selectel S3/limited bridge restore/retention228–240, GeoIP mirror242; контейнеры248; production ACME250 и реальное renewal/rotation259 с trusted TLS/cleanup | Large native export/migration buckets/multi-instance S3; CA revocation отдельно не принят. Gitea publishing CI не запускался: действует no push. Direct licensed MaxMind отсутствует в текущей реализации | | Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP в записанных сценариях, включая private IPv6 | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/path-length, независимые внешние peers и длительные переходы. BFD-only gate не гарантирован | -| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; актуальная полная UI-регрессия263 и ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация | -| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | Подготовить итоговый перечень принятых конфигураций/исключений для решения о выпуске; лабораторный успех не объявлять приёмкой всех конфигураций | +| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; основная регрессия263:1396 и context264:221 приняты; ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация | +| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | [Итоговый акт](ux-ui-acceptance-candidate.md) готов; production-выпуск не выполнялся, лабораторный успех не означает приёмку всех конфигураций | Portal offline JWT действует доexp после logout/role change; это записанная граница198, не мгновенная revocation. Controlled Telegram unknown/retry201 не доказывает физическую потерю ACK в WAN. Архивные записи ниже отражают состояние на свою дату; актуальный статус задают эта таблица и верхняя точка продолжения. @@ -470,19 +480,19 @@ flowchart LR новый контекст ≠ старые данные; неизвестное ≠ ноль ``` -## Текущая точка продолжения +## Текущая точка продолжения — 2026-10-15 -По журналу этапы 0–8 завершены в границах локальной приёмки; внешние ограничения сохраняются. Этап 9 начат (блоки 9.1–9.34 — IPsec/GRE/VXLAN и переключение Firewall); этапы 10–12 не начаты. Этап 11 разделён: 11А — пользователи, контейнеры, сертификаты, резервирование; 11Б — оповещения, сбор данных, интеграции, релизы, настройки. +Этапы0–11 завершены в границах локальной приёмки; реальные сетевые операции и интеграции дополнительно проверены в12.5. Итоговый статус этапа12 и точный проверенный контур задаются [актом приёмки](ux-ui-acceptance-candidate.md) и верхней датированной записью [журнала](ux-ui-progress.md). Старое утверждение «этапы10–12 не начаты» удалено как не соответствующее результатам. -Подробные планы: [этап 6](ux-ui-stage-6.md), [этап 7](ux-ui-stage-7.md), [этап 8 и итоговая матрица](ux-ui-stage-8.md), [этап 9](ux-ui-stage-9.md). +| Группа | Завершённый объём | Документ | +| --- | --- | --- | +| 0–5 | Подготовка, операции, миграция таблиц и состояния данных | [Журнал](ux-ui-progress.md) | +| 6–8 | Оболочка, серверы, мониторинг, трафик и статистика | [Этап6](ux-ui-stage-6.md), [этап7](ux-ui-stage-7.md), [этап8](ux-ui-stage-8.md) | +| 9–10 | VPN, Firewall, Filters, маршрутизация и диагностика | [Этап9](ux-ui-stage-9.md), [этап10](ux-ui-stage-10.md) | +| 11А–11Б | Администрирование, оповещения, интеграции и настройки | [Этап11А](ux-ui-stage-11a.md), [этап11Б](ux-ui-stage-11b.md) | +| 12 | Общая регрессия и реальный стенд; ограничения перечислены отдельно | [Этап12](ux-ui-stage-12.md), [матрица](ux-ui-remaining-acceptance.md) | -Этап 8 завершён блоком 8.13: периоды и URL статистики, достоверность REST/SSE, защита от гонок, свежесть и разрывы графиков, месячный отчёт с каталогом неактивных серверов, адаптивность и профильная клавиатурная приёмка. Повреждённые ответы статистики показывают ошибку с повтором. Точный состав проверок и ограничений сохранён в журнале. - -Ближайший оставшийся объём: - -1. Этап 9: карта разделов и схема сохранены; удаление, импорт, создание, переключение, контекст экспорта и выбор пира WireGuard исправлены в 9.1–9.7; в 9.8 проверено подтверждение восстановления. В 9.9 исправлены разметка и сохранение подтверждения при ошибке у всех шести потребителей. В 9.10 исправлены ошибки и поздние ответы загрузки истории WireGuard. В 9.11 подтверждение восстановления проверено у остальных пяти потребителей. В 9.12 обработаны ошибка/повтор/поздние ответы истории IPsec. В 9.13 подключены ошибка/повтор/защита поздних ответов остальных четырёх разделов и общая валидация ревизий всех шести. В 9.14 исправлены подтверждение инициализации IPsec, сохранение формы и защита повторной отправки. В 9.15 проверены создание/редактирование пользователей IPsec и сохранение формы. В 9.16 проверены получение/повторный экспорт сертификатов, поздние ответы и соответствие отображаемого пароля архиву. В 9.17 подтверждены ответы удаления четырёх типов объектов IPsec и исправлен диалог повторов. В 9.18 исправлено подтверждение сохранения peer IPsec и поведение формы. В 9.19 исправлено подтверждение удаления GRE и сохранение диалога при ошибке. В 9.20 исправлено подтверждение включения/выключения GRE и защита повторов. В 9.21 исправлены подтверждение создания/сохранения GRE и защита формы. В 9.22 исправлены контейнер ответа, первоначальные KPI и сохранение данных при ошибке VXLAN. В 9.23 backend сообщает частичные сбои VXLAN, UI сохраняет данные неответивших устройств и показывает неизвестное состояние. В 9.24 добавлены схемы payload и тесты гонок VXLAN. В 9.25 подтверждены включение/отключение правил Firewall и защита повторов. В 9.26 подтверждены включение/отключение address-list с общим замком переключений. В 9.27 удаление правил/address-list перенесено в диалог с подтверждением API и защитой повторов. В 9.28 создание/редактирование правил и address-list требуют подтверждения API, сохраняют ввод/ошибку и блокируют повторы/закрытие. В 9.29 перемещение Firewall требует ok=true, откатывает порядок при ошибке и использует общий замок. В 9.30 восстановление истории подключено к общему замку, ручное обновление и открытие истории заблокированы во время записи. В 9.31 добавлены схемы ответа Firewall/серверов, сохранение последних данных при ошибке и поколение чтения с отменой применения при начале записи. В 9.32 backend сообщает частичные сбои по устройству/семейству/таблице, UI сохраняет недоступные срезы и блокирует изменения неполного среза. В 9.33 состояние изолировано по backend/режиму; поздние операции старого экрана не запускают чтение и не показывают уведомления в новом контексте. В 9.34 показано время получения срезов Firewall: успешные обновляются, недоступные сохраняют прежнее время или остаются неизвестными. В 9.35 сохранение Filters ожидает ok=true, сохраняет ввод при ошибке и блокирует повторную отправку/закрытие; live-список меняется после подтверждения. В 9.36 копирование Filters ждёт подтверждения, сохраняет цель/правила/режим при ошибке и блокирует повторы/закрытие. В 9.37 удаление Filters перенесено в диалог с сохранением ошибки, подтверждением API и защитой повторов. В 9.38 перемещение Filters подтверждается API; поиск использует полный порядок для приоритета и границ, действия таблицы блокируются на время операции. В 9.39 обновление/восстановление Filters используют общий замок до чтения правил/истории; ошибка чтения сохраняет подтверждение, чужой ruleset и stale отклоняются. В 9.40 добавлены схемы правил/ответов Filters, ошибка первоначальной загрузки с повтором без подмены моками и сохранение последних данных. В 9.41 запись выбранного устройства требует успешного чтения live=true, старые ответы отклоняются поколением запросов при переключении/применении. В 9.42 состояние Filters изолировано по backend/режиму, старые операции не уведомляют новый контекст. В 9.43 копирование Filters читает актуальный целевой набор под общим замком до PUT, ошибки чтения блокируют отправку. В 9.44 схемы/ошибки каталогов Filters сохраняют последние шлюзы, блокируют недостоверный route/маппинг; выборный GRE GET сообщает 503 при отказе. В 9.45 показано время получения правил/каталогов Filters и отдельное подтверждение записи, сбои сохраняют прежнее время. Далее — профильная клавиатурная/адаптивная приёмка Filters; ограничения счётчика, свежести и записи VXLAN остаются открытыми; загрузка данных IPsec и общая приёмка остаются открытыми. -2. Сохранять контекст устройства, введённые значения при ошибке и подтверждать результат операций по API; локальные моки проверяют клиентские сценарии, реальные сетевые операции требуют тестового окружения. -3. В этапе 12 выполнить полный аудит доступности (скринридер, контраст), производительности и сквозную регрессию. Ограничения этапа 8 — удалённые серверы месячного каталога, отсутствие экспорта и автоматического переподключения SSE — остаются явно зафиксированными, без заявления о реализации. +Следующие разделы с номерами9.x и датами сентября/начала октября сохраняют исторические результаты. Они не отменяют актуальный статус выше и не задают новую очередь уже завершённых работ. ## Проверенные экраны Filters — блок 9.46 diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index be73e28c..6d3b9818 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются. +Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,17 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная12.3.83; внешняя12.5 открыта, блоки1–262. ACME259; default UI260/261:120 states30 экранов; REST262 ten-minute252 requests passed. Runtime backend258/frontend261. Следующий263 — итоговая локальная UI-регрессия. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Завершён2026-10-15 в границах предоставленного стенда:1396 UI/221 context,120 live states30 экранов, production builds/ReUI checklist и реальные интеграции. Ограничения — в [акте](ux-ui-acceptance-candidate.md); production-выпуск не выполнялся. | + +## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15) + +Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json). + +TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись. + +Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production. + +Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0. ## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15) diff --git a/docs/ux-ui-remaining-acceptance.md b/docs/ux-ui-remaining-acceptance.md index 853c1ce6..96ac864c 100644 --- a/docs/ux-ui-remaining-acceptance.md +++ b/docs/ux-ui-remaining-acceptance.md @@ -1,11 +1,21 @@ # Оставшаяся внешняя приёмка — 2026-10-15 -Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются. +Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись. -Это актуальная матрица после 12.5.262. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии. +Это матрица после12.5.264: основной план завершён в пределах предоставленного стенда; ниже сохранён дополнительный неподтверждённый охват. Исторические записи отражают состояние на дату выполнения. Успех на двух CHR и одном backend не означает приёмку всех конфигураций. Итоговые критерии и границы — в [акте](ux-ui-acceptance-candidate.md). Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-certificates258`, frontend `ux-accessibility261`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись. +## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15) + +Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json). + +TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись. + +Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production. + +Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0. + ## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15) Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json). @@ -376,7 +386,7 @@ Production backend/frontend ux-backups237 собраны и развёрнуты ## Остаток приёмки по группам — 2026-10-15 -Этапы0–11 завершены в локальных границах. Этап12.5 открыт. Ниже семь групп охвата; это не семь обязательных новых этапов и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия. +Этапы0–12 завершены в пределах документированной лабораторной приёмки2026-10-15. Ниже семь групп дополнительного охвата; это не обязательные новые этапы основного плана и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия. | Группа | Подтверждено | Открытый объём / условие | | --- | --- | --- | @@ -385,8 +395,8 @@ Production backend/frontend ux-backups237 собраны и развёрнуты | Масштаб и устойчивость | Контролируемые PG lock/dedupe/loss/recovery, отдельные multi-process сценарии194/200/201 | Несколько полноценных backend/worker со всеми writers, длительный rekey/traffic, физические потери WAN/DB и maximum throughput | | Хранилища и внешние jobs | Реальные Portal/Telegram195–201, Selectel S3/limited bridge restore/retention228–240, GeoIP mirror242; контейнеры248; production ACME250 и реальное renewal/rotation259 с trusted TLS/cleanup | Large native export/migration buckets/multi-instance S3; CA revocation отдельно не принят. Gitea publishing CI не запускался: действует no push. Direct licensed MaxMind отсутствует в текущей реализации | | Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP в записанных сценариях, включая private IPv6 | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/path-length, независимые внешние peers и длительные переходы. BFD-only gate не гарантирован | -| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; актуальная полная UI-регрессия263 и ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация | -| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | Подготовить итоговый перечень принятых конфигураций/исключений для решения о выпуске; лабораторный успех не объявлять приёмкой всех конфигураций | +| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; основная регрессия263:1396 и context264:221 приняты; ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация | +| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | [Итоговый акт](ux-ui-acceptance-candidate.md) готов; production-выпуск не выполнялся, лабораторный успех не означает приёмку всех конфигураций | Portal offline JWT действует доexp после logout/role change; это записанная граница198, не мгновенная revocation. Controlled Telegram unknown/retry201 не доказывает физическую потерю ACK в WAN. Архивные записи ниже отражают состояние на свою дату; актуальный статус задают эта таблица и верхняя точка продолжения. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 0cb63a9c..425b5d73 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются. +Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -12,6 +12,8 @@ | 12.4 | Сквозная регрессия интерфейса, права, context; production/contracts/backend builds и ReUI checklist | Итоговая матрица с результатами и точными исключениями | | 12.5 | Внешняя приёмка PG/RouterOS/Telegram/интеграций | Протокол тестового окружения; локальные моки не заменяют эту проверку | +Исходные условия ниже зафиксированы в начале этапа2026-10-03. Это исторический контекст; актуальные результаты и ограничения заданы верхней датированной записью и [итоговым актом](ux-ui-acceptance-candidate.md). + Сначала воспроизвести предполагаемые проблемы общей оболочки: health popover принимает только status:ok, тогда как shared health допускает подтверждённый legacy ok:true; проверить согласованность. Проверить реальные accessible names header triggers и skip link focus. Использовать установленный axe-core для автоматической части; отсутствие violations не означает полного соответствия или замену screen reader/manual проверки. Клавиатурный сценарий должен предоставлять эквивалент действий мышью ([W3C SC 2.1.1](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html)); программные имена/роли/состояния проверяются отдельно ([W3C SC 4.1.2](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html)). Проверка reflow включает 320 CSS px; широкие таблицы проверяются как отдельные области прокрутки, а не как разрешение переполнения страницы ([W3C SC 1.4.10](https://www.w3.org/WAI/WCAG22/Understanding/reflow.html)). @@ -4152,6 +4154,16 @@ Real Portal/browser API, provider local verified: создан один job ро Runtime backend ux-backup234/frontend ux-routing218 healthy; новое application image для volume-only fix не требовалось. Пароли CHR не менялись, S3 mutations0 в235, configs body/JWT не опубликованы, private local manifest удалён. Исходные10 missing local files не восстановлены и records не удалены. Force-recreate — не host reboot/power loss/fsync/DR приёмка. Далее236 — UX недоступных local files, затем version retention границы и оставшиеся7 группы матрицы; multi-instance guard не принимается. Этап12.5 открыт. +## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15) + +Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json). + +TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись. + +Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production. + +Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0. + ## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15) Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json). diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index b84c398b..89fab1f6 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-10 -Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются. +Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись. | Параметр | Проверенное состояние | | --- | --- | @@ -34,6 +34,16 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json). +## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15) + +Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json). + +TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись. + +Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production. + +Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0. + ## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15) Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json). diff --git a/docs/ux-ui/acceptance/context264-summary.json b/docs/ux-ui/acceptance/context264-summary.json new file mode 100644 index 00000000..129c4c3c --- /dev/null +++ b/docs/ux-ui/acceptance/context264-summary.json @@ -0,0 +1,90 @@ +{ + "date": "2026-10-15", + "block": "12.5.264", + "status": "accepted", + "config": "playwright.ux-context.config.ts", + "initial": { + "startTime": "2026-10-15T13:19:22.980Z", + "duration": 564926.3859999999, + "expected": 219, + "skipped": 0, + "unexpected": 2, + "flaky": 0 + }, + "targeted": { + "startTime": "2026-10-15T13:29:02.404Z", + "duration": 10679.58, + "expected": 2, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "uniqueAccepted": 221, + "failuresResolved": [ + "containers-context.spec.ts:Контейнеры: поздняя команда/remove/false", + "containers-context.spec.ts:Контейнеры: поздняя команда/remove/true" + ], + "cause": "The removal fixture was running; block248 requires confirmed stopped state before removal. Only the remove fixture is now stopped; stop cases stay running and all late-response/context assertions remain.", + "files": { + "alerts-context.spec.ts": 14, + "backend-switch.e2e.ts": 3, + "backups-context.spec.ts": 28, + "bgp-context.spec.ts": 4, + "certificates-context.spec.ts": 16, + "containers-context.spec.ts": 8, + "data-collection-context.spec.ts": 6, + "evobgp-context.spec.ts": 8, + "filters-context.spec.ts": 6, + "firewall-context.spec.ts": 4, + "geoip-context.spec.ts": 6, + "gre-context.spec.ts": 6, + "ipsec-context.spec.ts": 6, + "netflow-context.spec.ts": 10, + "network-map-context.spec.ts": 12, + "ospf-context.spec.ts": 8, + "probes-context.spec.ts": 8, + "recursive-routes-context.spec.ts": 8, + "route-optimizer-context.spec.ts": 8, + "settings-context.spec.ts": 10, + "system-database-context.spec.ts": 6, + "terminal-context.spec.ts": 8, + "uptime-context.spec.ts": 8, + "users-context.spec.ts": 8, + "vxlan-context.spec.ts": 4, + "wireguard-context.spec.ts": 8 + }, + "globalErrors": 0, + "rawReportSha256": "89a6d7ff6ae56acffe521c8b8689015d72b447af867718875d96366ef4338b83", + "mainSuite": { + "uniqueAccepted": 1396, + "evidence": "ui263-summary.json", + "disjointContextFiles": true + }, + "scope": "Local mocked HTTP UI context regression; source switches, stale responses and ABA guards. Not native network operations or manual AT certification.", + "productionCodeChanged": false, + "productionBuildRepeated": false, + "reason": "Only tests/documentation changed after frontend261 production build and backend258 deployment.", + "labStage12": "completed within documented environment and exclusions", + "releaseOrPushPerformed": false, + "sourceHeadBeforeTestFix": "481688e7", + "testFilesChanged": [ + "tests/e2e/containers-context.spec.ts" + ], + "preservation": { + "screenshotsSha256Verified": 371, + "screenshotsRestoredDuringContextRun": 0, + "historicalBackupJsonUnchanged": true + }, + "staticApiIsolation": { + "contextFiles": 25, + "broadApiMockInFile": 24, + "sharedBackupFixtureBroadApiMock": 1, + "backendSwitchBroadApiMock": true + }, + "checks": { + "typescript": "passed", + "scopedEslint": "passed", + "currentLocalMarkdownReferences": 985, + "missingLocalReferences": 0 + } +} diff --git a/tests/e2e/containers-context.spec.ts b/tests/e2e/containers-context.spec.ts index 19d7884f..ccb7838b 100644 --- a/tests/e2e/containers-context.spec.ts +++ b/tests/e2e/containers-context.spec.ts @@ -12,8 +12,9 @@ for(const change of ["backend","mode"])for(const fails of [false,true])test("К await expect(page.getByText("СТАРЫЙ КОНТЕЙНЕР",{exact:true})).toHaveCount(0);await expect(page.getByText(/СТАРАЯ ОШИБКА контейнеров/)).toHaveCount(0) }) for(const action of ["stop","remove"])for(const fails of [false,true])test("Контейнеры: поздняя команда/"+action+"/"+fails,async({page})=>{ + const commandContainer={...container,status:action==="remove"?"stopped":"running"} let started=false,completed=false,release!:()=>void;const gate=new Promise(r=>release=r) - await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:state()})}) + await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:state([commandContainer])})}) await page.route("**/api/servers/1/containers/"+action,async r=>{started=true;await gate;try{await r.fulfill(fails?{headers,status:503,json:{error:"СТАРАЯ КОМАНДА ОТКАЗ"}}:{headers,json:{ok:true}})}catch{}finally{completed=true}}) await page.goto("/containers");await page.getByRole("button",{name:"Действия контейнера "+container.name}).click();await page.getByRole("menuitem",{name:action==="stop"?"Остановить":"Удалить",exact:true}).click() if(action==="remove")await page.getByRole("alertdialog").getByRole("button",{name:"Удалить",exact:true}).click()