fix(docs): восстановить недостающие записи журнала UX/UI
This commit is contained in:
1 parent
65c63e2860
commit
a56f555c25
1 file changed
+267
-2
+267
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
Актуальное продолжение 2026-10-07: 12.3.78/78.1 завершены: pair snapshot/history,73browser/8context,14pure+HTTP/RBAC,types/build; uptime lint0warnings. Общие main1176(579e816)/context221(a3fcba0) сохранены отдельно. Следующий12.3.79: строгий runtime body POST /uptime/speed-test до native операции (prefix IDs/enums/duration), команды/права сохранить. Внешняя12.5 не выполнена.
|
||||
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения.
|
||||
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
|
||||
|
||||
## Правила продолжения
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
- Локально доступны моки. Проверки операций должны идти по обычному API-пути с подменой HTTP-ответов в тестах: встроенный mock-режим обходит запросы и не доказывает корректность live-ветки.
|
||||
- Реальное применение RouterOS, сетевой опрос и экспорт сертификатов требуют отдельной приёмки в тестовом окружении. Не считать их проверенными по мокам.
|
||||
- Перед продолжением читать git status и новые коммиты; сохранять изменения других задач.
|
||||
- После каждого блока добавлять полную запись в этот журнал над предыдущей записью. Обновления строки продолжения недостаточно. Подробные документы этапов сохранять согласованными с журналом.
|
||||
|
||||
## Состояние этапов
|
||||
|
||||
@@ -31,7 +32,271 @@
|
||||
| 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.1/12.2 и12.3.1–12.3.64 приняты в локальных границах. Общая main1161/1162 выявила focus race, исправленный в12.4.6.1 с20+15 repeats. Общая context221/26 прошла в12.4.7; внешняя12.5 и дополнительные performance границы впереди. |
|
||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | В работе. Локальные блоки до12.3.78.1 завершены. Общая main1176/1176 на579e816 и context221/221 наa3fcba0 прошли; последующий функциональный delta проверен73browser/8context. Следующий12.3.79; внешняя12.5 не выполнена. |
|
||||
|
||||
## 12.3.78.1 — удаление неиспользуемого кода прежней таблицы
|
||||
|
||||
2026-10-07. Из uptime удалены неиспользуемые MiniBar/resBarColor/resPctColor/SortIcon/ResSortKey,2импорта и чистое вычислениеy1,3неактуальных eslint-disable directives. Reference search и предыдущий lint подтверждали отсутствие использования; активные render/API/measurement paths не менялись. Установленные ReUI primitives/hooks/theme не изменены.
|
||||
|
||||
Targeted lint страницы/helpers/tests теперь0errors/0warnings (до этого9warnings), non-incremental TypeScript и production frontend build passed. Для удаления неиспользуемых объявлений не добавлены повторяющие реализацию тесты; функциональный78 delta73browser/8context/14pure+backend HTTP/RBAC сохранён в предыдущем блоке. Следующий79: runtime command body schema до DB/native. Внешняя12.5 не выполнена; полная матрица относится к точным ранее указанным HEAD.
|
||||
|
||||
## 12.3.78 — снимок при изменении пары и приоритет истории
|
||||
|
||||
2026-10-07. Catalog replacement читает и блокирует существующие probe rows внутри прежней транзакции/advisory lock. Смена source/destination или новый id сбрасывает9наблюдаемых полей вnull, перестановка/enable и та же пара сохраняют measurements. История не удаляется. Frontend публикует configuration только после подтверждения; той же паре берёт последние observations из текущего state вместо readonly копии старого draft. Новый target получаетnull. Общий emptySpeedProbeObservations переиспользован через contracts; ReUI primitives/theme/composition сохранены.
|
||||
|
||||
Строка пробы выбирает running run, затем более новый подтверждённый run той же пары/интерфейсов только при существующем snapshot lastStatus/lastRunAt; иначе текущий snapshot. Это исключает старый history overlay после смены пары/возврата и сохраняет приоритет нового nullable результата над старым999. Первые два новых test runs выявили ошибки relative has/inert selector; исправлены проверки области формы/фонового state. Первый общий профиль72/73 показал реальную регрессию приоритета новогоnull над старым snapshot, она исправлена без изменения теста. Финальный73/73passed.
|
||||
|
||||
14pure (5новых frontend snapshot+9persistence), HTTP/DI/RBAC speed-probes write, contracts/backend build,73browser uptime/large history,8uptime context, non-incremental TypeScript, targeted lint (0errors,9предыдущих предупреждений uptime) и frontend production build passed. Финальная новая проверка: API save error сохраняет прежние80; успешная смена/возврат пары не показывает их как новый snapshot, history/KPI1run сохранены. Historic2speed PNG восстановлены. Реальное FOR UPDATE/concurrency требует12.5; здесь DI и source review.
|
||||
|
||||
Этот delta выполнен после общих main579e816/contexta3fcba0; общие результаты не переименованы в проверку нового HEAD. Следующий79: POST command body ещё использует parseInt/enum defaults; проверить строгий DTO до DB/native, сохранив валидные ad-hoc/scheduled сценарии и существующие команды/права. Полный CAS параметров пробы и реальные native timestamps также не объявлены проверенными. Внешняя12.5 отдельно.
|
||||
|
||||
## 12.4.9 — общая context регрессия после speed ownership
|
||||
|
||||
2026-10-07, HEADa3fcba0.221/221passed,26files,0unexpected/skipped/flaky,7.5min. Edge/1worker/retries0/maxFailures12. [Итог context](ux-ui/acceptance/context-final-2026-10-07.json) сохранён отдельно от старых матриц; source tmp/ux-context-final-20261007.json. Смена backend/mode, ABA/late data/write/permission, закрытие scope и checkpoint прошли.
|
||||
|
||||
Main1176 на579e816 и backend ownership delta25pure/5browser наa3fcba0 остаются разными доказательствами, HEAD не подменён. Следующий78: при смене пары adapter upsert и frontend optimistic publish сохраняли старые observations; исправить после общего прогона и проверить профиль. Внешняя12.5 всё ещё не выполнена.
|
||||
|
||||
## 12.3.77 — пара устройств и атомарная запись speed-run
|
||||
|
||||
2026-10-07. Preflight сверяет probeId/srcServerId/dstServerId до создания RouterOS client/команды, mismatch/deleted даёт409. UPDATE snapshot success/error содержит id AND source AND destination и RETURNING id. Если пара изменилась/проба удалена за время native test, её snapshot не обновляется, история actual endpoints сохраняется с probeId=null. Snapshot и run insert теперь внутри одной Drizzle transaction для success и failure. Ad-hoc run без probeId сохраняет историю без обновления пробы. Команды, параметры, locks, permissions/schema не менялись.
|
||||
|
||||
25 pure/DI tests (9новых persistence: preflight, zero, source/destination/delete race, update/insert/pre-commit failures,ad-hoc;4rate,3status,9scheduler),5browser speed-test (новый409 и прежние ошибки/timeout/nullable/foreignrun), targeted test lint и backend build passed. Pure transaction в памяти моделирует rollback и отказ до commit, не доказывает потерю реального PG commit acknowledgement. Source placement и SQL predicates просмотрены; PG concurrency/transaction semantics требуют12.5.
|
||||
|
||||
Полный main1176 относится к579e816 до backend delta; frontend runtime после него не менялся, добавлен1профильный409тест. Следующий12.4.9context; после него12.3.78: adapter каталога сохраняет observations по id, нужно проверить смену пары и local publish после config save. Текущий77защищает пару при запуске/результате, не является CAS полной версии параметров пробы.
|
||||
|
||||
## 12.4.8 — общая main регрессия после исправлений оптимизатора/скорости
|
||||
|
||||
2026-10-07. Runtime HEAD579e816:1176/1176passed,0unexpected/skipped/flaky,34.9min. Edge/1worker/retries0/maxFailures12. После старта добавлен только внешний протокол docs5fedf7a; runtime diff579e816→current проверен пустым. [Итог main](ux-ui/acceptance/main-final-2026-10-07.json) записан отдельно от исторического12.4.6. Сырой JSON сохранён в tmp/ux-main-final-20261007.json. Исторические PNG, перегенерированные тестами, восстановлены по проверенному списку tmp/ux-main-regenerated-screens-20261007.json. Чужие skill/AGENTS/config/cache изменения не включены.
|
||||
|
||||
Этот общий прогон содержит новые large pool/site captions, direction/scope/nullable POST и6mobile geometry cases. Старый terminal focus race в этом прогоне не повторился. Source review дополнительно нашёл обновление speed probe только по id без endpoint ownership; snapshot update и run insert были отдельными операциями. Следующий небольшой12.3.77 защищает привязку пары и атомарность этих двух записей, без смены RouterOS команд; затем12.4.9 полныйcontext. Внешняя12.5 отдельно.
|
||||
|
||||
## 12.5.0 — подготовка внешнего протокола
|
||||
|
||||
2026-10-07. [Протокол12.5](ux-ui-external-acceptance.md) подготовлен по фактическим backend routes/services/migrations: PG bootstrap0008/0009, backup/restore/rollback и writer lifecycle; outbox claim/dedupe/CAS/status-history; native bandwidth terminal/direction/scope, OSPF и остальные сетевые операции; реальные роли/интеграции. Каждая строка задаёт независимое подтверждение результата и очищенные артефакты. Локальные ссылки проверены. Внешние операции не выполнялись, credentials/dumps не читались и не сохранялись.
|
||||
|
||||
Source review: stopScheduler очищает таймеры, stopTrafficFlowListener запускает flush без ожидания, поэтому эти вызовы не считаются доказательством завершения всех writers. PG-6 и остановка senders остаются предметом реальной проверки, не закрываются checkbox/timeout. Протокол не добавляет команды к сетевым операциям и не объявляет реализованными отсутствующие BGP-prefix evaluator/live GRE schedule/processing recovery.
|
||||
|
||||
12.4.8 main1176 продолжает выполняться на runtime source HEAD579e816. Этот блок меняет только docs; исходники/конфигурация тестов не изменились после старта. Дальше завершить main, сохранить результат и запустить12.4.9context.12.5 не принята.
|
||||
|
||||
## 12.3.76 — читаемая мобильная WAN/JH матрица
|
||||
|
||||
2026-10-07. Геометрический baseline320px подтвердил дефект: viewport right303,pinned right197,cell right397 (200px колонка рядом с180px WAN). Пропорции ColumnDef на телефоне теперь112/160, desktop180/200 сохранены (actual table fill может расширять размеры). Hook useIsMobile и installed ReUI DataGridShell/ScrollArea/Table переиспользованы, primitive/hook/theme не менялись. Имя/интерфейс WAN ограничены truncate/min-w-0; полное значение остаётся DOM text/title и доступно поиску.
|
||||
|
||||
6 новых geometry cases320/390/1440×1/7JH проверяют всю metric cell и её speed text относительно pinnedRight/viewportRight, все7JH через переключение колонок, long WAN, отсутствие page overflow/API writes. Resize320→1440→320 прошёл, scoped WCAG axe passed. Related26browser, targeted lint, non-incremental TypeScript и frontend production build passed. Первый baseline намеренно failed на реальном переполнении, финальные assertions не ослаблялись. ReUI API и audit checklist прочитаны: v9useTable/dataGridFeatures/table/recordCount, existing layout/semantic tokens/security/scroll composition сохранены.
|
||||
|
||||
Доказательства: [геометрия до/после](ux-ui/acceptance/matrix-geometry-2026-10-07.json), [экран320px](ux-ui/screens/optimizer-matrix-readable-320.png) просмотрен. Historic9optimizer и2speed PNG восстановлены; предыдущие снимки не переписаны. Следующий12.4.8main/12.4.9context повтор на новом HEAD. Внешняя12.5 не выполнена.
|
||||
|
||||
## 12.3.75 — направление скоростных входов OSPF
|
||||
|
||||
2026-10-07. Источник выбирается через srcServerId текущего роутера, поэтому единый pure getter читает RX как DL и TX как UL. Getter используется raw observed и model speeds; route builder вызывает модельный helper вместо прежнего обратного сопоставления. Raw zero/null/fraction/source/date сохраняются. Модельные округление, floor1 и traffic fallback сохранены; formula Cost, pingWeight, unique probe assignment и порядок операций не менялись. Рекомендации Cost могут измениться из-за исправленных asymmetric inputs. Traffic fallback RX→DL/TX→UL уже был верен. Дата speed остаётсяnull, Ping date не подставляется.
|
||||
|
||||
Четыре backend suites passed: pure metrics (новые asymmetric80.75/30.25,0/null,rounding/floor/fallback), identity, plan и HTTP optimizer с DI/in-memory writes. Backend build passed. Source review подтвердил фильтрацию по srcServerId и вызов helper в builder. Реальный DB builder и RouterOS не исполнялись; HTTP suite подменяет buildOptimizationPlan и отдельно проверяет отсутствие операций до валидного плана. Frontend не менялся, повторный browser/build для него не требовался.
|
||||
|
||||
Следующий76: на320px проверить видимость всей соседней metric cell за pinnedWAN, исправить column sizing при подтверждённой проблеме. Общая main/context регрессия прежних HEAD требует обновления позже;12.5 остаётся внешней.
|
||||
|
||||
## 12.3.74 — подтверждённое завершение bandwidth-test
|
||||
|
||||
2026-10-07. Pure guard проверяет структуру native rows, все известные failure statuses и последний сообщённый status. Только done testing допускает дальнейший расчёт, after-ping и DB success write. Connecting/running, отсутствие статуса, неизвестный status, malformed response или error/failure/trap marker отклоняются с неизвестным результатом; native failures имеют краткие русские сообщения. Числовой enum не принимается как строковое подтверждение. Подтверждённый one-direction result может иметь null на другой стороне и0 на измеренной.
|
||||
|
||||
16 pure tests (3status,4rates,9scheduler) и backend build passed. Проверка placement/callers по source: HTTP и scheduled collection используют общий execute, их catch вызывает прежний failure recorder, который сохраняет старые probe averages и пишет error run с nullable rates. Полная DB/network orchestration не запускалась; это source review и pure guard tests, а не внешняя приёмка. Команда bandwidth-test и её параметры, locks, routing rules, permissions и DB schema не менялись.
|
||||
|
||||
Источник native statuses: [RouterOS CLI bandwidth-test](https://manual.mikrotik.com/docs/cli-reference/tool/bandwidth-test/). Последний reported done допускает последующие rows без status, но любые failure markers отклоняются даже после completion. Реальный REST shape/версия RouterOS и PG writes требуют12.5. Следующие75direction OSPF и76mobile geometry.
|
||||
|
||||
## 12.3.73 — неизвестная скорость и подтверждение POST
|
||||
|
||||
2026-10-07. Backend parser возвращает null для отсутствующих/невалидных скоростей, переводит RouterOS SI bits/s в Мбит/с и сохраняет явный total-average 0 вместо замены средним. Серии включают только валидные значения; отсутствующие samples не получают нулей, временная геометрия пропусков здесь не реализована. Поля БД уже nullable, миграции и переписывания исторических записей нет. Frontend проверяет ok/result/runId и nullable finite nonnegative rates до публикации ответа. Контекст проверяется раньше DTO, поздний ответ чужого источника игнорируется. Running averages null; Math.round(null) исключён. Ошибка сохраняет предыдущие probe averages и подтверждённую историю.
|
||||
|
||||
7 pure parser/DTO +9 isolated scheduler journal tests прошли.71 main browser (uptime-links, speed-data, large-speed-history),8 context прошли; non-incremental TypeScript, targeted lint (9 существующих предупреждений uptime,0 errors), backend и frontend production build успешны. Первые два новых браузерных прогона обнаружили неверный KPI role selector и неоднозначность одинаковой подписи в истории/строке; selectors уточнены, финальный связанный профиль полностью passed. Historical large-speed-history-320 PNG восстановлен.
|
||||
|
||||
Следующий74: native terminal status ещё не проверяется перед done/DB write.75OSPF direction и76mobile metric geometry остаются. DTO доказывает целостность ответа, но не факт выполнения на устройстве. Реальная RouterOS/PG приёмка12.5 отдельно.
|
||||
|
||||
## 12.3.72 — область скоростного снимка и единицы
|
||||
|
||||
2026-10-07. Матрица с probe snapshot явно объясняет:скорость — пара устройств, привязка WAN расчётная, DL кHome/UL отHome. В existing «Как читать расчёт» добавлена роль srcInterface для Ping после теста и выбор пути скорости маршрутизацией устройства. Скорости и model limits подписаны Мбит/с. Новых RouterOS параметров, routing rules, методов или API операций нет.
|
||||
|
||||
10browser (observed forward/reverse/null/zero,20/1000probes,1000WAN/100JH) прошли; TypeScript до dev, targeted lint и production build успешны. При noProbe измерения остаются неизвестными. Scope note находится один раз над таблицей, без повторения длинного предупреждения в каждой ячейке.
|
||||
|
||||
Остаются73missing→0/nullable consumer,74native terminal status,75OSPF direction. Чтение frontend consumer подтвердило ещё Math.round(null)→0 и доверие POST без runtime DTO; фиксировать73 вместе с producer. Границы мобильного pinnedWAN и соседней metric cell требуют отдельного76geometry теста, а не только проверки первого столбца. Внешняя12.5 отдельно.
|
||||
|
||||
## 12.3.71 — направление измерений DL/UL
|
||||
|
||||
2026-10-07. Для Home→JH RX клиентского bandwidth-test отображается как DL к Home, TX как UL от Home. JH→Exit использует тот же смысл; для reverse Exit→JH клиент на дальней стороне, поэтому TX→DL/RX→UL. Raw getter сохраняет nullable/zero/decimal и исходную дату; модельные maxDl/maxUl применяются к правильной стороне. Команды RouterOS, параметры теста, подбор probe IDs и правила операций не менялись. Ввод/трактовка скоростных данных исправлены по источнику srcClient и RouterOS CLI docs (ссылка в observed audit).
|
||||
|
||||
15pure tests passed:1230 assignment oracle fixtures, source ownership/ties/noWAN, новые asymmetric limits и forward/reverse/zero/null.51main browser и6 observed повторных (включая2новых direction/asymmetric сценария) прошли; TypeScript до dev, targeted lint и production build успешны. Старое ожидание ↓TX исправлено на ↑TX, а не ослаблено. Historical9 optimizer PNG восстановлены. Полная main/context матрица последнего общего прогона относится к прежним HEAD; этот delta проверен профильными сценариями.
|
||||
|
||||
Наблюдения по-прежнему не доказывают конкретный WAN bandwidth-test: следующее72scope labels. Backend producer missing→0/terminal status и OSPF metrics/route builder TX→DL требуют73–75. OSPF traffic fallback уже используетRX→DL, измеренная дата speed-probe намеренноnull и не требует изменения. Real12.5 отдельно.
|
||||
|
||||
## 12.3.70 — аудит источника и смысла observed metrics
|
||||
|
||||
2026-10-07. Код сопоставлен с первичной RouterOS bandwidth-test документацией. Подтверждены неверное TX→DL, неподтверждённая связь btest с srcInterface/WAN, missing→0/explicit0→mean и отсутствие проверки terminal status перед success write. Это новые ограничения, которые ранее проверенные mock snapshots не доказывали. Отдельный протокол/таблица/схема: docs/ux-ui/optimizer-observed-audit-2026-10-07.md.
|
||||
|
||||
Только read-only audit/docs, без DB/RouterOS/сетевых операций. Дальше71direction mapping,72scope labels,73nullable rate parser/producer/DTO,74terminal confirmation. Фактические команды, права и routing rules не меняются этой серией; real12.5 отдельно. Исторические0 не переписывать автоматически.
|
||||
|
||||
## 12.3.69 — lookup leg и исключение ненужных расчётов без WAN
|
||||
|
||||
2026-10-07. WAN/JH map сохраняет первый matching leg, lookup вынесен из Exit loop. JH/Exit legs не строятся, если нет настроенного WAN: их не может использовать ни один full route. Порядок WAN/JH/Exit, сортировка/ties, raw source identity, all routes и unknown community indices сохранены.13pure tests прошли, включая1230 assignment oracle fixtures и новые проверки8route probe ownership/ties/zeroWAN.12browser (large homes/routes/observed/tables) passed; non-incremental typecheck до dev, targeted lint и production build успешны.
|
||||
|
||||
CPU final:1000routes13.3ms;100000(10×100×100)49.7ms;100000(100×10×100)44.0ms. До lookup ~284–329ms и267–287ms. Дополнительный zeroWAN baseline0×100×1000 строил100000unused JH/Exit legs:45.6ms/heapDelta24.6MB; после skip11.5ms/0.17MB. Новый profiler допускаетWAN0 и ограничивает также JH×Exit≤100000. HeapDelta не peak/retained memory; полный nonzero product по-прежнему хранится и сортируется в памяти. Evidence docs/ux-ui/acceptance/optimizer-routes-final-2026-10-07.json содержит source SHA256 и точные результаты.
|
||||
|
||||
После чтения реального producer обнаружены следующие вопросы достоверности:source btest выполняется на srcClient,TX/RX экспортируются без переименования,optimizer пока читаетTX какDL. srcInterface передаётся только after-ping, не bandwidthTest; поле не доказывает WAN скоростного теста. Producer parser/fallback отсутствующую скорость превращает в0, а explicit avg0 может заменяться mean series. Следующий12.3.70 фиксирует аудит с первичными RouterOS источниками и планирует точечные исправления данных/подписей. Команды/права/правила сетевых операций не менялись; real PG/RouterOS/integrations12.5 не выполнялись.
|
||||
|
||||
## 12.3.68 — bounded CPU-профиль генерации полных маршрутов
|
||||
|
||||
2026-10-07. Pure child process без API/DB/браузера/сети, product≤100000/dimensions1–1000/timeout10s/V8heap256MB.1000WAN×1JH×1Exit1000routes≈16.9ms/heapDelta1.8MB;10×100×100100000routes≈329.6ms/22.0MB;100×10×100≈266.7ms/27.1MB. Первый измеренный прогон; точные повторные значения и source SHA256 в docs/ux-ui/acceptance/optimizer-routes-baseline-2026-10-07.json. Heap delta не peak/retained memory, время не production p95/SLA. Проверены count/first-last IDs/bestFirst/сохранение отсутствующих наблюдений. ESLint скрипта прошёл.
|
||||
|
||||
Baseline в UI не запускался. Повторный Array.find по1000wanJhLegs на каждую из100000комбинаций даёт лишние линейные сканирования. Следующий12.3.69: map lookup с сохранением первого matching leg и порядка routes/ties, профильный repeat. Полный product всё ещё хранится/сортируется в памяти; опасную произвольную размерность этот профиль не принимает. Далее аудит TX/RX и связи wildcard-пробы с конкретным WAN, прежде чем объявлять observed correctness закрытой. Внешняя12.5 отдельно.
|
||||
|
||||
## 12.3.67 — краткие и достоверные KPI-подписи площадок
|
||||
|
||||
2026-10-07. В существующем ReUI Stats12/KpiStatGrid footer переиспользован ReUI Badge outline/sm. Короткие уникальные названия (≤3 и≤24символов) показываются без повторов; большой/длинный список заменяется точным количеством площадок. Отдельно виден count узлов без площадки: пустые/whitespace/нормализованный — не считаются реальной площадкой. Нет полного join большого каталога. Неизвестный каталог сообщает «Площадки неизвестны»; нулевой topology pool — «Нет узлов в расчёте», потому что live topology исключает offline/disabled, а устройства могут существовать в inventory. Права/выбор узлов/расчёт/источники не менялись.
|
||||
|
||||
16 main browser +2 повторных новых профиля после copy-уточнения прошли:1000JH и1000Exit отдельно (без опасного cross product), repetitions/two sites/1000sites/long80chars/unknown/empty/offline/disabled/503 cache/recovery.320px без overflow, caption≤80px, scoped WCAG axe passed. Non-incremental TypeScript до dev, full page/helper/test lint и окончательный production build прошли. ReUI API/validate_usage проверены; primitive/theme не изменены. Historical9 optimizer PNG восстановлены, новые docs/ux-ui/screens/optimizer-sites-{jump-host,exit-node}-320.png просмотрены.
|
||||
|
||||
Далее12.3.68 pure child CPU profile full-route product≤100000/timeout10s/memory cap; не грузить тяжёлый baseline в UI. Остаточные DFS worst-case/full-route memory/native selector и внешняя12.5 не объявляются принятыми. Общая main/context регрессия относится к ранее записанным HEAD; текущий footer delta проверен профильными16+2.
|
||||
|
||||
## 12.3.66 — точный выбор проб из большого pool
|
||||
|
||||
2026-10-07. Score matrix вычисляется только при exact DFS≤7WAN/pool≥WAN, с единым временем ранжирования на назначение JH. Сырые наблюдения/даты не меняются, greedy fallback сохранён. Допустимый score-first greedy путь даёт только lower total, не готовое назначение. Пока DFS не нашёл реальный witness, равные верхние границы НЕ отсекаются; первое равное назначение остаётся в исходном pool order. Node stop требует реального bestAssign. Для каждого кандидата child upper выводится из topK максимумов текущего узла с исключением занятой пробы; уже проигрышные siblings не пересканируют весь pool. Forced pick сохраняется, даже если ветвь отсечена.
|
||||
|
||||
1230 seeded сравнений с независимым прежним DFS совпали по точным probe IDs, включая30 смешанных наборов7WAN.10 pure tests прошли: ties/partial matching, single snapshot при переходе часа, прежний greedy для8WAN, unknown/zero/disabled/raw snapshots.51 main browser и8 context прошли; TypeScript без incremental, targeted lint и production build успешны. Historical9 optimizer PNG восстановлены по точному списку.
|
||||
|
||||
Pure child CPU1000: equal1217.5→15.6ms,varied7967.5→14.5ms,freshness10с timeout→16.7ms; CPU20:11.5–11.7ms. Child startup отдельно~0.25s. Exact IDs проверены во всех6 профилях. Evidence docs/ux-ui/acceptance/optimizer-probes-cpu-2026-10-07.json содержит source SHA256, baseline HEAD и результаты. Браузерная live ветка7WAN/1000probes:219902bytes/7rows/222tableDOM/1018ms dev-ready; timestamps соответствуют p993..999, после refresh сохраняются,320px без overflow, API mutations отсутствуют. Это не production SLA/нагрузка PostgreSQL/RouterOS и не гарантия произвольного mixed pool: худшая экспоненциальная сложность DFS и full-route product остаются.
|
||||
|
||||
Следующий12.3.67: KPI captions JH/Exit (повторы/пустая площадка/unknown), затем separate full-route CPU profile. Общая main/context регрессия12.4.6/7 относится к прежним HEAD; этот delta принят профильными51+8. Внешняя12.5 не выполнена.
|
||||
|
||||
## 12.3.65 — CPU-профили pool1000
|
||||
|
||||
2026-10-04, UI/source расчёта не менялись. Child script принимает integer count20–1000, hard timeout10с, без API/DB/браузера/сети.7WAN×1000: equal1217.5ms (IDs p0..6), varied7967.5ms (p13..19), freshness не завершился за10с, процесс остановлен. Startup отдельно ~0.4s. Freshness создаёт1000 разных возрастов, будущие timestamps не используются. ESLint скрипта прошёл; корректность ID проверяется после успешного завершения.
|
||||
|
||||
Это оставшийся CPU риск, а не performance приёмка. В current DFS повторяются Date.parse/trim/score и оценка upper для ветвей, уже достигших максимум. Следующий12.3.66: score cache только для bounded WAN≤7 DFS с одним snapshot time и early stop при достижении node upper, preserving first tie/order/forced picks/greedy fallback. Проверить1200 legacy oracle fixtures, raw observations, profiles20/1000. Худшая комбинаторика и весь full-route product по-прежнему не ограничены.
|
||||
|
||||
## 12.3.64 — компактная текстовая сводка WAN
|
||||
|
||||
2026-10-04. Baseline1000WAN:31783chars/13695px высоты summary на320px, хотя grid уже50rows/1419DOM. В HomeCard теперь preview первых3 WAN с прежними ISP/IP, точный remaining/total и понятная ссылка в copy на существующую вкладку WAN×JH. Для ≤3WAN описание не сокращено. Исходный массив/расчёт/поиск/таблица не срезаются.
|
||||
|
||||
Final1000WAN:134chars/86.5px высоты summary; WAN10:130chars/86.5px. В тест добавлены реальные размеры/длина preview, точные counts и мобильный snapshot.12 profile browser +1 screenshot repeat, full ESLint страницы/test и production build прошли. Полный search WAN1000, последняя страница, refresh/clamp/pinnedWAN/320px/axe сохранены. Снимок docs/ux-ui/screens/optimizer-wan-summary-320.png просмотрен;9 historical optimizer PNG восстановлены по явному списку.
|
||||
|
||||
Общие main/context доказательства относятся к прежним HEAD; этот небольшой текстовый delta проверен профильными сценариями. Исторический context-delta(a558412/36) сохранён отдельно от нового context-final-delta(b1f8326/221), чтобы ссылки12.4.3 не изменили смысл. Следующий12.3.65 — pure CPU7WAN×1000pool с hard timeout; не запускать в UI. KPI captions/native selector и худшая DFS/full-route комбинация не приняты этим блоком. Внешняя12.5 остаётся.
|
||||
|
||||
## 12.4.7 — общая context регрессия после delta
|
||||
|
||||
2026-10-04, HEADb1f8326.221/221passed/26files за15.8min,0unexpected/0skipped/0flaky,Edge/1worker/retries0/maxFailures12. Включены Firewall context и все поздние read/write/backend/mode/ABA/checkpoint сценарии. Evidence docs/ux-ui/acceptance/context-final-delta-2026-10-04.json. Terminal context прошёл на исправленном source. Перегенерированных tracked screenshots нет.
|
||||
|
||||
Main12.4.6 относится к991f2b3:1161/1162; единственный focus race исправлен и проверен20+15 в12.4.6.1. Полный main после этого маленького исправления не повторялся. Внешняя12.5 PG/RouterOS/integrations не выполнена; stage12 не завершён. Следующий12.3.64 — высота сводки1000WAN, затем дополнительные CPU/pool профили.
|
||||
|
||||
## 12.4.6.1 — исправление гонки фокуса терминала
|
||||
|
||||
2026-10-04. requestAnimationFrame из finally заменён pendingFocus ref и DOM effect после commit. Поле получает focus только после снятия disabled; unmounted/blocked terminal не перехватывает фокус. Зависимость от lines покрывает быстрый запрос, даже когда executing=true/false попадают в один React batch. Порядок запросов, права, ownership и сохранение команд не менялись.
|
||||
|
||||
20 terminal-data/layout passed; все3 формы отказа повторены5раз:15/15passed,0unexpected/flaky. Evidence docs/ux-ui/acceptance/terminal-focus-2026-10-04.json содержит baseHead и SHA256 проверенного source. ESLint и production build прошли; отдельный non-incremental TypeScript повторён после завершения dev-сервера успешно. Первый параллельный tsc попал на временную перезапись .next/dev/types/routes.d.ts; исходники не имели этой ошибки. Исторические6 terminal PNG восстановлены по точному списку.
|
||||
|
||||
Это профильное закрытие единственного сбоя main12.4.6, не новый полный main прогон на исправленном HEAD. Следующий12.4.7 —221 context/26files (актуальная discovery; прежняя матрица213/25). Внешняя12.5 остаётся.
|
||||
|
||||
## 12.4.6 — общая main регрессия после больших каталогов
|
||||
|
||||
2026-10-04, HEAD991f2b3.1162 сценария/190 файлов:1161passed,1unexpected,0skipped/0flaky за55.2min. Edge/1worker/retries0/maxFailures12. Единственный сбой terminal-data: поле не получило focus после успешного повтора BFD error. Вероятная гонка requestAnimationFrame с React commit/re-enable. Общая матрица НЕ объявляется полностью пройденной. Доказательство docs/ux-ui/acceptance/main-delta-2026-10-04.json; trace/error сохранены в tmp перед следующими тестами. Перегенерированные этим прогоном исторические PNG восстановлены по явному списку tmp/ux-main-regenerated-screens.json; собственные новые матричные/Community screenshots сохранены.
|
||||
|
||||
Все новые большие профили, Firewall/OSPF/optimizer сценарии вошли в этот общий прогон. Статический аудит дополнительно выявил полный join1000WAN в шапке HomeCard и полные site-строки JH/Exit в KPI: число DOM nodes не измеряет высоту текстовых сводок. Следующий12.4.6.1 — фокус после commit и профильный repeat; затем12.4.7 context. Внешняя12.5 отдельно.
|
||||
|
||||
## 12.3.63 — весь Community-каталог с ограниченным отображением
|
||||
|
||||
2026-10-04. Удалён скрытый slice24 после фильтра sourceServerId; ownership и расчётная семантика сохранены. ReUI DataGrid pages50/full search/communityName/gateway/path, exact counts, full-model sort, fixed widths/horizontalScroll/pinnedCommunity. Row key формируется до фильтрации из прежнего home/community/index; pins сохраняются при search/sort/страницах/refresh. Global рекомендаций count теперь относится ко всем правилам. Live режим по-прежнему не применяет BGP-рекомендации; симуляция доступна только demo.
|
||||
|
||||
1000source→50 rendered/1024tableDOM/1751pageDOM/1851ms dev-ready; раньше24 rendered соответствовали24 в модели,976 правил терялись. Проверены page20 и правило1000/search/unknown indices безExit/no simulation buttons/refresh/clamp1/320px/pinned column/axe.7 main browser,8 pure tests (1200 assignment fixtures и новый1000 ownership/unknown), TypeScript, targeted lint и production build прошли. Снимок docs/ux-ui/screens/optimizer-community-320.png просмотрен.
|
||||
|
||||
Осталось5manualPagination:true: scheduler11 fixedkeys, live GRE pools пусты/demo ограничен fixtures, probes schedule толькоdemo, subusers не подключён, trafficflows серверныйtop50 принят с честным указанием среза. Не мигрировать искусственно недостижимые live каталоги. Дальше12.4.6/12.4.7 — повтор общей main/context матрицы после delta. Внешняя12.5 не выполнена.
|
||||
|
||||
## 12.3.62 — исходный скрытый срез Community
|
||||
|
||||
2026-10-04. Live API fixture1000 правил Home1/1WAN/1JH/безExit, strict servers/rules DTO. UI показывает BGP community(24),24rows/504tableDOM/1197pageDOM/1916ms dev-ready. Это не performance-успех:976 правил вообще исключены до grid, counts не показывают реальный источник.1 browser/test lint passed, API writes отсутствуют. Следующий12.3.63 удаляет срез и ограничивает отображение pages50, сохраняя unknown indices безExit.
|
||||
|
||||
## 12.3.61 — точное отсечение перебора проб
|
||||
|
||||
2026-10-04. DFS сохранил порядок WAN/pool, обязательный выбор совместимой пробы и первое назначение при равных totals. Отсекаются только ветви, чья верхняя граница не превосходит найденного bestSum. Две релаксации: сумма независимых максимумов remainingWAN и сумма наибольших remainingCount максимумов уникальных probe IDs. Каждое допустимое завершение ограничено обеими оценками; минимум также верхняя граница. Никакого изменения правил scores, fallback greedy для >7WAN/недостаточного pool, выбора интерфейсов, API или сетевых операций.
|
||||
|
||||
Независимый старый полный DFS в тесте совпал по exact probe IDs на1200 seeded fixtures с ties/incompatible/partial matching. Дополнительно equal20 сохраняет первые7 и проверен forced early choice.7 pure tests/type/lint,6 main browser и8 context прошли. Скрипт с child timeout10с теперь проверяет probe IDs: equal17.3ms(p0..6), varied16.6ms(p13..19), freshness60.9ms(p13..19). До правки equal превышал10с; первая слабая граница оставляла freshness2269ms, усиленная граница сократила его. Время child startup отдельно335–443ms, в расчёт не входит. Production build проходит.
|
||||
|
||||
Это профили7WAN×20, а не гарантия для любого размера/набора: DFS всё ещё экспоненциальный в худшем случае, исходный pool не ограничен; large mixed-interface/live нагрузка остаётся предметом production измерения. Следующий12.3.62 — скрытый срез24commRecs.
|
||||
|
||||
## 12.3.60 — ограниченное отображение WAN matrix
|
||||
|
||||
2026-10-04. ReUI DataGrid/TanStack v9: клиентские страницы50WAN, окно5JH, поиск по полному WAN/JH каталогу, точные filtered/total counts. Fixed widths/горизонтальный DataGridScrollArea/закреплённый WAN; страницы сохраняются при refresh и нормализуются при сжатии каталога. Best score берётся из всех legs циклом без spread; Map WAN→JH сохраняет первый matching leg, как прежний find. Raw unknown/zero/даты и модель остаются раздельными. API writes отсутствуют.
|
||||
|
||||
WAN1000×JH1:1000→50rows,28019→1419tableDOM,28712→2149pageDOM,2264ms dev-ready. WAN10×JH100:103→8columns,9803→683tableDOM,10595→1492pageDOM,1785ms dev-ready. Полные исходные массивы остаются в памяти.
|
||||
|
||||
Проверены12browser + повтор2 после lint-правки, TypeScript без incremental, targeted ESLint, production build, ReUI validate_usage/checklist. Мобильные снимки docs/ux-ui/screens/optimizer-wan-matrix-{1000,100jh}-320.png просмотрены. Поиск последних объектов, последний диапазон, cache/refresh/clamp,320px/pinnedWAN и WCAG axe приняты. Общая регрессия после delta ещё требуется.6 manualPagination:true остаются; CPU DFS и срез24 commRecs не исправлены этим блоком.
|
||||
|
||||
## 12.3.59 — отдельные профили матрицы и CPU
|
||||
|
||||
2026-10-04. Live API подменён строгими DTO, без Exit и API mutations. Два браузерных профиля прошли: WAN1000×JH1 — 1000 строк,4 столбца,28019 DOM таблицы,28712 DOM страницы,4977мс dev-ready,108917байт; WAN10×JH100 — 10 строк,103 столбца,9803 DOM таблицы,10595 DOM страницы,2258мс dev-ready,16593байт. Время dev измеряет также загрузку/компиляцию и не является production benchmark.
|
||||
|
||||
Чистый расчёт7WAN×20 wildcard probes воспроизводится scripts/performance/optimizer-probes-profile.mjs, в отдельном child process с жёстким timeout10000мс. Расчёт не завершился за timeout; тяжёлый DFS нельзя воспроизводить в UI. Нет DB/API/сетевых операций. Следующий12.3.60 — страницы50WAN и ограниченное окно JH, поиск по полному каталогу, проверка обновления/сжатия и320px. Семантику назначения probes этим блоком не меняем.
|
||||
|
||||
## 12.3.58 — карта оставшихся рисков оптимизатора (2026-10-04)
|
||||
|
||||
Статический аудит после a16bfae, без продуктовых изменений/сетевых операций. Осталось7 manualPagination:true. WAN matrix рендерит все home.wans и все jumpHosts как columns, legs.find на каждую ячейку; Math.max(...legs.map(score)) тоже не имеет явной границы числа аргументов. DOM ограничение карточек и full routes не ограничивает эту матрицу. Следующие независимые fixtures:1000 WAN×1JH без Exit и10WAN×100JH без Exit — отделить rows/columns от full-route product. После baseline нужны page50 WAN/ограниченный набор JH columns/точные counts/поиск всех JH, map lookup по wan/jh без изменения состояния/best по полным legs.
|
||||
|
||||
buildLiveOptimizerData/assignProbesForWanJh делает DFS, когда WAN<=7 и WAN<=pool.length. Лимита pool нет. scoreProbeForWanIface допускает srcInterface="" для любого WAN; при7WAN/20 подходящих разных probes полное дерево содержит20P7=390700800 полных назначений (вывод из кода, не измеренный benchmark). Не запускать этот случай через Next/UI: сначала отдельный чистый CPU-профиль в дочернем процессе с жёстким timeout, без DB/RouterOS. Стратегию назначения/оптимальность нельзя менять без доказательства эквивалентности на малых наборах; простое обрезание pool может скрыть лучшее назначение.
|
||||
|
||||
commRecs строятся через filter(sourceServerId).slice(0,24), а HomeCard подписывает BGP community только длиной среза. Нужны полный source count/явное сообщение24 изN; нельзя выдавать24 за весь каталог или менять правила применения. Локальная вкладка карточки сбрасывается при pagination, native OSPF select1000 options остаётся. Общая main/context после delta и реальная внешняя12.5 ещё не закрыты. Этот блок — карта приёмки, не доказательство нагрузочной готовности. Product build a16bfae уже passed; для документации повтор не нужен. Следующий12.3.59 — указанные bounded profiles/CPU timeout. Локальный коммит без push.
|
||||
|
||||
## 12.3.57 — страницы полных маршрутов оптимизатора (2026-10-04)
|
||||
|
||||
ReUI client pagination50 только раскрытого списка, autoResetPageIndex=false/clamp, fixed widths/ScrollArea, закреплённый исходный номер маршрута112px. _index/bestId вычислены по полному исходному списку, не странице/sort. Сворачивание/раскрытие явно reset page0; для1000 текст «Открыть все1000 комбинаций» не обещает одновременный DOM. Для<=50 прежний текст сохранён. Toggle44px. Расчёт модели/сети и полный массив не изменены.
|
||||
|
||||
6/6 профильных table/pin/empty/unknown cases и финальный large1/1 passed. Первые ошибочные expectations теста считали min index уникальным; исправлены по существующим равным значениям. Проверены50 initial/счётчик номера51/refresh/page20 951–1000, collapse5/open50, глобальный min sort включает номера за исходной page1 при ties,320px/pinning/axe/shrink1000→1/no writes.21 devices/WAN10×JH10×Exit10/4261 bytes →50 rows/1699 table DOM/2461 page DOM/1853ms dev ready вместо33049/33780. TypeScript без incremental/ESLint grid+test/production build passed. [Профиль](ux-ui/acceptance/optimizer-routes-pages-2026-10-04.json), [320px](ux-ui/screens/optimizer-routes-pages-320.png) сохранены и просмотрены. Dev latency не production benchmark.
|
||||
|
||||
Осталось7 manualPagination:true specialized grids. Следующий12.3.58 — WAN matrix/динамические JH columns/CPU combinatorics. Срез commRecs24/восстановление вкладки карточки/native device options1000 и полный массив в памяти остаются. Общая main/context после всех delta и внешняя12.5 не закрыты. Локальный коммит без push.
|
||||
|
||||
## 12.3.56 — исходный профиль1000 полных маршрутов (2026-10-04)
|
||||
|
||||
Полный валидный servers DTO21 устройство/4261 bytes:WAN10×JH10×Exit10 создаёт1000 full routes.1 browser/test lint passed; раскрытый список1000 rows/33049 table DOM/33780 page DOM/3738ms dev ready. [Профиль](ux-ui/acceptance/optimizer-routes-baseline-2026-10-04.json) сохранён. Это baseline, не performance acceptance; dev latency не production benchmark. Продуктовый код не менялся, build повторно не нужен. Далее12.3.57 ограничить DOM раскрытого списка50/page без потери global sort/индекса/best/refresh/clamp; затем WAN matrix/CPU combinatorics/24 commRecs и общая регрессия. Внешняя12.5 отдельно. Локальный коммит без push.
|
||||
|
||||
## 12.3.55 — ограниченные карточки домашних устройств (2026-10-04)
|
||||
|
||||
OptimizerHomesList показывает5 карточек на страницу, поиск по полным label/id/IP/site/country. home_q/home_page в URL сохраняют server/keep/hash; поиск replaceState/reset page, pagination pushState, clamp после нового полного снимка нормализует URL. Малый каталог до5 без фильтра сохраняет прежнюю композицию. Расчёт и полный DTO не обрезаются; глобальные pinned/applied Sets остаются у родителя. Карточка при уходе со страницы перемонтируется, её локальная вкладка сбрасывается — восстановление вкладки отдельно не принято.
|
||||
|
||||
23 профильных main прошли; единственный сбой нового pin-сценария был неверным selector теста (row key home::community::index); исправлен, финальный suite8/8 passed.8/8 backend/mode context, TypeScript без incremental/полный ESLint страницы/компонента/тестов/production build прошли.1000 home-router/179347 bytes →5 cards/1870 page DOM/1606ms dev ready вместо40668/11496ms. Проверены page200/refresh, search1000/reload/back/keep/server, cache503/full snapshot, shrink1000→1/URL clamp, pin Community→page2→page1,320px/HTML pagination44px/axe. [Профиль](ux-ui/acceptance/optimizer-homes-pages-2026-10-04.json), [320px](ux-ui/screens/optimizer-homes-pages-320.png) сохранены и просмотрены. Dev latency не production benchmark; native OSPF device select всё ещё содержит1000 options.
|
||||
|
||||
Следующий12.3.56: полный профиль WAN10×JH10×Exit10/1000 routes и раскрытой таблицы. WAN matrix columns/полный расчёт combinatorics и24 commRecs остаются самостоятельными ограничениями.8 specialized manualPagination:true остаются. Общая регрессия после delta и внешняя12.5 отдельно. Локальный коммит без push.
|
||||
|
||||
## 12.3.54 — исходный профиль домашних устройств оптимизатора (2026-10-04)
|
||||
|
||||
Полный optimizerServersSchema1000 home-router/179347 bytes, без подтверждённых WAN/probes/filters.1/1 browser и ESLint теста прошли.1000 HomeRouterCard/40668 page DOM/11496ms dev ready; document320px не шире viewport. [Профиль](ux-ui/acceptance/optimizer-homes-baseline-2026-10-04.json), [исходный320px](ux-ui/screens/optimizer-homes-baseline-320.png) сохранены. Это baseline, не приёмка производительности; dev latency не production benchmark. Нет WAN — это валидная live ветка, не подмена неизвестных данных нулями. Продуктовый код не менялся, build повторно не нужен.
|
||||
|
||||
Следующий12.3.55: ограниченный DOM HomeRouterCard/поиск полного каталога/URL/refresh/clamp/320px. Расчёт полного массива остаётся отдельным CPU риском; раскрытые full-routes и WAN dynamic columns требуют других профилей. Общая регрессия и внешняя12.5 отдельно. Локальный коммит без push.
|
||||
|
||||
## 12.3.53 — большой OSPF preview оптимизатора (2026-10-04)
|
||||
|
||||
Штатные ReUI pages50/client sorting/clamp и ScrollArea, закреплённый interface120px оставляет место cost на320px. Именованная область preview включает поиск полного массива id/interface, полные counts и явное пояснение, что фильтр меняет только отображение. Контекстный key server/weight сбрасывает поиск/страницу при смене устройства; фоновый refresh сохраняет их. Применение не использует фильтр/видимую страницу, существующий POST pingWeight и строгий receipt сохранены.
|
||||
|
||||
47/47 профильных main,16/16 final preview/large/new context-search и8/8 backend/mode context прошли.1000 interfaces/245293 JSON bytes →50 rows/924 preview region DOM/1610 page DOM. Search ether1000→1 row/receipt1000 applied; Cost sort full array, page2/refresh/cache503/disabled apply/shrink1000→1/server+keep,320px/pinning/axe, смена server очищает no-match query. TypeScript без incremental/полный ESLint grid/page/двух тестов/production build прошли. [Профиль](ux-ui/acceptance/optimizer-ospf-preview-2026-10-04.json), [320px](ux-ui/screens/optimizer-ospf-preview-320.png) сохранены и просмотрены. API fixture receipt исправлен по существующему контракту currentCost=from; контракт не ослаблен. Это проверка HTTP live-ветки с подменёнными ответами, не реальное применение RouterOS. Полный массив остаётся в памяти.
|
||||
|
||||
Осталось8 manualPagination:true specialized grids. Следующий12.3.54 — исходный профиль1000 HomeRouterCard с полным servers DTO; затем bounded cards/full-route/wan-matrix, честность24 commRecs. Общая main/context после delta и внешняя12.5 отдельно. Локальный коммит без push.
|
||||
|
||||
## 12.3.52 — читаемые параллельные связи OSPF (2026-10-04)
|
||||
|
||||
TopologyGraph группирует видимые edges по неориентированной паре: одна линия/подпись количества на страницу, отдельные cost/state каждой связи в SVG title и accessible name. Для разных состояний нейтральный цвет, dashed без Full-анимации; Unknown не подставляется. Статусы узлов остаются по всем edges. Групповая подпись читается без hover; единственный peer расположен сбоку, подпись не накладывается на узел. Full table и node details доступны для просмотра всех связей.
|
||||
|
||||
9/9 browser (large topology/details/identity/states/layout/keyboard/reduced motion) и финальный parallel1/1 прошли.1000 links between2 nodes, page8 links →одна visual group, aria-label Full/cost1 и Down/cost2, подпись8 связей. TypeScript без incremental/ESLint страницы/scope/теста и окончательный production build прошли. [Группировка1440px](ux-ui/screens/ospf-parallel-links-1440.png) сохранена и просмотрена; PNG после проверки показал недостаточный opacity, исправлен и повторно проверен.
|
||||
|
||||
Следующий12.3.53: OSPF preview оптимизатора1000 rows/полная apply-ветка при pagination/search; затем матрицы и many HomeRouterCard.9 manualPagination:true specialized grids остаются. Общая main/context регрессия после delta и внешняя12.5 отдельно. Локальный коммит без push.
|
||||
|
||||
## 12.3.51 — большие детали узла OSPF (2026-10-04)
|
||||
|
||||
OspfDetailList: client pages50 отдельно для соседей/интерфейсов, поиск всего списка по peer/Router ID/interface/state и interface/area/cost; full counts сохраняются. Refresh не сбрасывает ручную страницу, shrink ограничивает её, новый nodeId пересоздаёт контекст списка. Close44px, Escape/focus прежние; сетевые правила не изменены.
|
||||
|
||||
4/4 large,15/15 profile keyboard/layout/URL/state/identity и финальный detail1/1 прошли. Полный fixture1000 neighbors/1000 interfaces →50+50 записей/635 panel DOM/2335 page DOM для URL node=1. Поиск ether1000/полный cost1000, no-match, page2/refresh, shrink1000→1/keep/node,320px/кнопки44/axe проверены. TypeScript без incremental, полный ESLint страницы/компонента/теста и production build прошли. [Профиль](ux-ui/acceptance/ospf-detail-2026-10-04.json), [панель320px](ux-ui/screens/ospf-large-detail-320.png) сохранены и просмотрены. Каталог не обрезается в памяти.
|
||||
|
||||
Следующий12.3.52: визуальная группировка параллельных links без подмены cost/state; затем optimizer и общая регрессия после всех delta.9 specialized manualPagination:true остаются. Внешние RouterOS/PG/интеграции12.5 не проверены. Локальный коммит без push.
|
||||
|
||||
## 12.3.50 — ограниченный срез topology OSPF (2026-10-04)
|
||||
|
||||
OspfTopologyScope использует полный источник: до8 incident edges/9 SVG nodes, focal выбранного URL узла или первого устройства, pagination/clamp/сброс при смене focal, точные полные counts, поиск всех узлов с пятью результатами. Малый граф до12 узлов/12 связей сохраняет прежнюю композицию; 1000 параллельных связей между двумя узлами тоже включают ограничение. Полный nodeState вычисляется по всем edges, а не видимой странице. Close возвращает фокус к узлу или поиску, если узел исчез из среза. KPI1000 на320px не дробится, HTML-кнопки выбора/pages/animation44px.
|
||||
|
||||
26/26 профильных main,8/8 context и финальные3/3 large прошли. Fixture1000 neighbors/1000 interfaces/1001 nodes/583875 bytes →50 rows/2 SVG nodes/27 descendants/1630 page nodes/1531ms dev ready для URL remote1000. Проверены page2/clamp после уменьшения1000→13→12, полная hidden Full-связь при первых Down, выбор remote1000 из всего каталога/keep, close/focus,320px/axe, bounded parallel1000. TypeScript без incremental, ESLint страницы/компонента/теста и production build прошли. [Профиль](ux-ui/acceptance/ospf-topology-scope-2026-10-04.json), [срез1440px](ux-ui/screens/ospf-topology-scope-1440.png), [320px](ux-ui/screens/ospf-topology-scope-320.png) сохранены и просмотрены. Dev latency не production benchmark. На большой топологии SVG доступен через горизонтальный scroll; все узлы доступны через поиск.
|
||||
|
||||
Это не приёмка всех вариантов графа: параллельные edges ограничены по DOM, но их подписи на общей линии могут перекрываться. Большая NodeDetailPanel ещё рендерит все1000 neighbors/interfaces — следующий12.3.51. Затем параллельные связи/optimizer/общая main-context регрессия после delta.9 manualPagination:true specialized grids остаются. Внешние RouterOS/PG/интеграции12.5 не проверены. Локальный коммит без push.
|
||||
|
||||
## 12.3.49 — большая таблица соседей OSPF (2026-10-04)
|
||||
|
||||
|
||||
Reference in new issue
Block a user