chore(test): уточнить предпосылки внешних задач и проверить релизы

This commit is contained in:
Denozordec committed 2026-10-14 15:14:51 +07:00
1 parent 48cc65ec2b
commit 044002e7eb
10 files changed
+321 -10

No files matched your search

+15 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-14:242 — GeoIP mirror job принят в own SQL/files и реальном mirror:12 fetches200/304, две валидные MMDB12,380,575bytes, missing/corrupt recovery, concurrent409, partial error сохраняетlastSuccessAt. Исправлены false304/eager gate/body deadline; download120s/64MiB, HTTP boundary tests и15E2E прошли. Backend ux-geoip242 healthy, frontend ux-backups237 image/container unchanged; live readUI1440/320 passed. Следующий243 — аудит доступных container/certificate/release jobs и актуальных внешних ограничений. Этап12.5 открыт.
Актуальное продолжение 2026-10-14:243 — read-only audit: оба CHR7.24.5/x86_64 доступны, packages routeros/option, device-mode.container=true, /container400 и UIunsupported. Cloudflare token/zone не настроены, ACME directory200 не являетсяissuance. Gitea workflow публикуетimages/releases; local release dry-run valid, push/APIpublish0. Portal live containers/releases4views passed. Backend ux-geoip242/frontend ux-backups237. Следующий244 — подготовка реальной контейнерной приёмки с точным пакетом и отдельным согласованием перезапуска. Этап12.5 открыт.
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,20 @@ 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.243 — реальные предпосылки контейнеров, ACME и релизов (2026-10-14)
Десять direct read-only RouterOS запросов:system/package/resource/device-mode/disk/container ×2CHR. Оба доступны7.24.5 stable/x86_64, installed routeros иoption, container feature=true/flagged=false, freeHDD около10GiB/freeRAM около0.8GiB. /container400 на обоих; пакет с именемcontainer не обнаружен. Публичный отчёт сохраняет status/error SHA256, неcredentials/полные error bodies. Приложение GET containers/state200 классифицирует обаunsupported. Это доступность текущего набора функций, а не доказательство отсутствия контейнеров по пустому snapshot или успешного lifecycle.
Vendor [Container](https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container) и [Packages](https://help.mikrotik.com/docs/spaces/ROS/pages/40992872/Packages) указывают требуемый container package. Для positive lifecycle нужны проверенный пакет текущей версии и контролируемая подготовка CHR; установка/перезапуск не выполнены. Новые manual URLs были недоступны web tool; использованы доступные официальные vendor pages, без вывода о совместимости конкретного будущего image по памяти.
ACME public settings:tokenConfigured=false/defaultZoneConfigured=false; Let’s Encrypt production directory GET200 с ожидаемыми endpoints. Это неDNS challenge, issuance, renew или deployment сертификата. Нужны явный test-domain/Cloudflare scoped token/право на временныеTXT и staging ACME. Секреты и зоны не выдумывались, DNS/account/certificate writes0.
Gitea — pipeline.gitea/workflows/docker.yml с push main/workflow_dispatch, registry uploads/releases/webhook; соответствующего backend polling job нет. По поручениюno push публикация не запускалась. compute-release.mjs отработал в ignored tmp output, candidate1.47.7/schema valid/current-candidate notes coherent, tagsCreated/pushes/GiteaAPIwrites/registryUploads0. Candidate не является выпущенной версией и не меняетpackage.json/publicmanifest. Отдельно real Portal UIcontainers/releases1440/320 passed:unsupported states, labversion1.0.0-test.backups237, globaloverflow/pageerrors0/non-auth APIwrites0. Первичный UI счётчик включал2 login POST; исправлено разделение auth и business operations, не приложение.
node --check availability helper passed; runtime code/images unchanged, профильная регрессия не повторялась без оснований. Два собственных сообщения локальных коммитов239/240 приведены к русскому тексту; author/date/trees/workspace dirty files сохранены, downstream commit IDs изменились, push0.
Протоколы: [native/ACME availability](ux-ui/acceptance/external-jobs243-availability.json), [live UI](ux-ui/acceptance/external-jobs243-live-ui.json), [release dry-run](ux-ui/acceptance/release243-dry-run.json). Следующий244 готовит конкретный vendor package/artifact для контейнерного lifecycle; применение и перезапуск согласовать отдельно после подготовки. REST root cause, multi-instance, clientOS/WAN/publicIPv6 и границы выпуска остаются по матрице.
## 12.5.242 — реальный GeoIP mirror job и честное состояние cache (2026-10-14)
В collector обнаруженыfalse-success304 при отсутствующей локальной базе (старый тест прямо принимал это), race до acquisition lock из-за await settings и освобождение timeout после headers вместо body. Теперь gate захватывается до первогоawait; concurrent force409/backgroundskip. Conditional ETag отправляется только после проверки локальной MMDB; missing/corrupt cache требует200 полного файла.304 без validated cache — ошибка, неskippedUnchanged. Partial failures сохраняют дату последнего успешного update и предыдущий файл, добавляя lastError. Новая downloadGeoipDatabase держит120s deadline через streaming body, ограничивает declared/chunked file64MiB и закрывает непригодное тело. Базы проходят existing Country/ASN validation до atomic swap; формат/layout ReUI не менялись.
+15 -1
View File
@@ -1,9 +1,23 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-14:242 — GeoIP mirror job принят в own SQL/files и реальном mirror:12 fetches200/304, две валидные MMDB12,380,575bytes, missing/corrupt recovery, concurrent409, partial error сохраняетlastSuccessAt. Исправлены false304/eager gate/body deadline; download120s/64MiB, HTTP boundary tests и15E2E прошли. Backend ux-geoip242 healthy, frontend ux-backups237 image/container unchanged; live readUI1440/320 passed. Следующий243 — аудит доступных container/certificate/release jobs и актуальных внешних ограничений. Этап12.5 открыт.
Актуальное продолжение 2026-10-14:243 — read-only audit: оба CHR7.24.5/x86_64 доступны, packages routeros/option, device-mode.container=true, /container400 и UIunsupported. Cloudflare token/zone не настроены, ACME directory200 не являетсяissuance. Gitea workflow публикуетimages/releases; local release dry-run valid, push/APIpublish0. Portal live containers/releases4views passed. Backend ux-geoip242/frontend ux-backups237. Следующий244 — подготовка реальной контейнерной приёмки с точным пакетом и отдельным согласованием перезапуска. Этап12.5 открыт.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-14. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## 12.5.243 — реальные предпосылки контейнеров, ACME и релизов (2026-10-14)
Десять direct read-only RouterOS запросов:system/package/resource/device-mode/disk/container ×2CHR. Оба доступны7.24.5 stable/x86_64, installed routeros иoption, container feature=true/flagged=false, freeHDD около10GiB/freeRAM около0.8GiB. /container400 на обоих; пакет с именемcontainer не обнаружен. Публичный отчёт сохраняет status/error SHA256, неcredentials/полные error bodies. Приложение GET containers/state200 классифицирует обаunsupported. Это доступность текущего набора функций, а не доказательство отсутствия контейнеров по пустому snapshot или успешного lifecycle.
Vendor [Container](https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container) и [Packages](https://help.mikrotik.com/docs/spaces/ROS/pages/40992872/Packages) указывают требуемый container package. Для positive lifecycle нужны проверенный пакет текущей версии и контролируемая подготовка CHR; установка/перезапуск не выполнены. Новые manual URLs были недоступны web tool; использованы доступные официальные vendor pages, без вывода о совместимости конкретного будущего image по памяти.
ACME public settings:tokenConfigured=false/defaultZoneConfigured=false; Let’s Encrypt production directory GET200 с ожидаемыми endpoints. Это неDNS challenge, issuance, renew или deployment сертификата. Нужны явный test-domain/Cloudflare scoped token/право на временныеTXT и staging ACME. Секреты и зоны не выдумывались, DNS/account/certificate writes0.
Gitea — pipeline.gitea/workflows/docker.yml с push main/workflow_dispatch, registry uploads/releases/webhook; соответствующего backend polling job нет. По поручениюno push публикация не запускалась. compute-release.mjs отработал в ignored tmp output, candidate1.47.7/schema valid/current-candidate notes coherent, tagsCreated/pushes/GiteaAPIwrites/registryUploads0. Candidate не является выпущенной версией и не меняетpackage.json/publicmanifest. Отдельно real Portal UIcontainers/releases1440/320 passed:unsupported states, labversion1.0.0-test.backups237, globaloverflow/pageerrors0/non-auth APIwrites0. Первичный UI счётчик включал2 login POST; исправлено разделение auth и business operations, не приложение.
node --check availability helper passed; runtime code/images unchanged, профильная регрессия не повторялась без оснований. Два собственных сообщения локальных коммитов239/240 приведены к русскому тексту; author/date/trees/workspace dirty files сохранены, downstream commit IDs изменились, push0.
Протоколы: [native/ACME availability](ux-ui/acceptance/external-jobs243-availability.json), [live UI](ux-ui/acceptance/external-jobs243-live-ui.json), [release dry-run](ux-ui/acceptance/release243-dry-run.json). Следующий244 готовит конкретный vendor package/artifact для контейнерного lifecycle; применение и перезапуск согласовать отдельно после подготовки. REST root cause, multi-instance, clientOS/WAN/publicIPv6 и границы выпуска остаются по матрице.
## 12.5.242 — реальный GeoIP mirror job и честное состояние cache (2026-10-14)
В collector обнаруженыfalse-success304 при отсутствующей локальной базе (старый тест прямо принимал это), race до acquisition lock из-за await settings и освобождение timeout после headers вместо body. Теперь gate захватывается до первогоawait; concurrent force409/backgroundskip. Conditional ETag отправляется только после проверки локальной MMDB; missing/corrupt cache требует200 полного файла.304 без validated cache — ошибка, неskippedUnchanged. Partial failures сохраняют дату последнего успешного update и предыдущий файл, добавляя lastError. Новая downloadGeoipDatabase держит120s deadline через streaming body, ограничивает declared/chunked file64MiB и закрывает непригодное тело. Базы проходят existing Country/ASN validation до atomic swap; формат/layout ReUI не менялись.
+15 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-14:242 — GeoIP mirror job принят в own SQL/files и реальном mirror:12 fetches200/304, две валидные MMDB12,380,575bytes, missing/corrupt recovery, concurrent409, partial error сохраняетlastSuccessAt. Исправлены false304/eager gate/body deadline; download120s/64MiB, HTTP boundary tests и15E2E прошли. Backend ux-geoip242 healthy, frontend ux-backups237 image/container unchanged; live readUI1440/320 passed. Следующий243 — аудит доступных container/certificate/release jobs и актуальных внешних ограничений. Этап12.5 открыт.
Актуальное продолжение 2026-10-14:243 — read-only audit: оба CHR7.24.5/x86_64 доступны, packages routeros/option, device-mode.container=true, /container400 и UIunsupported. Cloudflare token/zone не настроены, ACME directory200 не являетсяissuance. Gitea workflow публикуетimages/releases; local release dry-run valid, push/APIpublish0. Portal live containers/releases4views passed. Backend ux-geoip242/frontend ux-backups237. Следующий244 — подготовка реальной контейнерной приёмки с точным пакетом и отдельным согласованием перезапуска. Этап12.5 открыт.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -38,6 +38,20 @@
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка12.3.83 в границах журнала. Внешняя12.5: блоки1–236 завершены в записанных scopes, этап открыт. Runtime backend ux-backup234/frontend ux-routing218; backend25/UI52 и дополнительные SQL/UDP222 прошли. |
## 12.5.243 — реальные предпосылки контейнеров, ACME и релизов (2026-10-14)
Десять direct read-only RouterOS запросов:system/package/resource/device-mode/disk/container ×2CHR. Оба доступны7.24.5 stable/x86_64, installed routeros иoption, container feature=true/flagged=false, freeHDD около10GiB/freeRAM около0.8GiB. /container400 на обоих; пакет с именемcontainer не обнаружен. Публичный отчёт сохраняет status/error SHA256, неcredentials/полные error bodies. Приложение GET containers/state200 классифицирует обаunsupported. Это доступность текущего набора функций, а не доказательство отсутствия контейнеров по пустому snapshot или успешного lifecycle.
Vendor [Container](https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container) и [Packages](https://help.mikrotik.com/docs/spaces/ROS/pages/40992872/Packages) указывают требуемый container package. Для positive lifecycle нужны проверенный пакет текущей версии и контролируемая подготовка CHR; установка/перезапуск не выполнены. Новые manual URLs были недоступны web tool; использованы доступные официальные vendor pages, без вывода о совместимости конкретного будущего image по памяти.
ACME public settings:tokenConfigured=false/defaultZoneConfigured=false; Let’s Encrypt production directory GET200 с ожидаемыми endpoints. Это неDNS challenge, issuance, renew или deployment сертификата. Нужны явный test-domain/Cloudflare scoped token/право на временныеTXT и staging ACME. Секреты и зоны не выдумывались, DNS/account/certificate writes0.
Gitea — pipeline.gitea/workflows/docker.yml с push main/workflow_dispatch, registry uploads/releases/webhook; соответствующего backend polling job нет. По поручениюno push публикация не запускалась. compute-release.mjs отработал в ignored tmp output, candidate1.47.7/schema valid/current-candidate notes coherent, tagsCreated/pushes/GiteaAPIwrites/registryUploads0. Candidate не является выпущенной версией и не меняетpackage.json/publicmanifest. Отдельно real Portal UIcontainers/releases1440/320 passed:unsupported states, labversion1.0.0-test.backups237, globaloverflow/pageerrors0/non-auth APIwrites0. Первичный UI счётчик включал2 login POST; исправлено разделение auth и business operations, не приложение.
node --check availability helper passed; runtime code/images unchanged, профильная регрессия не повторялась без оснований. Два собственных сообщения локальных коммитов239/240 приведены к русскому тексту; author/date/trees/workspace dirty files сохранены, downstream commit IDs изменились, push0.
Протоколы: [native/ACME availability](ux-ui/acceptance/external-jobs243-availability.json), [live UI](ux-ui/acceptance/external-jobs243-live-ui.json), [release dry-run](ux-ui/acceptance/release243-dry-run.json). Следующий244 готовит конкретный vendor package/artifact для контейнерного lifecycle; применение и перезапуск согласовать отдельно после подготовки. REST root cause, multi-instance, clientOS/WAN/publicIPv6 и границы выпуска остаются по матрице.
## 12.5.242 — реальный GeoIP mirror job и честное состояние cache (2026-10-14)
В collector обнаруженыfalse-success304 при отсутствующей локальной базе (старый тест прямо принимал это), race до acquisition lock из-за await settings и освобождение timeout после headers вместо body. Теперь gate захватывается до первогоawait; concurrent force409/backgroundskip. Conditional ETag отправляется только после проверки локальной MMDB; missing/corrupt cache требует200 полного файла.304 без validated cache — ошибка, неskippedUnchanged. Partial failures сохраняют дату последнего успешного update и предыдущий файл, добавляя lastError. Новая downloadGeoipDatabase держит120s deadline через streaming body, ограничивает declared/chunked file64MiB и закрывает непригодное тело. Базы проходят existing Country/ASN validation до atomic swap; формат/layout ReUI не менялись.
+19 -5
View File
@@ -1,11 +1,25 @@
# Оставшаяся внешняя приёмка — 2026-10-14
Актуальное продолжение 2026-10-14:242 — GeoIP mirror job принят в own SQL/files и реальном mirror:12 fetches200/304, две валидные MMDB12,380,575bytes, missing/corrupt recovery, concurrent409, partial error сохраняетlastSuccessAt. Исправлены false304/eager gate/body deadline; download120s/64MiB, HTTP boundary tests и15E2E прошли. Backend ux-geoip242 healthy, frontend ux-backups237 image/container unchanged; live readUI1440/320 passed. Следующий243 — аудит доступных container/certificate/release jobs и актуальных внешних ограничений. Этап12.5 открыт.
Актуальное продолжение 2026-10-14:243 — read-only audit: оба CHR7.24.5/x86_64 доступны, packages routeros/option, device-mode.container=true, /container400 и UIunsupported. Cloudflare token/zone не настроены, ACME directory200 не являетсяissuance. Gitea workflow публикуетimages/releases; local release dry-run valid, push/APIpublish0. Portal live containers/releases4views passed. Backend ux-geoip242/frontend ux-backups237. Следующий244 — подготовка реальной контейнерной приёмки с точным пакетом и отдельным согласованием перезапуска. Этап12.5 открыт.
Это актуальная матрица после 12.5.242. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.243. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-geoip242`, frontend `ux-backups237`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
## 12.5.243 — реальные предпосылки контейнеров, ACME и релизов (2026-10-14)
Десять direct read-only RouterOS запросов:system/package/resource/device-mode/disk/container ×2CHR. Оба доступны7.24.5 stable/x86_64, installed routeros иoption, container feature=true/flagged=false, freeHDD около10GiB/freeRAM около0.8GiB. /container400 на обоих; пакет с именемcontainer не обнаружен. Публичный отчёт сохраняет status/error SHA256, неcredentials/полные error bodies. Приложение GET containers/state200 классифицирует обаunsupported. Это доступность текущего набора функций, а не доказательство отсутствия контейнеров по пустому snapshot или успешного lifecycle.
Vendor [Container](https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container) и [Packages](https://help.mikrotik.com/docs/spaces/ROS/pages/40992872/Packages) указывают требуемый container package. Для positive lifecycle нужны проверенный пакет текущей версии и контролируемая подготовка CHR; установка/перезапуск не выполнены. Новые manual URLs были недоступны web tool; использованы доступные официальные vendor pages, без вывода о совместимости конкретного будущего image по памяти.
ACME public settings:tokenConfigured=false/defaultZoneConfigured=false; Let’s Encrypt production directory GET200 с ожидаемыми endpoints. Это неDNS challenge, issuance, renew или deployment сертификата. Нужны явный test-domain/Cloudflare scoped token/право на временныеTXT и staging ACME. Секреты и зоны не выдумывались, DNS/account/certificate writes0.
Gitea — pipeline.gitea/workflows/docker.yml с push main/workflow_dispatch, registry uploads/releases/webhook; соответствующего backend polling job нет. По поручениюno push публикация не запускалась. compute-release.mjs отработал в ignored tmp output, candidate1.47.7/schema valid/current-candidate notes coherent, tagsCreated/pushes/GiteaAPIwrites/registryUploads0. Candidate не является выпущенной версией и не меняетpackage.json/publicmanifest. Отдельно real Portal UIcontainers/releases1440/320 passed:unsupported states, labversion1.0.0-test.backups237, globaloverflow/pageerrors0/non-auth APIwrites0. Первичный UI счётчик включал2 login POST; исправлено разделение auth и business operations, не приложение.
node --check availability helper passed; runtime code/images unchanged, профильная регрессия не повторялась без оснований. Два собственных сообщения локальных коммитов239/240 приведены к русскому тексту; author/date/trees/workspace dirty files сохранены, downstream commit IDs изменились, push0.
Протоколы: [native/ACME availability](ux-ui/acceptance/external-jobs243-availability.json), [live UI](ux-ui/acceptance/external-jobs243-live-ui.json), [release dry-run](ux-ui/acceptance/release243-dry-run.json). Следующий244 готовит конкретный vendor package/artifact для контейнерного lifecycle; применение и перезапуск согласовать отдельно после подготовки. REST root cause, multi-instance, clientOS/WAN/publicIPv6 и границы выпуска остаются по матрице.
## 12.5.242 — реальный GeoIP mirror job и честное состояние cache (2026-10-14)
В collector обнаруженыfalse-success304 при отсутствующей локальной базе (старый тест прямо принимал это), race до acquisition lock из-за await settings и освобождение timeout после headers вместо body. Теперь gate захватывается до первогоawait; concurrent force409/backgroundskip. Conditional ETag отправляется только после проверки локальной MMDB; missing/corrupt cache требует200 полного файла.304 без validated cache — ошибка, неskippedUnchanged. Partial failures сохраняют дату последнего успешного update и предыдущий файл, добавляя lastError. Новая downloadGeoipDatabase держит120s deadline через streaming body, ограничивает declared/chunked file64MiB и закрывает непригодное тело. Базы проходят existing Country/ASN validation до atomic swap; формат/layout ReUI не менялись.
@@ -99,7 +113,7 @@ Production backend/frontend ux-backups237 собраны и развёрнуты
| REST и достоверность данных | Ошибки OSPF/BFD/BGP/GRE/WAN215–221 явные; latest API smoke222 прошёл | Correlated236:384 samples/40 diagnostics без отказов; current policies/address/load исправны.828/304 retained REST sessions и vendor inactive-session fix — гипотеза; 238:763.844s/624samples/24diagnostics все200, API records изменились без отказа; причинность401/500 и version control остаются открытыми |
| Клиентские ОС и внешняя сеть | CHR↔CHR/Linux, private IPv4/ULA и synthetic IPv6/IPFIX; Android full-tunnel/reconnect227 подтверждены пользователем | Windows/macOS/iOS VPN, расширенная Android приёмка, независимые WAN/multi-WAN и public IPv6; public IPv6 на текущем стенде отсутствует |
| Масштаб и длительная устойчивость | Контролируемые lock/dedupe/loss/recovery и короткие native проверки | Несколько backend/worker/writers, длительный rekey/REST/traffic, physical disconnect и maximum throughput |
| Внешние хранилища и jobs | Локальные API/errors/RBAC/owned SQL; реальные Portal1.3.1/Telegram195–201 и Selectel S3/client/API/ownSQL228–229 | Large native exports проверены HTTP fixture; Missing local files UX237 принят; Bridge-only S3 restore через UI239 принят; Retention240 в own scope принят; миграция между buckets/multi-instance; GeoIP mirror242 принят; прямой licensed MaxMind не реализован; provider/container/Gitea/ACME jobs с соответствующими endpoints/аккаунтами; private/paid credentials не выдумывать |
| Внешние хранилища и jobs | Portal/Telegram195–201; native S3230, persistence235, missing UX237, bridge-only live restore239, isolated retention240; real GeoIP mirror242; availability243 | Large native export только HTTP fixture; migration buckets/multi-instance. Containers:feature=true, package не обнаружен,/container400 — нужны package/lifecycle. ACME:no token/zone, нужен test-domain/scoped Cloudflare/staging. Gitea:local dry-run принят; publishing CI не запускался (no push). Direct licensed MaxMind не реализован |
| Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP сценарии и точные границы записаны | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/policy/path-length и длительные переходы; BFD-only gate гарантией не стал |
| Общий UX, доступность и производительность | Полная UI192 исторически; latest backend25/UI52, scoped contrast/live218 и keyboard206 | Свежая UI226 принята в записанных границах; профильный performance и ручная accessibility/screen-reader приёмка; scoped axe не полный WCAG |
| Границы выпуска | План/доказательства/датированные блоки сохранены; коммиты локальные | Определить требуемые конфигурации и принять результат в этих границах; невыполненные варианты остаются явными ограничениями |
@@ -119,14 +133,14 @@ Portal offline JWT действует доexp после logout/role change; э
| BGP | Established83, exact /32 exchange/API/UI/administrative withdrawal92, BFD primary GRE loss/alternate/recovery93; basic native IPv6 eBGP/AFI/NLRI/Ping/withdrawal/API/UI155; native IPv6 BGP/BFD scoped withdrawal/recovery160; private4-byte ASN/as4/API/UI162 | Hold timer/TCP loss безBFD принят104; packet loss в переходе, разные внешние peers/WAN policy, basic BFDv6 принят160; IPv6 outer/public WAN/scale. Два логических пути используют тот же public WAN; physical redundancy не принята |
| Recursive routes | Production PUT/change/own history restore88, disabled guards, partial/unknown/applied outcomes, live формы/контекст | Автоматический rollback/retry, durable receipts и несколько экземпляров отсутствуют; PUT не является idempotent noop. Полная произвольная legacy catalog миграция не принята |
| Diagnostics/terminal | Allowlist/native reads, Ping/trace/route/MTU/DNS, actual avg-rtt, disabled guards, JWT/live PC/mobile89; real default memory tail/log limits/API/UI133 | DNS использует backend resolver; MTU — ограниченная оценка, не гарантированный максимум. Stop ожидания не доказывает остановку RouterOS команды; arbitrary CLI и physical disconnect не приняты |
| Portal/интеграции | Реальный Portal1.3.1/issuer/login/reader privacy195–196, expiry/reissue/role change/logout boundaries198, context/return_to199; actual Telegram delivery201 | Offline access JWT не отзывается logout/ролью мгновенно доexp; public IPv6 WAN, Selectel S3 client/API228–229 принят; native S3 backup/restore/live UI/retention открыты. Licensed MaxMind/container/certificate/Gitea jobs требуют отдельных endpoints/аккаунтов. Клиентские ОС/scale отдельно |
| Portal/интеграции | Portal1.3.1/issuer/login/RBAC/expiry/context195–199, actual Telegram201; Selectel S3 native/API/live limited restore/retention228–240; real GeoIP mirror242 | Offline JWT сохраняетдоступ доexp; S3 large-native/migration/multi-instance отдельно; containers package/lifecycle, Cloudflare DNS ACME test-domain/token, remote Gitea publishing не приняты; direct licensed MaxMind не реализован. ClientOS/scale/WAN отдельно |
| Общая приёмка | Локальная12.3.83; UI1244/context221/compiled984 parity139; профильные build/E2E/live проверки последующих блоков | Traffic initial live mock-id gate passed141; IPv6 special ranges/cache passed142; unknown RIPE coordinates passed143; IPv6 synthetic UDP/worker/SQL passed144; native CHR ULA/IPFIX/API/UI passed145; ICMPv6/IPv6 endpoint labels passed146; HTTP DTO validation passed147; scoped flow catalog/serverId guards passed148; strict monthly calendar passed149; Sessions labels passed150; application GRE static IPv6 lifecycle151 passed; WireGuard static IPv6 lifecycle152 и disabled SQL/API gates passed; OSPF/BFD boundary/warning153 passed; OSPFv3 routes154 accepted in recorded bounds; BGP IPv6 basic155 passed; bigint ID/SQL guards156 passed; общая UI1260/context221/backend24 regression157 passed; IPv6 BFD correlation158 profile/deployed passed; native OSPFv3/BFDv6 boundary/recovery159 passed; BGP IPv6/BFD withdrawal/recovery160 passed; selected BGP/alert unknown guards161 replay/profiles/deployed passed (SQL stability skipped); private4-byte ASN162 native/API/UI passed; duplicate BGP alert keys163 replay/profiles/deployed passed; nullable selected BGP164 replay/profiles/API/UI passed; collector165 parallel/current guards/read-only PG passed; positive partial/error SQL166/full24 with PG passed (optional network SQL not repeated); GRE/BGP freshness167/SQL8 passed; other source audit168 выявил identity/disabled/freshness gaps; локальный server/traffic identity guard169 passed без SQL/deploy, source/per-probe/freshness170/ownSQL16/compiled1008/deployed passed; source diagnostics171/42E2E/ownSQL metadata/live2 passed; monitoring history172/ownSQL26/compiled1020/deployed passed; Ping known/error173/ownHTTP-SQL8/85uniqueE2E/native4/4/deployed passed; traffic confidence174 baseline reproduced/local guard passed; owned SQL9/9358ms/deploy175/1024compiled/live smoke passed; legacy history/provenance open; compound RTT176 local/native replay2 passed, SQL10/deploy177/1024compiled/live smoke passed; history178/legacy provenance/current TTL/manual truth/SQL9+14/35unique E2E/native GET/deployed passed; live179 complete/disable-config/bounded fallback/ownSQL10/nativeSSE2/liveUI2 passed; volume180 exact/unit marker/ownSQL6/18E2E/API/liveUI/deployed passed; binding status181 native/ownSQL9/8E2E/deployed passed; peer atomicity182 ownSQL3/native/API/UI passed; peer failure warning183 ownSQL2/4E2E/deployed passed; inactive history184 ownSQL2/deployed passed; gap185/identity186/restore187/wave188/sourceguard189/confirmed peak190 passed; aggregate peaks191, request dedupe193, cross-process lock194/200, full regression192 (1286 unique E2E и25-й профиль privacy196 scoped), Portal195–199/Telegram201 passed; последующие изменения проверять отдельно; scoped axe не означает полную WCAG сертификацию |
Доказательства и точные ограничения: [полная история этапа12](ux-ui-stage-12.md), [внешний протокол](ux-ui-external-acceptance.md), [BGP93](ux-ui/acceptance/bgp-failover-2026-10-10.json), [паспорт стенда](ux-ui-test-server.md). Невыполненные пункты не являются все блокерами данного лабораторного сценария: для выпуска необходимо явно определить требуемые конфигурации и принять их либо согласовать ограничение.
## Следующая последовательность — 2026-10-14
1. **243 — availability audit:** read-only packages/device-mode/storage/API/config для containers, ACME и releases; проверить реально доступные GET-сценарии, зафиксировать конкретные внешние зависимости.
1. **244 — контейнеры:** подготовить точный vendor package7.24.5/x86_64 и сценарий/cleanup; перед установкой и перезапуском получить согласие. ACME и remote Gitea publishing требуют своих доступов/разрешённого scope.
2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания.
3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций.
+15 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-14:242 — GeoIP mirror job принят в own SQL/files и реальном mirror:12 fetches200/304, две валидные MMDB12,380,575bytes, missing/corrupt recovery, concurrent409, partial error сохраняетlastSuccessAt. Исправлены false304/eager gate/body deadline; download120s/64MiB, HTTP boundary tests и15E2E прошли. Backend ux-geoip242 healthy, frontend ux-backups237 image/container unchanged; live readUI1440/320 passed. Следующий243 — аудит доступных container/certificate/release jobs и актуальных внешних ограничений. Этап12.5 открыт.
Актуальное продолжение 2026-10-14:243 — read-only audit: оба CHR7.24.5/x86_64 доступны, packages routeros/option, device-mode.container=true, /container400 и UIunsupported. Cloudflare token/zone не настроены, ACME directory200 не являетсяissuance. Gitea workflow публикуетimages/releases; local release dry-run valid, push/APIpublish0. Portal live containers/releases4views passed. Backend ux-geoip242/frontend ux-backups237. Следующий244 — подготовка реальной контейнерной приёмки с точным пакетом и отдельным согласованием перезапуска. Этап12.5 открыт.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -4152,6 +4152,20 @@ 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.243 — реальные предпосылки контейнеров, ACME и релизов (2026-10-14)
Десять direct read-only RouterOS запросов:system/package/resource/device-mode/disk/container ×2CHR. Оба доступны7.24.5 stable/x86_64, installed routeros иoption, container feature=true/flagged=false, freeHDD около10GiB/freeRAM около0.8GiB. /container400 на обоих; пакет с именемcontainer не обнаружен. Публичный отчёт сохраняет status/error SHA256, неcredentials/полные error bodies. Приложение GET containers/state200 классифицирует обаunsupported. Это доступность текущего набора функций, а не доказательство отсутствия контейнеров по пустому snapshot или успешного lifecycle.
Vendor [Container](https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container) и [Packages](https://help.mikrotik.com/docs/spaces/ROS/pages/40992872/Packages) указывают требуемый container package. Для positive lifecycle нужны проверенный пакет текущей версии и контролируемая подготовка CHR; установка/перезапуск не выполнены. Новые manual URLs были недоступны web tool; использованы доступные официальные vendor pages, без вывода о совместимости конкретного будущего image по памяти.
ACME public settings:tokenConfigured=false/defaultZoneConfigured=false; Let’s Encrypt production directory GET200 с ожидаемыми endpoints. Это неDNS challenge, issuance, renew или deployment сертификата. Нужны явный test-domain/Cloudflare scoped token/право на временныеTXT и staging ACME. Секреты и зоны не выдумывались, DNS/account/certificate writes0.
Gitea — pipeline.gitea/workflows/docker.yml с push main/workflow_dispatch, registry uploads/releases/webhook; соответствующего backend polling job нет. По поручениюno push публикация не запускалась. compute-release.mjs отработал в ignored tmp output, candidate1.47.7/schema valid/current-candidate notes coherent, tagsCreated/pushes/GiteaAPIwrites/registryUploads0. Candidate не является выпущенной версией и не меняетpackage.json/publicmanifest. Отдельно real Portal UIcontainers/releases1440/320 passed:unsupported states, labversion1.0.0-test.backups237, globaloverflow/pageerrors0/non-auth APIwrites0. Первичный UI счётчик включал2 login POST; исправлено разделение auth и business operations, не приложение.
node --check availability helper passed; runtime code/images unchanged, профильная регрессия не повторялась без оснований. Два собственных сообщения локальных коммитов239/240 приведены к русскому тексту; author/date/trees/workspace dirty files сохранены, downstream commit IDs изменились, push0.
Протоколы: [native/ACME availability](ux-ui/acceptance/external-jobs243-availability.json), [live UI](ux-ui/acceptance/external-jobs243-live-ui.json), [release dry-run](ux-ui/acceptance/release243-dry-run.json). Следующий244 готовит конкретный vendor package/artifact для контейнерного lifecycle; применение и перезапуск согласовать отдельно после подготовки. REST root cause, multi-instance, clientOS/WAN/publicIPv6 и границы выпуска остаются по матрице.
## 12.5.242 — реальный GeoIP mirror job и честное состояние cache (2026-10-14)
В collector обнаруженыfalse-success304 при отсутствующей локальной базе (старый тест прямо принимал это), race до acquisition lock из-за await settings и освобождение timeout после headers вместо body. Теперь gate захватывается до первогоawait; concurrent force409/backgroundskip. Conditional ETag отправляется только после проверки локальной MMDB; missing/corrupt cache требует200 полного файла.304 без validated cache — ошибка, неskippedUnchanged. Partial failures сохраняют дату последнего успешного update и предыдущий файл, добавляя lastError. Новая downloadGeoipDatabase держит120s deadline через streaming body, ограничивает declared/chunked file64MiB и закрывает непригодное тело. Базы проходят existing Country/ASN validation до atomic swap; формат/layout ReUI не менялись.
+15 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Актуальное продолжение 2026-10-14:242 — GeoIP mirror job принят в own SQL/files и реальном mirror:12 fetches200/304, две валидные MMDB12,380,575bytes, missing/corrupt recovery, concurrent409, partial error сохраняетlastSuccessAt. Исправлены false304/eager gate/body deadline; download120s/64MiB, HTTP boundary tests и15E2E прошли. Backend ux-geoip242 healthy, frontend ux-backups237 image/container unchanged; live readUI1440/320 passed. Следующий243 — аудит доступных container/certificate/release jobs и актуальных внешних ограничений. Этап12.5 открыт.
Актуальное продолжение 2026-10-14:243 — read-only audit: оба CHR7.24.5/x86_64 доступны, packages routeros/option, device-mode.container=true, /container400 и UIunsupported. Cloudflare token/zone не настроены, ACME directory200 не являетсяissuance. Gitea workflow публикуетimages/releases; local release dry-run valid, push/APIpublish0. Portal live containers/releases4views passed. Backend ux-geoip242/frontend ux-backups237. Следующий244 — подготовка реальной контейнерной приёмки с точным пакетом и отдельным согласованием перезапуска. Этап12.5 открыт.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -34,6 +34,20 @@ 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.243 — реальные предпосылки контейнеров, ACME и релизов (2026-10-14)
Десять direct read-only RouterOS запросов:system/package/resource/device-mode/disk/container ×2CHR. Оба доступны7.24.5 stable/x86_64, installed routeros иoption, container feature=true/flagged=false, freeHDD около10GiB/freeRAM около0.8GiB. /container400 на обоих; пакет с именемcontainer не обнаружен. Публичный отчёт сохраняет status/error SHA256, неcredentials/полные error bodies. Приложение GET containers/state200 классифицирует обаunsupported. Это доступность текущего набора функций, а не доказательство отсутствия контейнеров по пустому snapshot или успешного lifecycle.
Vendor [Container](https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container) и [Packages](https://help.mikrotik.com/docs/spaces/ROS/pages/40992872/Packages) указывают требуемый container package. Для positive lifecycle нужны проверенный пакет текущей версии и контролируемая подготовка CHR; установка/перезапуск не выполнены. Новые manual URLs были недоступны web tool; использованы доступные официальные vendor pages, без вывода о совместимости конкретного будущего image по памяти.
ACME public settings:tokenConfigured=false/defaultZoneConfigured=false; Let’s Encrypt production directory GET200 с ожидаемыми endpoints. Это неDNS challenge, issuance, renew или deployment сертификата. Нужны явный test-domain/Cloudflare scoped token/право на временныеTXT и staging ACME. Секреты и зоны не выдумывались, DNS/account/certificate writes0.
Gitea — pipeline.gitea/workflows/docker.yml с push main/workflow_dispatch, registry uploads/releases/webhook; соответствующего backend polling job нет. По поручениюno push публикация не запускалась. compute-release.mjs отработал в ignored tmp output, candidate1.47.7/schema valid/current-candidate notes coherent, tagsCreated/pushes/GiteaAPIwrites/registryUploads0. Candidate не является выпущенной версией и не меняетpackage.json/publicmanifest. Отдельно real Portal UIcontainers/releases1440/320 passed:unsupported states, labversion1.0.0-test.backups237, globaloverflow/pageerrors0/non-auth APIwrites0. Первичный UI счётчик включал2 login POST; исправлено разделение auth и business operations, не приложение.
node --check availability helper passed; runtime code/images unchanged, профильная регрессия не повторялась без оснований. Два собственных сообщения локальных коммитов239/240 приведены к русскому тексту; author/date/trees/workspace dirty files сохранены, downstream commit IDs изменились, push0.
Протоколы: [native/ACME availability](ux-ui/acceptance/external-jobs243-availability.json), [live UI](ux-ui/acceptance/external-jobs243-live-ui.json), [release dry-run](ux-ui/acceptance/release243-dry-run.json). Следующий244 готовит конкретный vendor package/artifact для контейнерного lifecycle; применение и перезапуск согласовать отдельно после подготовки. REST root cause, multi-instance, clientOS/WAN/publicIPv6 и границы выпуска остаются по матрице.
## 12.5.242 — реальный GeoIP mirror job и честное состояние cache (2026-10-14)
В collector обнаруженыfalse-success304 при отсутствующей локальной базе (старый тест прямо принимал это), race до acquisition lock из-за await settings и освобождение timeout после headers вместо body. Теперь gate захватывается до первогоawait; concurrent force409/backgroundskip. Conditional ETag отправляется только после проверки локальной MMDB; missing/corrupt cache требует200 полного файла.304 без validated cache — ошибка, неskippedUnchanged. Partial failures сохраняют дату последнего успешного update и предыдущий файл, добавляя lastError. Новая downloadGeoipDatabase держит120s deadline через streaming body, ограничивает declared/chunked file64MiB и закрывает непригодное тело. Базы проходят existing Country/ASN validation до atomic swap; формат/layout ReUI не менялись.
@@ -0,0 +1,143 @@
{
"date": "2026-10-14",
"block": "12.5.243",
"scope": "Read-only availability, not container lifecycle or ACME issuance",
"hosts": [
{
"host": "104.165.244.7",
"packages": [
{
"name": "routeros",
"version": "7.24.5",
"disabled": "false"
},
{
"name": "option",
"version": "7.24.5",
"disabled": "false"
}
],
"resource": {
"version": "7.24.5 (stable)",
"architecture": "x86_64",
"boardName": "CHR OpenStack Foundation OpenStack Nova",
"freeHddSpace": "10179727360",
"totalHddSpace": "10691350528",
"freeMemory": "813223936"
},
"deviceMode": {
"mode": "advanced",
"container": "true",
"flagged": "false"
},
"disks": 0,
"containers": null
},
{
"host": "194.226.121.150",
"packages": [
{
"name": "routeros",
"version": "7.24.5",
"disabled": "false"
},
{
"name": "option",
"version": "7.24.5",
"disabled": "false"
}
],
"resource": {
"version": "7.24.5 (stable)",
"architecture": "x86_64",
"boardName": "CHR OpenStack Foundation OpenStack Nova",
"freeHddSpace": "10179719168",
"totalHddSpace": "10691350528",
"freeMemory": "814690304"
},
"deviceMode": {
"mode": "advanced",
"container": "true",
"flagged": "false"
},
"disks": 0,
"containers": null
}
],
"requests": [
{
"host": "104.165.244.7",
"path": "/system/package",
"status": 200
},
{
"host": "104.165.244.7",
"path": "/system/resource",
"status": 200
},
{
"host": "104.165.244.7",
"path": "/system/device-mode",
"status": 200
},
{
"host": "104.165.244.7",
"path": "/disk",
"status": 200
},
{
"host": "104.165.244.7",
"path": "/container",
"status": 400,
"errorName": "MikrotikError",
"errorBodySha256": "47ce8e1849d1d7b4ea646a2180e5c43ac664e936ab15086b73bc2fd699718f3a"
},
{
"host": "194.226.121.150",
"path": "/system/package",
"status": 200
},
{
"host": "194.226.121.150",
"path": "/system/resource",
"status": 200
},
{
"host": "194.226.121.150",
"path": "/system/device-mode",
"status": 200
},
{
"host": "194.226.121.150",
"path": "/disk",
"status": 200
},
{
"host": "194.226.121.150",
"path": "/container",
"status": 400,
"errorName": "MikrotikError",
"errorBodySha256": "47ce8e1849d1d7b4ea646a2180e5c43ac664e936ab15086b73bc2fd699718f3a"
}
],
"routerosWrites": 0,
"databaseWrites": 0,
"dnsWrites": 0,
"passwordChanges": 0,
"acme": {
"tokenConfigured": false,
"defaultZoneConfigured": false,
"directoryHost": "acme-v02.api.letsencrypt.org",
"directoryStatus": 200,
"directoryKeys": [
"jFbFkoPAlNI",
"keyChange",
"meta",
"newAccount",
"newNonce",
"newOrder",
"renewalInfo",
"revokeCert"
]
}
}
@@ -0,0 +1,37 @@
{
"date": "2026-10-14",
"block": "12.5.243",
"realPortalLogin": true,
"noMocks": true,
"containerAvailability": [
"unsupported",
"unsupported"
],
"containerOperations": 0,
"labVersionShown": "1.0.0-test.backups237",
"releasePublicationConfirmed": false,
"views": [
{
"page": "containers",
"width": 1440,
"globalOverflow": false
},
{
"page": "containers",
"width": 320,
"globalOverflow": false
},
{
"page": "releases",
"width": 1440,
"globalOverflow": false
},
{
"page": "releases",
"width": 320,
"globalOverflow": false
}
],
"pageErrors": [],
"nonAuthApiWrites": 0
}
@@ -0,0 +1,13 @@
{
"date": "2026-10-14",
"block": "12.5.243",
"candidateVersion": "1.47.7",
"commitCount": 6,
"manifestSchemaValid": true,
"releaseNotesMatchCandidate": true,
"tagsCreated": 0,
"pushes": 0,
"giteaApiWrites": 0,
"registryUploads": 0,
"externalJobExecuted": false
}