fix(geoip): проверить локальный кеш и ограничить загрузку баз
This commit is contained in:
1 parent
3c3d152c2d
commit
48cc65ec2b
16 files changed
+492
-31
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# UX/UI: протокол внешней приёмки 12.5
|
||||
|
||||
Актуальное продолжение 2026-10-14:241 — после237 приняты1000 смешанных local/missing,both/missing,unknown,available строк:ПК1440/320, rendered50, DOM2477/2239, search/last-good/pagination/keyboard passed, scoped axe0, writes0. Runtime backend/frontend ux-backups237. S3 native/limitedUI/retention230–240 приняты в записанных границах. Следующий242 — доступный mirror GeoIP job в изолированном scope; paid MaxMind/Cloudflare/Gitea/container jobs отдельно. Этап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 открыт.
|
||||
|
||||
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,24 @@ 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.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 не менялись.
|
||||
|
||||
Local test:geoip прошёл: реальный HTTP healthy/304, stalls after headers→AbortError, declared/chunked oversize→reject, recovery; collector invalid/cache/concurrent gates; JWT reader cannotmutate/writer/admin allowed. Backend/contracts build и scoped ESLint прошли.15 unique GeoIP settings/responsive/data-collection E2E прошли25.2s; ошибочная первоначальная команда с несуществующимиspec далаNo tests found и не считалась проверкой. Три автоматически перегенерированных старыхGeoIP PNG возвращены к исходным байтам; чужие GRE/VXLAN changes сохранены.
|
||||
|
||||
Final production source516/compiled1072 matched. В own PostgreSQL/files scope выполнены7 укрупнённых сценариев: actual mirror download обеих MMDB12,380,575bytes, Google8.8.8.8→US/ASN15169, actual conditional304/hash unchanged иconcurrent409, missing-country refetch безETag, corrupt-country refetch, controlled invalid MMDB200/uncached304 сохраняютlastSuccessAt, actual recovery иdisabled background0fetch.12 реальных mirror GET200/304; negative country responses явно контролируемые и не выдаются за native WAN failure. Валидация MMDB не подменялась. Temporary DB/role/container/files удалены, CHRcontacts0/mainDBwrites0 в этом scope. Предварительная сборка с иным downloader отдельно проверялась; повтор не прибавлен кunique приёмке.
|
||||
|
||||
Развёрнут только backend ux-geoip242; frontend ux-backups237 image/container ID неизменны. Backendhealthy; real Portal/live GET GeoIP200 иUI1440/320, обе main bases alreadyloaded, globaloverflow0/pageerrors0, POSTupdate0. Main GeoIP job через UI не запускался; реальная загрузка доказана в isolated scope, а не заявлена обновлением данных приложения. Откатbackend ux-backups237 и приватная прежняя.env сохранены на сервере.
|
||||
|
||||
Протоколы: [mirror/SQL](ux-ui/acceptance/geoip-mirror242.json), [deployment](ux-ui/acceptance/geoip242-deployment.json), [live read UI](ux-ui/acceptance/geoip242-live-ui.json). MirrorP3TERX — фактический источник collector без account key. Прямой licensed MaxMind download не реализован текущим collector и не принят этим тестом; актуальность/геолокационная точность всех IP, publicIPv6 geography, multi-process lock, physical WAN failures отдельно.
|
||||
|
||||
| Референс | Схема состояний |
|
||||
| --- | --- |
|
||||
| [ReUI Settings16](https://reui.io/preview/base/settings-16?ref=mcp) | validated cache → conditional304; missing/corrupt → full200 → validate → swap; error → last-good + last-success + warning |
|
||||
|
||||
Следующий243 — read-only availability audit контейнерных/ACME/release jobs на текущем стенде и согласованная матрица реальных remaining dependencies. Не выдумывать Cloudflare/registry credentials и не обновлять RouterOS без отдельной команды.
|
||||
|
||||
## 12.5.241 — тысяча бэкапов со смешанными состояниями файлов (2026-10-14)
|
||||
|
||||
Изменение237 проверено на1000 обычных live-path HTTP DTO (199062bytes), по250 local/missing,both/missing,local/unknown,local/available. Два сценария1440/320 прошли25.2s. UI сохраняет pagination50 строк:DOM2477/2239, ready1203/806ms в dev fixture окружении. Это измерение конкретного запуска, не production SLA/сетевой latency и не доказательство скорости filesystem API1000 файлов.
|
||||
|
||||
+19
-1
@@ -1,9 +1,27 @@
|
||||
# План реализации UX/UI по пятичасовым окнам
|
||||
|
||||
Актуальное продолжение 2026-10-14:241 — после237 приняты1000 смешанных local/missing,both/missing,unknown,available строк:ПК1440/320, rendered50, DOM2477/2239, search/last-good/pagination/keyboard passed, scoped axe0, writes0. Runtime backend/frontend ux-backups237. S3 native/limitedUI/retention230–240 приняты в записанных границах. Следующий242 — доступный mirror GeoIP job в изолированном scope; paid MaxMind/Cloudflare/Gitea/container jobs отдельно. Этап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 открыт.
|
||||
|
||||
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-14. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
|
||||
|
||||
## 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 не менялись.
|
||||
|
||||
Local test:geoip прошёл: реальный HTTP healthy/304, stalls after headers→AbortError, declared/chunked oversize→reject, recovery; collector invalid/cache/concurrent gates; JWT reader cannotmutate/writer/admin allowed. Backend/contracts build и scoped ESLint прошли.15 unique GeoIP settings/responsive/data-collection E2E прошли25.2s; ошибочная первоначальная команда с несуществующимиspec далаNo tests found и не считалась проверкой. Три автоматически перегенерированных старыхGeoIP PNG возвращены к исходным байтам; чужие GRE/VXLAN changes сохранены.
|
||||
|
||||
Final production source516/compiled1072 matched. В own PostgreSQL/files scope выполнены7 укрупнённых сценариев: actual mirror download обеих MMDB12,380,575bytes, Google8.8.8.8→US/ASN15169, actual conditional304/hash unchanged иconcurrent409, missing-country refetch безETag, corrupt-country refetch, controlled invalid MMDB200/uncached304 сохраняютlastSuccessAt, actual recovery иdisabled background0fetch.12 реальных mirror GET200/304; negative country responses явно контролируемые и не выдаются за native WAN failure. Валидация MMDB не подменялась. Temporary DB/role/container/files удалены, CHRcontacts0/mainDBwrites0 в этом scope. Предварительная сборка с иным downloader отдельно проверялась; повтор не прибавлен кunique приёмке.
|
||||
|
||||
Развёрнут только backend ux-geoip242; frontend ux-backups237 image/container ID неизменны. Backendhealthy; real Portal/live GET GeoIP200 иUI1440/320, обе main bases alreadyloaded, globaloverflow0/pageerrors0, POSTupdate0. Main GeoIP job через UI не запускался; реальная загрузка доказана в isolated scope, а не заявлена обновлением данных приложения. Откатbackend ux-backups237 и приватная прежняя.env сохранены на сервере.
|
||||
|
||||
Протоколы: [mirror/SQL](ux-ui/acceptance/geoip-mirror242.json), [deployment](ux-ui/acceptance/geoip242-deployment.json), [live read UI](ux-ui/acceptance/geoip242-live-ui.json). MirrorP3TERX — фактический источник collector без account key. Прямой licensed MaxMind download не реализован текущим collector и не принят этим тестом; актуальность/геолокационная точность всех IP, publicIPv6 geography, multi-process lock, physical WAN failures отдельно.
|
||||
|
||||
| Референс | Схема состояний |
|
||||
| --- | --- |
|
||||
| [ReUI Settings16](https://reui.io/preview/base/settings-16?ref=mcp) | validated cache → conditional304; missing/corrupt → full200 → validate → swap; error → last-good + last-success + warning |
|
||||
|
||||
Следующий243 — read-only availability audit контейнерных/ACME/release jobs на текущем стенде и согласованная матрица реальных remaining dependencies. Не выдумывать Cloudflare/registry credentials и не обновлять RouterOS без отдельной команды.
|
||||
|
||||
## 12.5.241 — тысяча бэкапов со смешанными состояниями файлов (2026-10-14)
|
||||
|
||||
Изменение237 проверено на1000 обычных live-path HTTP DTO (199062bytes), по250 local/missing,both/missing,local/unknown,local/available. Два сценария1440/320 прошли25.2s. UI сохраняет pagination50 строк:DOM2477/2239, ready1203/806ms в dev fixture окружении. Это измерение конкретного запуска, не production SLA/сетевой latency и не доказательство скорости filesystem API1000 файлов.
|
||||
|
||||
+19
-1
@@ -1,6 +1,6 @@
|
||||
# UX/UI: журнал реализации
|
||||
|
||||
Актуальное продолжение 2026-10-14:241 — после237 приняты1000 смешанных local/missing,both/missing,unknown,available строк:ПК1440/320, rendered50, DOM2477/2239, search/last-good/pagination/keyboard passed, scoped axe0, writes0. Runtime backend/frontend ux-backups237. S3 native/limitedUI/retention230–240 приняты в записанных границах. Следующий242 — доступный mirror GeoIP job в изолированном scope; paid MaxMind/Cloudflare/Gitea/container jobs отдельно. Этап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 открыт.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
@@ -38,6 +38,24 @@
|
||||
| 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.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 не менялись.
|
||||
|
||||
Local test:geoip прошёл: реальный HTTP healthy/304, stalls after headers→AbortError, declared/chunked oversize→reject, recovery; collector invalid/cache/concurrent gates; JWT reader cannotmutate/writer/admin allowed. Backend/contracts build и scoped ESLint прошли.15 unique GeoIP settings/responsive/data-collection E2E прошли25.2s; ошибочная первоначальная команда с несуществующимиspec далаNo tests found и не считалась проверкой. Три автоматически перегенерированных старыхGeoIP PNG возвращены к исходным байтам; чужие GRE/VXLAN changes сохранены.
|
||||
|
||||
Final production source516/compiled1072 matched. В own PostgreSQL/files scope выполнены7 укрупнённых сценариев: actual mirror download обеих MMDB12,380,575bytes, Google8.8.8.8→US/ASN15169, actual conditional304/hash unchanged иconcurrent409, missing-country refetch безETag, corrupt-country refetch, controlled invalid MMDB200/uncached304 сохраняютlastSuccessAt, actual recovery иdisabled background0fetch.12 реальных mirror GET200/304; negative country responses явно контролируемые и не выдаются за native WAN failure. Валидация MMDB не подменялась. Temporary DB/role/container/files удалены, CHRcontacts0/mainDBwrites0 в этом scope. Предварительная сборка с иным downloader отдельно проверялась; повтор не прибавлен кunique приёмке.
|
||||
|
||||
Развёрнут только backend ux-geoip242; frontend ux-backups237 image/container ID неизменны. Backendhealthy; real Portal/live GET GeoIP200 иUI1440/320, обе main bases alreadyloaded, globaloverflow0/pageerrors0, POSTupdate0. Main GeoIP job через UI не запускался; реальная загрузка доказана в isolated scope, а не заявлена обновлением данных приложения. Откатbackend ux-backups237 и приватная прежняя.env сохранены на сервере.
|
||||
|
||||
Протоколы: [mirror/SQL](ux-ui/acceptance/geoip-mirror242.json), [deployment](ux-ui/acceptance/geoip242-deployment.json), [live read UI](ux-ui/acceptance/geoip242-live-ui.json). MirrorP3TERX — фактический источник collector без account key. Прямой licensed MaxMind download не реализован текущим collector и не принят этим тестом; актуальность/геолокационная точность всех IP, publicIPv6 geography, multi-process lock, physical WAN failures отдельно.
|
||||
|
||||
| Референс | Схема состояний |
|
||||
| --- | --- |
|
||||
| [ReUI Settings16](https://reui.io/preview/base/settings-16?ref=mcp) | validated cache → conditional304; missing/corrupt → full200 → validate → swap; error → last-good + last-success + warning |
|
||||
|
||||
Следующий243 — read-only availability audit контейнерных/ACME/release jobs на текущем стенде и согласованная матрица реальных remaining dependencies. Не выдумывать Cloudflare/registry credentials и не обновлять RouterOS без отдельной команды.
|
||||
|
||||
## 12.5.241 — тысяча бэкапов со смешанными состояниями файлов (2026-10-14)
|
||||
|
||||
Изменение237 проверено на1000 обычных live-path HTTP DTO (199062bytes), по250 local/missing,both/missing,local/unknown,local/available. Два сценария1440/320 прошли25.2s. UI сохраняет pagination50 строк:DOM2477/2239, ready1203/806ms в dev fixture окружении. Это измерение конкретного запуска, не production SLA/сетевой latency и не доказательство скорости filesystem API1000 файлов.
|
||||
|
||||
@@ -1,10 +1,28 @@
|
||||
# Оставшаяся внешняя приёмка — 2026-10-14
|
||||
|
||||
Актуальное продолжение 2026-10-14:241 — после237 приняты1000 смешанных local/missing,both/missing,unknown,available строк:ПК1440/320, rendered50, DOM2477/2239, search/last-good/pagination/keyboard passed, scoped axe0, writes0. Runtime backend/frontend ux-backups237. S3 native/limitedUI/retention230–240 приняты в записанных границах. Следующий242 — доступный mirror GeoIP job в изолированном scope; paid MaxMind/Cloudflare/Gitea/container jobs отдельно. Этап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 открыт.
|
||||
|
||||
Это актуальная матрица после 12.5.241. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
Это актуальная матрица после 12.5.242. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
|
||||
|
||||
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-backups237`, frontend `ux-backups237`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
|
||||
Стенд: 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.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 не менялись.
|
||||
|
||||
Local test:geoip прошёл: реальный HTTP healthy/304, stalls after headers→AbortError, declared/chunked oversize→reject, recovery; collector invalid/cache/concurrent gates; JWT reader cannotmutate/writer/admin allowed. Backend/contracts build и scoped ESLint прошли.15 unique GeoIP settings/responsive/data-collection E2E прошли25.2s; ошибочная первоначальная команда с несуществующимиspec далаNo tests found и не считалась проверкой. Три автоматически перегенерированных старыхGeoIP PNG возвращены к исходным байтам; чужие GRE/VXLAN changes сохранены.
|
||||
|
||||
Final production source516/compiled1072 matched. В own PostgreSQL/files scope выполнены7 укрупнённых сценариев: actual mirror download обеих MMDB12,380,575bytes, Google8.8.8.8→US/ASN15169, actual conditional304/hash unchanged иconcurrent409, missing-country refetch безETag, corrupt-country refetch, controlled invalid MMDB200/uncached304 сохраняютlastSuccessAt, actual recovery иdisabled background0fetch.12 реальных mirror GET200/304; negative country responses явно контролируемые и не выдаются за native WAN failure. Валидация MMDB не подменялась. Temporary DB/role/container/files удалены, CHRcontacts0/mainDBwrites0 в этом scope. Предварительная сборка с иным downloader отдельно проверялась; повтор не прибавлен кunique приёмке.
|
||||
|
||||
Развёрнут только backend ux-geoip242; frontend ux-backups237 image/container ID неизменны. Backendhealthy; real Portal/live GET GeoIP200 иUI1440/320, обе main bases alreadyloaded, globaloverflow0/pageerrors0, POSTupdate0. Main GeoIP job через UI не запускался; реальная загрузка доказана в isolated scope, а не заявлена обновлением данных приложения. Откатbackend ux-backups237 и приватная прежняя.env сохранены на сервере.
|
||||
|
||||
Протоколы: [mirror/SQL](ux-ui/acceptance/geoip-mirror242.json), [deployment](ux-ui/acceptance/geoip242-deployment.json), [live read UI](ux-ui/acceptance/geoip242-live-ui.json). MirrorP3TERX — фактический источник collector без account key. Прямой licensed MaxMind download не реализован текущим collector и не принят этим тестом; актуальность/геолокационная точность всех IP, publicIPv6 geography, multi-process lock, physical WAN failures отдельно.
|
||||
|
||||
| Референс | Схема состояний |
|
||||
| --- | --- |
|
||||
| [ReUI Settings16](https://reui.io/preview/base/settings-16?ref=mcp) | validated cache → conditional304; missing/corrupt → full200 → validate → swap; error → last-good + last-success + warning |
|
||||
|
||||
Следующий243 — read-only availability audit контейнерных/ACME/release jobs на текущем стенде и согласованная матрица реальных remaining dependencies. Не выдумывать Cloudflare/registry credentials и не обновлять RouterOS без отдельной команды.
|
||||
|
||||
## 12.5.241 — тысяча бэкапов со смешанными состояниями файлов (2026-10-14)
|
||||
|
||||
@@ -81,7 +99,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; provider/container/Gitea/MaxMind jobs с соответствующими endpoints/аккаунтами; private/paid credentials не выдумывать |
|
||||
| Внешние хранилища и 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 не выдумывать |
|
||||
| Расширенные сетевые конфигурации | 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 |
|
||||
| Границы выпуска | План/доказательства/датированные блоки сохранены; коммиты локальные | Определить требуемые конфигурации и принять результат в этих границах; невыполненные варианты остаются явными ограничениями |
|
||||
@@ -108,7 +126,7 @@ Portal offline JWT действует доexp после logout/role change; э
|
||||
|
||||
## Следующая последовательность — 2026-10-14
|
||||
|
||||
1. **242 — доступные external jobs:** actual GeoIP mirror без licence key в own SQL/files scope; отдельно сохранять ограничения paid MaxMind/Cloudflare/registry/Gitea. Затем — актуальная матрица границ выпуска.
|
||||
1. **243 — availability audit:** read-only packages/device-mode/storage/API/config для containers, ACME и releases; проверить реально доступные GET-сценарии, зафиксировать конкретные внешние зависимости.
|
||||
2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания.
|
||||
3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций.
|
||||
|
||||
|
||||
+19
-1
@@ -1,6 +1,6 @@
|
||||
# Этап 12: итоговая приёмка UX/UI
|
||||
|
||||
Актуальное продолжение 2026-10-14:241 — после237 приняты1000 смешанных local/missing,both/missing,unknown,available строк:ПК1440/320, rendered50, DOM2477/2239, search/last-good/pagination/keyboard passed, scoped axe0, writes0. Runtime backend/frontend ux-backups237. S3 native/limitedUI/retention230–240 приняты в записанных границах. Следующий242 — доступный mirror GeoIP job в изолированном scope; paid MaxMind/Cloudflare/Gitea/container jobs отдельно. Этап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 открыт.
|
||||
|
||||
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
|
||||
|
||||
@@ -4152,6 +4152,24 @@ 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.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 не менялись.
|
||||
|
||||
Local test:geoip прошёл: реальный HTTP healthy/304, stalls after headers→AbortError, declared/chunked oversize→reject, recovery; collector invalid/cache/concurrent gates; JWT reader cannotmutate/writer/admin allowed. Backend/contracts build и scoped ESLint прошли.15 unique GeoIP settings/responsive/data-collection E2E прошли25.2s; ошибочная первоначальная команда с несуществующимиspec далаNo tests found и не считалась проверкой. Три автоматически перегенерированных старыхGeoIP PNG возвращены к исходным байтам; чужие GRE/VXLAN changes сохранены.
|
||||
|
||||
Final production source516/compiled1072 matched. В own PostgreSQL/files scope выполнены7 укрупнённых сценариев: actual mirror download обеих MMDB12,380,575bytes, Google8.8.8.8→US/ASN15169, actual conditional304/hash unchanged иconcurrent409, missing-country refetch безETag, corrupt-country refetch, controlled invalid MMDB200/uncached304 сохраняютlastSuccessAt, actual recovery иdisabled background0fetch.12 реальных mirror GET200/304; negative country responses явно контролируемые и не выдаются за native WAN failure. Валидация MMDB не подменялась. Temporary DB/role/container/files удалены, CHRcontacts0/mainDBwrites0 в этом scope. Предварительная сборка с иным downloader отдельно проверялась; повтор не прибавлен кunique приёмке.
|
||||
|
||||
Развёрнут только backend ux-geoip242; frontend ux-backups237 image/container ID неизменны. Backendhealthy; real Portal/live GET GeoIP200 иUI1440/320, обе main bases alreadyloaded, globaloverflow0/pageerrors0, POSTupdate0. Main GeoIP job через UI не запускался; реальная загрузка доказана в isolated scope, а не заявлена обновлением данных приложения. Откатbackend ux-backups237 и приватная прежняя.env сохранены на сервере.
|
||||
|
||||
Протоколы: [mirror/SQL](ux-ui/acceptance/geoip-mirror242.json), [deployment](ux-ui/acceptance/geoip242-deployment.json), [live read UI](ux-ui/acceptance/geoip242-live-ui.json). MirrorP3TERX — фактический источник collector без account key. Прямой licensed MaxMind download не реализован текущим collector и не принят этим тестом; актуальность/геолокационная точность всех IP, publicIPv6 geography, multi-process lock, physical WAN failures отдельно.
|
||||
|
||||
| Референс | Схема состояний |
|
||||
| --- | --- |
|
||||
| [ReUI Settings16](https://reui.io/preview/base/settings-16?ref=mcp) | validated cache → conditional304; missing/corrupt → full200 → validate → swap; error → last-good + last-success + warning |
|
||||
|
||||
Следующий243 — read-only availability audit контейнерных/ACME/release jobs на текущем стенде и согласованная матрица реальных remaining dependencies. Не выдумывать Cloudflare/registry credentials и не обновлять RouterOS без отдельной команды.
|
||||
|
||||
## 12.5.241 — тысяча бэкапов со смешанными состояниями файлов (2026-10-14)
|
||||
|
||||
Изменение237 проверено на1000 обычных live-path HTTP DTO (199062bytes), по250 local/missing,both/missing,local/unknown,local/available. Два сценария1440/320 прошли25.2s. UI сохраняет pagination50 строк:DOM2477/2239, ready1203/806ms в dev fixture окружении. Это измерение конкретного запуска, не production SLA/сетевой latency и не доказательство скорости filesystem API1000 файлов.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Тестовый сервер UX/UI — 2026-10-10
|
||||
|
||||
Актуальное продолжение 2026-10-14:241 — после237 приняты1000 смешанных local/missing,both/missing,unknown,available строк:ПК1440/320, rendered50, DOM2477/2239, search/last-good/pagination/keyboard passed, scoped axe0, writes0. Runtime backend/frontend ux-backups237. S3 native/limitedUI/retention230–240 приняты в записанных границах. Следующий242 — доступный mirror GeoIP job в изолированном scope; paid MaxMind/Cloudflare/Gitea/container jobs отдельно. Этап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 открыт.
|
||||
|
||||
| Параметр | Проверенное состояние |
|
||||
| --- | --- |
|
||||
@@ -34,6 +34,24 @@ 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.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 не менялись.
|
||||
|
||||
Local test:geoip прошёл: реальный HTTP healthy/304, stalls after headers→AbortError, declared/chunked oversize→reject, recovery; collector invalid/cache/concurrent gates; JWT reader cannotmutate/writer/admin allowed. Backend/contracts build и scoped ESLint прошли.15 unique GeoIP settings/responsive/data-collection E2E прошли25.2s; ошибочная первоначальная команда с несуществующимиspec далаNo tests found и не считалась проверкой. Три автоматически перегенерированных старыхGeoIP PNG возвращены к исходным байтам; чужие GRE/VXLAN changes сохранены.
|
||||
|
||||
Final production source516/compiled1072 matched. В own PostgreSQL/files scope выполнены7 укрупнённых сценариев: actual mirror download обеих MMDB12,380,575bytes, Google8.8.8.8→US/ASN15169, actual conditional304/hash unchanged иconcurrent409, missing-country refetch безETag, corrupt-country refetch, controlled invalid MMDB200/uncached304 сохраняютlastSuccessAt, actual recovery иdisabled background0fetch.12 реальных mirror GET200/304; negative country responses явно контролируемые и не выдаются за native WAN failure. Валидация MMDB не подменялась. Temporary DB/role/container/files удалены, CHRcontacts0/mainDBwrites0 в этом scope. Предварительная сборка с иным downloader отдельно проверялась; повтор не прибавлен кunique приёмке.
|
||||
|
||||
Развёрнут только backend ux-geoip242; frontend ux-backups237 image/container ID неизменны. Backendhealthy; real Portal/live GET GeoIP200 иUI1440/320, обе main bases alreadyloaded, globaloverflow0/pageerrors0, POSTupdate0. Main GeoIP job через UI не запускался; реальная загрузка доказана в isolated scope, а не заявлена обновлением данных приложения. Откатbackend ux-backups237 и приватная прежняя.env сохранены на сервере.
|
||||
|
||||
Протоколы: [mirror/SQL](ux-ui/acceptance/geoip-mirror242.json), [deployment](ux-ui/acceptance/geoip242-deployment.json), [live read UI](ux-ui/acceptance/geoip242-live-ui.json). MirrorP3TERX — фактический источник collector без account key. Прямой licensed MaxMind download не реализован текущим collector и не принят этим тестом; актуальность/геолокационная точность всех IP, publicIPv6 geography, multi-process lock, physical WAN failures отдельно.
|
||||
|
||||
| Референс | Схема состояний |
|
||||
| --- | --- |
|
||||
| [ReUI Settings16](https://reui.io/preview/base/settings-16?ref=mcp) | validated cache → conditional304; missing/corrupt → full200 → validate → swap; error → last-good + last-success + warning |
|
||||
|
||||
Следующий243 — read-only availability audit контейнерных/ACME/release jobs на текущем стенде и согласованная матрица реальных remaining dependencies. Не выдумывать Cloudflare/registry credentials и не обновлять RouterOS без отдельной команды.
|
||||
|
||||
## 12.5.241 — тысяча бэкапов со смешанными состояниями файлов (2026-10-14)
|
||||
|
||||
Изменение237 проверено на1000 обычных live-path HTTP DTO (199062bytes), по250 local/missing,both/missing,local/unknown,local/available. Два сценария1440/320 прошли25.2s. UI сохраняет pagination50 строк:DOM2477/2239, ready1203/806ms в dev fixture окружении. Это измерение конкретного запуска, не production SLA/сетевой latency и не доказательство скорости filesystem API1000 файлов.
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.242",
|
||||
"passed": true,
|
||||
"scope": "Compiled GeoIP collector + owned PostgreSQL/files + actual public mirror; controlled negative bodies separately marked",
|
||||
"mirrorRequests": [
|
||||
{
|
||||
"file": "GeoLite2-Country.mmdb",
|
||||
"conditional": false,
|
||||
"status": 200,
|
||||
"headersMs": 1112
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": false,
|
||||
"status": 200,
|
||||
"headersMs": 1209
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-Country.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 97
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 126
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-Country.mmdb",
|
||||
"conditional": false,
|
||||
"status": 200,
|
||||
"headersMs": 94
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 99
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-Country.mmdb",
|
||||
"conditional": false,
|
||||
"status": 200,
|
||||
"headersMs": 94
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 104
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 93
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 123
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-Country.mmdb",
|
||||
"conditional": false,
|
||||
"status": 200,
|
||||
"headersMs": 102
|
||||
},
|
||||
{
|
||||
"file": "GeoLite2-ASN.mmdb",
|
||||
"conditional": true,
|
||||
"status": 304,
|
||||
"headersMs": 90
|
||||
}
|
||||
],
|
||||
"checks": [
|
||||
{
|
||||
"name": "actual-two-downloads-valid-mmdb-and-lookup",
|
||||
"bytes": 12380575,
|
||||
"hashes": {
|
||||
"country": "635078e412c4443a2950c2e3f775ccdc400e0a1fea5ffd32e5489e5401a9e51d",
|
||||
"asn": "7d1cf6cd79a0f35b446570058efb7d05cb6db6dd10bbbc09c3699473f6860cba"
|
||||
},
|
||||
"settings": {
|
||||
"enabled": false,
|
||||
"updateIntervalSec": 604800,
|
||||
"lastCheckAt": "2026-10-14 07:59:58.997+00",
|
||||
"lastSuccessAt": "2026-10-14 07:59:58.997+00",
|
||||
"lastError": null,
|
||||
"countryBuildAt": "2026-10-09 16:52:08+00",
|
||||
"asnBuildAt": "2026-10-12 08:15:43+00",
|
||||
"updatedAt": "2026-10-14 08:00:02.048+00"
|
||||
},
|
||||
"lookup": {
|
||||
"country": "US",
|
||||
"asn": 15169
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "actual-conditional304-and-concurrent409",
|
||||
"skippedUnchanged": 2,
|
||||
"hashesUnchanged": true
|
||||
},
|
||||
{
|
||||
"name": "missing-country-refetched-without-conditional-header"
|
||||
},
|
||||
{
|
||||
"name": "corrupt-local-country-refetched-and-validated"
|
||||
},
|
||||
{
|
||||
"name": "controlled-invalid-body-preserves-file-and-last-success",
|
||||
"negativeCountryResponse": "controlled-200-invalid-MMDB",
|
||||
"realAsnStatus": 304
|
||||
},
|
||||
{
|
||||
"name": "controlled-uncached304-is-error-with-last-success-retained"
|
||||
},
|
||||
{
|
||||
"name": "actual-recovery-and-disabled-background-no-fetch"
|
||||
}
|
||||
],
|
||||
"chrContacts": 0,
|
||||
"mainDatabaseWrites": 0,
|
||||
"ownedDatabaseAndRoleRemoved": true
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.242",
|
||||
"backendSourceMatched": 516,
|
||||
"backendCompiledMatched": 1072,
|
||||
"frontendImageAndContainerUnchanged": true,
|
||||
"containers": {
|
||||
"backend": {
|
||||
"tag": "mmapp-test/backend:ux-geoip242",
|
||||
"imageId": "sha256:32214bbd6b3df479cf5b503fd370b96abddbe5497fe5fe0fd4b72a009d730a6e",
|
||||
"containerId": "675dd3412be519a2a92bcd68148db0328264ed784537dd9a3c9e5ce74b33f3ad",
|
||||
"state": "running",
|
||||
"health": "healthy"
|
||||
},
|
||||
"frontend": {
|
||||
"tag": "mmapp-test/frontend:ux-backups237",
|
||||
"imageId": "sha256:baf9989cde6527715890e608c2c3271c5ea40dfb235ee47a48e21939b0ec1fd0",
|
||||
"containerId": "dc078016b263444b4e15d3445d8ce5b23c9d93e9707e797d63744e5add881e39",
|
||||
"state": "running",
|
||||
"health": null
|
||||
}
|
||||
},
|
||||
"rollbackBackend": "ux-backups237"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"date": "2026-10-14",
|
||||
"block": "12.5.242",
|
||||
"realPortalLogin": true,
|
||||
"noMocks": true,
|
||||
"apiStatus": 200,
|
||||
"ready": true,
|
||||
"countryLoaded": true,
|
||||
"asnLoaded": true,
|
||||
"views": [
|
||||
{
|
||||
"width": 1440,
|
||||
"globalOverflow": false,
|
||||
"geoipSectionVisible": true
|
||||
},
|
||||
{
|
||||
"width": 320,
|
||||
"globalOverflow": false,
|
||||
"geoipSectionVisible": true
|
||||
}
|
||||
],
|
||||
"pageErrors": [],
|
||||
"geoipUpdates": 0,
|
||||
"uiDidNotRequestGeoipUpdate": true
|
||||
}
|
||||
Reference in new issue
Block a user