1689 lines
552 KiB
Markdown
1689 lines
552 KiB
Markdown
# MCP для MikrotikManager — итоговый план реализации
|
||
|
||
Актуально на 3 ноября 2026. **Полный план не завершён: открыты семь направлений.** Проверенного общего процента и точного числа оставшихся независимых задач нет. [Текущий статус](mcp-current-progress.json) · [Доказательства](mcp-evidence-statistics-20261101.md).
|
||
|
||
Последние завершённые работы:
|
||
|
||
- **Новые текущие результаты:** Linux POSIX/SQL-приёмка обслуживания БД завершена для loopback и TLS:16 сценариев, исходные сервисы сохранены и пакет удалён. В исходниках закрыт повторный допуск запросов после неопределённого restore;13 постоянных lifecycle/HTTP-проверок и сборка прошли. Текущий reader топологии принят на обоих CHR:90 GET, положительный следующий шлюз и сохранность17 разделов на каждом; исправлен фактический REST-формат FIB switch. Это не полная рекурсивная цепочка, BGP origin, forwarding или вся двухузловая схема. [Linux](mcp-linux-maintenance-resolution-acceptance-20261103.json) · [Допуск БД](mcp-database-live-admission-source-applied-20261103.json) · [Два CHR](mcp-two-chr-current-reader-acceptance-20261103.json).
|
||
- **EXT-2 — внешние MCP-клиенты — закрыт по исходному требованию.** Настоящий Inspector HTTP/stdio, OAuth PKCE, refresh/replay, rotation/revoke/reconnect, ограничения схем/результатов и изоляция от REST/admin проверены. Все363 описания инструментов проверены для двух согласованных версий протокола. [Приёмка](mcp-external-clients-completion-20261103.json). В EXTERNAL-UI остаются EXT-1, UI-1, UI-2 и RAM-1.
|
||
- **Текущий оператор БД функционально принят на Linux:** preflight, подписанный профиль/current44, TLS/POSIX и сверка после потери подтверждения COMMIT без приватного ключа и при истёкшем исходном разрешении. Потеря подтверждения моделировалась на уровне приложения. Ресурсная часть отказала из-за роста swap. Использован один из трёх разрешённых прогонов; повтор успешного функционального сценария не нужен. [Отчёт](mcp-publisher-current-operator-linux-acceptance-20261103.json). Production writer/generation/READY этим не выдаются.
|
||
- **Готовый оператор включён в Docker-сборку:** 17 модулей оператора и9 модулей backend; TypeScript/tsx во время выполнения не нужны. Сборка backend и две проверки артефакта на Node22 прошли. [Проверки](mcp-operator-build-ci-source-applied-20261103.json).
|
||
- **Два очищенных снимка опубликованы с явного согласия пользователя.** Только отдельные ветки codex/mcp-acceptance-clean-20261103, без родительской истории и локальных настроек. В4146 файлах предоставленных паролей нет. Preview CI backend/frontend прошёл; для каждого образа проверены digest, Linux/amd64 и квитанция всех3835 Git-объектов. Портал также успешно собран: прогон2586, попытка2, вручную запущенная пользователем; первая попытка отменена. Для него проверены311 Git-объектов и отдельный OCI digest. Все три Linux-образа готовы, повторных запусков агент не отправлял. [Публикация и текущие CI-доказательства](mcp-preview-publication-20261103.json). Основные ветки/latest/действующие сервисы не являются целью этих workflows.
|
||
- **Portal sender/outbox → настоящий TLS → MCP receiver/собственная PG принят на синтетическом стенде.** Каталог прав портала и его сборка также проверены. Это не приёмка действующего портала или полного браузерного потока. [Sender](mcp-portal-sender-genuine-acceptance-20261103.json) · [Каталог](mcp-portal-permission-catalog-build-20261103.json).
|
||
- **Для проверки всей установки только чтением зафиксированы четыре исходных контейнера:** точные ID/image, состояние/health, restart policy и контрольные суммы конфигурации/томов/сетей. У действующих контейнеров Docker Memory/MemorySwap равны нулю; планируемые caps не являются текущими настройками. Новый кандидат backend512/PG320/frontend160/portal256 МиБ + резерв672 МиБ основан на дополнительном замере памяти ядра; сумма1920 МиБ, остаток около54 МиБ. Прежний вариант384/160/512 сохранён как исторический. Работа под нагрузкой не принята. [Исходный стенд](mcp-whole-installation-baseline-ledger-20261103.json). Компонент восстановления четырёх сервисов прошёл семь локальных fault-проверок; подключение к существующему управляющему процессу подготовлено и проверено локально; последующие прогоны старого снимка восстановили исходные сервисы, но smoke/full не приняты; текущему коду ещё нужна полная приёмка установки. [Компонент](mcp-four-service-recovery-component-20261103.json).
|
||
|
||
Дальнейшая очередь:
|
||
|
||
1. Завершить исполняемый пакет frontend/backend+MCP/PostgreSQL для сервера с 2 ГБ; портал работает отдельно. Сохранить проверку настоящего входа/прав и полный сценарий UI/MCP/нагрузки, не останавливая исходный портал стенда.
|
||
2. Завершить all-writer/source-generation lifecycle БД и production admission. Подписанный профиль, preflight и упаковка оператора не заменяют эти требования.
|
||
3. Продолжить разбор POLL336. NORMAL V10 завершился STATE_UNAVAILABLE после68 операций; причина исторического отказа не доказана. На отдельном настоящем PG воспроизведён timeout глобальной storage-lock за5039мс; закрытая диагностика включена в исходники. Это механизм отказа, а не доказанное исправление V10. Новый полный прогон без изменения причины не запускается. [Диагностика](mcp-poll-storage-lock-diagnostic-source-applied-20261103.json).
|
||
4. Закрыть ROUTING/NATIVE/PATHS/EXTERNAL-UI и итоговую интеграцию по исходным требованиям. Доступны только два CHR и REST /log; третий независимый узел и полнота событий ими не подтверждаются. Публичное autoRecovery выключено. Установка MikrotikManager + MCP + PostgreSQL ≤2 ГБ остаётся открытым требованием; отдельный сервер портала в этот бюджет не входит.
|
||
|
||
Ранее приняты текущие44 миграции/137 primary-групп, настоящее encrypted restore/tamper и natural archive, составное покрытие38 профилей/VRF68, миллион строк журнала, UI подтверждения плана и настоящее15-минутное истечение файла с полным завершением Job. Это отдельные результаты, не доказательство полного завершения. Широкие успешные проверки без изменений не повторяются.
|
||
|
||
В публичной main обнаружен ранее предоставленный тестовый пароль CHR в локальном агентском конфиге. Старые содержащие его снимки не публиковались; новые коммиты созданы без этой истории. Смена действующего доступа и очистка старой публичной истории ещё не выполнялись.
|
||
|
||
[Подготовлен конкретный четырёхсервисный кандидат](mcp-whole-installation-compose-candidate-20261103.json), привязанный к трём проверенным Linux-образам и точному существующему образу PG. TLS уведомлений портала работает внутри основного backend-потока/его512 МиБ, без пятого контейнера. Настоящий Node22 Worker подтвердил, что preload в рабочих потоках не читает ключи и не создаёт повторный listener. Контейнеры не запускались. Новые синтетические credentials/certificates, проверка собственных пустых томов/портов и связанный UI/workload ещё готовятся.
|
||
|
||
[Измерена память ОС только чтением](mcp-whole-installation-host-memory-20261103.json): PSS процессов вне четырёх исходных контейнеров около519 МиБ, в том числе Docker около372 МиБ; включён кратковременный наблюдатель, ядро и файловый кеш сюда не входят. Дополнительный замер PSS и выбранных расходов ядра дал586.54 МиБ; новый плановый резерв672 МиБ учитывает управляющий процесс и оценку Docker CLI. Это не подтверждённый эксплуатационный бюджет. Настройки Docker, исходные контейнеры и рабочая БД не менялись.
|
||
|
||
[Проверен staged parent восстановления четырёх сервисов](mcp-four-service-parent-review-20261103.json): после выхода управляющего процесса числовые идентификаторы оставшихся процессов только наблюдаются; недоказанная принадлежность запрещает сигналы, восстановление и очистку. До подтверждённого завершения дочерней группы исходные ресурсы не затрагиваются. После правки прошли три затронутые проверки; предыдущие16 компонентных результатов сохранены отдельно. Запуск parent остаётся отключённым до подготовки полного пакета.
|
||
|
||
[Продолжена подготовка единого пакета](mcp-whole-installation-package-preparation-20261103.json): созданы закрытые синтетические inputs/CA, проверено анонимное чтение трёх образов; локальные проверки ограниченного файлового транспорта прошли. Новый [кандидат профиля](mcp-whole-installation-measured-profile-candidate-20261103.json) сохраняет все четыре сервиса при сумме1920 МиБ. Controller/workload/UI ещё staged; полный сценарий не исполнялся и пакет для окна пока не готов.
|
||
|
||
|
||
**Уточнение топологии от пользователя:** портал установлен на отдельном сервере. В бюджет MikrotikManager + MCP входят frontend, backend и PostgreSQL; прежний четырёхсервисный кандидат сохранён как история. Новый расчёт: 992 МиБ caps приложения + 672 МиБ резерв = 1664 МиБ, около310 МиБ остатка на измеренном хосте. Это расчёт, не принятая нагрузка. Вход, права и уведомления портала остаются в интеграционной проверке; повторная полная оценка памяти портала не требуется. [Точная граница](mcp-separated-portal-topology-20261103.json).
|
||
|
||
|
||
**Текущее определение источника маршрутов проверено на PostgreSQL:** 14 SQL/HTTP-сценариев, 126 запросов без native writes; настоящий encrypted dump/restore и отказ подменённому архиву прошли. Исправлены только временные метки тестового сценария, production-проверки не ослаблялись. Проверки parser/assembly: 88 прошли. Реальные маршрутизаторы и полноту событий это не подтверждает. [Приёмка](mcp-native-route-origin-sql-acceptance-20261103.json).
|
||
|
||
|
||
**Архив приёмки собран:** 26 файлов, 63829 байт; все хеши, состав и Unix-права проверены независимо. Он останавливает/восстанавливает только исходные frontend/backend/PostgreSQL; исходный портал не меняется. Собственный синтетический Portal сохранён как вспомогательная нагрузка, его память из наблюдений не вычитается. Внешний coordinator связан с браузером и серверным launcher: восемь локальных проверок прошли, при неизвестном результате каналы мониторинга сохраняются. Загрузки или удалённого запуска не было. [Точный пакет](mcp-manager-operating-package-20261103.json).
|
||
|
||
|
||
**Разрешённая operating-приёмка завершилась отказом:** использованы три подготовки и одно окно остановки manager. Две preflight-ошибки исправлены; третий прогон остановился при старте Compose до smoke/full. Исходные ID/config/mount/host/restart policy восстановлены, frontend307/backend200/portal200 и PostgreSQL healthy проверены независимо, собственные ресурсы удалены. Legacy-сверка отказала из-за динамического сетевого хеша трёх перезапущенных сервисов; исходный портал совпал полностью. Новый запуск не разрешён использованным grant. [Точные результаты и границы](mcp-manager-operating-attempts-20261103.json).
|
||
|
||
**Дополнительно реализованы:** защищённый read-компонент реестра источника БД включён в18-модульный deploy artifact (9 focused + Node22 artifact checks прошли; настоящий Linux POSIX ещё не принят). SQL-профиль маршрутизации принял24 прежние группы и новую гонку forward/manual inverse за общий последний слот; проигравший не получил operation/charge и не списал бюджет. [БД](mcp-protected-source-registry-component-20261103.json) · [Маршрутизация](mcp-routing-mixed-admission-20261103.json).
|
||
|
||
|
||
**Исправления после отказа подготовлены локально:** сеть намерений отделена от динамических адресов (7 mock-проверок + новый настоящий GET-only снимок); ранний UI cleanup сохраняет наблюдение восстановления без fixture (7 pure-проверок); bounded private диагностика вызывается до очистки own-контейнеров (8 локальных проверок). Это будущие компоненты, не принятая повторная приёмка и не готовый следующий пакет. Причина фактического cold-start пока не доказана. [Follow-up](mcp-operating-recovery-followup-20261103.json).
|
||
|
||
|
||
**Следующий пакет уже собран из связанного кода:** новый instance и синтетические ключи, 27 файлов/68937 байт. Реально подключены v2 ledger/restorer, создание вложенной mountpoint до Docker create и сбор закрытой диагностики до удаления контейнеров; новый координатор сохраняет её до удаления серверного каталога. Проверены55 offline host checks,14 контрактов координатора и2 прямых cross-component случая; числа имеют пересекающиеся области и не складываются в общий счётчик. Лимиты/нагрузка/образы прежние, runtime не выполнялся. [Пакет](mcp-operating-next-package-20261103.json).
|
||
|
||
|
||
**Следующий реальный прогон запустил все четыре own-сервиса:** они работали без наблюдаемого OOM, v2 восстановил исходные сервисы и сеть намерений; own-ресурсы удалены. Smoke/full не начались: Playwright использовал TEMP родительского Node и попал под строгий browser-temp guard. Исправление принято отдельным настоящим Edge smoke:2 контекста, kernel0, handles освобождены и исходный owner очистил каталог. Исправлена и гонка позднего parent completion. [Прогон](mcp-operating-next-run-20261103.json) · [Настоящий браузер](mcp-ui-parent-temp-native-acceptance-20261103.json).
|
||
|
||
**Подготовка последнего пакета:**27 файлов/68933 байта, свежий baseline/instance, native-проверенный UI и15 локальных driver checks. Независимое review не нашло конкретного блокера; затем пользователь разрешил один прогон. Это разрешение использовано, результат приведён ниже. [Точный пакет](mcp-operating-browser-fixed-package-20261103.json). За время ожидания protected registry подключён к настоящей read-only команде preflight:29 selected checks и Node22 artifact passed; Linux/READY/all-writer по-прежнему не приняты. [Preflight](mcp-protected-registry-preflight-source-applied-20261103.json).
|
||
|
||
|
||
**Последний разрешённый прогон выполнен:** пакет512529 запустил четыре собственных сервиса без наблюдаемого OOM; настоящий Edge успешно запущен и завершён. UI остановился до проверки учётных данных: SSH-туннель получил Connection refused от тестового Portal endpoint. Внутренний bootstrap портала прошёл; причина host port publishing пока не доказана. Исходные сервисы восстановлены с v2-проверкой, собственные серверные ресурсы удалены, закрытая диагностика сохранена. Локальный каталог UI также точно очищен после сохранения доказательств; процессы завершены, дескрипторы освобождены. Разрешение на один прогон использовано. Smoke/full и вся установка ≤2 ГБ не приняты. Следующий шаг — проверка опубликованных портов и HTTP через туннель до запуска браузера. [Результат](mcp-operating-browser-run-20261103.json).
|
||
|
||
|
||
**Защита запуска после прерванного восстановления БД включена в исходники:** проверка внешнего журнала и квитанций выполняется до SQL/миграций/задач. Неопределённая история блокирует старт без повторения restore; завершение ядра не подтверждает импорт аудита или готовность схемы. Профиль system-database и сборка backend прошли; новые проверки:15 passed,1 skip из-за запрета создания hardlink. Проверка фактического прерывания PostgreSQL, разрешение заблокированной истории и общий DB lifecycle остаются открыты. Опубликованные preview-образы этого изменения ещё не содержат, деплоя нет. [Проверки и границы](mcp-maintenance-startup-source-applied-20261103.json).
|
||
|
||
|
||
**Исправление тестового туннеля подготовлено локально:** прежние адреса браузера сохранены; SSH обращается к проверенным адресам собственных контейнеров внутри изолированной сети. Перед planned restart блокируются новые подключения и ожидается подтверждение, после — повторно проверяются ID/сеть/адрес.15 mock-проверок прошли, включая настоящий код обработчика с управляемой гонкой подключения/ACK. Это ещё не связанный пакет или приёмка реального туннеля; новый архив не собран, разрешение не расширено. [Кандидат и границы](mcp-own-web-transport-candidate-20261103.json).
|
||
|
||
|
||
**Туннель подключён к новому связанному пакету:** свежий GET-only baseline9122;29 файлов/31 tar member, новые синтетические учётные данные и TLS. Проверены host/bridge/coordinator и реальные точки bootstrap/restart с моделируемым внешним исполнением; запускатель принял19 локальных проверок, независимое review не выявило блокеров. Старое разрешение отклоняется, новое false/0. Пакет не загружался. Он пока с прежними bf3d-образами, поэтому для окончательной приёмки текущего кода требуется свежая preview-сборка после завершения переноса restore-квитанций в аудит. [Пакет и точные границы](mcp-routed-operating-package-20261103.json).
|
||
|
||
|
||
**Квитанция восстановления → аудит подключена к исходникам:** живой restore и startup используют общий idempotent importer; сбой аудита не меняет подтверждённый исход restore, потеря COMMIT ACK требует новой READ-first сверки. Неизвестный исход блокируется до SQL, историческому событию не приписывается выдуманный человек. Профиль system-database, build и покрытие263 REST-маршрутов прошли:200 mediated/63 control-plane excluded/0 pending.26 новых файловых/SQL-model проверок прошли,1 hardlink skip. Настоящий PG-прогон не принят: отказ setup до первого завершённого case; точные тестовые процессы и каталог независимо очищены, дефект Windows test-runner исправляется отдельно. Общий DB lifecycle и явное разрешение исторических unknown остаются открыты. [Проверки и границы](mcp-restore-audit-source-applied-20261103.json).
|
||
|
||
|
||
**Настоящая PG/HTTP-приёмка импорта restore-аудита пройдена:** current44,7 сценариев: конкурирующие транзакции дают одну запись; потеря ответа после настоящего COMMIT не создаёт дубль; read-only/retention/conflict/JWT-admin и отказ unknown до SQL проверены. Native stop завершился штатно, actual child/внешний процесс0, потомки и порт проверены, точный каталог удалён.2018 source/emitted входов не изменились. Это не приёмка настоящего портала, аварийного psql restore или разрешения исторических unknown; полный DB остаётся открыт. [Доказательства](mcp-restore-audit-genuine-acceptance-20261103.json).
|
||
|
||
|
||
**Уточнён порядок приёмки пользователем:** память и нагрузка проверяются на Linux VPS MikrotikManager, целевая установка максимум2 ГБ; портал отдельно. Windows-проверки — только функциональные, не приёмка вместимости или производительности VPS. Сначала завершается текущая схема с двумя CHR; затем нужно попросить пользователя о доступе к третьему узлу, который он предоставит для следующего этапа. Анализ QEMU прекращён, установка VM не планируется. Исходное требование трёхузловой проверки сохранено.
|
||
|
||
|
||
**Уже запущенная локальная функциональная проверка poll/compactor завершена:** один настоящий MCP-source,4 localhost GET, естественное истечение исходного допуска, один compactor и read-back исходного журнала/архива; конкурирующая storage-транзакция завершилась, PG blocker наблюдён. Процесс0, PostgreSQL и точный каталог очищены. Это не измерение RAM/производительности VPS и не воспроизведение62 архивов V10;336 остаётся открыт. Дальнейшая нагрузочная приёмка — на Linux VPS. [Функциональное доказательство](mcp-poll-compactor-local-functional-20261103.json).
|
||
|
||
|
||
**Проверка эффекта переключения включена в исходники:** 69 компонентных проверок, существующий native-readers, сборка и lint прошли. Исполнение revision3 сохраняет подписанное наблюдение до PATCH и два после записи; неизвестный результат или отсутствие фактической смены endpoint запрещают продвижение baseline. Обычный ручной revision2 и автоматический scoped scheduler ещё не активированы; исходный защитный запрет сохранён. Настоящая SQL/runtime-приёмка подготовлена, но пока не выполнена. [Отчёт](mcp-routing-original-effects-source-applied-20261103.json).
|
||
|
||
**OAuth включён в общий барьер обслуживания БД:** шесть настоящих Fastify-проверок и весь существующий профиль system-database прошли; discovery остаётся доступным. Это функциональные проверки, не Linux-приёмка текущего образа. [Отчёт](mcp-oauth-database-admission-source-applied-20261103.json).
|
||
|
||
|
||
**Закрыты два обхода барьера БД:** detached cleanup теперь удерживает допуск до завершения SQL даже после окончания родительского обработчика, а terminal restore получает exclusive до первого SQL. Девять новых регрессий, 25 существующих проверок, system-database, сборка и lint прошли. Отказавший вариант с одной boolean-проверкой не включался. Настоящая Linux/PG-приёмка текущего кода остаётся отдельным этапом. [Отчёт](mcp-detached-database-admission-source-applied-20261103.json).
|
||
|
||
|
||
**Linux-компоненты маршрутизации приняты:** три genuine SQL/runtime-сценария эффекта и18 SQL/HTTP-сценариев чтения, включая4 публичных Bearer/runtime topology группы. Read-only этап выполнил151 запрос без native writes и сохранил точный SQL JSON inventory трёх настоящих checkpoints. Ответы RouterOS в этих сценариях синтетические localhost; реальные два CHR проверены отдельно reader-приёмкой. Public manual revision2 и scoped scheduler не активированы, autoRecovery выключено. Terminal restore реально дошёл до applied и отзыва токенов, но тест stale callback успел запросить exclusive до завершения прежнего owner и получил409. Тест исправлен на ограниченное ожидание фактического освобождения барьера после applied/blocked. Прежние разрешённые прогоны использованы; готовится отдельная оставшаяся restore-only приёмка, без повторения успешных routing-групп. [Эффекты](mcp-linux-original-effects-acceptance-20261103.json) · [Чтение](mcp-linux-routing-native18-acceptance-20261103.json) · [Попытки](mcp-linux-routing-effects-attempts-20261103.json).
|
||
|
||
<!-- CURRENT_MCP_PLAN_STATUS_END -->
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards, ограниченная выдача крупных полей журнала MCP и durable forward-charge с миграцией43. [Текущая локальная приёмка](mcp-current43-regression-restore-acceptance-20261101.json) прошла:38 профилей (36 +2 после test-only corrections),68 VRF-групп, текущие schema/data/control SQL lanes и настоящее primary encrypted restore/tamper. Полная промышленная/сетевая/UI-приёмка всего плана этим не подтверждена.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Новый capacity336 после принятого natural-expiry smoke, затем faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [Logs lifecycle](mcp-logs-live-reset-acceptance-20261101.json):1 настоящий SQL/auth/HTTP/SSE-сценарий, два пассивных подписчика по5201 записи, actual UI merge5000. Раздельно доказаны manual response close, maintenance reset/EOF без клиентского abort, drain и новая история после gate release. Все ресурсы очищены; browser/mounted hook, миллион логов и весь UI-2 этим не приняты.
|
||
- [Подписанный профиль БД](mcp-db-protected-profile-issuer-acceptance-20261101.json):5 настоящих SQL-групп на PG18.4,42 миграции, реальный flow engine/live pair, future leaf/CAS/истечение срока/tamper/lost COMMIT ACK без повтора. Raw hashes/завершение процессов/удаление собственной БД проверены. Это ограниченный staged component114 tables: production host/каталог/стоимость/all-writer/READY ещё не приняты. [Точные остатки и выявленные ограничения](mcp-db-profile-issuer-production-map-20261101.md): штатный warmup2193constraints уже превышает старый cap2048; перенос без paging и проверки стоимости не выдаётся за готовность.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336 v5:** running; на момент 2026-11-01T07:20:23.280Z создано 82 операций, подтверждено 75/336 архивов. Новый независимый прогон использует замороженную Windows-сборку с42 миграциями и естественное истечение допуска; это не проверка будущей43 миграции, Linux или всей установки≤2GB. [Предварительный настоящий smoke](mcp-poll-capacity336-v5-smoke-acceptance-20261101.json) принят:2 операции,1 архив,8 native GET,0 ошибок обработчика, PostgreSQL остановлена и собственные ресурсы удалены. [Предыдущий отказ v4](mcp-poll-capacity336-v4-refusal-20261101.json) сохранён отдельно; его неизвестный результат не повторяется.
|
||
|
||
**Новые промежуточные результаты:** [durable forward-charge](mcp-routing-forward-charge-source-applied-20261101.json) подключён цельным патчем16 файлов с миграцией43 после6 настоящих SQL/HTTP-групп на штатном пути миграции. Build0, manifest20, controlled migration14 и routing model9 PASS. [Непустой backup/restore](mcp-routing-forward-restore-partial-acceptance-20261101.json) сохраняет charge/HMAC; [после принудительного перезапуска](mcp-routing-forward-charge-forced-restart-scoped-20261101.json) charge/op/debit/HMAC и все строки таблиц равны, но строгое полное сравнение отказало из-за2/7 sequence digests (направление/причина не измерены). Исправление трёх UUID seed-предикатов прошло unit8/build/lint/reference11 + encrypted restore/tamper; происхождение UUID не аттестовано, READYfalse. [Отдельный независимый reference43](mcp-db-explicit43-reference-data-acceptance-20261101.json) создан и проверен как TEST DATA103 bases/14 new constraints; production issuer не включён. Cost run сначала отказал на необязательной memory-диагностике42501 без расширения grants; готовится повтор без неё. Mounted artifact journey: public Next и настоящий backup producer прошли, browser provider отказал; затем отдельный Edge preflight прошёл с actual root/tree/close/cleanup. Полный download/revoke ещё не выполнен; один старый owned-каталог сохранён из-за неполного доказательства browser cleanup.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **paged TypeScript-каталог БД → durable forward-charge/общий routing ledger → mounted artifact download/revoke**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Новый capacity336 после принятого natural-expiry smoke, затем faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [Logs lifecycle](mcp-logs-live-reset-acceptance-20261101.json):1 настоящий SQL/auth/HTTP/SSE-сценарий, два пассивных подписчика по5201 записи, actual UI merge5000. Раздельно доказаны manual response close, maintenance reset/EOF без клиентского abort, drain и новая история после gate release. Все ресурсы очищены; browser/mounted hook, миллион логов и весь UI-2 этим не приняты.
|
||
- [Подписанный профиль БД](mcp-db-protected-profile-issuer-acceptance-20261101.json):5 настоящих SQL-групп на PG18.4,42 миграции, реальный flow engine/live pair, future leaf/CAS/истечение срока/tamper/lost COMMIT ACK без повтора. Raw hashes/завершение процессов/удаление собственной БД проверены. Это ограниченный staged component114 tables: production host/каталог/стоимость/all-writer/READY ещё не приняты. [Точные остатки и выявленные ограничения](mcp-db-profile-issuer-production-map-20261101.md): штатный warmup2193constraints уже превышает старый cap2048; перенос без paging и проверки стоимости не выдаётся за готовность.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336 v5:** running; на момент 2026-11-01T04:26:00.098Z создано 8 операций, подтверждено 0/336 архивов. Новый независимый прогон использует замороженную Windows-сборку с42 миграциями и естественное истечение допуска; это не проверка будущей43 миграции, Linux или всей установки≤2GB. [Предварительный настоящий smoke](mcp-poll-capacity336-v5-smoke-acceptance-20261101.json) принят:2 операции,1 архив,8 native GET,0 ошибок обработчика, PostgreSQL остановлена и собственные ресурсы удалены. [Предыдущий отказ v4](mcp-poll-capacity336-v4-refusal-20261101.json) сохранён отдельно; его неизвестный результат не повторяется.
|
||
|
||
**Новые промежуточные результаты:** [durable forward-charge](mcp-routing-forward-charge-source-applied-20261101.json) подключён цельным патчем16 файлов с миграцией43 после6 настоящих SQL/HTTP-групп на штатном пути миграции. Build0, manifest20, controlled migration14 и routing model9 PASS. Расширенная SQL-проверка выявила прежний пробел учёта случайных UUID миграции42: [исправлены три строго заданных seed-предиката](mcp-controlled-seed-epoch-source-applied-20261101.json), unit8/build/lint PASS, настоящий reference11 + encrypted restore/tamper PASS; происхождение UUID остаётся недоказанным, READYfalse. Общая текущая проверка миграций/restore/38 профилей/primary выполняется; прежние42 issuer-артефакты не подтверждают43/READY. Mounted artifact journey: второй запуск прошёл настоящую Next-сборку и MCP backup producer/один настоящий pg_dump, затем отказал на загрузке Next runtime config; browser/download/revoke не выполнялись, ресурсы очищены. Исправление клиентского preflight принято отдельно, исследуется config-only причина без повторного backup.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **paged TypeScript-каталог БД → durable forward-charge/общий routing ledger → mounted artifact download/revoke**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Новый capacity336 после принятого natural-expiry smoke, затем faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [Logs lifecycle](mcp-logs-live-reset-acceptance-20261101.json):1 настоящий SQL/auth/HTTP/SSE-сценарий, два пассивных подписчика по5201 записи, actual UI merge5000. Раздельно доказаны manual response close, maintenance reset/EOF без клиентского abort, drain и новая история после gate release. Все ресурсы очищены; browser/mounted hook, миллион логов и весь UI-2 этим не приняты.
|
||
- [Подписанный профиль БД](mcp-db-protected-profile-issuer-acceptance-20261101.json):5 настоящих SQL-групп на PG18.4,42 миграции, реальный flow engine/live pair, future leaf/CAS/истечение срока/tamper/lost COMMIT ACK без повтора. Raw hashes/завершение процессов/удаление собственной БД проверены. Это ограниченный staged component114 tables: production host/каталог/стоимость/all-writer/READY ещё не приняты. [Точные остатки и выявленные ограничения](mcp-db-profile-issuer-production-map-20261101.md): штатный warmup2193constraints уже превышает старый cap2048; перенос без paging и проверки стоимости не выдаётся за готовность.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336 v5:** running; на момент 2026-11-01T04:26:00.098Z создано 8 операций, подтверждено 0/336 архивов. Новый независимый прогон использует замороженную Windows-сборку с42 миграциями и естественное истечение допуска; это не проверка будущей43 миграции, Linux или всей установки≤2GB. [Предварительный настоящий smoke](mcp-poll-capacity336-v5-smoke-acceptance-20261101.json) принят:2 операции,1 архив,8 native GET,0 ошибок обработчика, PostgreSQL остановлена и собственные ресурсы удалены. [Предыдущий отказ v4](mcp-poll-capacity336-v4-refusal-20261101.json) сохранён отдельно; его неизвестный результат не повторяется.
|
||
|
||
**Новые промежуточные результаты:** [durable forward-charge](mcp-routing-forward-charge-source-applied-20261101.json) подключён цельным патчем16 файлов с миграцией43 после6 настоящих SQL/HTTP-групп на штатном пути миграции. Build0, manifest20, controlled migration14 и routing model9 PASS. Общая текущая проверка миграций/restore/38 профилей/primary выполняется; прежние42 issuer-артефакты не подтверждают43/READY. Mounted artifact journey: настоящая сборка Next прошла, первый запуск остановлен до fixture/browser из-за отсутствующего pg_dump рядом с embedded PostgreSQL; временные ресурсы очищены. Подготовлен preflight существующего проверенного клиента PostgreSQL без скачивания; новая проверка ждёт согласованного снимка исходников.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **paged TypeScript-каталог БД → durable forward-charge/общий routing ledger → mounted artifact download/revoke**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Новый capacity336 после принятого natural-expiry smoke, затем faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [Logs lifecycle](mcp-logs-live-reset-acceptance-20261101.json):1 настоящий SQL/auth/HTTP/SSE-сценарий, два пассивных подписчика по5201 записи, actual UI merge5000. Раздельно доказаны manual response close, maintenance reset/EOF без клиентского abort, drain и новая история после gate release. Все ресурсы очищены; browser/mounted hook, миллион логов и весь UI-2 этим не приняты.
|
||
- [Подписанный профиль БД](mcp-db-protected-profile-issuer-acceptance-20261101.json):5 настоящих SQL-групп на PG18.4,42 миграции, реальный flow engine/live pair, future leaf/CAS/истечение срока/tamper/lost COMMIT ACK без повтора. Raw hashes/завершение процессов/удаление собственной БД проверены. Это ограниченный staged component114 tables: production host/каталог/стоимость/all-writer/READY ещё не приняты. [Точные остатки и выявленные ограничения](mcp-db-profile-issuer-production-map-20261101.md): штатный warmup2193constraints уже превышает старый cap2048; перенос без paging и проверки стоимости не выдаётся за готовность.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336 v5:** running; на момент 2026-11-01T04:26:00.098Z создано 8 операций, подтверждено 0/336 архивов. Новый независимый прогон использует замороженную Windows-сборку с42 миграциями и естественное истечение допуска; это не проверка будущей43 миграции, Linux или всей установки≤2GB. [Предварительный настоящий smoke](mcp-poll-capacity336-v5-smoke-acceptance-20261101.json) принят:2 операции,1 архив,8 native GET,0 ошибок обработчика, PostgreSQL остановлена и собственные ресурсы удалены. [Предыдущий отказ v4](mcp-poll-capacity336-v4-refusal-20261101.json) сохранён отдельно; его неизвестный результат не повторяется.
|
||
|
||
**Новые промежуточные результаты:** durable forward-charge прошёл6 настоящих SQL/HTTP-групп на staged-коде; цельная миграция43 ещё проходит отдельную проверку. Mounted artifact journey: настоящая сборка Next прошла, первый запуск остановлен до fixture/browser из-за отсутствующего pg_dump рядом с embedded PostgreSQL; временные ресурсы очищены. Готовится исправление preflight с существующим проверенным клиентом PostgreSQL, без скачивания или изменения продукта.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **paged TypeScript-каталог БД → durable forward-charge/общий routing ledger → mounted artifact download/revoke**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Причина отказа capacity336, затем полная вместимость, faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [Logs lifecycle](mcp-logs-live-reset-acceptance-20261101.json):1 настоящий SQL/auth/HTTP/SSE-сценарий, два пассивных подписчика по5201 записи, actual UI merge5000. Раздельно доказаны manual response close, maintenance reset/EOF без клиентского abort, drain и новая история после gate release. Все ресурсы очищены; browser/mounted hook, миллион логов и весь UI-2 этим не приняты.
|
||
- [Подписанный профиль БД](mcp-db-protected-profile-issuer-acceptance-20261101.json):5 настоящих SQL-групп на PG18.4,42 миграции, реальный flow engine/live pair, future leaf/CAS/истечение срока/tamper/lost COMMIT ACK без повтора. Raw hashes/завершение процессов/удаление собственной БД проверены. Это ограниченный staged component114 tables: production host/каталог/стоимость/all-writer/READY ещё не приняты. [Точные остатки и выявленные ограничения](mcp-db-profile-issuer-production-map-20261101.md): штатный warmup2193constraints уже превышает старый cap2048; перенос без paging и проверки стоимости не выдаётся за готовность.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336:** v4-capacity-refused-terminal; создано 189 операций, подтверждено 184/336 архивов. Отказ на операции 190; точная причина не доказана. PostgreSQL остановлена, собственные данные удалены, автоматического повтора нет. [Сохранённый отказ](mcp-poll-capacity336-v4-refusal-20261101.json). Для будущего fixture добавлено ограниченное сохранение состояния/кода до cleanup; strict types и inert checks PASS. Новый336 не запускался.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **paged TypeScript-каталог БД → durable forward-charge/общий routing ledger → mounted artifact download/revoke**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Причина отказа capacity336, затем полная вместимость, faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [Logs lifecycle](mcp-logs-live-reset-acceptance-20261101.json):1 настоящий SQL/auth/HTTP/SSE-сценарий, два пассивных подписчика по5201 записи, actual UI merge5000. Раздельно доказаны manual response close, maintenance reset/EOF без клиентского abort, drain и новая история после gate release. Все ресурсы очищены; browser/mounted hook, миллион логов и весь UI-2 этим не приняты.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336:** v4-capacity-refused-terminal; создано 189 операций, подтверждено 184/336 архивов. Отказ на операции 190; точная причина не доказана. PostgreSQL остановлена, собственные данные удалены, автоматического повтора нет. [Сохранённый отказ](mcp-poll-capacity336-v4-refusal-20261101.json). Для будущего fixture добавлено ограниченное сохранение состояния/кода до cleanup; strict types и inert checks PASS. Новый336 не запускался.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **DB issuer → общий routing admission → настоящий logs/UI slice**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Причина отказа capacity336, затем полная вместимость, faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [Общий routing admission](mcp-routing-common-admission-source-applied-20261101.json):4 SQL-сценария и1 настоящий MAIN HTTP/runtime PASS. Persistent MAIN/scopedfalse используют тот же порядок profile/credential/plan locks; старый план после смены профиля отклоняется, reserved2slots/debit сохранены. Правка подключена, build/lint/48 проверок PASS. Общий ledger всех writers ещё не завершён, родительский RT-3 остаётся открытым.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336:** v4-capacity-refused-terminal; создано 189 операций, подтверждено 184/336 архивов. Отказ на операции 190; точная причина не доказана. PostgreSQL остановлена, собственные данные удалены, автоматического повтора нет. [Сохранённый отказ](mcp-poll-capacity336-v4-refusal-20261101.json). Для будущего fixture добавлено ограниченное сохранение состояния/кода до cleanup; strict types и inert checks PASS. Новый336 не запускался.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **DB issuer → общий routing admission → настоящий logs/UI slice**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**Открыто 7 направлений / примерно 32 крупных пакетов. Полный план не завершён.** Это остаток результатов, не число тестов или старых чекбоксов.
|
||
|
||
Последними этапами закрыты три пакета NATIVE: реализация VRF, локальные отказы Worker и public active NetFlow. Подключены также HTTP/STDIO terminal guards и ограниченная выдача крупных полей журнала MCP. Последняя сборка прошла; общая финальная регрессия после последних изменений ещё обязательна.
|
||
|
||
| Направление | Пакетов осталось | Следующий необходимый результат |
|
||
| --- | ---: | --- |
|
||
| POLL | 5 | Причина отказа capacity336, затем полная вместимость, faults/co-load и Linux |
|
||
| БД | 5 | Подписанный writer-profile issuer/production host; all-writer drain, generation, restore/READY |
|
||
| Маршрутизация | 5 | Общий durable admission всех writers; controller/reserved recovery и сетевые доказательства |
|
||
| VRF/VPN/NetFlow | 5 | Реальные CHR VRF/VPN traffic, exporter interoperability и recursive native acquisition |
|
||
| Независимые пути | 4 | Третий независимый узел, двусторонний traffic/failover/VRF и cleanup |
|
||
| UI / клиенты / память | 5 | Live portal/Inspector/клиенты, настоящий UI lifecycle/большие данные и вся установка≤2GB |
|
||
| Финальная интеграция | 3 | Единый snapshot, полная SQL/HTTP/restore/native/UI-приёмка и runbooks |
|
||
|
||
Последние подтверждённые результаты:
|
||
|
||
- [Public active NetFlow](mcp-flow-public-active-source-applied-20261101.json):4 настоящие группы/6 REST+MCP путей, UDP→SQL,2 непустые IPC-квитанции,4 Worker ACK+exit0. ALS fix подключён; новый regression падает на старом коде, текущие22 проверки/build/lint PASS.
|
||
- [STDIO](mcp-stdio-current-catalogue-source-applied-20261101.json):4 SDK-группы и2 группы настоящего текущего моста,363 инструмента/точные схемы, обе версии протокола, длинный ID, SQL-чтение и HTTP401 после отзыва. Все5 child exits/cleanup подтверждены; build/lint/8 проверок PASS.
|
||
- [VRF/core](mcp-current-core-primary-restore-acceptance-20261101.json):68 групп VRF,38 профилей и настоящая SQL/HTTP/зашифрованная restore/tamper-приёмка предыдущего snapshot. Позднейшие Worker/STDIO/ALS изменения этим отчётом не покрыты.
|
||
- [Отказы Worker](mcp-flow-worker-startup-faults-source-applied-20261101.json):actual12, воспроизведены и исправлены2 дефекта; новые Worker ACK+exit0, поздних положительных разрешений0.
|
||
|
||
**Capacity336:** v4-capacity-refused-terminal; создано 189 операций, подтверждено 184/336 архивов. Отказ на операции 190; точная причина не доказана. PostgreSQL остановлена, собственные данные удалены, автоматического повтора нет. [Сохранённый отказ](mcp-poll-capacity336-v4-refusal-20261101.json). Для будущего fixture добавлено ограниченное сохранение состояния/кода до cleanup; strict types и inert checks PASS. Новый336 не запускался.
|
||
|
||
**Внешние условия:** доступны два CHR; третий независимый узел отсутствует. REST /log не доказывает полноту интервала, public autoRecovery OFF. [Linux collector10+3](mcp-linux-inventory-collector-acceptance-20261101.json) принят отдельно; whole-installation≤2GB не принят, прежний v16 показал рост swap. Новый изменяющий remote-run/private application bundle требует конкретного разрешённого scope.
|
||
|
||
Следующая небольшая очередь: **DB issuer → общий routing admission → настоящий logs/UI slice**. Общая финальная матрица — после стабилизации исходников. [Tracker](mcp-current-progress.json) содержит точные доказательства. Ниже сохранены исходный объём и история.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Предыдущая сводка — исторический snapshot; числа в ней не текущий остаток</summary>
|
||
|
||
**1 ноября — закрыт пакет public active NetFlow.** Настройки, rebuild и purge через REST/MCP при настоящем работающем сборщике:4 группы/6 положительных путей PASS, UDP→SQL без подставных traffic rows,2 непустые коррелированные квитанции,4 Worker ACK+exit0 без forced cleanup. Исправлена потеря контекста текущего запроса на callback существующего Worker; новый регрессионный тест падает на старом коде, после подключения22 проверки/build/lint PASS. [Квитанция](mcp-flow-public-active-source-applied-20261101.json). Общая финальная матрица после последних правок ещё не выполнена. Осталось **7 направлений/~32 пакета**, в NATIVE —5. Реальные CHR traffic/exporter, вся установка≤2GB и независимый третий узел остаются открытыми.
|
||
|
||
|
||
**1 ноября — подключён STDIO terminal guard.** Настоящий текущий мост:2 группы PASS,363 инструмента/точные схемы, обе версии протокола и длинный ID; ограниченное SQL-чтение и настоящий HTTP401 после отзыва доступа. Все5 дочерних процессов завершены, cleanup подтверждён. Перед подключением отдельно приняты4 SDK-группы; после подключения build/lint0 и8 HTTP/Flow-проверок PASS. [Квитанция](mcp-stdio-current-catalogue-source-applied-20261101.json). Inspector/live portal и вся установка≤2GB остаются открыты.
|
||
|
||
**Capacity336 v4 завершён отказом:**189 операций,184 архива, остановка на операции190 без ожидаемого applied. Точное конечное состояние операции не было сохранено; причина пока не доказана. PostgreSQL остановлена, собственный каталог удалён, автоматического повтора нет. [Отказ](mcp-poll-capacity336-v4-refusal-20261101.json). Остаток плана не сокращён:7 направлений/~33 пакета.
|
||
|
||
|
||
**Актуальный статус: открыто 7 направлений, ориентировочно 33 крупных рабочих/приёмочных пакетов. Полный план ещё не завершён.** Детальный остаток: [реестр](mcp-remaining-work-20261026.md), [машинный tracker](mcp-current-progress.json).
|
||
|
||
Закреплённый1879-file срез прошёл37 профилей и полную SQL/HTTP-приёмку с настоящим зашифрованным restore: [2/2 PASS](mcp-final-candidate-primary-restore-acceptance-20261101.json). Последующий1881-file срез routing/NetFlow: complete, 2/2; [37 профилей/19SQL/8реальных NetFlow HTTP+SQL](mcp-owner-envelope-integration-acceptance-20261101.json). После него применён generic request owner: build и28+22 целевая проверка PASS; [реальная SQL/HTTP-приёмка8групп PASS, cleanup подтверждён](mcp-generic-inflight-current-integration-20261101.json).
|
||
|
||
Длительная вместимость336: v4-capacity-running; проверенных архивов 184/336, созданных операций 189, наблюдение 2026-11-01T02:03:38.994Z. Естественное expiry/archive/history smoke принято отдельно. Реальный Linux collector10AF_UNIX+3projection принят: baseline четырёх контейнеров сохранён, ресурсы удалены; [отчёт](mcp-linux-inventory-collector-acceptance-20261101.json). Полная вместимость и вся установка≤2GB ещё не приняты.
|
||
|
||
**Закрыт пакет реализации VRF:**68 SQL/HTTP-групп, полная матрица38 профилей и основная SQL/HTTP-приёмка с настоящим зашифрованным restore/tamper PASS. [Квитанция](mcp-current-core-primary-restore-acceptance-20261101.json). Между матрицей38 и primary изменён только усиленный тестовый connected-route fixture; исходники продукта идентичны, полный source set/bytes проверен независимо.
|
||
|
||
**Закрыт пакет локальных отказов Worker:** два воспроизведённых дефекта исправлены и подключены, actual12 (8 прежних +4 новых), unit21, build/lint0. Все5 новых Worker завершились с ACK+exit0 без forced cleanup; поздних положительных разрешений0. [Квитанция](mcp-flow-worker-startup-faults-source-applied-20261101.json). После этой правки источники изменились относительно общей core-приёмки; финальная общая матрица будет выполнена после стабилизации остальных изменений. В NATIVE осталось6 пакетов реального трафика/interop/public composition; не8.
|
||
|
||
Generic request owner:50 целевых проверок +8 настоящих SQL/HTTP PASS. В БД подключено наследование защиты новых разделов: неизменные проверенные PostgreSQL-байты, build/lint и15 MODEL-сценариев PASS; production issuer/all-writer/READY ещё открыты. SDK terminal guard подключён:5 отдельных SDK HTTP-групп +3 current catalogue/auth/audit, build/lint0 и8 целевых проверок PASS; [срез](mcp-sdk-terminal-source-applied-20261101.json). Ограничение input/result страницы обращений подключено после3 SQL/Fastify-групп и независимого review; build/lint0, исходный аудит сохранён. Доступны два CHR; независимый трёхузловой путь остаётся внешней границей. REST /log не доказывает полноту событий; public autoRecovery OFF.
|
||
|
||
Ниже сохранены история и весь исходный нумерованный план. Исторические PASS относятся к своим snapshots и не заменяют текущие обязательные deliverables.
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Исторические срезы приёмки — не текущие отметки готовности</summary>
|
||
|
||
**Текущий общий срез:2/3 этапов прошли.** Cold143 v4 natural-expiry/archive/history/restore и все37 регрессионных профилей приняты; точный набор и байты исходников совпали. Сейчас primary SQL/HTTP + restore/tamper. Открыто7 направлений/~35 пакетов; whole-installation≤2ГБ, capacity336 и внешняя/native приёмка отдельно. [Регрессия](mcp-v4-combined-regression-stage-20261031.json).
|
||
|
||
**31 октября — следующая короткая очередь закрыта:4/4.** Cold3 одного Windows-среза; DB signature/current-head component20tests+build (без READY); общий CallToolResult budget27focused+14actual SDK HTTP/stdio synthetic-action cases+build; lifetime passthrough во всех поддерживаемых Docker launch paths (без запускаDocker). Открыто7 направлений/~35 пакетов. Сейчас идёт общая приёмка нового среза: cold archive/history/restore → все37профилей → primary/restore. [Текущий tracker](mcp-current-progress.json), [выдача MCP](mcp-generic-result-budget-acceptance-20261031.json), [DB binding](mcp-db-source-binding-acceptance-20261031.json), [Docker wiring](mcp-native-template-lifetime-deploy-wiring-20261031.json).
|
||
|
||
**31 октября — три холодных запуска одного Windows-среза прошли.** POLL v4:143 эффекта,22 публикации/54 строки/4 GET; полный debit151 и исходные резервы сохранены. Время80.88/80.98/83.03s, максимум процесса248.91MiB при old192/semi16. Это завершённый локальный подэтап, не Linux/не вся установка≤2ГБ. Открыто7 направлений (~35 пакетов); следующие: общий MCP result delivery, operator DB binding, v4 expiry/archive/restore и capacity336. [Доказательства](mcp-poll-v4-windows-cold-stability-20261031.json).
|
||
|
||
**31 октября — публичный v4 и первый cold143 на прежнем ограничении памяти прошли.** Настоящие REST/MCP сохраняют human approval, полный debit/reservations, crypto history и idempotency. Plain compiled Windows Node25 old192/semi16:143 операции,22 публикации/54 строки/4GET, debit151, app39883ms, пик246.95MiB; исходные180s сохранены. Это один frozen-срез, неLinux/не вся установка≤2ГБ. Следующий combined срез включает три принятых параллельных малых блока: DB17SQL source-capture regression, RT3.B1 контракт15tests, N5a template lifetime+owned flow. Открыты7 направлений, ориентировочно35 acceptance/work-пакетов; части общих прогонов пересекаются. [Факты POLL](mcp-poll-v4-public-cold-acceptance-20261031.json).
|
||
|
||
**30 октября — приватный durable POLL v4 реализован и проверен на настоящей БД.** Полные143 операции исполняются18 DB-группами≤8; logical mutation cost151, полный резерв4019 rows/8421376 bytes сохранены, journal maxStages26. После настоящего20с ожидания подтверждены20 публикаций/50 строк журнала/4localhost GET, отдельный свежий старт, crypto history и чтение новым экземпляром. Три группы с корректными MAC, но неверным offset/усечением/одиночным эффектом отвергнуты. Management/build/lint прошли;42 миграции побайтно прежние. Публичный issuer остаётсяv3; terminal/archive v4, настоящий MCP debit, public cold143/capacity336/общая текущая регрессия/Linux/вся установка≤2ГБ и все7 направлений остаются открыты. [Приватная приёмка](mcp-poll-v4-private-durable-acceptance-20261030.json).
|
||
|
||
**30 октября — исправлено сравнение native JSON после записи в JSONB.** Перестановка ключей PostgreSQL больше не отклоняет неизменный snapshot; значения, типы, неизвестные поля и порядок массивов проверяются строго. Полный management POLL, настоящий зарегистрированный REST/MCP с намеренно переставленными ключами, подписанная история/idempotency, build и lint прошли. Все42 миграции побайтно прежние. До правки полный frozen v3/37/primary/archive/restore прошёл; текущий полный повтор ещё требуется. Изолированный v4 с тем же исправлением выполнил143 операции в18 группах за59078ms,20 публикаций/4GET; public registry/admission/durable journal ещё не подключены, performance/cold143 public/вся установка≤2ГБ не приняты. [Точная приёмка](mcp-poll-jsonb-snapshot-acceptance-20261030.json). Все7 направлений остаются открыты.
|
||
|
||
**30 октября — полный локальный frozen v3 принят.** Последовательно прошли настоящая естественная expiry/archive/history/restore, все37 профилей с `/logs`, primary SQL/HTTP и encrypted pg_dump/pg_restore/tamper. Проверены точный набор1678 исходников и побайтная неизменность. Это отдельные свежие одноразовые БД в одном последовательном запуске. Кандидат атомарного обслуживания прошёл8 component и4 настоящих SQL-сценария, но ещё не включён в MCP. Cold143/capacity336/текущий Linux/вся установка≤2ГБ и все7 направлений остаются открыты. [Полная локальная приёмка](mcp-poll-v3-full-local-acceptance-20261030.json).
|
||
|
||
**30 октября — настоящий архив v3 и восстановление прошли.** После естественного истечения исходного допуска штатный worker сохранил21 публикацию/52 исходные строки журнала в проверенный архив. Текущий владелец с новым допуском читает историю через global reconcile; прежний отозванный credential, суженный grant и чужой владелец получают отказ без нового native-вызова или расхода квоты. Настоящий pg_dump/pg_restore и отказ повреждённому архиву прошли. Frozen v5 продолжает37 профилей и primary/restore; cold143/capacity336/Linux/вся установка≤2ГБ и все7 направлений остаются открыты. [Подтверждённый результат](mcp-poll-v3-archive-history-acceptance-20261030.json).
|
||
|
||
**30 октября — исправлен архивный источник v3 после настоящего отказа по окончании исходного допуска.** Старый terminal verifier принимал только1/2 и сравнивал весь расшифрованный blob с прежним context, поэтому worker безопасно не создавал архив v3. Теперь он отдельно аутентифицирует executionStart через общий anchor verifier, сохраняя исходный contextProof. Прошли64 focused terminal/archive/compactor проверки, backend build и фактическая компиляция исправленного sizing entry. Новый frozen v5 выполняет повторную естественную expiry/archive/history/restore, затем37 профилей и primary/restore. Диагностический compiled cold подтвердил174265 SQL calls при4 native reads без полного receipt; приёмкой это не является. Старые сроки/квоты не расширены. [Прогресс](mcp-poll-v3-terminal-and-diagnostic-progress-20261030.json), [измерения и непринятый кандидат оптимизации](mcp-poll-cold-optimization-review-20261030.md). Все7 направлений, cold143/capacity336/Linux/вся установка≤2ГБ остаются открыты.
|
||
|
||
**30 октября — production POLL v3 допускает ожидание человеческого подтверждения без потери строгих in-flight проверок.** Каталог защиты и настройки читаются одним доверенным SQL-снимком; отдельный approvalProof отличает статистику от конфигурации и ABA. Свежий полный старт подписывается в существующем encrypted anchor, исходные plan/contextProof, квота и сроки сохраняются. Новые journal/history readers аутентифицируют этот старт; V1/V2 читаются как прежде. Подтверждены настоящий REST/MCP,20с ожидания, отказ ABA/disabled guard до admission/native,31 journal и22 history/snapshot компонентных случая, management/build/lint. Текущая собранная версия с настоящими коллекторами/NetFlow прошла20с ожидание:11 544 datagrams, точные17 316 000 bytes/34 632 packets,188 чтений без ошибок,21 publication/52 rows. Холодные143 не приняты: два прогона завершились без receipt в прежнем сроке; отдельная обязательная команда сохранена. Архивный тест после штатного bootstrap и следующие37 профилей/primary/restore выполняются на замороженных исходниках. Linux/capacity336/вся установка≤2ГБ и все7 направлений остаются открыты. [Приёмка](mcp-poll-delayed-approval-acceptance-20261030.json), [протокол](mcp-poll-delayed-approval-design-20261030.md).
|
||
|
||
**30 октября — версия настроек включена в штатную миграцию0042 и прошла настоящее восстановление.** Все прежние41 SQL-файла сохранены побайтно. Переход с непустой41, повторный запуск и отказ при частично совпадающей unmarked-схеме сохраняют исходные данные и атомарность DDL/маркера. Реальные pg_dump/pg_restore сохранили полную логическую схему, данные и UUID; восстановленная защита обнаруживает A→B→A. Прошли32 SQL-группы защиты, пять сценариев миграции/restore,19 manifest-сценариев,13 controlled-history тестов, девять настоящих MCP-сценариев настроек, штатные REST/MCP full poll и сборка/lint. Inner poll остаётся v2; свежее начало исполнения после ожидания ещё требуется связать с исходным plan и неизменяемым журналом, включая историческую/архивную проверку. Полная текущая матрица/primary/restore, Linux и вся установка≤2ГБ не приняты; все7 направлений открыты. [Приёмка](mcp-poll-epoch-numbered-acceptance-20261030.json), [интеграция](mcp-poll-delayed-approval-design-20261030.md).
|
||
|
||
**30 октября — подготовлена изолированная основа подтверждения после ожидания.** Версия конфигурации трёх групп настроек сохраняется при обновлении статистики и меняется при A→B→A, неизвестных новых полях и повторной вставке. Фиксированная проверка каталога отказывает при подмене/отключении защиты. Прошли 32 настоящие SQL-группы с полным откатом своих DDL/данных, пять компонентных тестов, TypeScript и scoped lint. Все 41 прежняя миграция и штатные executor/journal/actions сохранены побайтно. Предложение не зарегистрировано как миграция; пользовательский сценарий ожидания ещё не принят. Следующий шаг — связать свежий полный снимок после подтверждения с неизменяемым журналом и исторической проверкой, затем actual restore и общая матрица. Все семь направлений и вся установка ≤2 ГБ остаются открыты. [Приёмка](mcp-poll-settings-epoch-acceptance-20261030.json), [точки интеграции](mcp-poll-delayed-approval-design-20261030.md).
|
||
|
||
**30 октября — штатный REST poll подключён к общему исполнителю MCP.** `POST /api/servers/:id/poll` использует durable-журнал и исходный проверенный HTTP-контекст вместо legacy `pollServer`. JWT/local режим, владелец, права и идентификатор берутся из настоящих auth hooks; подмена JSON/header/authUser не даёт доступа. Исходное монотонное окно и отключение клиента проверяются на границах metadata I/O. Серверный предел 180 секунд сохранён; клиент ждёт до 185 секунд для получения ответа. Массовый опрос последовательный, без автоматического retry. Прошли 25 компонентных сценариев, 5 JWT + 3 local HTTP-проверки, штатный TCP/Fastify/SQL REST-опрос (200, 4 GET, отказы 400/401/403/404 без native), обычный MCP-опрос (4 GET, 21 публикация, 52 строки) и браузерный batch-тест. Сборка и lint прошли, временные Next-конфиги восстановлены. Полные 37 профилей и primary/restore после этих продуктовых изменений ещё не повторены; предыдущий полный PASS ниже относится к своему снимку. Следующий пункт POLL — ожидание человеческого подтверждения с сохранением защиты от ABA. Весь план и ≤2 ГБ остаются открыты. [Отчёт](mcp-poll-rest-route-acceptance-20261030.json).
|
||
|
||
**30 октября — текущая функциональная приёмка завершена.** Все 37 профилей с шестью новыми тестами наблюдателя, основная SQL/HTTP-приёмка и настоящее восстановление дампа прошли; повреждённый архив отклонён до замены данных. Оба этапа выполнены на одном замороженном снимке, все 1665 контрольных сумм совпали. Ранее падавший общий routing-контекст прошёл полный сценарий после переноса тестового наблюдателя за настоящий COMMIT, вне HTTP-ответа. Проверки прав, исходные тайм-ауты и запрет replay сохранены. Совместная работа четырёх сборщиков и MCP принята локально; Linux текущего изменения, constrained cold143/capacity336, вся установка ≤2 ГБ, задержанное подтверждение и переключение legacy REST poll ещё открыты. Все семь направлений полного плана остаются незавершёнными; public autoRecovery выключен. [Итог текущего блока](mcp-collector-checkpoint-final-acceptance-20261030.json).
|
||
|
||
**30 октября — устранена чувствительность scoped fixture к тайм-ауту ping.** Дополнительное чтение общего контекста перенесено из HTTP-ответа после настоящего COMMIT перед контрольным ping. Наблюдатель не наследует контекст записи и не подменяет драйверные ACK. С одинаковой задержкой 11 секунд старое место дало `unknown`, новое — `applied` при прежнем тайм-ауте 10 секунд; исходный исправленный fixture также прошёл узкое SQL/HTTP-воспроизведение. Шесть тестов COMMIT/ROLLBACK/lost ACK включены в обязательный профиль маршрутизации; строгие типы и lint прошли. Новый замороженный прогон 37 профилей и последующей основной приёмки с восстановлением БД выполняется. Продуктовые исходники, migrations и сроки допусков этой правкой не менялись. [Отчёт проверки](mcp-checkpoint-observer-acceptance-20261030.json).
|
||
|
||
**30 октября — основная приёмка остановилась на общем routing-контексте.** На строке 673 scoped fixture получен `unknown` вместо `applied`; исходники до/после совпали, заключительное восстановление БД не достигнуто. Все 37 профилей текущего снимка остаются пройденными. Узкое изолированное воспроизведение прошло, но дополнительная проверка внутри HTTP-ответа заняла около 9,96 секунды при тайм-ауте ping 10 секунд. Влияние места этой тестовой задержки проверяется отдельно; исходная причина полного отказа пока не объявляется доказанной. Продуктовый код, guards и сроки допуска не меняются. [Фактический отказ](mcp-collector-shared-primary-failure-20261030.json).
|
||
|
||
**30 октября — после исправления блокировок прошли все 37 профилей.** Один устаревший тест расчёта трафика адаптирован к выделенному внутреннему телу сборщика; продуктовый код при этом не менялся. Точечный профиль с настоящей БД и полный повтор 37 профилей завершились с exit 0, все 1663 контрольные суммы сохранились. Отдельные 28 SQL-сценариев записи сборщиков и изолированный публичный MCP/REST-host poll также прошли. Основная SQL/HTTP-приёмка с настоящим dump/restore текущего снимка запущена отдельно и пока не принята. Вся установка ≤2 ГБ, задержанное подтверждение и все семь направлений остаются открыты. [Отчёт матрицы](mcp-collector-shared-regression-acceptance-20261030.json).
|
||
|
||
**30 октября — совместная работа backend и сборщиков проверена.** Четыре полных пути сбора получили разделяемую PostgreSQL-блокировку приложения, совместимую между сборщиками и исключающую изменение конфигурации. Настоящие scheduler/UDP worker/HTTP/MCP: 11 106 датаграмм, точные 16 659 000 байт / 33 318 пакетов, 150 чтений без ошибок, 21 публикация poll / 52 строки журнала. Отдельная задержка подтверждения 20 секунд с обновлением статистики безопасно отклонена до native MCP и его записей исполнения. Удобство задержанного подтверждения остаётся открытым; proof и запрет автоматического повтора сохранены. Текущие 37 профилей и primary/restore после изменения блокировок ещё проверяются. Предыдущие PASS ниже относятся к своим снимкам. Вся установка ≤2 ГБ и все семь направлений не завершены. [Область проверки](mcp-collector-coload-20261030.md), [фактический отчёт](mcp-collector-coload-acceptance-20261030.json).
|
||
|
||
**30 октября — текущий Linux-прогон v16 завершён.** Обычный опрос Node22 прошёл за86047ms:21публикация/52строки/4GET, пик процесса MCP≈248,85MiB при old192/semi16 и собственных Node320/PG192MiB. Общая приёмка ресурсов **не пройдена**: выросли счётчики подкачки; OOM не было. Собственные ресурсы и каталог удалены, исходные сервисы неизменны. Единственное разрешение v16 израсходовано. Cold143/capacity336 и вся установка≤2ГБ остаются открыты. [Результат](mcp-poll-policy-loan-linux-20261030.json).
|
||
|
||
|
||
**30 октября — POLL использует исходную read-only транзакцию.** Функциональная приёмка текущего снимка прошла:32unit,15SQL-групп,7public afterIO-отказов, management/types/build/lint и все37профилей с39 обязательными API/SQL-проверками. Обычный опрос: 36350ms; финальный cold143 **не принят**: 180766ms/publish.141, квитанции нет. Исходные180s и old192/semi16 сохранены. Это WindowsNode25; Linux, стабильность cold, capacity336, полная crash/retention-матрица и вся установка≤2ГБ открыты. Основная SQL/HTTP-приёмка и настоящий pg_dump/restore/tamper текущего снимка также прошли; исходники совпали до/после. Запуски primary/restore и37профилей раздельные. [Primary](mcp-poll-policy-loan-primary-acceptance-20261030.json). Все7 направлений открыты; public autoRecovery выключен. [Отчёт](mcp-poll-policy-loan-acceptance-20261030.json).
|
||
|
||
|
||
**30 октября — полный набор37 профилей прошёл.** После девяти исправлений независимых тестовых подстановок текущий набор завершился с exit0; все1668 контрольные суммы совпали до/после. SQL/HTTP primary и настоящий dump/restore/tamper ранее также прошли: продуктовый код и его зависимости не менялись; исправленные unit fixtures не входят в статический граф этих двух entry. Запуски primary/restore и37 профилей были раздельными. Холодный poll143, capacity336, вся установка≤2ГБ и все7 широких направлений остаются открыты. REST `/log` — единственный источник, public autoRecovery выключен. [Приёмка](mcp-policy-regression-acceptance-20261030.json).
|
||
|
||
|
||
**30 октября — общая регрессия текущего снимка завершена.** SQL/HTTP primary, настоящий pg_dump/pg_restore и отказ при повреждении архива прошли после последних изменений POLL. Все1603 контрольные суммы исходников совпали до/после прогона. Полный одновременный набор37 профилей, cold143/capacity336 и вся установка≤2ГБ остаются открыты; все7 направлений не закрыты. REST `/log` остаётся единственным источником, public autoRecovery выключен. [Результат](mcp-policy-primary-acceptance-20261030.json).
|
||
|
||
|
||
**29 октября — согласованное чтение политики POLL проверено.** Защиты, счётчики и временный доступ читаются одним свежим ограниченным SELECT вместо трёх на прежнем соединении. Исходный допуск до/после I/O, проверки каждого SQL/DDL и180s сохранены.4unit,14SQL групп,7public afterIO, management/build/lint прошли. Штатный запуск: Windows48849ms/Linux82374ms; полный receipt21/52/4GET. Cold181516ms/pub102 не принят; ускорение не доказано. Linux Node exit0, но общий gate памяти отказал из-за роста host swap; свои ресурсы удалены, четыре сервиса неизменны. Все7 направлений, вся установка≤2ГБ и общий current primary/restore остаются открыты. REST `/log` — единственный источник, полнота unknown, public autoRecovery выключен. [Отчёт](mcp-poll-policy-source-acceptance-20261029.json).
|
||
|
||
|
||
|
||
**29 октября — штатный bootstrap подтверждён на Linux.** Собранный MCP после настоящего `initDatabase` получил полный receipt за87289ms:17 maintenance/21 publication/52 rows/4GET, Node22, old192/semi16, processpeak≈250.3MiB. Собственные Node320/PG192 MiB ресурсы удалены, четыре прежних сервиса неизменны. Host swap counters выросли; вся установка≤2ГБ не принята. Повторный Windows cold с восстановленным runtime также отказал за181245ms наpublish110: прежние113s не доказывают повторяемость. [Раздельные результаты](mcp-poll-normal-startup-acceptance-20261029.json).
|
||
|
||
|
||
**29 октября — штатный bootstrap проверяется отдельно.** Новый постоянный `test:mcp:poll-memory-bootstrap:pg` вызывает настоящий `initDatabase` до API: WindowsNode25 прошёл за42737ms,17 maintenance/21 publication/52 rows/4GET, processpeak≈241.2MiB. Linux этого профиля пока не принят. Cold143 и вся установка≤2ГБ остаются открыты. Объединение journal validation отклонено после actual181403ms failure; runtime восстановлен побайтно, дополнительные7SQL групп с12 отказами и наблюдением двух блокировок сохранены. [Bootstrap](mcp-poll-normal-startup-acceptance-20261029.json), [отклонённый кандидат](mcp-poll-owned-validation-review-20261029.json).
|
||
|
||
|
||
**29 октября — текущий Linux cold POLL: не принят.** С фиксированным protocol statement и без SQL-observer измерено181456ms при прежнем180s deadline. Успешная полная квитанция не подтверждена. Memory/co-load gate: не принят; вся установка≤2ГБ остаётся открыта. Собственные ресурсы удалены, четыре прежних сервиса неизменны. [Отчёт](mcp-bounded-poll-linux-20261029.json).
|
||
|
||
|
||
**29 октября — фиксированный SELECT прав подготовлен в ограниченном connector.** Текст SQL не изменился; каждое выполнение заново читает данные и связывает текущие параметры.47 тестов,13 actualSQL групп,7 public afterIO отказов, management/build/lint прошли. Настоящее изменение схемы вызывает отказ и уничтожение соединения без повтора. Один текущий Windows cold143 завершился за113202ms,147 публикаций/304 строки/4GET; processpeak≈248.9MiB при old192/semi16. Linux, повторяемость новой сборки, общая primary/restore и вся установка≤2ГБ остаются открыты. [Отчёт](mcp-bounded-principal-plan-acceptance-20261029.json).
|
||
|
||
|
||
**29 октября — Linux POLL пока не принят.** Полный опрос Node22 на временных контейнерах Node320/PG192 MiB завершился UNKNOWN по исходному180s deadline. Диагностика показала более20тыс. свежих principal SELECT до38-й публикации; CPU-throttling PostgreSQL не наблюдался, Node после exit не измерим этим способом. На хосте выросли счётчики swap, поэтому RAM/no-swap gate также не пройден. Четыре прежних сервиса неизменны, собственные ресурсы удалены. Это снимок ДО последующей проверки protocol preparation, а не результат новой оптимизации. [Данные](mcp-poll-linux-diagnostic-20261029.json).
|
||
|
||
|
||
**Cold143 Windows, итог серии:**3/3 predefined current compiled runs без SQL-observer прошли136.8–148.9s в180s, max processRSS≈252.2MiB; scope143maintenance/147publications/304rows/4GET неизменен. [Отчёт](mcp-poll-local-cold-stability-20261029.json). TargetLinuxNode22/capacity336/whole2ГБ и финальный общий повтор после последней auth-оптимизации ещё открыты.
|
||
|
||
**Последняя правка POLL.C1a:** current compiled cold143 без SQL-observer прошёл137.5s при old192/semi16 и peak≈250MiB. Сохранены original deadline/grant и второй полный source check после I/O;49 component,10actualSQL,7public races и management PASS. Повторяемость проверяется отдельно; target Linux/Node22,capacity336/whole2ГБ открыты. Общий primary ниже принят до этой последней правки и не выдаётся за её полный повтор. [Отчёт](mcp-poll-conditional-progress-20261029.json).
|
||
|
||
**Общий текущий primary/restore принят29 октября:** SQL/HTTP, настоящий dump/restore и tamper завершены exit0;1596 pins неизменны. Два тестовых ожидания согласованы с bounded preflight и сохранением CAS history; production guards не ослаблены. Принят стандартный runtime; constrained, seeded-rich и UI имеют отдельные отчёты. Это не единый запуск37 профилей, не native/livePortal и не вся установка ≤2ГБ. [Приёмка](mcp-current-combined-primary-acceptance-20261029.json). Дальше — холодный POLL; осталось **7 направлений**.
|
||
|
||
**UI.A,29 октября:** добавлен постоянный auth-enabled browser-набор `npm run test:mcp:auth-ui`:3/3 Chrome-теста и lint прошли; проверены выбор прав/серверов, маскирование токена, pause/revoke/monitor/stop и read-only ограничения. API/JWT синтетические; live Portal/Sender/UI и вся установка ≤2ГБ этим не закрываются. [Отчёт](mcp-auth-ui-acceptance-20261029.json). Далее задачи выполняются последовательно без субагентов по последнему указанию пользователя.
|
||
|
||
**Приёмка внешнего процесса:** добавлены три постоянных test-only файла и выполнены13 реальных локальных SDK/HTTP/stdIO сценариев, включая lifecycle токенов и PKCE. Portal JWT/consent синтетические; live Portal/Sender/UI, общий предел всех результатов и весь EXT2 этим не закрываются. [Отчёт](mcp-external-process-acceptance-20261029.json).
|
||
|
||
**Последний срез29 октября:** logical-schema-v3 принят на seeded SQL с настоящим dump/restore/tamper и подписанными reference; all-writer/source-generation/READY ещё открыты. Ограниченный профиль NetFlow применён: два читателя UI/MCP,2 MiB/query и4 MiB/source-response,2 MiB/encoded-response, отказ до декодирования больших данных. Холодные SQL-проверки обоих профилей и три затронутые регрессии прошли. Compose2gb выбирает этот режим opt-in вместе с old192/semi16, без применения к серверу. Локальные470.46 MiB app+worker не подтверждают всю установку ≤2ГБ на Linux. Текущий общий primary/restore выполняется. Пользователь подтвердил только REST `/log`; полнота событий неизвестна, поэтому autoRecovery выключен. [Схема](mcp-logical-schema-v3-acceptance-20261029.json), [профиль памяти](mcp-constrained-flow-profile-acceptance-20261029.json). Осталось **7 направлений**.
|
||
|
||
**Маршрутизация и БД,29 октября — новый срез:** фиксация исходного native-состояния при человеческом включении профиля подключена. Общая проверка перед записью сверяет исходные ID/candidate/target/dependency/source; собственное MAIN-переключение обновляет baseline только по подписанной квитанции живого execute. MAIN и все5 scoped forward rounds прошли; штатный scoped/inverse набор завершился exit0, включая8 сценариев inverse и17 persistent-authority проверок. Пересекающиеся активные профили отклоняются до CAS; настоящая гонка двух заранее одобренных включений подтвердила STATE_CONFLICT, отсутствие второго профиля и0nativewrites. [Отчёт](mcp-routing-baseline-progress-20261029.json). SQLite marker/sequence включены в существующий writer barrier; реальный ответ `ROLLBACK` больше не подтверждает COMMIT.22 SQL-проверки текущих helpers и постоянные10 focused SQL-сценариев прошли; all-writer/source-generation/READY остаются открыты. [Отчёт БД](mcp-database-import-control-acceptance-v1.json). Полный primary/restore после этого среза ещё не выполнен; всего осталось **7 направлений**.
|
||
|
||
**Локальный замер NetFlow:**4 владельца HTTP одновременно удерживали8 SQL-источников почти по16MiB; все8 MCP-вызовов успешны, настоящий Worker держал50000 pending flows/2048 rings. Пик RSS приложения вместе с тестовыми клиентами и Worker —757,94MiB. Это Windows/Node25 и отдельный зафиксированный снимок до последних routing/COMMIT-изменений, с main/effective Worker old-space512MiB; не кандидат192MiB из Compose и не вся установка. Общая приёмка ≤2ГБ открыта. [Границы и данные замера](mcp-netflow-memory-progress-20261029.json).
|
||
|
||
**NetFlow,29 октября — текущие исходники:** применены ограничения агрегатов до изменения состояния, атомарные SQL-квитанции качества/потерь, проверка настоящего ответа COMMIT и общий лимит чтения MCP/REST/SSE.18 компонентных,8 Worker/UDP/SQL и4 quality SQL-сценария прошли; постоянные7 ownership-проверок, реальные SQL/HTTP MCP/REST и SQL source-boundary проверки, полный traffic-flow с SQL `/logs`, build и scoped lint прошли. Незавершённый временный observer сохранён отдельно; постоянный HTTP runner подтвердил exit0 и cleanup.128MiB на владельца — предварительный резерв, физический пик и вся установка ≤2ГБ ещё не приняты. REST `/log` не подтверждает полноту интервала, public autoRecovery выключен. [Отчёт](mcp-native-read-bounds-progress-20261029.json). Осталось **7 направлений**.
|
||
|
||
**Последний primary/restore,29 октября — до новых ограничений NetFlow:** основной SQL/HTTP-прогон, настоящий dump/restore и отказ подменённому архиву прошли;1621 файл исходников/миграций/скриптов того снимка не изменён во время приёмки. [Приёмка](mcp-primary-v2-heartbeat-acceptance-20261029.json). Это не единый повтор37 профилей и не RAM/CHR-приёмка; после текущих изменений общий прогон нужно повторить.
|
||
|
||
**Дополнительная проверка NetFlow scope:** общие счётчики потерь теперь доступны только при `allowGlobal` и существующем разрешении `netflow.settings.read`. Для остальных подключений качество явно недоступно; данные выбранного сервера и смысл пагинации сохраняются.10 компонентных проверок,70 вызовов семи настоящих зарегистрированных read handlers с изолированными source/auth adapters, реальная SQL/HTTP-пара scoped/global, полный traffic-flow и профиль system-database прошли. Постоянный HTTP runner после явного завершения esbuild подтвердил exit0 и cleanup.
|
||
|
||
**Heartbeat коллектора,29 октября:** применён протокол одного неподтверждённого снимка с объединением обновлений и ACK после обработки.32 точечных и8 настоящих Worker/UDP/SQL-сценариев, весь traffic-flow, SQL `/logs`, TypeScript, ESLint и backend build прошли. Новый сценарий удерживает ACK на два интервала таймера настоящего Worker, отказывает чужому ACK и возобновляет свежий снимок по правильному;18600байт/78пакетов сохранены. Основная SQL/HTTP-интеграция и настоящий dump/restore/tamper прошли на том же снимке; ограничение side aggregates/read snapshots и вся установка ≤2ГБ этим не закрыты. [Отчёт](mcp-heartbeat-backpressure-progress-20261029.json).
|
||
|
||
**Дополнение к текущему срезу:** настоящий worker подтвердил гонку ручного scoped fixture; весь изолированный сценарий прошёл после изменения только тестовой координации. Последний cold POLL с144 maintenance-командами не получил квитанцию за181678ms, остановившись на публикации81; аварийная точка архива не достигнута. Ранний успешный локальный прогон151s сохранён, но не доказывает стабильную cold-производительность. Применён внутренний planner V2, исключающий только доказанные NOOP; старые подписанные V1-планы исполняются прежним planner без переиздания. Постоянные проверки V1/V2, полный профиль server poll, TypeScript, ESLint и compiled build прошли. Настоящий тёплый MCP poll прошёл за49,6s:17 действий/21 публикация/52 строки. После естественного истечения допуска авария дочернего процесса и точного собственного PG backend до COMMIT откатила архив/удаление/refund/audit, сохранила полный журнал, charge и отдельно зафиксированный claim; новый worker не повторил попытку. Исходники/compiled pins неизменны, собственная PG остановлена и удалена. [Отчёт V2](mcp-poll-v2-progress-20261029.json). Этот warm-сценарий не заменяет cold-производительность. Основная SQL/HTTP-интеграция и настоящий dump/restore/tamper прошли на текущем снимке. Cold-производительность и2ГБ остаются открытыми. Осталось **7 направлений**.
|
||
|
||
**Последняя проверка 29 октября:** разделение IPFIX/NetFlow-шаблонов прошло37 точечных проверок и7 настоящих Worker/UDP/SQL-сценариев: два порта отправителя, два домена, точное сохранение18600байт/78пакетов. Полный профиль трафика также пройден.37 backend-профилей покрыты первоначальным пакетом и повтором исправленного тестового SQL-стаба; единый чистый прогон этим не заявляется. Для primary-интеграции воспроизведено слишком короткое ожидание: тот же NetFlow settings стал applied через3,16s после timeout наблюдателя через3,15s. Ограничено только ожидание теста по монотонным часам; production timeout/TTL не изменены. Повтор primary с настоящим dump/restore/tamper прошёл на текущем снимке. [Отчёт](mcp-db-native-progress-20261029.json). Осталось **7 направлений**.
|
||
|
||
**Состояние на 29 октября:** speed-test 3/3 и manual collectors 4/4 завершены; REST: 200 mediated / 62 excluded / 0 pending. Весь план: **осталось 7 направлений**. Приняты локальные NetFlow worker/services и компоненты routing forward rounds/private handoff. Полный autoRecovery, внешняя сетевая приёмка и нагрузка ≤2 ГБ остаются открыты. [Текущий реестр](mcp-current-progress.json), [текущая приёмка POLL](mcp-poll-terminal-storage-acceptance-20261029.json).
|
||
|
||
**Текущий этап POLL:** numbered41, четыре настоящих MCP poll с естественным истечением срока, обе границы потери COMMIT ACK и чтение архива через текущий доступ прошли SQL/restore. Штатный worker архивирует завершённый журнал; потеря ACK фиксации claim оставляет полный источник и его полный расход квоты без повторного выполнения. Полная backend-регрессия на41 миграции прошла37 профилей. Повтор fresh-storage без диагностического observer также прошёл; причина прежнего единичного UNKNOWN не установлена, исходный отказ сохранён. Открыты оставшаяся crash/unknown/retention матрица, настоящие336 источников и нагрузка всей установки ≤2 ГБ. Остаток всего плана — **7 направлений**, подробные открытые gates — в [рабочем списке](mcp-remaining-work-20261026.md).
|
||
|
||
</details>
|
||
|
||
## 1. Цель, архитектура и границы
|
||
|
||
**Ранее принят отдельный локальный POLL; текущая cold-производительность открыта:** [текущий отчёт оптимизации](mcp-poll-cost-reduction-progress-20261029.json) фиксирует полный compiled poll без диагностического observer: 144 maintenance, 148 публикаций, 306 строк журнала, около151s и peak RSS252 MiB при исходном deadline180s и heap240 MiB. Согласованное чтение principal прошло10 настоящих SQL-групп, metadata/journal —4. Сохранены прежние UNKNOWN на публикациях97 и115; их причины не объявляются доказанными. Результат получен на Windows/Node25 с отключённым scheduler и не закрывает Linux/Node22, совместную нагрузку сборщиков или всю установку ≤2 ГБ. Первый полный backend-прогон остановился на коротком наблюдении NetFlow settings; отдельный повтор подтвердил позднее applied того же operation. Отказ сохранён в tmp/mcp-current-full-backend-20261029.log. Позднее исправлен только тестовый срок controller grant: он теперь ограничен остатком исходных прав. Текущий основной SQL/HTTP-прогон и настоящий dump/restore/tamper прошли;37 профилей на одном новом снимке этим не заявляются.
|
||
|
||
**Уточнение источника логов от пользователя, 29 октября:** доступен только текущий RouterOS REST `/log`, внешнего collector нет. Используем этот источник для просмотра, поиска и диагностики. Ограниченный ring buffer, его `.id` и временные метки не доказывают непрерывный интервал событий или отсутствие перезапуска. Текущий native parser поэтому возвращает `authenticated-log-interval-coverage-unsupported` даже для корректного непустого ответа. AutoRecovery, которому требуется такое доказательство, остаётся запрещённым при неизвестной полноте; эти сценарии не считаются принятыми. Отдельный collector не разворачивается без запроса пользователя.
|
||
|
||
Предоставить нейросетям управляемый доступ ко всем разделам MikrotikManager. Реализовать самостоятельный web-раздел MCP, полноценное управление интерфейсами и серверный Route AI с профилями Community, IPv4/IPv6, OSPF, ECMP, RPF и VRF.
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Clients["AI-клиенты: Streamable HTTP / stdio-мост"] --> MCP["Backend /mcp"]
|
||
Web["Web-раздел /mcp"] --> Admin["Backend /api/mcp/*"]
|
||
MCP --> Policy["Политики, лимиты и защищённые объекты"]
|
||
Admin --> Policy
|
||
Controller["Серверный Route AI"] --> Policy
|
||
Policy --> Plans["Планы, подтверждения, блокировки и аудит"]
|
||
Plans --> Services["Общие сервисы приложения"]
|
||
Services --> RouterOS
|
||
Services --> PostgreSQL
|
||
RouterOS --> Observations["Метрики, конфигурация и /logs"]
|
||
Observations --> Controller
|
||
```
|
||
|
||
- MCP встраивается в существующий Fastify backend. Основной endpoint — `/mcp`, транспорт — Streamable HTTP через HTTPS.
|
||
- Локальный stdio-мост использует тот же endpoint и политики; не получает прямой доступ к БД и учётным данным роутеров. Диагностические сообщения моста идут в stderr, stdout предназначен для MCP.
|
||
- Frontend `/mcp` — отдельный раздел основного меню. Административный API — `/api/mcp/*`. Frontend и backend сохраняют текущую архитектуру отдельных адресов.
|
||
- Использовать официальный TypeScript SDK, зафиксировать версии и проверить совместимость протоколов `2026-07-28` и `2025-11-25`. SDK выполняет согласование версии; собственный протокол поверх JSON-RPC не изобретать.
|
||
- Общие контракты — Zod в `@mmapp/contracts/mcp`. Из REST-обработчиков выделяются сервисы, общие для UI, MCP и Route AI. Обращений MCP к собственному REST API по HTTP нет.
|
||
- Создать реестр покрытия: каждая существующая операция приложения получает MCP-инструмент либо явную причину исключения, если это управление самим MCP, аккаунтами портала или локальными аккаунтами RouterOS. Новый REST endpoint должен попадать в проверку покрытия.
|
||
- Для каждой операции реестр определяет схему, версию, права, область объектов, риск, лимиты, защищённые зависимости, обработчик, проверку результата и возможность восстановления. Неизвестная операция запрещена.
|
||
- Не предоставлять произвольные SQL, HTTP-запросы, RouterOS-скрипты или универсальный `exec`. Существующие разрешённые команды диагностики представить типизированными инструментами.
|
||
|
||
### Границы пользователей и внешних приложений
|
||
|
||
- Управление пользователями включает `/users` MikrotikManager. Аккаунты портала входа и локальные пользователи/группы RouterOS исключены.
|
||
- Настройки ролей и прав в `/users` не подменяют разрешения JWT портала и не превращаются автоматически в источник авторизации backend.
|
||
- EvoBGP используется через существующую интеграцию каталога. Управление самим внешним EvoBGP не включать.
|
||
- Неподдерживаемые свойства RouterOS явно отражаются в capabilities. Не имитировать поддержку и не применять неизвестные значения по умолчанию.
|
||
|
||
## 2. Подключения, авторизация и политики
|
||
|
||
### 2.1. Три режима и опасные действия
|
||
|
||
| Режим | Поведение |
|
||
| --- | --- |
|
||
| Наблюдатель | Чтение и ограниченная ненагрузочная диагностика |
|
||
| С подтверждением | Чтение и подготовка планов; применение после одобрения человеком в UI |
|
||
| Автономный | Применение действий в рамках политики подключения |
|
||
|
||
Для опасных действий поддержать обе согласованные политики: обязательное подтверждение либо автономное выполнение по явному административному разрешению. По умолчанию — подтверждение.
|
||
|
||
Опасными считать удаление данных/объектов, восстановление backup/БД, изменение прав, управления устройствами, firewall, маршрутизации, интерфейсов, туннелей, интеграций и запускаемой нагрузки. Класс действия задаётся сервером, а не моделью.
|
||
|
||
Эффективный доступ — пересечение прав владельца, подключения, разрешённых операций, серверов, режима, срока, лимитов и защит объектов. Глобальные действия требуют отдельного допуска. Список серверов задаётся явными ID; новые серверы автоматически не включаются.
|
||
|
||
`tools/list` фильтруется по разрешениям, но каждый вызов независимо проходит полный контроль. Запрещённые поля и зависимости нельзя скрыть внутри разрешённой операции.
|
||
|
||
### 2.2. Авторизация
|
||
|
||
- Именные Bearer-токены: владелец, срок, назначение, область доступа; хранить криптографические хеши. Полное значение показывать один раз. Ротация создаёт новый токен и отзывает старый.
|
||
- OAuth 2.1: Authorization Code + PKCE, discovery, resource/audience, точные redirect URI, ротация refresh-токенов и отзыв согласий. Первый релиз использует предварительно зарегистрированных OAuth-клиентов.
|
||
- Отдельный OAuth-модуль backend использует портал для подтверждения личности и выдаёт собственные MCP-токены. JWT портала AI-клиентам не передаётся.
|
||
- MCP требует авторизацию даже при `AUTH_REQUIRED=false`. Управление доступом в web UI требует проверенного входа через портал.
|
||
- MCP-токены принимаются только MCP endpoint и необходимыми OAuth endpoint; обычный REST и `/api/mcp/*` их не принимают. Это проверяется отдельными тестами.
|
||
- Политики, отзыв, блокировка подключения и срок проверяются на каждом вызове и перед каждой новой стадией записи. Немедленный отзыв роли непосредственно в портале не обещать без отдельного механизма синхронизации; UI показывает момент последнего подтверждения прав владельца.
|
||
- Включить проверку Host/Origin для MCP, лимиты размера запроса и защиту browser-admin действий от CSRF. Секреты и токены не принимаются в query string.
|
||
- Адреса роутеров и внешних интеграций проверяются сервером: разрешённые назначения, схемы, порты и redirects. Приватные адреса разрешаются для зарегистрированной инфраструктуры; произвольный URL из аргумента модели не становится разрешённым назначением.
|
||
|
||
### 2.3. Секреты
|
||
|
||
- Пароли, приватные ключи, PSK, VPN-конфигурации и содержимое backup не возвращаются модели. Использовать `secretRef` и ссылки на подготовленные файлы; ввод и скачивание секретов — человеку в UI.
|
||
- Секреты хранятся зашифрованно; ключ шифрования задаётся вне БД. Ссылки проверяются по владельцу, назначению и области объектов.
|
||
- Маскирование применяется к ответам, ошибкам, планам, журналам, свободному тексту логов и экспорту. Сырые секретные payload не сохранять в журнале обращений.
|
||
- Текст устройств, комментарии и логи — недоверенные данные. Они не меняют политику и не исполняются как инструкции.
|
||
|
||
### 2.4. Лимиты и временный доступ
|
||
|
||
Начальные значения на подключение: 60 вызовов в минуту, 4 одновременных чтения, 10 запусков изменяющих операций в час, не более 5 серверов и 100 изменяемых объектов на план. Это исходные настройки, доступные для изменения администратором.
|
||
|
||
- Одна одновременная запись на сервер; глобальные операции используют отдельную эксклюзивную блокировку.
|
||
- Бюджеты изменения учитывают фактические шаги и дочерние операции. Объединение в batch и повтор запроса не обходят ограничения; повтор по ключу идемпотентности не списывает бюджет повторно.
|
||
- Автоматическое восстановление резервирует бюджет при запуске исходного плана, чтобы исчерпание лимита не заблокировало заранее разрешённое восстановление.
|
||
- Превышение возвращает `RATE_LIMITED` или `BUDGET_EXCEEDED` с временем повторной попытки, где оно определимо.
|
||
- Временный доступ оформляется отдельным ограниченным grant внутри подключения: операции, серверы, срок. По умолчанию — 30 минут, максимум — 24 часа; он не расширяет базовые разрешения подключения. После истечения прекращается именно этот доступ.
|
||
- Проверки чтения не создают бессрочных полномочий на отложенное применение. Очередь и последующие этапы заново проверяют срок.
|
||
- Bandwidth-тесты имеют отдельное разрешение и обязательные границы скорости/длительности; один тест на затронутый роутер. Наблюдателю недоступны. Без явно заданного профиля нагрузки тест не запускается.
|
||
|
||
### 2.5. Защищённые объекты и симулятор
|
||
|
||
- Администратор отмечает защищённые серверы, management-интерфейсы, маршруты, firewall-правила и иные объекты по стабильному ID. Наследуемые зависимости также участвуют в проверке.
|
||
- Защита имеет два режима: `deny` и `human-approval-required`. Разрешение опасных автономных действий не снимает эту защиту.
|
||
- Начально автоматически защитить используемые управляющие интерфейсы/адреса и известные зависимости; неполное определение management-пути отображать как неизвестность и блокировать его автономное изменение.
|
||
- Изменять список защит может только человек с административным доступом MCP. Модель не может снять защиту перед своим действием.
|
||
- В UI реализовать симулятор: подключение + инструмент + параметры → `denied`, `approval-required` или `allowed`, эффективные лимиты и цепочка причин. Симулятор использует тот же evaluator, не резервирует бюджет и не меняет устройства.
|
||
|
||
## 3. Планы, применение, аудит и восстановление
|
||
|
||
### 3.1. Публичные интерфейсы и версии
|
||
|
||
Доменные инструменты чтения и подготовки имеют отдельные схемы, например `mm_servers_list`, `mm_users_create_plan`, `mm_firewall_rule_update_plan`. Общие инструменты: `mm_capabilities_get`, `mm_change_get`, `mm_change_apply`, `mm_change_cancel`, `mm_operation_get`.
|
||
|
||
- Списки возвращают источник, время наблюдения, предупреждения и курсор. По умолчанию — 100 объектов, максимум — 500, если раздел задаёт меньший предел.
|
||
- Единые коды ошибок: `PERMISSION_DENIED`, `APPROVAL_REQUIRED`, `STATE_CONFLICT`, `PLAN_EXPIRED`, `UNSUPPORTED_CAPABILITY`, `RATE_LIMITED`, `BUDGET_EXCEEDED`, `DEVICE_UNAVAILABLE`, `AUDIT_UNAVAILABLE`, `RESET_REQUIRED`. Неопределённый результат записи представлен состоянием операции, а не обычной повторяемой ошибкой.
|
||
- Реестр содержит версию инструмента и схемы. Совместимые добавления полей не меняют смысл разрешений. Несовместимое изменение получает новое имя инструмента с суффиксом версии; старый инструмент объявляется устаревающим и сохраняется минимум на один minor-релиз и 90 дней, если безопасность не требует немедленного отключения.
|
||
- Новые инструменты не добавляются автоматически к ранее выданным разрешениям. Сохранённый план привязан к версии схемы, обработчика и политики; несовместимый план становится неприменимым.
|
||
- Заполнить MCP-аннотации чтения, разрушительности, идемпотентности и внешнего доступа. Аннотации помогают клиенту, но не заменяют серверные проверки.
|
||
|
||
### 3.2. План и состояния
|
||
|
||
План неизменяем: ID, инициатор, подключение, версия политики/инструмента, серверы и объекты, изменения до/после, зависимости, отпечатки исходного состояния, риск, срок, порядок действий, проверки и доступное восстановление.
|
||
|
||
- Срок обычного плана — 15 минут; оптимизационного — максимум 5 минут и не дольше пригодности измерений.
|
||
- Подтверждение относится к конкретному содержимому и одному запуску. Модель подтверждать планы не может.
|
||
- Перед записью повторно проверяются права, защищённые объекты, срок, бюджет и фактическая конфигурация. Изменение исходного состояния требует нового плана; пересчитывать одобренный план запрещено.
|
||
- `mm_change_apply(planId, idempotencyKey)` создаёт или возвращает существующую операцию. Область ключа — подключение и действие; одинаковый ключ с другим payload отклоняется.
|
||
- План: `draft`, `awaiting-approval`, `approved`, `executing`, `completed`, `cancelled`, `expired`, `invalidated`. Операция: `pending`, `running`, `applied`, `rejected`, `partial`, `unknown`. Проверка отдельно: `pending`, `passed`, `failed`, `inconclusive`.
|
||
- Длительная работа возвращает `operationId`. Отключение AI-клиента не перезапускает её. Отмена гарантируется до первого внешнего шага; после начала возможна только безопасная остановка между шагами с фиксацией результата.
|
||
- UI, MCP и контроллер используют общие блокировки. Истечение lease не означает право повторить неопределённую запись: сначала сверка и ограждение старого исполнителя.
|
||
|
||
### 3.3. Массовые изменения и контроль расхождений
|
||
|
||
- Для независимых изменений на нескольких серверах обязательна первая пробная стадия на одном сервере. Сервер задаётся в плане; по умолчанию — минимальный разрешённый ID среди целей.
|
||
- Только после успешной проверки продолжается применение по одному серверу. Между стадиями повторно проверяются права, срок, бюджет и конфигурация. Сбой останавливает оставшиеся стадии.
|
||
- Связанные изменения сетевого пути могут затронуть соседние устройства ещё на первой стадии. План показывает эту область влияния; такие действия не выдаются за независимую пробу и требуют явно проверенного порядка зависимостей.
|
||
- Первые 24 часа после успешного применения проверять отпечатки затронутой конфигурации раз в минуту; затем для активных профилей Route AI — в его цикле, для остальных — по запросу пользователя. Сравнивать конфигурацию, исключая динамические счётчики и временные поля.
|
||
- UI показывает ожидаемое/фактическое состояние, время обнаружения и связанные операции. Причину «ручное изменение» ставить только при наличии доказательства; иначе — «внешнее изменение, источник неизвестен».
|
||
- Чужое изменение приостанавливает затронутый профиль, инвалидирует конфликтующие планы и требует явного возобновления. Автоматического возврата к желаемому состоянию нет.
|
||
|
||
### 3.4. Надёжность аудита и восстановление
|
||
|
||
- Сохранить намерение и начало операции до первого изменения устройства. При недоступном аудите новые записи не начинаются; вернуть `AUDIT_UNAVAILABLE`.
|
||
- Перед каждым внешним шагом сохранять его намерение. Если после записи сохранить результат не удалось, остановить следующие шаги; после восстановления считать незавершённый шаг неопределённым и сверить состояние.
|
||
- Журнал обращений, административный аудит и события RouterOS — разные сущности. Обращения включают чтение, отказы и ошибки; административный аудит — выдачу/отзыв доступа, политики и подтверждения.
|
||
- Потеря ответа не доказывает, что запись не состоялась. При `partial`/`unknown` не повторять действие автоматически. Между роутерами транзакционной атомарности нет.
|
||
- Использовать существующие ревизии, где они есть; явно показывать отсутствие автоматического отката в других разделах. Восстановление — отдельный план с проверкой отсутствия чужих изменений.
|
||
- Для восстановления самой БД вести fsync-журнал обслуживания в постоянном volume вне восстанавливаемой PostgreSQL: только идентификаторы, хеши и состояния без секретов. Недоступность этого журнала блокирует восстановление. После операции импортировать квитанцию в аудит.
|
||
- До восстановления БД закрывать streams, останавливать фоновые задачи и получать эксклюзивную блокировку. После него аннулировать MCP-токены, OAuth-разрешения, планы и grants автопилота через смену поколения доступа, сохраняемого вне восстанавливаемой БД.
|
||
- После рестарта сверять незавершённые операции; не считать их автоматически успешными или неуспешными.
|
||
|
||
## 4. Самостоятельный web-раздел MCP
|
||
|
||
Использовать существующий стиль base-nova и компоненты ReUI. Раздел находится в основном меню, а не внутри общих настроек.
|
||
|
||
| Вкладка | Содержимое |
|
||
| --- | --- |
|
||
| Обзор | Недавняя активность, выполняемые операции, подтверждения, ошибки, отказы, бюджеты и выключатель MCP |
|
||
| Подключения | Выпуск/отзыв токенов, OAuth-согласия, сроки, временный доступ, инструкции HTTP/stdio и проверка подключения |
|
||
| Разрешения | Режимы, серверы, инструменты, опасные действия, лимиты, защищённые объекты и симулятор |
|
||
| Обращения | Все вызовы инструментов, чтение, отказы, ошибки и связи с операциями |
|
||
| Планы и операции | Изменения, одобрение/отклонение, стадии массового применения, сверка и восстановление |
|
||
| Настройки | Общие пределы, OAuth-клиенты, сроки хранения, сетевые назначения и версия API |
|
||
|
||
### Права web-раздела
|
||
|
||
- `mm:mcp:read` — обзор, обращения и операции в разрешённой области.
|
||
- `mm:mcp:approve` — одобрение; дополнительно необходимы права на само действие и все объекты.
|
||
- `mm:mcp:admin` — подключения, политики, защиты, OAuth-клиенты и настройки.
|
||
- `mm:mcp:pause` — остановка новых запусков MCP.
|
||
- Существующий `mm:settings:admin` даёт административный доступ к разделу для начальной настройки. Новые права включить в контракт интеграции с порталом. Права управления MCP не публиковать как действия MCP-инструментов.
|
||
|
||
### Выдача и проверка доступа
|
||
|
||
- Мастер: владелец → серверы/инструменты → режим/опасные действия → лимиты/защиты → срок → проверка политики → выдача.
|
||
- Карточка показывает права, срок, способ входа, последнее обращение и причину блокировки. Статус активности основан на обращениях, а не на выдуманном постоянном соединении stateless HTTP.
|
||
- Изменение политики показывает diff и фиксируется в аудите. Отзыв блокирует новые вызовы/стадии и закрывает ожидания follow; уже отправленная RouterOS-запись не считается отменённой.
|
||
- Проверка подключения выполняет initialize/согласование возможностей и разрешённое чтение без создания плана и без записей на роутер. Backend-проверка использует реальный механизм авторизации с внутренним credential, который не показывается UI и немедленно отзывается; отдельно дать инструкции проверки из фактического AI-клиента.
|
||
|
||
### Мониторинг
|
||
|
||
- Обращение содержит ID, время, подтверждённую личность, подключение, инструмент/версию, серверы/объекты, решение политики, длительность, код результата, plan/operation/job ID.
|
||
- Карточка показывает нормализованные и маскированные параметры/результат с лимитом размера и признаком усечения. Сырые Authorization headers, секреты и неограниченные тела не сохраняются.
|
||
- Фильтры: время, подключение, пользователь, инструмент, сервер, результат. Пагинация серверная, фильтры — в URL. SQL ограничивает область до агрегации и выдачи.
|
||
- Ссылки ведут к плану, операциям, конфигурационным расхождениям и отфильтрованному `/logs`. Записи глобальных действий доступны только при соответствующем глобальном праве.
|
||
- Неавторизованные обращения сохраняются с минимальными метаданными, без токена и произвольного тела; повторяющиеся отказы ограничиваются по частоте с учётом подавленных событий.
|
||
- Обновление раз в 5 секунд, пока вкладка видима. Показать время последнего успешного обновления и деградацию при ошибке.
|
||
- Выключатель MCP запрещает новые вызовы/запуски и закрывает follow. Уже начатые записи завершаются или сверяются. Route AI имеет отдельную аварийную паузу; дополнительно дать объединённое действие «Остановить автоматические изменения», включающее оба механизма.
|
||
|
||
## 5. Покрытие приложения, пользователи и интерфейсы
|
||
|
||
### 5.1. Существующие разделы
|
||
|
||
Включить чтение и поддерживаемые изменения серверов, `/users`, BGP/OSPF, маршрутов, фильтров, firewall, GRE, WireGuard, IPsec, VXLAN, контейнеров, мониторинга, трафика/NetFlow, событий, алертов, сертификатов, backup, расписаний, интеграций и системных настроек. Загрузка/скачивание секретных файлов остаются в человеческом UI через ссылки.
|
||
|
||
### 5.2. Пользователи `/users`
|
||
|
||
- Список, карточка, создание, редактирование, удаление, активность, роли, настройки прав и привязки к серверам/интерфейсам/peers.
|
||
- Изменение ролей/прав требует `mm:settings:admin`; прочие операции — существующие `mm:users:*`.
|
||
- Выдача ограничивается видимыми серверами/привязками; редактирование пользователя с зависимостями вне области подключения запрещается. Не показывать скрытые права и привязки как отсутствующие: отмечать неполноту карточки.
|
||
- Проверять существование, однозначность и уникальность привязок. Изменения `/users` не меняют JWT-разрешения портала.
|
||
|
||
### 5.3. Новое управление интерфейсами
|
||
|
||
Добавить общие сервисы, REST API, UI и инструменты подготовки планов.
|
||
|
||
| Объект | Возможности |
|
||
| --- | --- |
|
||
| Ethernet | Состояние, включение/отключение, имя, comment, MTU и подтверждённые параметры линка |
|
||
| Bridge | Создание, настройка, удаление; порты и их параметры |
|
||
| VLAN | VLAN-интерфейсы, bridge VLAN membership и filtering |
|
||
| IP | Создание, изменение, отключение и удаление IPv4/IPv6-адресов |
|
||
| Туннели/VPN | Существующие GRE, WireGuard, IPsec и VXLAN |
|
||
|
||
- Физические Ethernet-интерфейсы не создавать/удалять. Динамические и аппаратные свойства не изменять без подтверждённой поддержки.
|
||
- Проверять зависимости адресов, bridge, VLAN, VRF, маршрутов, firewall, туннелей, probes и пользователей. Использовать стабильный RouterOS ID и отпечаток, а не только имя.
|
||
- VLAN: валидировать parent, ID, tagged/untagged, PVID и CPU/management-доступ. VLAN filtering применяется как связанный план с явным порядком действий.
|
||
- Не выполнять неявное каскадное удаление. План перечисляет все изменения зависимостей.
|
||
- Новые DTO сохраняют реальные типы bridge/VLAN; существующую упрощённую классификацию пользовательских привязок расширять обратно совместимо, не подменяя неизвестный тип Ethernet.
|
||
|
||
## 6. Раздел `/logs` через MCP
|
||
|
||
Переиспользовать существующие контракты, PostgreSQL и `router-logs-query`/`router-logs-collector`. Второй сборщик не создавать.
|
||
|
||
| Инструмент | Назначение |
|
||
| --- | --- |
|
||
| `mm_logs_query` | История, фильтры, поиск, курсор |
|
||
| `mm_logs_get` | Одна запись |
|
||
| `mm_logs_context_get` | До 10 событий до/после на том же сервере |
|
||
| `mm_logs_summary_get` | Статистика и состояние сбора доступных серверов |
|
||
| `mm_logs_follow` | Ограниченное ожидание новых событий |
|
||
| `mm_logs_export` | Подготовка CSV/JSON с SQL-бюджетом и квотой хранения |
|
||
| `mm_logs_export_read` | Чтение подписанной scoped-выгрузки частями base64 с SHA-256 |
|
||
| `mm_logs_settings_get` | Административное чтение настроек |
|
||
| `mm_logs_settings_update_plan` | План изменения сборщика |
|
||
|
||
- Сохранить фильтры: сервер, период, уровни, topics, буквальный регистронезависимый поиск, presets `login-failure`, `interfaces`, `routing`, `firewall`. В MCP уровни/topics — массивы; значения поля объединяются OR, поля — AND.
|
||
- Чтение — `mm:servers:read`, настройки — `mm:settings:admin`. Ограничения серверов применяются в SQL до подсчёта, пагинации и экспорта. Summary не выдаёт административный блок настроек.
|
||
- История отключённых/удалённых серверов доступна по разрешённому историческому ID. Чужая запись по ID возвращается как не найденная.
|
||
- По умолчанию последние 15 минут, 100 записей, максимум 200. Сохранять watermark и непрозрачный курсор, привязанный к фильтрам/области и поколению данных.
|
||
- Follow: один включённый сервер, до 30 секунд и 200 событий. Использовать существующую подписку ускоренного опроса, гарантированно освобождая её при завершении/отмене/отзыве. Общий предел — четыре опрашиваемых устройства.
|
||
- Follow не включает отключённый сборщик. При обслуживании/восстановлении БД закрывать ожидания, менять поколение курсоров и возвращать `RESET_REQUIRED`.
|
||
- Экспорт: те же права/фильтры/маскирование, максимум 50 000 строк, нейтрализация CSV-формул. Результат — авторизованная ссылка на файл со сроком 15 минут и повторной проверкой доступа при скачивании.
|
||
- Настройки сохраняют диапазоны 5–3600 секунд и 1–365 дней. Отключение сбора/сокращение хранения — опасные изменения; план показывает период последующего удаления.
|
||
- Сохранять `rawTime`, `eventAt`, `receivedAt`, `effectiveAt`, `timeKind`, `generation`, ошибки и возможные разрывы. Время без timezone не считать UTC. Отсутствие событий не доказывает исправность.
|
||
- События маршрутизации и интерфейсов связываются с окнами операций Route AI как дополнительные свидетельства, а не как единственный триггер переключения.
|
||
|
||
## 7. Route AI, OSPF, ECMP, RPF и VRF
|
||
|
||
### 7.1. Общий анализ и инструменты
|
||
|
||
- Перенести расчёт из браузера на сервер; UI/MCP используют один алгоритм и настройки.
|
||
- Разделять измеренные RTT/потери/bandwidth, загрузку, модельные оценки и неизвестные значения. Загрузка не считается пропускной способностью; backend latency не считается RTT сетевого пути.
|
||
- Метрика содержит источник, время успешного измерения, направление, интерфейс, семейство адресов и VRF/таблицу. DL/UL нормализуются относительно анализируемого пути. Ввести отдельное время успешного bandwidth-теста.
|
||
- Начальная свежесть: RTT/потери — 5 минут, bandwidth — 60 минут. Модельные значения разрешены для сценариев, но не автономной записи. Неизвестное не заменяется нулём или успешным состоянием.
|
||
- Профили Community задают разрешённые WAN/узлы/выходы/таблицы, закрепления, обязательные ограничения качества, веса и ECMP.
|
||
- Начальные веса: RTT 60%, скорость 30%, потери 10%. Рейтинг 0–100: RTT `max(0,100-RTT*0.6)`, speed `min(100,(DL+UL)/18)`, loss `100-lossPct`; взвешенная сумма округляется. Это эвристический рейтинг, не вероятность и не доказательство глобального оптимума.
|
||
- Неизвестная метрика не перераспределяет вес в пользу кандидата. Для автономности все метрики с ненулевым весом должны быть свежими и измеренными. Сначала ограничения/закрепления, затем рейтинг; нет подходящего пути — сохранить состояние и объяснить причину.
|
||
- Инструменты: `mm_routing_topology_get`, `mm_routing_measurements_query`, `mm_routing_measurement_plan`, `mm_route_optimizer_analyze`, `mm_route_optimizer_compare`, `mm_route_optimizer_plan`, `mm_ospf_optimizer_plan`, `mm_ecmp_plan`, `mm_rpf_plan`, `mm_vrf_plan`, `mm_routing_verify`, `mm_route_controller_get`, `mm_route_controller_update_plan`.
|
||
- По умолчанию вернуть лучшие 20 вариантов, максимум 100, с фильтрами. Не материализовать неограниченный декартов набор путей.
|
||
|
||
### 7.2. Community и рекурсивные маршруты
|
||
|
||
- Определять фактическую конфигурацию из RouterOS, управляемых фильтров, GRE и рекурсивных маршрутов. Настроенный gateway и наблюдаемый путь — разные поля.
|
||
- Цепочка Home → JumpHost → Exit подтверждается наблюдениями в нужных интерфейсах/таблицах, а не одним рейтингом. Если путь не доказан, не показывать его как текущий факт.
|
||
- Новый gateway выбирать из реального каталога; проверять next-hop resolution, таблицу, scope/target-scope, family и туннель. Не копировать текущий gateway в рекомендацию другого пути.
|
||
- Учесть, что существующий рекурсивный редактор заменяет весь управляемый набор: план показывает весь затронутый набор. Неуправляемые маршруты/фильтры сохраняются; конфликт владения блокирует запись.
|
||
- Реализовать отдельный IPv6-адаптер, не применять IPv4-парсер к IPv6.
|
||
|
||
### 7.3. OSPF
|
||
|
||
- Сохранять конкретные template ID, интерфейсы, instance/area, OSPFv2/v3, VRF и cost до/после. Применять сохранённый план без повторного ранжирования.
|
||
- Неоднозначные router-id/peer/interface, неизвестные значения и пробы другого назначения блокируют автономное применение. Область чтения вспомогательных серверов также проверяется по правам.
|
||
- Поддержать два режима: основной/резервные пути и равностоимостная ECMP-группа. Для ECMP выбранные пути получают равные cost; резервные — более высокие допустимые стоимости. Упорядочивание по rank не должно незаметно уничтожать ECMP.
|
||
- Сохранить исходные cost для восстановления; перед восстановлением убедиться в отсутствии чужих изменений.
|
||
- Проверять costs, соседства, BFD, маршруты и контрольную связность. Локальная оптимизация не объявляется глобальной оптимизацией сети.
|
||
|
||
### 7.4. ECMP, RPF и VRF
|
||
|
||
- ECMP — управляемые равностоимостные статические/рекурсивные маршруты и OSPF costs. BGP multipath — только при подтверждённой поддержке конкретного устройства.
|
||
- «Максимум путей» ограничивает выбор контроллера; не представлять его универсальным параметром RouterOS. Hash-policy соответствует реальным свойствам устройства; обычный ECMP не предоставляет per-packet.
|
||
- Глобальная hash-policy показывает влияние на весь роутер. IPv4 и IPv6 — отдельные планы/проверки.
|
||
- Проверять NAT, connection tracking, FastTrack и асимметрию; сторонние правила не переписывать автоматически.
|
||
- RPF для IPv4: `disabled` отображается в RouterOS `no`; `loose` и `strict` проверяются на совместимость с policy routing/асимметрией. Для IPv6 явно возвращать неподдерживаемость этой настройки.
|
||
- Разделять VRF, routing table и routing rule. Поддержать создание, состав, порядок и удаление с проверкой зависимостей.
|
||
- Перенос интерфейса показывает влияние на адреса, routing instances, туннели, probes и management. Route leaking — только явно заданными маршрутами, без автоматического обмена всеми таблицами.
|
||
- Capabilities проверяются по версии RouterOS и доступным свойствам, а не только по номеру версии.
|
||
|
||
### 7.5. Серверный контроллер
|
||
|
||
- Работает без AI-клиента; отдельный человеческий grant задаёт профиль, срок, серверы, действия, бюджеты и защиты. По умолчанию выключен. MCP может готовить изменение настроек, но не расширять grant.
|
||
- Цикл — раз в минуту, без автоматического запуска bandwidth-тестов. Обычное переключение: улучшение минимум 15 пунктов в трёх свежих наблюдениях; cooldown — 10 минут.
|
||
- Гистерезис — 10 пунктов: ожидающее переключение сбрасывается при преимуществе ниже 5. Повторное чтение той же пробы не считается новым наблюдением.
|
||
- Отказ текущего пути — три последовательные неуспешные проверки и подтверждённый резерв. Неизвестность не считается отказом. Failover не обходит защиты, права и аудит.
|
||
- Предел переключений профиля — 3 в час, включая failover и восстановление; дальнейшие действия требуют человека. Зарезервированное восстановление незавершённой операции допускается в её рамках.
|
||
- После старта сверять фактическую конфигурацию. При ручном/внешнем изменении, `partial`, `unknown` или неуспешной проверке приостановить затронутую область.
|
||
- Один исполнитель на профиль через lease; записи дополнительно защищены блокировкой сервера. Аварийная пауза не требует подготовки плана.
|
||
- Проверка после изменений — до 120 секунд: маршруты, next-hop, соседства/BFD, контрольная связность и сопутствующие `/logs`.
|
||
- Автовосстановление разрешено только заранее выданной политикой, при известном исходном состоянии и отсутствии чужих изменений. Невозможность восстановить устройство после потери управления не скрывать.
|
||
- Автономные изменения management-интерфейсов допустимы только при зарегистрированном и проверенном независимом канале управления и соответствующем допуске; иначе требуется человек и не действует обход защищённых объектов.
|
||
|
||
#### Следующий этап: scoped controller и подтверждённое восстановление
|
||
|
||
Read-only аудит 24 октября подтвердил: ручной scoped executor ещё не реализует весь цикл. Отдельный зашифрованный configuration checkpoint до post-probe и signed post-probe receipt теперь реализованы; подтверждённый отказ отличается от unknown. Profile CAS и per-profile lease реализованы. Проверка management-канала всё ещё требует доступности primary и alternate, сам PATCH использует primary. Inverse engine, alternate transport и profile-version у transport отсутствуют; снятие guards профиля до полной приёмки не допускается.
|
||
|
||
- [ ] Сохранить зашифрованное исходное тело одной owned rule, исходный candidate ID, original/desired/dependency proofs, native ID, endpoint epochs, profile/version и operation/receipt ID. Публичный preview показывает только изменение Community/gateway.
|
||
- [x] Точный PATCH/read-back отделён от durable encrypted `CONFIG_APPLIED` и последующей подписанной пробы. Lost/ignored/collateral PATCH или неподтверждённый read-back не создаёт checkpoint: ни повторного PATCH, ни автоматического inverse. Положительная конфигурация после lost response не подменяет отсутствующую квитанцию.
|
||
- [ ] После подтверждённой записи проверять desired context, route/next-hop, BGP/BFD, control probe и связанные `/logs` до 120 секунд. Только подтверждённый отказ допускает заранее разрешённый inverse; неизвестность приостанавливает профиль.
|
||
- [ ] Один inverse engine для ручного recovery plan и автоматического восстановления: тот же owned native ID и точное исходное тело. Непосредственно перед intent и transport нужны свежие desired-state/dependency proofs, SLA и проба исходного кандидата в текущем after-state context; прежняя досвитчевая подпись недостаточна.
|
||
- [ ] Резервировать бюджет forward/inverse заранее. Срок recovery ограничить 120 секундами и минимальным сроком profile grant, owner/credential/policy/channel. Один durable recovery intent; после него повторить проверки прав, scope, epochs, защиты и аварийной паузы. Потерянный inverse ответ не повторять; reconcile/restart только читает.
|
||
- [ ] Реализовать фиксированный заранее разрешённый alternate transport с сохранённой идентичностью RouterOS и channel ID/generation/expiry. При потере primary проверять alternate независимо; не использовать его для повтора неизвестной forward-записи.
|
||
- [ ] После inverse сохранить original-state proof, успешную пробу и отдельный `RECOVERY_VERIFIED` checkpoint. Controller хранит ожидаемый proof вместе с candidate ID; lease/server locks и CAS версии профиля не позволяют старому tick перезаписать новый человеческий grant.
|
||
- [ ] SQL/HTTP: успешный switch; подтверждённый post-fault → verified inverse; неисправный исходный кандидат; unknown forward/no inverse; lost inverse/no replay; отзыв grant/epoch/protection до и после intent; restart/reconcile; concurrent tick/profile edit; emergency pause. Включать scoped controller только после этой приёмки.
|
||
- [ ] Два CHR использовать для exact native PATCH/read-back, pairwise IPv4/IPv6 probes, отказов и очистки. Независимые Home → JumpHost → ExitNode, прямой/обратный маршрут и end-user traffic failover остаются отдельной приёмкой с третьим физическим узлом; пользователь подтвердил, что сейчас его нет.
|
||
|
||
#### Следующий этап WireGuard: полный цикл конфигурации
|
||
|
||
- [x] Собственный временный отключённый WG fixture на двух CHR подтвердил непустое generic/WireGuard ID соответствие и basic PATCH; объекты удалены с восстановлением baseline. Это отдельное наблюдение до финального import/activation helper, а не приёмка forwarding/key rotation.
|
||
- [x] Общие codecs соблюдают `includePrivateKey=false`, безопасно экранируют RSC и сохраняют disabled peers. Строгий bounded import отклоняет неподдерживаемые строки/поля, несколько интерфейсов, чужую binding и непредставимые параметры; ошибки и preview не раскрывают ключи.
|
||
- [ ] `network.wireguard.export` / `mm_wireguard_export_plan`: зашифрованный временный human-only artifact, скачивание владельцем через портал, receipt projection и проверки отзыва, expiry, source drift и tamper.
|
||
- [x] `network.wireguard.import.preview` / `mm_wireguard_import_preview` принимает owner/purpose/server-bound `contentRef` с purpose `wireguard-import-config`; preview показывает все поддержанные поля, counts и только наличие ключей. Raw config не попадает в публичные планы/receipts.
|
||
- [x] `network.wireguard.import` / `mm_wireguard_import_plan`: общий REST/MCP guarded multi-peer executor, disabled preparation → staged activation, private source/dependency proofs, locks, per-command intents/fences и полный read-back. Компенсация и повтор unknown запрещены. SQL/HTTP подтвердил IPv4/IPv6, несколько peers, secret refs, partial/lost outcomes, no replay и отсутствие утечек; native import/activation остаётся отдельной приёмкой.
|
||
- [ ] Отдельно `config.wireguard.revisions.restore` / `mm_wireguard_revision_restore_plan`: строгая bounded проверка revision/payload, явный inventory удалений, keys и clearing полей, dependencies/protections/NetFlow, command budgeting и whole-section prefix verification. Некорректный snapshot нельзя превращать в пустую секцию и удалять существующие объекты.
|
||
|
||
## 8. Хранение, эксплуатация и этапы
|
||
|
||
### Данные и начальные настройки
|
||
|
||
- PostgreSQL: подключения, credentials/grants, OAuth-клиенты/согласия, secret references, политики/версии, защищённые объекты, планы, операции/шаги, обращения, административный аудит, профили/закрепления и решения Route AI, leases и расхождения.
|
||
- Состояние управления восстановлением БД: минимальный журнал обслуживания и поколение доступа на постоянном volume вне PostgreSQL. Ключи шифрования и подписи не хранить внутри backup БД.
|
||
- `/logs` использует существующие таблицы и собственную retention-политику. Новые данные MCP входят в полный backup и очистку с учётом правил аннулирования доступа.
|
||
- Обращения — 30 дней, административный аудит и завершённые операции — 180 дней, готовые файлы экспорта — 15 минут. Незавершённые операции/ожидающие планы автоматической очисткой не удалять; планы по истечении переводить в `expired`.
|
||
- Уменьшение retention — административное изменение с показом последствий. Удаление файлов и записей выполняется пакетами.
|
||
- Route AI хранит настройки на сервере. Старые браузерные значения импортируются явно, однократно и версионированно; `autoApply` не переносится автоматически.
|
||
- Наблюдаемость backend: число вызовов/отказов, задержки, очередь, лимиты, состояние аудита, неопределённые операции, цикл контроллера и активные follow. В метрики не включать секреты и неограниченные labels объектов.
|
||
- MCP и контроллер изначально выключены; новые подключения — наблюдатели. Не запускать MCP в открытом режиме при отсутствии конфигурации авторизации.
|
||
|
||
### Этапы реализации
|
||
|
||
1. Реестр покрытия, общие контракты, evaluator политик, блокировки, аудит и границы REST/MCP credentials.
|
||
2. MCP HTTP/stdio, OAuth/токены, версии инструментов и базовое чтение.
|
||
3. Самостоятельный web-раздел `/mcp`: выдача доступа, разрешения, симулятор, обращения и проверка подключения.
|
||
4. Все существующие операции приложения, `/users` и `/logs`; планы, подтверждения, лимиты и защищённые объекты.
|
||
5. Ethernet, bridge, VLAN и IPv4/IPv6-адреса в API/UI/MCP; контроль зависимостей.
|
||
6. Исправленный OSPF pipeline, серверный анализ Route AI и реальное применение Community/IPv6.
|
||
7. ECMP/RPF/VRF, контроллер, поэтапное применение, проверка результата и контроль расхождений.
|
||
8. Стендовая приёмка, документация подключения, эксплуатационные инструкции и поэтапное включение: наблюдение → подтверждения → ограниченная автономность.
|
||
|
||
## 9. Проверки и критерии приёмки
|
||
|
||
- Права: три режима, обе политики опасных действий, ограничения серверов/полей, защиты зависимостей, временные grants и отсутствие саморасширения доступа.
|
||
- Авторизация: PKCE, redirect URI, audience/resource, истечение, rotation/replay refresh-токенов, отзыв, запрет MCP-токенов в REST/admin API, Host/Origin/CSRF и сетевые назначения.
|
||
- Политики: симулятор и реальный evaluator дают одинаковое решение на неизменном состоянии; бюджет/защита не обходятся batch, alias инструмента, временным grant или повтором.
|
||
- Планы: точное применение одобренного содержимого, конфликт версий, идемпотентность, гонка UI/MCP/контроллера, отмена, остановка массовой операции после первой неуспешной стадии.
|
||
- Аудит: недоступность до записи блокирует действие; сбой после отправки порождает сверку; восстановление БД не возвращает действующие токены, одобрения и grants. Внешний журнал переживает restore.
|
||
- Web UI: одноразовая выдача токена, роли вкладок, фильтры/пагинация, детали отказов, усечение/маскирование, скрытая вкладка не опрашивает backend, отзыв и аварийная остановка отражают фактический результат.
|
||
- Пользователи: CRUD/активность/роли/привязки, скрытые зависимости, уникальность, отсутствие воздействия на аккаунты портала/RouterOS.
|
||
- Интерфейсы: стабильная идентичность, переименование, зависимости, VLAN/PVID/filtering, CPU-port, IPv4/IPv6 и защищённый management-путь.
|
||
- Логи: SQL-ограничения до агрегации, чужие ID, история удалённых устройств, watermark, смена фильтров, follow/отмена/отзыв, освобождение подписок, разрывы и reset, экспорт 50 000, CSV и истечение ссылки.
|
||
- Метрики Route AI: точное направление DL/UL, family/VRF/interface/peer, freshness, повтор старой пробы не считается новым наблюдением; модель и загрузка не выдают себя за bandwidth.
|
||
- Маршрутизация: реальные gateway, owned/unmanaged конфликты, весь набор рекурсивных маршрутов, OSPFv2/v3 и равные costs, ECMP hash-policy, NAT/FastTrack/асимметрия, RPF и VRF/route leaking.
|
||
- Контроллер: закрепления, ограничения качества, hysteresis/cooldown, максимум переключений, единственный исполнитель, старт после рестарта, ручное вмешательство, неизвестный исход и бюджет восстановления.
|
||
- Совместимость: официальный MCP Inspector, HTTP и stdio, клиент с OAuth и клиент с Bearer; тесты схем и миграций реестра разрешений.
|
||
- Запустить соответствующие существующие backend/контрактные тесты, logs PostgreSQL-интеграцию и новые MCP/web E2E. Нагрузку проверить на истории миллиона логов и больших каталогах; подтвердить ограниченную выдачу и отсутствие второго collector.
|
||
- Сетевую приёмку проводить на нескольких CHR с Home/WAN/JumpHost/Exit, IPv4/IPv6, OSPFv2/v3 и двумя VRF: отказ/возврат линка, асимметрия, потеря подтверждения, частичная запись, потеря управления и независимое восстановление. Новые сценарии сначала проверяются без production-изменений.
|
||
|
||
Итоговый критерий: администратор выдаёт проверяемый ограниченный доступ в отдельном разделе MCP, видит все обращения и решения политик, подтверждает изменения и отзывает доступ; UI, MCP и контроллер исполняют одинаковые правила, не обходят лимиты/защиты и показывают подтверждённые изменения отдельно от фактического результата проверки сети.
|
||
|
||
## 10. Источники и связанные документы
|
||
|
||
- [Логи MikroTik](logs.md) — существующий сборщик, API и ограничения.
|
||
- [Интеграция с auth-portal](integrate-auth-portal.md) — существующая идентификация и JWT-права.
|
||
- [MCP Authorization](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization).
|
||
- [MCP TypeScript SDK](https://ts.sdk.modelcontextprotocol.io/v2/get-started/packages).
|
||
- [MCP Tool Annotations](https://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/).
|
||
- [RouterOS IP Routing](https://help.mikrotik.com/docs/spaces/ROS/pages/328084/IP%2BRouting).
|
||
- [RouterOS IP Settings](https://help.mikrotik.com/docs/spaces/ROS/pages/103841817/IP%2BSettings).
|
||
- [RouterOS VRF](https://help.mikrotik.com/docs/spaces/ROS/pages/328206/Virtual%2BRouting%2Band%2BForwarding%2B-%2BVRF).
|
||
|
||
### Управляемые Community-фильтры и ревизии, 20 октября
|
||
|
||
- [x] `mm_filter_rules_replace_plan` и `mm_filter_revision_restore_plan`: общий REST/MCP `applyFiltersToServer`, совместные filters-write/network-read/BGP-read права, обязательное подтверждение человеком, scoped checksum ревизии и private HMAC источника/зависимостей. Реестр: 302 инструмента, REST 145 mediated / 62 excluded / 55 pending из 262.
|
||
- [x] Полная замена только одного собственного набора `bgp-in`, сохранение чужих цепочек и порядка, запрет неоднозначного ownership и удаления чужих Community-правил. Пустой список удаляет только собственный набор. Native read-back выполняется до сохранения метаданных и ревизии; unknown/partial не повторяются автоматически.
|
||
- [x] До dispatch повторно проверяются GRE/recursive, BGP/templates, OSPF/RIP/IS-IS, filter-select, таблицы/VRF, адреса/маршруты и server-wide protections. Metadata-only/no-op также проходят общий guard; необязательный `requireUnbound` требует отсутствия routing contexts.
|
||
- [x] Компилятор RouterOS 7 использует `set blackhole yes` и `set gw-interface` по проверенному имени GRE. Названия и описания Community остаются метаданными менеджера: `#` в routing-filter не поддерживается. Произвольные CLI escapes и menu IDs не используются. Для GRE поддержан проверенный ASCII-набор имени; кавычки, `$`, обратная косая черта и управляющие/разделительные символы отклоняются до записи, без автоматического переименования.
|
||
- [x] [Два CHR](mcp-chr-filter-write-acceptance.json), завершено 20 октября в 14:30:15 UTC: собственный отключённый GRE с пробелом в имени, blackhole/route, replace/no-op/copy/restore, round-trip многострочного описания. По 11 baseline fingerprints восстановлены. Предыдущие ошибки native compiler сохранены отдельно; оставшийся fixture удалён [отдельным подтверждённым планом](mcp-chr-filter-write-recovery.json).
|
||
- [ ] Распространение и выбор маршрутов по Community в работающем BGP, независимые пути и полный аварийный сценарий остаются частью незавершённой сетевой приёмки.
|
||
|
||
### Сводка мониторинга, 20 октября
|
||
|
||
- [x] Общий REST/MCP reader и `mm_uptime_overview_get`: SQL scope до samples/provenance, два уровня страниц, ограничения 1000 проб/20000 samples, архив выключенных серверов без нового опроса устройств.
|
||
- [x] Отдельная проекция MCP сохраняет unknown и настоящий ноль, timestamps/возраст, historical fallback и его истечение; будущие samples исключены и из REST. Сохранённые метрики не объявляются подтверждением текущего пути.
|
||
- [x] SQL подтвердил публичные лимиты, REST parity, скрытые 20001 samples и реальные blocked-read source/probe/owner/pause/cancel гонки. MCP/coverage, build, lint, probes/SQL logs и настоящий restore прошли; [отчёт](mcp-uptime-overview-acceptance.json). Текущий реестр: 303 tools, REST 146/62/54.
|
||
|
||
### DNS-сопоставление GRE endpoint, 20 октября
|
||
|
||
- [x] `mm_network_hosts_resolve` использует общий REST resolver: explicit global + прежнее network-write право, до 32 hostname/IP, IDNA, cache/pending dedup, 512 cache entries, 8 незавершённых lookup, 2 s/lookup и 10 s/пакет. Timeout/отмена сохраняют pending slot до реального завершения OS lookup.
|
||
- [x] Нули/unknown и literal IPv6 отделены; manager resolver не объявляется RouterOS resolver/проверкой пути. Mock/HTTP проверили бюджет, кэш, отзыв, отмену и REST disconnect; SQL подтвердил policy/observer/owner/pause без внешнего DNS или native записи. Реестр: 304 tools, REST 147/62/53. [Отчёт](mcp-network-host-acceptance.json).
|
||
- [ ] Трёхузловая приёмка остаётся открытой. Read-only проверка Debian-стенда: QEMU и `/dev/kvm` отсутствуют, 1 CPU, 1.9 GiB RAM, 3.6 GiB свободного диска. Это инвентаризация готовности, без установки/запуска VM или изменения стенда; [отчёт](mcp-chr-three-node-readiness.json).
|
||
|
||
- [x] Финальный общий контроль Community/uptime/DNS: 26/26 backend-профилей, MCP/SQL, SQL logs, настоящий pg_dump/restore, build/lint/models/coverage/diff-check. [Отчёт](mcp-routing-monitoring-regression-acceptance.json). Этот checkpoint не закрывает оставшиеся 53 REST-сценария и полную сетевую/external client приёмку.
|
||
|
||
### Привязка BGP-фильтров, 21 октября (результаты в UTC)
|
||
|
||
- [x] `mm_bgp_filter_binding_plan`: существующая input/output цепочка одного static peer, human-only и совместные BGP/filters/network права; полный private proof connection/filter/template/VRF/table, name/ID и native defaults, local override и nil/empty, guards/protections/no-op и read-back без неявного refresh.
|
||
- [x] Общий static BGP reader принят моделями и BGP export/binding SQL: точная negative D-flag query, dynamic отличается от unknown, invalid disabled/get/selection отклоняются.
|
||
- [x] [Два CHR](mcp-chr-bgp-filter-binding-acceptance.json): input/output отклоняют IPv4 через unmatched Community/implicit reject; clear восстанавливает пакеты, IPv6 сохраняется. Отдельные human peer restarts, 26 BGP packet checks (17 passed / 9 confirmed loss), все 22 baseline fingerprints восстановлены, SSH закрыт. Exit 0, 20 октября 18:24:44 UTC.
|
||
- [x] SQL/HTTP проверил default/ID contexts, template cycle, private/source/credential/no-poll/late-intent proof, protections для no-op и unknown без повторной записи. Полная регрессия 26 профилей + MCP/SQL/real restore/logs и build/lint/models/coverage прошла. [Отчёт](mcp-bgp-filter-binding-acceptance.json). Реестр 305, REST 147/62/53.
|
||
- [x] Типизированный `mm_bgp_community_policy_plan`: IPv4/IPv6 CIDR, exact/subnet с границами длины, keep/set/append/clear стандартных Community, accept/reject/continue, default action; создание/замена/удаление одной owned output-цепочки. Привязка — отдельным BGP-планом. SQL проверяет conjunctive permissions, обязательное подтверждение человека, native query ссылок, application intent, credentials/no-poll, защиты, partial/unknown и отсутствие повтора.
|
||
- [x] Native lifecycle export policy на двух RouterOS 7.24.5: exact IPv4/IPv6, subnet range/single length, set/append/clear, no-op, delete и сохранение существующей `bgp-in`. Учтён производный `.nextid` при сравнении чужих правил после записи; порядок/содержимое и raw source fence сохранены. Все 22 fingerprints восстановлены, exit 0. [Отчёт](mcp-chr-community-policy-acceptance.json). Передача атрибутов этим тестом не подтверждается.
|
||
- [x] Исправлена проверка чтения фильтра на RouterOS 7.24.5: простое имя `gw-interface` возвращается без кавычек. Нормализуется только эта форма; остальные команды/значения/порядок и raw source proofs сохранены. На двух CHR прошли IPv4/IPv6 replace, no-op без записи, copy, revision restore и восстановление всех 22 fingerprints. Сборка, lint, модели и полная регрессия 26 профилей + MCP SQL/real restore/logs прошли. [Отчёт](mcp-routing-filter-readback-acceptance.json).
|
||
- [x] Двухузловая функциональная Community-приёмка: set/append/clear, оба native tag после append, положительный active/blackhole в operational RIB, IPv4/IPv6 isolation и восстановление маршрута. 18 packet proofs: 12×3/3 с подтверждённым traceroute, 6×3/0. Штатный harness завершился ошибкой 401 при BGP cleanup; отдельное recovery по сохранённому marker восстановило все 22 fingerprints. Это не успешное завершение всего harness и не независимые физические пути. [Сводный отчёт](mcp-bgp-community-dual-afi-acceptance.json), [исходный прогон](mcp-chr-bgp-community-dual-afi-cleanup-interrupted.json), [recovery](mcp-chr-community-dual-afi-recovery.json).
|
||
|
||
|
||
### Глобальные счётчики — 21 октября
|
||
|
||
- [x] `mm_sidebar_counts_get` / `system.sidebar.counts.read`: общий REST/MCP сервис, явный global allow и все права источников с обычным RBAC-наследованием, лимит каталога 100 до native reads, неизвестное/null отдельно от подтверждённого нуля, интервал источника и `atomicSnapshot: false`.
|
||
- [x] Перекрывающиеся сборы объединяются; после завершения новый запрос собирает свежие данные. Детерминированный тест удерживает источник и проверяет одну коллекцию для двух читателей.
|
||
- [x] SQL COUNT пользователей заменил загрузку всех DTO/привязок для подсчёта; REST сохранил прежнюю форму ответа. SQL-приёмка проверила основные числа, отсутствие native polls при отказе прав/scope/лимита и отсутствие конфигурационных записей.
|
||
- [x] Профиль счётчиков включён в `test:all`; полная регрессия 27 профилей + MCP SQL, настоящий pg_dump/restore и SQL logs прошла. Дополнительные модели/build/lint/coverage проверены. [Отчёт](mcp-sidebar-counts-acceptance.json).
|
||
|
||
Текущий реестр: 321 инструмент, REST 160/62/40. Полный план остаётся открытым: весь native harness с успешной штатной очисткой, независимые пути/NAT/RPF/hash и три узла, 40 REST-адаптеров, реальный отправитель портала и внешние AI-клиенты. Двухузловая функциональная Community-приёмка и отдельное восстановление приняты ниже.
|
||
|
||
|
||
### Допуск Route AI по законченному замеру
|
||
|
||
- [x] Успешный control ping требует подтверждённых 3/3; частичный положительный ответ 1/1 или 2/2 не запускает traceroute и не создаёт свежий допуск. Нулевые потери без полных счётчиков не принимаются.
|
||
- [x] Unknown содержит фиксированную причину и ограниченные числовые наблюдения, без исходных сообщений устройства; 3/0 остаётся подтверждённой потерей. Ping payload ограничен 256 строками, успешная трасса требует порядка зарегистрированных hops и назначения.
|
||
- [x] Реальный SQL/HTTP проверил latest unknown после ранее успешного допуска, incomplete/partial/trace/oversized и отсутствие конфигурационных операций. MCP models, SQL/real restore, build и lint прошли. Полный checkpoint 27 профилей предшествует этой узкой правке; последующая проверка — целевая. [Отчёт](mcp-path-completion-acceptance.json).
|
||
- [x] После прерванного GRE-прогона отдельный recovery-only режим удалил только точный маркер f9337137, не создавая новый fixture, и сравнил все 22 исходных fingerprints. [Очистка](mcp-chr-overlay-recovery.json), exit 0; SSH закрыт. Это не закрывает actual Community propagation.
|
||
|
||
|
||
### Выгрузки логов для AI-клиента — 21 октября
|
||
|
||
- [x] `mm_logs_export_read` / `logs.export.read`: подписанная область подключения/серверов/политики/поколения, metadata до payload, свежие права и grants до расшифрования и после него; legacy/foreign/expiry/tamper отклоняются.
|
||
- [x] Чтение частями до 12000 исходных байтов в base64, общий размер/SHA-256/TTL; Unicode восстанавливается после объединения байтов. Секреты маскируются до создания файла, полный chunk не обрезается публичным redactor.
|
||
- [x] Общий REST/MCP SQL-источник: server scope до бюджета, максимум 50000 строк/8 MiB до передачи payload в Node, отдельная проверка размера CSV/JSON; REST host-колонка сохранена. Два тяжёлых задания на процесс без очереди.
|
||
- [x] Атомарные квоты PostgreSQL: 8 файлов/24 MiB ciphertext на подключение, 256 MiB всего, TTL 15 минут и удаление истёкших файлов при сохранении. Конкурентное создание проверено.
|
||
- [x] Реальные SQL-блокировки проверили отзыв/сужение grants без версии, owner/pause/abort во время payload SELECT, а также приоритет отзыва права над ошибкой source budget. Target использует текущий transaction client, read не получает освобождённый client. Общий runtime повторно сравнивает эффективную политику и права владельца перед выдачей результата.
|
||
- [x] Все 27 backend-профилей, MCP SQL/HTTP, настоящий pg_dump/restore, SQL logs, build и ESLint прошли. [Принятый объём](mcp-log-artifacts-acceptance.json); native Community остаётся отдельным открытым пунктом.
|
||
|
||
|
||
### Native Community: следующий диагностический срез
|
||
|
||
21 октября, 02:52–03:02 UTC: свежий underlay прошёл 18/18; GRE/VRF IPv4/IPv6 и BGP prefix forwarding прошли. Полный Community-прогон остановлен на `community-set-matched/ipv4`: после снятия старого активного маршрута и нового approved peer restart положительное состояние маршрута не подтверждено. Причина пока неизвестна. BGP и все 22 исходных overlay fingerprints восстановлены, exit 1. [Неуспешный прогон](mcp-chr-bgp-community-set-unconfirmed.json), [контроль underlay](mcp-chr-underlay-log-artifacts-preflight.json). Прежние отчёты о GRE loss и прерванном unknown сохранены отдельно. Для следующего прогона добавлен ограниченный read-only снимок конкретного префикса из `/routing/route` и owned-сессий до очистки; полный provider payload и секреты не сохраняются. Этот пункт остаётся открытым.
|
||
|
||
|
||
21 октября, 03:05–03:15 UTC: диагностический повтор завершён с восстановлением всех 22 fingerprints, exit 1. [RIB и сессии](mcp-chr-bgp-community-unreachable-diagnostic.json) подтверждают получение `bgp.communities=64512:999` на принимающем CHR и установленные IPv4/IPv6-сессии. Причина неположительного допуска локализована до next-hop: `contribution=unreachable`, `gateway=198.18.113.2%mcp-test-94f96471-gre`, `target-scope=10`, разрешённого `immediate-gw` нет. Это подтверждает доставку одного set-атрибута, но не доказывает работоспособность изменения gateway в VRF. Причина неразрешения next-hop и способ её исправления ещё требуют отдельной проверки; table qualification и scope пока гипотезы. Append/clear/blackhole и вся Community-приёмка остаются открытыми. GRE/VRF ping/traceroute до применения политики проходили в обоих направлениях. Fixture удалён; SSH закрыт.
|
||
|
||
|
||
### Устойчивость внешней квитанции restore — 21 октября
|
||
|
||
- [x] Публикация готовой fsynced-квитанции выдерживает временный Windows sharing denial: повторяется только атомарный rename, максимум 8 попыток/710 мс ожидания для EPERM/EACCES/EBUSY. Старый файл не удаляется; exclusive receipt/.used claims и запрет повторного restore сохранены. Терминальные ошибки и ошибки других платформ не повторяются.
|
||
- [x] Реальный Windows-тест держит файл через FileShare.ReadWrite без delete sharing, проверяет читаемость старой квитанции и публикацию новой после освобождения handle. Pure tests проверили границы попыток, сохранность старого файла и terminal errors. В изолированном restore-раннере добавлены безопасные stage/OS-code без SQL/credentials/error body.
|
||
- [x] Реальный SQL проверяет отмену старого filter-плана при изменении порядка VRF, в том числе no-op, без записи. Финальные 27 профилей, MCP SQL/HTTP, настоящий pg_dump/restore, tampered archive, SQL logs, build, lint и diff-check прошли. [Отчёт](mcp-state-publication-acceptance.json).
|
||
|
||
Прежний единичный RESTORE_UNCONFIRMED после завершения restore не содержал OS-кода; точная причина исторического сбоя не доказана. Контролируемая Windows-блокировка воспроизведена и обработана без повторного восстановления. Два isolated parser-прогона отклонили `set gw IP@VRF` в кавычках и без них; неподдерживаемый прототип удалён из рабочего компилятора. На затронутом CHR baseline восстановлен, второй не изменялся: [String](mcp-chr-filter-vrf-quoted-rejected.json), [Word](mcp-chr-filter-vrf-address-rejected.json). Текущий Community-контроль использует прежний literal gateway без `gw-interface` в той же VRF; исходный сценарий с явным GRE остаётся открытым независимо от результата контроля.
|
||
|
||
|
||
### Подтверждённые условия разрешения gateway в VRF
|
||
|
||
- [x] На получателе первого CHR RouterOS 7.24.5 явное `set gw` вместе с GRE заработало для IPv4/IPv6 после отдельных human-approved MCP host-route планов: точные gateway `/32` и `/128` в `main`, gateway `owned-GRE@owned-VRF`, `scope=10`, `target-scope=5`. Оба resolver подтверждены active и immediate-gw. Конфликтующий точный main prefix блокирует fixture. Политика продолжает работать в owned VRF; экспорт посторонних connected маршрутов через main не включался.
|
||
- [x] Подтверждены set/mismatch/restoration обоих AFI, сохранение другого AFI и добавление новой Community: 7 проверок с 3/3 и 2 проверки подтверждённой потери с 3/0. Host-resolver и все остальные fixture-объекты удалены, все 22 fingerprints восстановлены. [Принятый объём](mcp-vrf-gateway-resolution-acceptance.json).
|
||
- [x] Функциональный Community checkpoint принят для IPv4 и IPv6: оба tag после append сохранены из RIB, active/blackhole подтверждены, clear даёт измеренную потерю, после восстановления оба AFI снова передают 3/3. [Отчёт](mcp-bgp-community-dual-afi-acceptance.json) отдельно указывает ошибку штатного teardown и успешное recovery; весь native harness и продуктовая VRF-автоматизация остаются открытыми.
|
||
- [ ] Продуктовый Route AI по-прежнему явно отклоняет `profile.table != main`. Native human-managed эксперимент не снимает этот guard: перед VRF-автоматизацией нужны отдельные resolver/dependency/protection/source fences, recovery и полный native сценарий. Исходные требования плана не сокращены.
|
||
|
||
Отрицательные контроли: [literal gateway без interface](mcp-chr-bgp-community-literal-gateway-unreachable.json) и [resolver scope10/target10](mcp-chr-bgp-community-resolver-scope10-unreachable.json) не дали положительного маршрута; оба полностью очищены. Дополнительный host resolver устанавливается явным планом, не скрытым побочным действием фильтра. На момент этого resolver checkpoint оставались 52 REST-адаптера; актуальный остаток указан в сводке и последующих блоках. Независимые пути/NAT/RPF/hash, три узла, live portal и внешние AI-клиенты остаются открытыми.
|
||
|
||
|
||
### Gateway-зависимости VRF и таблиц — 21 октября
|
||
|
||
- [x] MCP запрещает delete/rename/disable VRF и таблицы, если IPv4/IPv6 gateway ссылается на неё из другой таблицы: проверяется точный суффикс `@name`/`@native-ID`, включая `IP%interface@table`, `interface@table` и ECMP. Пробелы в literal names сохраняются; неподтверждённая quoted/escaped форма блокирует изменение. Источник ограничен, unknown не считается отсутствием ссылки.
|
||
- [x] Настроенные static-маршруты внутри VRF блокируют её удаление. Собственные kernel dynamic routes внутри этой VRF не считаются внешними пользователями, но остаются в sealed snapshots для проверки дрейфа. Общий interface dependency guard учитывает ту же семантику.
|
||
- [x] Реальный MCP SQL проверил обе семьи/name/ID/delete/rename/disable, malformed source и добавление ссылки после approval: старый план отклоняется до записи. Pure models, build, ESLint, diff-check, полный прогон 27 профилей, MCP SQL/HTTP, настоящий pg_dump/restore и SQL logs прошли. [Отчёт](mcp-cross-table-dependency-acceptance.json).
|
||
- [x] Прерванный marker `581cb8ad` восстановлен отдельным recovery-only прогоном: только собственные BGP peers/instances/policies и overlay, исходные ID resolver из сохранённого отчёта, неизменные prefix/table/scope и исходный GRE. После прежнего удаления VRF ссылка выглядела как `@*1D`; она разрешалась к очистке только после подтверждения отсутствия объекта и совпадения исходной записи. Все 22 fingerprints совпали, нового fixture не было. [Очистка](mcp-chr-community-login-recovery.json), завершена 07:02:36 UTC, exit 0.
|
||
|
||
На момент этого checkpoint полная Community-проверка для обеих семей оставалась отдельным открытым пунктом; последующий функциональный результат приведён ниже. Предыдущий прогон подтвердил IPv4 pipeline и обе семьи set/mismatch, но прервался при отвязке из-за native REST login limit; его отчёт не переписан успешным. Для новых CHR-прогонов интервал запросов задаётся явно; повтор конфигурационных записей не добавлен.
|
||
|
||
### Двухузловая функциональная Community-приёмка — 21 октября
|
||
|
||
- [x] Получатель подтвердил set/append/clear и восстановление отдельно для IPv4/IPv6, включая сохранение другого AFI. После append непосредственно сохранены оба тега в operational RIB; blackhole требует положительных active/blackhole, точных ID/prefix/table и последующей потери 3/0.
|
||
- [x] Приняты 18 Community packet proofs: 12×3/3 с подтверждённой трассой и 6×3/0. Правила отвязаны и own output policy удалена до функционального checkpoint. Использованы отдельные human-approved main host-resolver планы scope10/target5; автоматический Route AI для non-main не включён.
|
||
- [x] Исходный harness завершился ошибкой 401 на BGP teardown; зависимость gateway заблокировала удаление VRF. Отдельный recovery-only прогон точного marker d8bddc85 завершился 07:45:22 UTC с кодом 0: все 22 исходных fingerprints совпали, новый fixture не создавался. Оба процесса завершены, SSH закрыт. [Функциональная приёмка](mcp-bgp-community-dual-afi-acceptance.json), [неуспешный harness](mcp-chr-bgp-community-dual-afi-cleanup-interrupted.json), [восстановление](mcp-chr-community-dual-afi-recovery.json).
|
||
- [ ] Весь native harness с успешной штатной очисткой, независимые физические пути, NAT/RPF/hash-policy, три узла и продуктовая VRF-автоматизация остаются открытыми. Функциональная приёмка не скрывает сбой teardown.
|
||
|
||
### Основные NetFlow-разговоры через MCP — 21 октября
|
||
|
||
- [x] `mm_netflow_talkers_get` / `traffic.flow.talkers.read`: общая REST/MCP проекция для `/traffic/flow` и `/traffic/flows`; явная серверная область до SQL и pending, архив отключённых серверов без RouterOS-запросов. До 50000 исходных строк на выбранный набор (распределены между серверами), окно 1–1440 минут, до 10 серверов/200 строк на страницу.
|
||
- [x] Сохранены configured topN, отдельные totalConversations/число доступных top-разговоров, точные суммы и стабильная сортировка при равных bytes. Будущие rows исключены и из REST. Суммы разных интерфейсов не считаются дедуплицированным сетевым итогом; bps — среднее по запрошенному окну, coverage и forwarding не подтверждаются. Глобальные host/listener/runtime поля не выдаются.
|
||
- [x] Реальный SQL проверил hidden malformed counters до парсинга, foreign pending, grant narrowing, disabled history, topN/страницы, REST parity и отказ на 50001 rows. Блокировка настоящего SELECT проверила source/topN/grant/owner/cancel/pause: результат не выдан. Конфигурационные планы и native polls не создаются.
|
||
- [x] Build, ESLint, unit models, все 27 backend-профилей, MCP SQL/HTTP, настоящий pg_dump/restore, tampered archive и SQL logs прошли. Реестр: 309 инструментов, REST 150 mediated / 62 excluded / 50 pending. [Отчёт](mcp-netflow-talkers-acceptance.json).
|
||
|
||
### Повтор уведомления с неизвестным результатом через MCP — 21 октября
|
||
|
||
- [x] `mm_alerts_outbox_retry_plan` / `alerts.outbox.retry`: общая REST/MCP CAS-операция для unknown/telegram/current resolutionVersion. Обязателен acknowledgedDuplicateRisk=true и отдельное human approval; текст и адресат не задаются нейросетью. Наблюдатель не может подготовить изменение; global allow, весь каталог серверов и protections проверяются до изменения.
|
||
- [x] Приватный HMAC связывает план с полной исходной записью, включая payload, адресата и параметры повторов, без раскрытия содержимого в preview/audit. SQL ограничивает источник до 1 MiB до передачи в Node; проверка повторяется под FOR UPDATE непосредственно перед CAS.
|
||
- [x] Общий application guard защищает и REST retry. После ожидания row lock заново проверяются текущие права/grants/pause/protections и каталог. Transactional read-back подтверждает только допустимые изменения status/version/nextAttemptAt/lastError; изменение payload/получателя или проигнорированная запись откатываются до commit.
|
||
- [x] Подтверждается постановка в очередь: verificationScope=acknowledgement, операция applied/verification=inconclusive, step=acknowledged. Доставка не объявляется успешной. Один idempotency key возвращает прежний результат; два конкурирующих плана не ставят один unknown повторно. Неопределённая операция автоматически не повторяется.
|
||
- [x] Приёмка проверила explicit autonomous dangerous grant без обхода human approval, shared REST/CAS, concurrent/idempotent admission, late payload/grant/owner/pause/protection/catalog row-lock гонки, 1 MiB cap и rollback при изменении адресата/ignored write. В тесте используется валидное сообщение, внешний Telegram sender заблокирован и не вызван. Все 27 backend-профилей, MCP SQL/HTTP, настоящий pg_dump/restore, tampered archive, SQL logs, build/lint и diff-check прошли; дополнительный целевой прогон подтвердил автономный gate после полной регрессии без изменения production code. [Отчёт](mcp-alerts-outbox-retry-acceptance.json). Реестр: 310 инструментов, REST 151/62/49. Остальные пункты полного плана не закрываются этой приёмкой.
|
||
|
||
### OSPF: общий cost writer и ревизия операции 2 — в работе
|
||
|
||
- [x] Расчёт sealed OSPF evidence вынесен в `services/ospf-cost-optimization.ts`; MCP использует общий модуль. REST и MCP cost-only записи используют единый writer с ожидаемым cost, двумя bounded raw GET без per-row disabled getters, полной проверкой остальных native полей и остановкой при ignored/lost/changed результате. Число native rows ограничено 10000.
|
||
- [x] Оптимизационный план связывает endpoint/учётные данные изменяемого роутера с приватным HMAC, без раскрытия пароля в preview/audit. Перед чтением/dispatch сверяются актуальные параметры подключения; application/router lock не позволяет обычному server update подменить источник между проверкой и PATCH. OSPF operation revision=2; положительные ревизии ограничены SQL int. Старый план отклоняется при admission, и runner отдельно проверяет ранее queued операции и каждый dispatch.
|
||
- [x] Latest build, ESLint, pure writer tests и 13 policy/revision tests прошли. До последней credential/version правки реальный MCP/HTTP SQL подтвердил positive/ignored/opaque drift/lost reply/no replay и настоящий restore. Это более ранняя проверка, она не принимает последние изменения.
|
||
- [x] После восстановления лимита штатная проверка разрешений разрешила полный прогон. Все 27 профилей, latest credential/revision/old-queued SQL/HTTP, настоящий pg_dump/restore, tampered archive и SQL logs прошли, exit 0. Прежний сбой review не обходился. [Принятый объём cost writer](mcp-ospf-cost-write-acceptance.json); полный REST adapter и native CHR приёмка этой версии остаются отдельными открытыми пунктами.
|
||
- [x] Сервисный REST-адаптер `/servers/:id/ospf/optimize` реализован ниже: общий legacy ranker/apply, human-only полный каталог, source/prefix proofs и отдельный обратный план. Измеряемый optimizer v7 остаётся самостоятельным алгоритмом; сетевые/native gates не закрываются этой SQL/HTTP-приёмкой.
|
||
- [x] Дополнительно без сетевого доступа прошли REST-classifier тесты (Fastify inject), private HMAC invariants для host/port/user/password/TLS/server ID и отказ неподписанного server context до GET. Последние SQL/HTTP/queued-version кейсы по-прежнему ожидают полного разрешённого прогона; результаты offline не подменяют его.
|
||
- [ ] Аудит полного source graph остаётся открытым: новый HMAC пока связывает изменяемый роутер. Для полного optimizer-подключения нужны также peer endpoint identity и связь измерений с конфигурацией endpoint до момента подготовки; существующий contextVerified сам по себе не доказывает неизменность endpoint после измерения.
|
||
- [x] Offline-проверка настоящего реестра actions подтвердила OSPF revision=2 в runtime descriptor и registry; клиент не может передать свою revision или expectedServerProof через публичную схему инструмента. Она включена в test:mcp. SQL-отклонение ранее queued revision=1 остаётся отдельным не выполненным latest кейсом.
|
||
|
||
### Замеры маршрутизации: привязка к обоим endpoint и эпохе подключения
|
||
|
||
- [x] Миграция `0029_mcp_routing_sources`: DB-trigger меняет эпоху при изменении host/port/user/password/TLS/enabled, включая возврат A→B→A. Изменение имени не меняет эпоху; прямое присваивание старой эпохи её не восстанавливает.
|
||
- [x] Каждый новый замер подписывает оба endpoint, поколение доступа, интерфейсы, family/table, метрики, контекст и timestamps с микросекундами. Legacy-строки не подписываются задним числом: история остаётся доступна с `sourceVerified=false`, для оптимизации нужен новый замер.
|
||
- [x] Сохранение проверяет доступ и оба endpoint под row locks; INSERT и проверка записанного значения проходят до COMMIT. Игнорирование/искажение записи откатывает транзакцию. Смена источника или отзыв доступа во время ping не публикует пригодный результат.
|
||
- [x] Незавершённый ping не выдаёт измеренный ноль. Последняя unknown-попытка блокирует использование предыдущего успеха; ping/BW остаются отдельными потоками. Недоверенная строка блокирует оба потока. Порядок публикации отделён от времени отдельных метрик.
|
||
- [x] IPv6 ULA и link-local не создают ложную неоднозначность; при нескольких настроенных адресах доступен `dstAddress`, принадлежащий выбранному интерфейсу peer. Пропущенный disabled разрешается одним bounded getter только после однозначного выбора. Глобальный bandwidth по-прежнему не доказывает WAN-путь.
|
||
- [x] OSPF revision=3, diagnostics.bandwidth revision=2. Старые plans/queued операции требуют новой подготовки; изменение peer/primary endpoint делает старые метрики непригодными до PATCH.
|
||
- [x] Build/lint/pure/реальные MCP SQL/HTTP/restore прошли. Все 27 профилей прошли суммарно: первый полный прогон выявил только устаревшую отдельную schema теста logs; после применения настоящей миграции повтор MCP SQL/HTTP + restore + logs завершился exit 0. [Backend-приёмка](mcp-routing-source-acceptance.json).
|
||
- [ ] Native OSPF/source приёмка не пройдена: обе стороны подтвердили IPv4/IPv6 GRE ping 3/3 и trace, но CHR2 перезапустился до OSPF preflight. Все owned объекты удалены, 14 областей проверены read-only: 10 fingerprints совпали, у двух адресных baseline доказано изменение только dynamic ID; две route baseline остаются не подтверждены. Причина перезапуска не установлена. [Cleanup/диагностика](mcp-chr-ospf-source-cleanup.json).
|
||
- [ ] Полный граф уникальности владельцев Router ID, точная общая REST preparation, независимые пути/NAT/RPF/hash/три узла и прочие 49 REST-адаптеров остаются в плане. Реестр остаётся 310 инструментов, REST 151/62/49 из 262.
|
||
|
||
Native-прогон текущей OSPF/source версии прервался: оба CHR сначала подтвердили 4 направления/family, по 3/3 ping и полной трассировке; затем ECONNRESET до OSPF preflight и TCP timeout ко второму REST во время очистки. Полный original report сохранён как `mcp-chr-ospf-source-interrupted.json`; это не OSPF-приёмка. Запущен только recovery прежнего marker `mcp-test-c74d0d3c`, без новой сети. Восстановление сверяет все 14 исходных fingerprints этого overlay-профиля; обычный BGP recovery по-прежнему требует свои 22. Source-profile допускает 14 только при точной версии и отсутствии любых OSPF/BFD операций и preflight в исходном завершившемся отчёте.
|
||
|
||
### OSPF revision4: весь граф владельцев Router ID — backend принят
|
||
|
||
- [x] План связывает endpoints/учётные данные/эпохи/поколение доступа и native OSPF instances всех кандидатов в области MCP-политики, включая устройства, не выбранные владельцами нужного Router ID. Появление нового дубликата, исчезновение instances, смена пароля или отключение такого кандидата отменяет план до PATCH.
|
||
- [x] Все кандидаты входят в target и multi-router lease. Лимит serversPerPlan проверяется до native polling. Настоящая advisory-блокировка третьего кандидата проверена в SQL/HTTP.
|
||
- [x] Граф повторно сверяется до preflight и при dispatch. Между его native чтениями проверяются действующий доступ и endpoints, после последнего чтения endpoints проверяются снова. Приватные HMAC скрыты в public plan/audit. Граф ограничен 1000 устройствами, суммарно10000 native rows и1МиБ.
|
||
- [x] Отключённый опрос приложения не считается доказательством отсутствия роутера в OSPF: неизвестный/отключённый источник блокирует подготовку до native reads. Пустой успешно прочитанный каталог остаётся отдельным подтверждённым состоянием; позднее изменение пустого/невыбранного каталога инвалидирует план.
|
||
- [x] Старые revision3 plans/queued операции отклоняются. Истинный реестр runtime/action указывает revision4; клиент не может передать свои proof/version через публичную схему.
|
||
- [x] Build/lint, pure модели, SQL/HTTP с третьим роутером, полный прогон27профилей и настоящий pg_dump/restore прошли. Дополнительно реальная смена пароля третьего кандидата внутри HTTP-ответа остановила применение до cost PATCH. [Отчёт](mcp-ospf-owner-graph-acceptance.json).
|
||
- [ ] Точный общий REST preparation adapter остаётся pending: прежний UI расчёт использует другие telemetry/model источники. Взаимозаменяемость алгоритмов не утверждается. Необходимо выровнять саму подготовку, проверку источников и health fences для полного REST-сценария.
|
||
- [ ] Owner resolver пока консервативно рассматривает все активные instances: повторение Router ID в разных family/VRF требует отдельного контекстного разрешения и приёмки. Граф ревизии4 защищает зафиксированный расчёт, но не закрывает этот функциональный пункт.
|
||
- [ ] Native OSPF revision4 не принималась. После перезапуска CHR2 owned объекты удалены; две исходные route baseline всё ещё не подтверждены. Независимые пути/NAT/RPF/hash/три узла/end-user,49 pending REST adapters и внешние интеграции остаются в полном плане. Реестр310инструментов, REST151/62/49 из262.
|
||
|
||
### OSPF revision 5: фактические и именованные Router ID
|
||
|
||
- [x] Общий reader `ospf-identity-catalog` читает явный Router ID либо разрешает его именованную ссылку через native `/routing/id`. Учитываются static `id`, выбранный `dynamic-id`, disabled/inactive; missing/неоднозначные/неактивные/противоречивые ссылки отклоняются. Пропущенные version/vrf/router-id/flags уточняются через native getter, значения не угадываются.
|
||
- [x] Исходная конфигурация instance сохраняется отдельно от effective identity: существующие snapshots не подменяются разрешённым IP. Граф связывает обе формы и состояние используемых ссылок; смена выбранного ID или версии после approval отменяет cost-запись.
|
||
- [x] Владельцы выбираются по OSPFv2/v3, а needed Router IDs — только из выбранных локальных instance/interface. Сосед из другого локального VRF не создаёт ложную неоднозначность. Названия VRF у разных устройств не приравниваются.
|
||
- [x] Лимит уточняющих getter — 128 на каталог, общие 10000 native rows/1 МиБ сохранены. При применении доступ и source proof проверяются перед каждым native чтением, включая getters. Старые revision 4 plans/queued операции требуют новой подготовки.
|
||
- [x] Build/lint/pure, HTTP/SQL matrix literal/static/elected/defaults/late ID/version changes, все 27 профилей и настоящий restore/tamper прошли. Отдельный дополнительный SQL/HTTP+restore сценарий другого локального VRF прошёл. [Приёмка](mcp-ospf-identity-acceptance.json).
|
||
- [x] На обоих CHR 7.24.5 подтверждено чтение реального OSPF каталога и фактического `/routing/id`. Реальных OSPF instances сейчас 0/0; разрешение `main` использовало явно синтетический OSPF-потребитель и реальный Router ID source/getters. Native записей 0, туннели закрыты. [Read-only отчёт](mcp-chr-ospf-identity-readonly.json).
|
||
- [ ] Полное различение одинакового Router ID между VRF удалённых устройств требует фактического двустороннего соседства/адреса/интерфейса; совпадение имён VRF не является доказательством. Same-version неоднозначность пока отклоняется. Этот пункт не закрывается фильтром версий и локального VRF.
|
||
- [x] Exact shared REST optimizer preparation подключён к публичным legacy apply/restore в последующем этапе ниже; UI и эти MCP-команды используют общий legacy ranker. Измеряемый v7 алгоритм остаётся отдельным. Native OSPF/BFD/cost/inverse/end-user приёмка не заменяется SQL/HTTP-проверкой. Две исторические route baseline после перезапуска CHR2 не подтверждены; весь исходный объём плана сохранён. На момент прежнего этапа реестр составлял 310, REST 151/62/49 из 262; актуальные числа приведены в начале плана.
|
||
|
||
### OSPF revision 6: фактическая привязка peer к VRF и интерфейсу
|
||
|
||
- [x] Владелец выбранного соседа определяется по двустороннему Full: адрес первичного соседа принадлежит peer-интерфейсу, а обратный сосед ведёт к адресу исходного интерфейса и нужному Router ID. Экземпляры сопоставляются по однозначным native ID/name; названия VRF разных устройств не сравниваются на равенство.
|
||
- [x] Одинаковый Router ID на изолированном устройстве/в другой VRF не создаёт ложного владельца, если фактические адреса и обратное соседство не совпадают. Два полностью подходящих контекста, в том числе две VRF на одном peer, возвращают `MEASUREMENT_UNKNOWN`. При отсутствии подтверждённого контекста владелец не угадывается.
|
||
- [x] Рейтинг использует только метрику с `dstInterface`, совпадающим с разрешённым peer-интерфейсом. Preview содержит peer instance/VRF/interface. IPv6 сравнивается канонически, scope интерфейса/VRF проверяется. Флаги адресов уточняются у устройства; счётчики/возраст adjacency не создают ложный drift.
|
||
- [x] Граф всех кандидатов включает effective identities, соседей и адреса, family и private source proofs. Он проверяется перед записью и после записи. Подтверждённый cost с потерей соответствия соседству получает `partial`; повторный ключ возвращает квитанцию без повторного PATCH. Неизвестное чтение/потеря доступа не считается подтверждением успеха.
|
||
- [x] Подготовка проверяет актуальные права/временный допуск, отмену и источник между новыми native чтениями/getters. Реальные SQL/HTTP pause/cancel/смена пароля во время ответа останавливают следующий запрос. Лимиты графа 1000 устройств, 10000 строк и 1 МиБ сохранены; уточнение адресных флагов ограничено 128 getters на каталог. Старые revision 5 планы/queued операции отклоняются.
|
||
- [x] Полный прогон 27 профилей завершился exit 0. После финального post-write guard и явного кода неоднозначности повторно прошли вся MCP SQL/HTTP-приёмка, настоящий restore/tamper, build/lint и diff check. [Backend-приёмка](mcp-ospf-vrf-link-acceptance.json).
|
||
- [x] Read-only проверка на обоих CHR 7.24.5 подтвердила реальные IPv4/IPv6 address sources и flags, OSPF catalogs и named Router ID source. Native записей 0, туннели закрыты. OSPF instances/neighbors сейчас пусты: эта проверка не является live-adjacency/cost/forwarding приёмкой. [Отчёт](mcp-chr-ospf-link-readonly.json).
|
||
- [x] Native current-revision OSPFv2/v3/BFD/cost/inverse для IPv4/IPv6 подтверждены отдельной приёмкой 23 октября: [отчёт](mcp-chr-ospf-v6-cost-inverse-acceptance.json).
|
||
- [ ] Пересылка по изученным OSPF-маршрутам и полная IPv6-трасса после восстановления остаются открытыми. Для unnumbered/неподтверждаемого адресами линка возвращается unknown; дополнительные режимы требуют отдельной приёмки. Две исторические route baseline после перезапуска CHR2 не подтверждены.
|
||
- [ ] Exact shared REST optimizer preparation, три узла/независимые пути/NAT/RPF/hash, внешние клиенты/портал и остальные 49 REST adapters остаются в исходном объёме. Реестр 310, REST 151/62/49 из 262.
|
||
|
||
### Обратный OSPF-план и восстановление тестового стенда — 23 октября 2026
|
||
|
||
- [x] Воспроизведена и исправлена ошибка обратной cost-записи: после 30 → 10 обратный план ожидает подтверждённые 10 и восстанавливает 30. Ожидаемая стоимость берётся из зашифрованного снимка после исходного шага.
|
||
- [x] Обратный план сохраняет граф источников и двустороннего соседства OSPF со всеми кандидатами. Потеря peer Full перед обратной записью останавливает PATCH. Изменившаяся версия исходного действия требует новой сверки. `operations.recover` повышен до revision 2; старые планы и операции в очереди отклоняются без записи.
|
||
- [x] SQL/HTTP проверяет настоящий прямой и обратный PATCH, отказ при изменении peer и версиях, повторный ключ без повтора записи. Все 27 профилей backend и настоящий restore/tamper прошли; после добавления queued-inverse проверки повторно прошёл полный MCP SQL/HTTP/restore.
|
||
- [x] Приёмочный сценарий сохраняет только безопасную классификацию ошибок native API, применяет паузы ко всем HTTP-методам и последовательно записывает отчёт. Восстановление прерванного OSPF-стенда проверяет 14 overlay + 8 OSPF/BFD снимков, закрытый исходный отчёт и точный маркер; завершение процесса отдельно проверяется по его handle перед запуском очистки; чужие объекты не удаляются. Проверка этой ветки восстановления пока backend-only.
|
||
- [x] Предыдущий native запуск подтвердил четыре соседства OSPFv2/v3 Full+BFD Up, IPv4 signed measurement с защитой ABA и прямую cost-запись. Его обратный план получил unknown; штатная очистка затем подтвердила все 22 исходных снимка. [Неуспешная приёмка](mcp-chr-ospf-v6-inverse-failure.json) сохранена отдельно.
|
||
- [x] Native приёмка исправления завершилась 22 октября 18:18:37 UTC, exit 0: 60 применённых MCP-операций, четыре Full/BFD Up, signed source/ABA и cost 30 → 10 → 30 для обоих семейств. Отказ GRE дал 3/0, отдельный одобренный план восстановил 3/3; все 22 исходных снимка совпали, туннель закрыт. Начальные четыре трассы полные; после восстановления IPv6 один hop не ответил при подтверждённом конечном узле. Это контрольные пробы, полная восстановленная IPv6-трасса не заявляется. [Native отчёт](mcp-chr-ospf-v6-cost-inverse-acceptance.json), [сводная приёмка](mcp-ospf-inverse-acceptance.json).
|
||
- [x] Пересылка к дополнительным сетям через изученные OSPF-маршруты и разные native VRF подтверждены отдельной revision 7 приёмкой: 16 RIB/packet proofs, cost/inverse/passive обоих семейств и все 24 исходных снимка восстановлены. [Отчёт](mcp-ospf-forward-acceptance.json). Обратный путь контрольных проб — connected GRE; независимые транзитные/пользовательские пути и три узла остаются открытыми.
|
||
|
||
### OSPF: пассивные объявления и пересылка в разных VRF (23 октября)
|
||
|
||
- [x] Добавлен отдельный режим `MMAPP_TEST_CHR_OSPF_FORWARD=true`: собственные loopback-сети объявляются пассивными OSPFv2/v3 шаблонами; VRF на двух CHR имеют разные имена. IPv6-адреса создаются после назначения интерфейсов VRF.
|
||
- [x] Проверка фактического `/routing/route` требует единственный активный OSPF-маршрут нужного семейства/префикса/таблицы, подтверждённую метрику и immediate gateway через тестовый GRE. Неизвестные поля уточняются native getter; неподтверждённые значения не подменяются нулями. Общий ограниченный reader также используется публичным MCP-инструментом `mm_ospf_route_proof_get`; наличие маршрута не считается доказательством пакетной доставки.
|
||
- [x] Native RouterOS 7.24.5 возвращает установленный `passive` как пустой switch, а getter отсутствующего switch — пустым массивом. Чтение теперь подтверждает значение через getter либо полное непересекающееся объединение положительного и отрицательного native switch-query, с лимитами и проверкой доступа между чтениями.
|
||
- [x] Оптимизатор revision 7 исключает подтверждённые пассивные шаблоны до проверки BFD/ранжирования. SQL/HTTP проверяет stale Full на пассивном GRE и соседство рабочего GRE с пассивным loopback без `use-bfd`; старые планы требуют новой подготовки.
|
||
- [x] [Предыдущий native запуск](mcp-chr-ospf-forward-passive-bfd-failure.json) подтвердил четыре активных изученных маршрута с метрикой 60 и четыре пробы 3/3 к дополнительным сетям. Подготовка cost остановилась до записи на ошибочной проверке BFD пассивного шаблона. Все 24 исходных снимка восстановлены; этот отчёт не принимает cost/inverse нового сценария.
|
||
- [x] Полная двухузловая приёмка revision 7 завершилась exit 0: IPv4/IPv6 cost/inverse, passive, 16 RIB/packet proofs и штатная очистка с совпадением всех 24 снимков. [Отчёт](mcp-ospf-forward-acceptance.json). Независимые транзитные/обратные пути и три узла этим стендом не доказываются.
|
||
- [x] Публичный MCP reader `routing.ospf.route.proof.read` / `mm_ospf_route_proof_get`: явный сервер/префикс/VRF/интерфейс, подтверждённая нулевая метрика, отказ при ambiguous/wrong-egress/unknown, pre-poll scope и disabled, endpoint ABA, pause/cancel и поздний отзыв перед выдачей. SQL/HTTP и настоящий restore прошли; наблюдатель не создаёт планов. Новый реестр содержит 311 инструментов; REST-покрытие 151/62/49 не изменено. Все 27 backend-профилей, SQL/HTTP, настоящий restore, tampered archive, build, types и ESLint прошли. [Приёмка reader](mcp-ospf-route-proof-acceptance.json).
|
||
|
||
### Native passive switch и изученные маршруты: результаты повторной приёмки
|
||
|
||
- [x] [Отдельно подтверждены](mcp-ospf-forward-cost-acceptance.json) OSPFv2/v3 cost/inverse в разных native VRF: четыре Full/BFD Up, 12 активных изученных RIB-маршрутов с метриками 60 → 40 → 60 на первом узле и неизменными 60 на втором, 12 проб 3/3 с полными трассами, восстановлены все 24 исходных снимка. Полный исходный harness завершился ошибкой на следующем переключении passive; [неуспешный отчёт сохранён](mcp-chr-ospf-v7-forward-passive-toggle-failure.json). Его поздняя ошибка не скрыта и весь harness этим результатом не принимается.
|
||
- [x] Исправлены native create/update шаблонов, revision 2: создание с `passive=false` не передаёт switch, состояние подтверждается чтением. Снятие флага использует `/routing/ospf/interface-template/unset`. Смешанное изменение создаёт отдельные шаги PATCH/unset с собственными intent/checkpoint, проверками, лимитами и inverse. Игнорирование unset даёт partial без повтора записи.
|
||
- [x] [Короткая native приёмка](mcp-chr-ospf-passive-v2-switch-acceptance.json) завершилась exit 0: 22 MCP-операции, оба семейства, create false → set true → unset false со стоимостью → approved inverse. Использовалась пустая собственная VRF и отключённые bridge/templates без адресов/портов; все шесть исходных снимков восстановлены. Защита отключённого родителя сохранена. Два ранних отклонения тестового сценария и их очистка сохранены отдельно.
|
||
- [x] Повтор полного двухузлового harness завершился exit 0: 86 операций, 16 RIB через публичный MCP runtime reader и 16 packet proofs 3/3 с полными трассами; cost/inverse/passive обоих семейств, все 24 исходных снимка совпали, SSH-туннель закрыт. [Native отчёт](mcp-chr-ospf-v7-forward-switch-acceptance.json), [сводная приёмка](mcp-ospf-forward-acceptance.json). Внешний AI-клиент и независимые транзитные пути этим сценарием не принимаются.
|
||
|
||
Независимые транзитные/обратные пути, end-user forwarding, три узла, NAT/RPF/hash, точная подготовка legacy REST OSPF, 41 оставшийся REST-адаптер, реальный портал и внешние AI-клиенты остаются в полном плане.
|
||
|
||
|
||
Уточнение приёмки 23 октября 2026:
|
||
|
||
- [x] OSPF revision 7: на двух CHR приняты cost/inverse и native passive switch для обоих семейств, разные VRF, 16 публичных MCP RIB proofs и 16 контрольных проб с полной трассой; 86 операций, все 24 baseline восстановлены. Обратный путь connected GRE; независимые транзитные и пользовательские пути остаются открытыми. Источник: `mcp-chr-ospf-v7-forward-switch-acceptance.json`.
|
||
- [x] Совместимое уточнение BFD отбора revision 7: LAN без Full не блокирует подходящий GRE; неизвестный BFD у Full-кандидата даёт отказ. Проверено SQL/HTTP, моделями и полным backend-прогоном; native LAN-сценарий отдельно не заявляется.
|
||
- [x] Общий REST/MCP DELETE одного WireGuard peer, новый человеческий сервисный план и native alias revision 2: привязки/защиты/NetFlow, приватный HMAC видимой конфигурации и источника, единственный DELETE, точный read-back, статус ревизии и read-only desired/original reconciliation без изменения исходного unknown. SQL/HTTP, restore/tamper и 27 backend-профилей прошли. Native: четыре applied операции, один DELETE, отдельная сверка, четыре baseline и приватный отпечаток восстановлены; отключённые fixtures, адреса неизменны, туннель закрыт. Источник: `mcp-wireguard-peer-delete-acceptance.json`.
|
||
- [ ] Оставшиеся 40 REST-адаптеров, независимые пути/три узла/NAT/RPF/hash и PSK/SA traffic-приёмка, настоящий portal sender и внешние AI-клиенты остаются в общем плане. Эти успешные приёмки не означают завершение всего плана.
|
||
|
||
- [x] Native read-only reconciliation: допуск/отмена/источник проверяются между snapshot/getter и перед выдачей, включая endpoint ABA; источники предыдущих native шагов повторно сверяются перед общей выдачей. Ответ явно ограничен сравнением конфигурации и не удостоверяет исходное устройство/forwarding. Изолированные SQL/HTTP-тесты, 27 backend-профилей, SQL logs, restore/tamper, build/lint прошли: `mcp-native-reconcile-fences-acceptance.json`.
|
||
|
||
|
||
- [x] Общий REST/MCP PATCH WireGuard peer: все 11 публичных полей, непустой строгий patch, очистка строк/port/keepalive, alias update revision 2 и человеческое подтверждение. Приватный raw+semantic HMAC, привязки/NetFlow/защиты, один PATCH без повторов, отдельная ревизия и read-only сверка. Native nil keepalive требует getter и полного presence-разбиения, одного отсутствия недостаточно. Проверены malformed/foreign/overlapping receipts, отзыв/отмена между запросами, late drift, partial/unknown и сохранение чужих peers. На CHR пройдены шесть applied операций, два PATCH и очистка с четырьмя baseline/приватным отпечатком; отключённые fixtures, без изменения адресов. Финальные 27 backend-профилей, SQL logs, restore/tamper и build/lint прошли. [Приёмка](mcp-wireguard-peer-update-acceptance.json). Перенос peer между интерфейсами и универсальный service inverse не объявляются реализованными этим PATCH.
|
||
|
||
### Общий WireGuard interface DELETE: завершённая приёмка 23 октября
|
||
|
||
- [x] Бизнес-план `mm_wireguard_interface_remove_plan` revision 1 и общий REST/MCP сервис: явный порядок/стоимость до 50 команд, disable включённого родителя, peers, статические адреса и интерфейс последним. Native alias delete revision 2 удаляет только пустой интерфейс.
|
||
- [x] Защиты пользователей/NetFlow/родителя/детей, protocol/IP/OSPF selectors и escaped filter dependencies; приватные prefix proofs, fences и read-back каждой команды. Partial/unknown не повторяют запись; read-only prefix reconciliation сохраняет исходный статус, универсальный inverse отсутствует.
|
||
- [x] SQL/HTTP проверил normal/ignored/collateral/lost/revoke, ранние отказы и отсутствие replay. Полный прогон 27 профилей, logs и real restore/tamper прошёл; после финального UTF-8 grouping отдельно прошли SQL core/restore, модель, build и lint.
|
||
- [x] Native CHR: шесть applied операций, пять DELETE, отказ alias от каскада, восстановлены четыре baseline и приватный отпечаток; туннель закрыт. [Сводный отчёт](mcp-wireguard-interface-delete-acceptance.json), [неизменяемый native протокол](mcp-chr-wireguard-interface-delete-v1-acceptance.json). Это конфигурационная приёмка; forwarding/внешний клиент не заявляются.
|
||
- [ ] Остаток полного плана: 40 REST-адаптеров, независимые/end-user/трёхузловые пути, NAT/RPF/hash и PSK/SA traffic, реальный отправитель portal и внешние AI-клиенты. Исторические два route hashes прерванного OSPF fixture остаются неподтверждёнными; новые успешные baseline не заменяют их проверку.
|
||
|
||
### NetFlow analytics: завершённый сервисный адаптер
|
||
|
||
- [x] `traffic.flow.analytics.read` / `mm_netflow_analytics_report_get`: общий REST analytics engine с серверной областью до SQL/pending, без общего кэша и скрытой топологии; приложения/протоколы/IP/интерфейсы/ASN/страны/категории/services/conversations/inferred paths, filters/dedup и страницы.
|
||
- [x] Ограничения строк/страниц/байтов и явные topN; только публичный SQL-лимит без ключей коллектора, будущие строки исключены. Mixed hidden bindings исключены, peer-only интерфейсы не атрибутируются пользователю целиком. Доступ/источник проверяются между чтениями, topology/topN — повторно перед выдачей. Context rates и предположительные пути явно ограничены в смысле доказательств.
|
||
- [x] SQL/runtime проверил фильтры/дедупликацию, кэш, scope/privacy, bounds/pages, endpoint ABA/topology drift и cancel/pause, отсутствие планов. Все 27 backend-профилей, SQL logs, настоящий restore/tamper, build/lint прошли. [Приёмка](mcp-flow-analytics-acceptance.json). Выделенный REST HTTP вызов и native/AI-клиент в этом сценарии не заявляются.
|
||
- [ ] Полный план открыт: 40 REST-адаптеров и ранее перечисленные routing/traffic/three-node/portal/external-client gates. Создание WireGuard с приватными ключами и составными адресами/peers требует полного общего сервиса; упрощённый native create не считается этим REST-адаптером.
|
||
|
||
### NetFlow map-hops: завершённый сервисный адаптер
|
||
|
||
- [x] `traffic.flow.map.read` / `mm_netflow_map_hops_get`: общий REST map engine, явная серверная область до SQL/pending, scoped topology без скрытых пользователей/серверов и peer-only атрибуции, обход общего кэша. Основные и вложенные страницы включая edge clients и country service paths; неполный граф отмечен явно.
|
||
- [x] Публичные topN/порог без ключей коллектора, пределы строк/ответа, future bound; доступ и источник между чтениями, топология и настройки повторно перед выдачей. Предположительные связи не объявляются traceroute/forwarding proof; native poll, enrichment и запись конфигурации не запускаются.
|
||
- [x] SQL/MCP runtime и настоящий REST маршрут через Fastify.inject подтвердили совместимость totals/services/hops; scope/privacy/cache, nested pages/filters/dedup/pending/future/row limit, endpoint ABA/topology/threshold drift и cancel/pause, отсутствие планов. Все 27 backend-профилей, SQL logs, real restore/tamper, build и ESLint прошли. [Приёмка](mcp-flow-map-acceptance.json).
|
||
- [ ] Полный план открыт: 40 REST-адаптеров, независимые/end-user/трёхузловые пути, NAT/RPF/hash и PSK/SA traffic, реальный portal sender и внешние AI-клиенты. Исторические два route hashes не подтверждены новыми успешными конфигурационными сценариями.
|
||
|
||
### NetFlow host-files: завершённый сервисный адаптер
|
||
|
||
- [x] `traffic.flow.hostFiles.export` / `mm_netflow_host_files_export_plan`: общий REST builder, полный global/server scope до чтения ключей, человеческое подтверждение, зашифрованный owner-only пакет на 15 минут. MCP/audit не содержат ключ; установка не выполняется.
|
||
- [x] Подписанные purpose/header/credential/policy/generation/source/hashes, лимиты и общая квота; read-back шифротекста и источника. JWT владельца и traffic-write обязательны для download; отзыв, stale source и cross-purpose подмена под логи блокируют plaintext.
|
||
- [x] SQL/runtime и фактический JWT HTTP/REST проверили основные положительные/отрицательные сценарии. Все 27 профилей и SQL logs/restore/tamper прошли до финального уточнения verifier; финальные целевые HTTP/SQL/restore завершились по журналу, их exit code не наблюдался. Build/lint/coverage успешны. [Протокол](mcp-host-files-acceptance.json).
|
||
- [ ] Полный план открыт: 40 REST-адаптеров и ранее перечисленные независимые/трёхузловые/traffic/portal/external-client gates. Экспорт не является установкой коллектора или доказательством forwarding.
|
||
|
||
### Telegram settings: завершённый сервисный адаптер
|
||
|
||
- [x] `alerts.telegram.update` / `mm_alerts_telegram_update_plan`: settings chatId/thread и owner/purpose secretRef вместо сырого токена; full global/server scope, человеческое подтверждение, строгие поля и preserve/clear semantics.
|
||
- [x] Приватные state/reference HMAC и updatedAt, проверки перед записью, общий application lock/guarded REST selective-update и фактический read-back. Защищённые параметры REST не обходит; токен не отражается в результате или аудите.
|
||
- [x] SQL/runtime/REST проверили positive/negative cases; полный прогон 27 профилей, SQL logs, real restore/tamper, build/lint прошёл. [Протокол](mcp-telegram-settings-acceptance.json). Текущий полный прогон также подтверждает финальные host-files read-back и JWT/cross-purpose HTTP после уточнений прошлого этапа.
|
||
- [x] POST `/api/alerts/telegram/test` реализован следующим этапом ниже: подтверждаемый единственный вызов, private proof/late dispatch gate, provider rejection/unknown без повтора. Проверен локальный HTTP; реальные сообщения Telegram не отправлялись.
|
||
- [ ] Полный план открыт: 40 REST-адаптеров и остальные ранее записанные routing/traffic/three-node/portal/external-client gates.
|
||
|
||
### Telegram test: завершённый сервисный адаптер
|
||
|
||
- [x] `alerts.telegram.test` / `mm_alerts_telegram_test_plan`: human-only/global/full scope, stored/ref overrides без сохранения, точный preview адресата/темы/текста и private source/reference proof перед dispatch.
|
||
- [x] Общий REST builder и protected REST send guard; один POST, timeout 30s, response cap 64 КиБ, redirect/error и ноль retry. API acknowledgement не объявляется доставкой. Explicit rejection сохраняется отдельно; unknown не повторяется автоматически, idempotent apply не отправляет заново.
|
||
- [x] Локальный HTTP/SQL/REST доказал основные ветви, поздний drift до первого POST, токены не раскрываются. Все 27 профилей/SQL logs/restore/tamper прошли до финального preview fence; после него отдельно прошли SQL/HTTP/restore, build/lint. [Протокол](mcp-telegram-test-acceptance.json). Внешние Telegram сообщения не отправлялись.
|
||
- [ ] Полный план открыт: 40 REST-адаптеров, независимые/end-user/трёхузловые пути, NAT/RPF/hash/PSK-SA traffic, настоящий portal sender и внешние AI-клиенты.
|
||
|
||
### Legacy REST OSPF: общая подготовка и последовательное применение — в работе
|
||
|
||
- [x] Выделен `ospf-legacy-optimization.ts`: `prepareLegacyOspfOptimization` сохраняет исходный rank provider, pingWeight и порядок; REST preview/apply используют одну подготовку. Последовательный apply принимает проверку перед каждой записью и передаёт подтверждённый prefix; отказ останавливает следующие команды, повтора нет. REST JSON и состояния rejected/partial/unknown сохранены.
|
||
- [x] Существующие REST HTTP-проверки, профиль OSPF и новая модель prefix-gates/no-op/source refusal прошли. SQL/HTTP-потребители preview, настоящий restore/tamper, build/lint прошли. [Прогресс](mcp-ospf-legacy-shared-progress.json). После восстановления лимита повторно прошла полная регрессия всех 27 backend-профилей, SQL logs и настоящий restore; подробнее в отчёте ниже.
|
||
- [x] Legacy apply подключён к MCP в последующем этапе ниже; shared preparation и исходный REST-рейтинг сохранены. Исторический прогресс этого раздела не являлся завершённым адаптером.
|
||
|
||
### Повторная проверка после восстановления лимита — 23.10.2026
|
||
|
||
- [x] Полная SQL-регрессия завершилась с кодом 0: все 27 backend-профилей, SQL `/logs`, настоящий `pg_dump`/`pg_restore`, проверки tamper. Backend build и адресный ESLint текущих legacy OSPF файлов также прошли. [Отчёт](mcp-restored-limit-checks.json).
|
||
- [ ] Повторная CHR-приёмка OSPF остановлена до оптимизации: IPv4 GRE control proof прошёл, IPv6 получил 2 из 3 пакетов (`PING_PARTIAL_LOSS`, `unknown`). Маркер `mcp-test-19b53dc9`, код процесса 1. Причина потери пакета не установлена; успешной OSPF-приёмкой этот запуск не считается.
|
||
- [x] После отказа удалены только объекты этого запуска; все 16 исходных отпечатков конфигурации двух CHR восстановлены. SSH-туннели закрыты. Повтор мутаций после отказа не выполнялся.
|
||
- [ ] Полный план и CHR-приёмка legacy MCP apply остаются открыты; два исторических route hash запуска `c74d0d3c` всё ещё не доказаны. Предыдущая успешная OSPF v7 приёмка сохранена отдельно и не заменяет результат текущего запуска.
|
||
|
||
### Legacy OSPF: приватные источники и проверка последовательного cost-prefix — в работе
|
||
|
||
- [x] `readLegacyOspfSealedSources` использует настоящий REST ranker и общий preparation. Собирает keyed HMAC для использованных SQL-источников, native OSPF-конфигурации, getter/switch-query ответов и итогового рейтинга. SQL/native строки и credentials не возвращаются в proof.
|
||
- [x] Проверяется полный набор чтений pipeline. Native uptime соседей и неиспользуемые legacy алгоритмом runtime BFD/RIB не выдаются за configuration proof. Порядок соседей сохраняется, поскольку он влияет на разрешение равных состояний; opaque поля конфигурации остаются запечатаны.
|
||
- [x] При повторном расчёте допускаются только cost подтверждённого последовательного prefix. Преждевременное изменение следующего cost, исчезновение строки, SQL drift и изменение других полей отвергаются либо меняют proof. Полный каталог владельцев приложения ещё должен проверять вызывающий MCP-адаптер: выбранная область peers сама этого не доказывает.
|
||
- [x] До/после SQL и native чтений выполняется access callback; есть отмена и срок не более 45 секунд. Native frame ограничен 1 МиБ/10 000 строк, весь сбор — 8 МиБ/512 наблюдений/256 ключей. SQL-выборки для proof ограничены с sentinel-строкой: превышение 2000 metric rows или 1000 catalog rows приводит к отказу, а не усечённому результату.
|
||
- [x] Финальный OSPF-профиль и SQL/HTTP/restore/tamper прошли с кодом 0. Реальная SQL/HTTP-фикстура проверила точное REST ranking parity, подтверждённый cost-prefix, отказ при неправильном prefix, реальный SQL drift, отмену, deadline и отзыв до чтения. Build и адресный ESLint также прошли. [Прогресс и source hashes](mcp-ospf-legacy-sources-progress.json).
|
||
- [x] Proof, полный scope, protections, dispatch и recovery подключены к публичным планам в этапе ниже. Исторический этап collector проверял только внутренний сбор источников.
|
||
|
||
### Legacy OSPF: внутренний исполнитель и проверка после write intent — в работе
|
||
|
||
- [x] `MikrotikClient.patch` принимает внутренний `beforeDispatch`, который выполняется внутри общего guarded dispatch после durable `configuration.intent`, до сетевого запроса. Cost writer передаёт сюда проверку источников; отказ маскирует детали и сохраняет `writeAttempted=false`. No-op callback не вызывает. CHR instrumentation передаёт callback дальше и не теряет проверку.
|
||
- [x] `executeSealedLegacyOspf` использует общий legacy apply, application lock и отсортированные router locks. Полный proof проверяется перед шагом, непосредственно перед PATCH и после native read-back. Неопределённый ответ или изменение контекста останавливают следующие записи без retry; наружу выходят только безопасные состояния и подтверждённый prefix.
|
||
- [x] `reconcileSealedLegacyOspf` выполняет только чтения: различает исходное состояние, конечное состояние, подтверждённый промежуточный cost-prefix и неподтверждённое изменение конфигурации. Проверяется metadata/credential/endpoint epoch источника перед каждым native чтением и перед публикацией; stale client не делает сетевой запрос.
|
||
- [x] SQL/HTTP-фикстура проверила две последовательные записи cost, SQL drift после durable intent с нулём PATCH, stale отказ до записи, ignored/lost/collateral остановку после одного PATCH и сверку без повторной мутации. Полная регрессия **27 профилей**, SQL `/logs`, настоящий restore/tamper, build и адресный ESLint завершились с кодом 0. Первый SQL-прогон остановился на отсутствовавшем импорте новой фикстуры; исправление включено в финальную полную регрессию. [Отчёт](mcp-ospf-legacy-execution-progress.json).
|
||
- [x] Публичный MCP legacy apply и отдельный human restore зарегистрированы и приняты SQL/HTTP-прогоном ниже. Весь исходный план и CHR-приёмка нового сценария остаются открыты.
|
||
|
||
### Публичные legacy OSPF MCP apply/restore — SQL/HTTP этап завершён
|
||
|
||
- [x] `routing.ospf.application.optimize` / `mm_ospf_application_optimize_plan` и `routing.ospf.application.restore` / `mm_ospf_application_restore_plan` v1: человеческое подтверждение, весь каталог до 10 серверов, строгие args, до 50 cost-записей, общие REST ranker/apply, private source/native/catalog/protection proofs и свежая проверка подключения перед native read.
|
||
- [x] Live owner/policy/protection authorization до/после чтений и после durable intent перед PATCH. Структурный preview показывает конкретные cost, receipts разделяют nativeWrites и сервисные шаги; pause/deny после intent дают ноль PATCH и не объявляются успехом.
|
||
- [x] Readonly reconciliation и отдельный human restore исходных cost. Обратные цели отделены от вычисленных optimalCost: тест меняет метрику и рейтинг, но восстанавливает исходные значения. После lost-response допускается только новый обратный план после подтверждения native-prefix; collateral drift запрещает восстановление. Повторов mutation нет.
|
||
- [x] Полная регрессия 27 профилей, SQL `/logs`, restore/tamper, build/lint прошли. Покрытие: **321 инструмент; 160 mediated / 62 excluded / 40 pending из 262 REST routes**. [Приёмка и source hashes](mcp-ospf-legacy-actions-acceptance.json). Первая попытка public fixture ошибочно ожидала worker-state при раннем admission deny; исправлено ожидание теста, защита сохранена.
|
||
- [x] Конфигурационная приёмка этих двух команд на обоих CHR принята в следующем этапе ниже. Измеряемый v7 optimizer остаётся другим алгоритмом.
|
||
- [ ] Прежняя IPv6 GRE-попытка 2/3 не закрыта конфигурационным сценарием. Весь native harness, независимые/end-user/трёхузловые пути, NAT/RPF/hash/PSK-SA, 40 REST-адаптеров, реальный portal sender и внешние AI-клиенты остаются в исходном плане. Два исторических route hash `c74d0d3c` всё ещё не доказаны.
|
||
|
||
### Legacy OSPF: новые публичные apply/restore приняты на обоих CHR
|
||
|
||
- [x] Новый изолированный профиль `--chr-ospf-legacy`: allowlist двух CHR/admin, временный PostgreSQL, пароль только через скрытый terminal prompt. Чужие OSPF templates/соседи блокируют запуск до первой записи. Создаются только уникальные disabled bridge без портов/адресов, отдельная VRF и passive OSPF templates; все изменения через подтверждённые MCP-планы.
|
||
- [x] На каждом CHR выполнен цикл `30/40 → 10/20 → 30/40` через публичные legacy optimize/restore; read-only reconcile не добавил PATCH. Суммарно восемь cost PATCH и 32 подтверждённые MCP-операции, все 24 исходных fingerprints восстановлены, объекты удалены, SSH-туннели закрыты. Native процесс завершился с кодом 0. [Протокол](mcp-chr-ospf-legacy-d875e896-acceptance.json), [аудит](mcp-chr-ospf-legacy-audit.json).
|
||
- [x] Backend build и адресный ESLint нового профиля/harness прошли. Негативная проверка запрета нескольких CHR-режимов прошла до подключения. Производственные source-файлы после полной регрессии 27 профилей публичного legacy OSPF не менялись; новый профиль принят отдельным реальным запуском.
|
||
- [ ] Этот этап подтверждает конфигурацию и восстановление, а не forwarding/Full/BFD/независимое управление/три узла. Прежний IPv6 GRE preflight 2/3 и два исторических route hash остаются открыты. Счётчики 321/160/62/40 не меняются; весь оставшийся исходный объём плана сохранён.
|
||
|
||
### GRE/OSPF: ограниченная read-only готовность стенда — в работе
|
||
|
||
- [x] Начальный bring-up требует две последовательные полные 3/3 path proofs за максимум четыре наблюдения. Только начальная измеренная partial loss допускает новое чтение; её исходный unknown сохраняется. Полный отказ, другой unknown, malformed/неполная трасса и транспортная ошибка не повторяются. Production admission и post-fault/recovery/cost assertions не менялись, конфигурационные команды не повторяются.
|
||
- [x] IPv6-диагностика ограничена собственными адресами/GRE и neighbor cache, bounded rows/bytes, неизвестные flags null; raw keys/MAC/чужие строки не возвращаются. Причина потери пакетов не объявляется доказанной по состоянию cache.
|
||
- [x] Локальные модели, build/lint, SQL/HTTP/restore и выбранный профиль auth/MCP плюс SQL logs прошли с кодом 0. Это выбранный профиль, а не новый полный прогон всех 27. [Отчёт](mcp-overlay-readiness-progress.json).
|
||
- [ ] Реальная readiness ещё не принята: запуск `d33a0265` остановлен до проб/OSPF из-за HTTP 401 на GET `/ipv6/address`; bridge update отклонён до записи. После cleanup все 16 fingerprints совпали. Восемь последующих read-only GET дали HTTP 200, причина 401 не доказана. Настройки RouterOS и активные сессии не менялись; SSH-туннели закрыты. Отчёты обеих неуспешных попыток сохранены, прежняя IPv6 2/3 не подменяется новым сценарием.
|
||
- [ ] Весь исходный объём, включая 40 REST-адаптеров, пакетную/независимую/end-user/трёхузловую/NAT/RPF/hash/PSK-SA приёмку, настоящий portal sender, внешние AI-клиенты и два исторических route hash, остаётся в плане.
|
||
|
||
### Повтор проверок после восстановления лимита — 23 октября 2026
|
||
|
||
- [x] Новый полный прогон завершился с кодом 0: все 27 backend-профилей, SQL `/logs`, настоящий `pg_dump`/`pg_restore` и проверки целостности. Backend build и адресный ESLint также прошли. [Итог и source hashes](mcp-limit-recheck-acceptance.json).
|
||
- [x] На обоих CHR прошли начальные GRE IPv4/IPv6 ping/traceroute, OSPFv2/v3 Full и BFD Up. Восемь проверок RIB и восемь пакетных проб 3/3 с полной трассой подтвердили baseline обеих AFI и IPv4 после изменения cost и обратного плана. Это control probes с connected GRE return, независимость путей не доказана.
|
||
- [ ] Полная CHR-приёмка не завершена: следующий optimizer получил `unknown`/`DEVICE_UNAVAILABLE`, GET `/routing/ospf/instance` вернул HTTP 401. Причина 401 не установлена, конфигурационные команды автоматически не повторялись. [Неизменяемый протокол отказа](mcp-chr-ospf-forward-7aba91f9-auth-failure.json).
|
||
- [x] Первичная очистка также встретила отказ. Отдельная очистка по завершённому marker-bound протоколу через новые подтверждённые MCP-планы закончилась с кодом 0: все 24 исходных отпечатка восстановлены, объекты удалены, SSH-туннели закрыты. [Протокол восстановления](mcp-chr-ospf-forward-7aba91f9-recovery.json).
|
||
- [x] Общий GRE revision restore и публичная MCP-регистрация завершены и приняты локально в следующем этапе. CHR-приёмка нового адаптера остаётся открытой; два исторических route hash `c74d0d3c` остаются недоказанными.
|
||
|
||
### GRE revision restore: общий REST/MCP-исполнитель — локально принят
|
||
|
||
- [x] `mm_gre_revision_restore_plan` / `network.gre.revision.restore` v1 вызывают тот же `restoreGreRevision`, что и `POST /api/gre/revisions/:id/restore`. Проверяются scope, section, fingerprint, каноническая полная схема и размер ревизии; повреждённый payload не превращается в удаление всего раздела.
|
||
- [x] Восстанавливаются весь раздел GRE и статические IPv4/IPv6 адреса. Удаление используемого туннеля запрещено. Все затронутые GRE создаются/переводятся в disabled до адресных команд, включение выполняется последним. Сохраняются неприменяемые opaque/foreign поля и точные пробелы PSK. Старый пустой/маскированный ключ сохраняет подтверждённый текущий; новый туннель с неизвестным ключом запрещён.
|
||
- [x] Human approval обязателен и в autonomous policy; observer не читает источники restore. Бюджет резервирует весь пакет и запись истории. Публичный review содержит имена, удаления, адреса, MTU и enabled; ключи и комментарии туда не попадают, материализованный snapshot зашифрован.
|
||
- [x] Полные proof, зависимости, защиты, источники и допуск проверяются между командами и после durable intent непосредственно перед PUT/PATCH/DELETE. Для каждого шага есть read-back. Ignored/collateral/late-binding дают partial, потеря ответа — unknown; повторов нет. Ограничения: 50 туннелей/адресов/native-команд, 1 МиБ ревизии/наблюдения, 8 МиБ на сбор, 45 секунд на чтение и 120 секунд на выполнение.
|
||
- [x] Read-only reconcile сравнивает исходный proof или проверенный конечный receipt. При отсутствии конечного checkpoint успех не выводится из одного желаемого payload. Удаление старой исходной ревизии ротацией после успешной записи не ломает verification. Новый restore требует нового человеческого плана; автоматический обратный service-план не заявляется.
|
||
- [x] Модели, отдельный SQL/HTTP-профиль с настоящим restore, общая SQL/HTTP-приёмка, все 27 backend-профилей, SQL `/logs`, настоящий dump/restore и tamper завершились с кодом 0. Build, ESLint и diff check прошли. [Отчёт и source hashes](mcp-gre-revision-restore-acceptance.json).
|
||
- [ ] Реальная CHR-приёмка нового whole-section restore выполнялась, но пока не принята: [текущий протокол](mcp-chr-gre-revision-acceptance.json). Не подтверждаются IPv6 readiness, IPsec SA и forwarding. Полный план остаётся открытым: **322 инструмента; 161 mediated / 62 excluded / 39 pending**, остальные сетевые/portal/external-client gates и два исторических route hash сохранены.
|
||
|
||
## История промежуточных приёмок
|
||
|
||
Ниже сохранены прежние отчёты. Текущий статус определяется реестром в начале документа; исторические counters и закрытый расширенный speed-проект не являются актуальным остатком.
|
||
|
||
**29 октября — подготовлен фиксированный key/HMAC-примитив для OP-M4.** [Локальный отчёт](mcp-node-key-effect-progress-20261029.json): 42 точечные проверки, независимый review, полная peer-регрессия, build и строгая проверка типов прошли. Чтение ровно 32 байт и HMAC выполняются без `await`; проверяются текущий hash/inode, исходные actor/owner signals и wall/monotonic deadline, scratch key очищается до close. Примитив пока не подключён к dispatcher: он не удостоверяет Q/права/подписанный источник и не сокращает старую цепочку проверок. Полная same-owner цепочка, measured-latency positive и реальное окно ещё открыты. **OP-M: 3/4, S3: 5/10.** Новых процессов/pool/миграций нет; оставшееся окно стенда сохранено, нагрузочная приёмка всей установки ≤2 GB не завершена.
|
||
|
||
**29 октября — OP-M3 принят как компонент, готово 3/4 шагов окна.** [Guarded managed/external sources](mcp-guarded-peer-sources-acceptance-20261029.json): 57 focused tests, 9 actual PG/localhost групп, 24 legacy PG-группы, native 77/77; полные peer/storage-наборы и build прошли. External metadata работает без key file и проверяет current encrypted profile/generation/directory; оба sources требуют genuine original-window guard. Реальный race HELD → потеря owner во время Q воспроизведён и исправлен через непрерывный lifetimeSignal connector → core → node → window. Последний внутренний шаг **OP-M4 открыт**: fixed effects на том же PID, положительная measured-latency и эксплуатационная приёмка. **S3: 5/10 закрыто, 5 осталось.** Окно стенда не использовано; текущий [operating-срез](mcp-operating-progress-20261029.json) сохраняет полный план и требование всей установки ≤2 GB.
|
||
|
||
**28 октября — managed metadata OP-M3 принят как компонент.** [29 новых тестов и 4 actual PG/localhost-сценария](mcp-operator-peer-metadata-managed-acceptance-20261028.json): genuine observation/prerequisite и текущий signed grant проверяются без повторной выдачи credentials, Q или native. SQL сравнивает исходные private endpoint/password внутри PostgreSQL и возвращает boolean; неверные значения отклоняются даже при неизменном epoch. Штатный endpoint trigger сохранён: восстановление полей не оживляет старый origin. Build и полный peer-набор прошли. **External provider пока отсутствует и отказывает без fallback, OP-M3 открыт.** Готово по-прежнему 2/4 внутренних шага окна; S3 **5/10 закрыто, 5 осталось**. Одно окно стенда сохранено; весь MCP-план и ≤2 GB RAM остаются открыты.
|
||
|
||
**28 октября — same-lease metadata принят как компонент.** [19 новых тестов и 7 actual PostgreSQL-сценариев](mcp-public-registry-metadata-acceptance-20261028.json) подтвердили работу без secret files, исходные role/catalog/source validators, точный PID/exclusive lock, отказ конкурента и физическое закрытие при abort/busy/drift. Дополнительные pool/роль/миграция не созданы. Build и полный peer-набор прошли. В остатке operator window теперь **2 из 4 внутренних шагов готовы**: OP-M1 public files и OP-M2 public same-lease inspection; OP-M3 private endpoint metadata и OP-M4 fixed effects/latency/stand acceptance открыты. Это не закрывает S3-06: **основной счётчик 5/10, осталось 5**, одно окно стенда сохранено; весь MCP-план и ≤2 GB RAM открыты.
|
||
|
||
**28 октября — public metadata prerequisite реализован.** [17/17 новых тестов и актуальная регрессия](mcp-operator-public-metadata-progress-20261028.json): core/node читают только свежие подписанные публичные файлы, не получают ключи/credentials или SQL lease и не создают strong authority. Настоящая configured core → node композиция v1/v2 проверена; backend build и полный peer-набор прошли. Это завершённый внутренний шаг S3-06, а не готовое operator window. Далее нужны fixed same-lease metadata session, private current endpoint/credential commitment proof и fixed effect dispatcher с измеренной latency-приёмкой. [Точный effect ledger](bandwidth-operator-effect-ledger.md) сохраняет обе HMAC-фазы и реальные before/after границы. **S3: закрыто 5/10, осталось 5; одно разрешённое окно сохранено, общий MCP-план и ≤2 GB RAM открыты.**
|
||
|
||
**28 октября — текущий operating/performance-срез.** Диагностический v7 прошёл получение Docker quiescence и открытие source, затем отказал в registry SQL; точная SQL-причина не установлена. Независимый watchdog восстановил исходные policy/running и health 200. Последующий read-only postflight подтвердил четыре исходных контейнера и отсутствие всех 17 временных путей. Из двух дополнительно разрешённых окон использовано одно; **одно осталось и не расходуется до положительной локальной проверки с измеренными задержками Docker**. Полный пятиконтейнерный scan оценён в 464,748 ms; прежние 308 scans требуют около 143 секунд при неизменном допуске 5 секунд. Объединение парных inspect/authorize и параллельное чтение публичных файлов прошли unit-проверки, но производительность композиции ещё не принята: realistic-latency профиль отказал до credentials/COMMIT, без действий с backend. Последние backend build и полный peer-набор прошли. [Текущий отчёт](mcp-2gb-operating-progress-20261028.json), [непринятый проект изменения контракта](bandwidth-operator-metadata-effect-contract.md). **S3 остаётся 5/10; полный план и требование всей установки ≤2 GB сохраняются.**
|
||
|
||
**28 октября — следующий компонентный срез и ограничение 2 GB.** [Отчёт](mcp-writer-speed-progress-20261028.json): genuine MCP speed прошёл 6 owned SQL/HTTP-групп (4 bandwidth POST, 3 after-ping, 3 истории), writer/kernel/fixed native transport — 31 группу, native-регрессия — 77 тестов. Публичный speed action, все writers/callers и production mapping ещё не включены. Два однократно разрешённых operating-прогона завершились отказом; второй не имеет доказанной причины. Read-only postflight подтвердил четыре исходных контейнера и отсутствие временных путей. **Вся установка должна укладываться в 2 GB RAM:** [ресурсная приёмка](mcp-2gb-resource-acceptance.md) добавлена в план. Нынешние примерно 27 тысяч application SQL на один MCP speed требуют оптимизации; приёмка производительности не закрыта. **Счётчик остаётся 5/10**, полный исходный план сохраняется.
|
||
|
||
**2026-10-28 — следующий принятый интеграционный пакет.** [Отчёт](mcp-speed-integration-progress-20261028.json): постоянный router guard прошёл 18 SQL/HTTP-сценариев и same-control compatibility с v1/v2; genuine scheduler provider — 6 SQL/TCP-групп; REST provider — 7 групп, включая probe race до credentials. Реализован MCP full-speed original с private lifecycle (14 unit) и общий workflow трёх original (41 workflow/run-identity unit). Общий control journal блокирует повторный/concurrent/cross-caller run ID до native: 6 baseline + 4 run-ID actual SQL/HTTP-сценария приняты. Native 70 и общие проверки прошли. **Счётчик этапа остаётся 5/10**: эксплуатационный operator-window, все writers/held mapping, все callers, публичные MCP plan/receipt и полный положительный MCP SQL/HTTP, итоговая UI/CHR-приёмка ещё нужны. [Конкретные точки интеграции guard](router-configuration-guard.md), [актуальный трекер](mcp-speed-progress.md). Полный план не сокращён и не завершён.
|
||
|
||
**2026-10-28 — принята сквозная owned-приёмка общего speed workflow.** [Отчёт](mcp-speed-workflow-acceptance-20261028.json): 6/6 сценариев, 6 bandwidth POST, 5 after-ping и 5 реальных COMMIT истории через genuine REST/JWT, signed control source, execution host и приватную completion receipt. Нулевые результаты, изменение/удаление пробы, потеря возврата COMMIT и native socket drop проверены; `unknown` не вызывает повторной отправки или второй failure-записи. Scheduled speed provider и полный общий workflow реализованы; runtime callers и публичный MCP speed action ещё не включены. Quiescence/wire mapping этого профиля синтетические, CHR и рабочая БД не использовались. Текущий этап остаётся **5/10**: held mapping/writer fence, действующее operator-window, durable run-ID conflicts/replay, все callers и финальная UI/CHR-приёмка открыты. Полный исходный объём сохраняется в [реестре](mcp-remaining-work-20261026.md), измерения и границы — в [трекере S3](mcp-speed-progress.md).
|
||
|
||
**Прогресс текущего speed-test этапа на 28 октября: 5/10 закрыто, 5 осталось.** [Трекер с постоянными ID](mcp-speed-progress.md) отделяет принятые компоненты от production-интеграции. [Актуальная scoped SQL/HTTP-приёмка](mcp-bandwidth-native-window-acceptance-20261028.json): v1 — 25 сценариев с dump/restore; повтор v2 — 23 сценария, 89 license GET и 2 btest POST. Настоящие SQL/transport barrier и operator writer lifecycle приняты как компоненты S3-06; действующий внешний stop/restart issuer, independent mapping, all-caller/public speed integration и финальные gates ещё открыты. Остальные разделы полного плана сохраняются.
|
||
|
||
**Повтор после восстановления сервиса разрешений 28 октября прошёл.** Native — 57/57, полный peer script — exit 0 (108 aggregate, 26 mock boundary и 9 network tests), общая MCP-регрессия — exit 0. Прежние v1 timeout и v2 enrollment failure сняты реальными owned PostgreSQL прогонами, TTL 5 секунд и guards сохранены. Объединённые core/registry validators, свежие file checks и пакет MAC сокращают повторный I/O без продления полномочий. Внешний quiescence в SQL-профиле остаётся явно синтетическим; глобальная production-активация и полный план не завершены. [Непринятый срез 26 октября](mcp-bandwidth-resumed-checks-20261026.json) сохраняется как исторический.
|
||
|
||
**28 октября — добавлены и приняты следующие компоненты S3-06/07/08.** Optional [Docker-only stop adapter и consumer](bandwidth-operator-docker-stop.md): 22 synthetic tests; operating acceptance ещё открыта. [Production direct-peer reader на двух настоящих CHR](mcp-peer-direct-chr-reader-20261028.json): 2500 ms, 12 базовых GET + один измеренный FIB getter, без RIB/мутаций/bandwidth POST; source authority тестовая, mapping/writer fence не доказаны. REST speed original provider прошёл отдельную owned SQL/TCP-приёмку с настоящими Fastify/JWT, endpoint epoch trigger и закрытием pending TCP при disconnect; history неизменна. Scheduler origin прошёл 20 tests. Последний общий peer script: 130 aggregate + 26 mock boundary + 9 network + 7 direct; после обнаруженного на CHR `fib:""` direct suite дополнена до 8 и прошла отдельно. Auth/full MCP, types, lint и build проходят. Осталось 5/10 пунктов текущего этапа: operating stop/restart, production mapping/fences, all-caller activation, public speed workflow и финальная приёмка. Детальные доказательства — в [отчёте](mcp-bandwidth-native-window-acceptance-20261028.json).
|
||
|
||
**2026-10-26 — key epoch, operation lock reuse и автоматический scheduler приняты.** [Отчёт](mcp-key-lock-scheduler-acceptance-20261026.json): актуальный существующий ключ проверяется вокруг endpoint SQL и перед commit; вложенные advisory locks используют одно соединение владельца. На owned PostgreSQL прошли 8 реальных lock-сценариев, routing при pool4 с applied/rollback и 2 автоматических scheduler-сценария без наследования человеческого подтверждения. 14 lock unit и 12 scheduler model tests, types/lint/build/full MCP и полный SQL/HTTP с terminal dump/restore/tamper прошли. Internet Path теперь сравнивает три параметра конфигурации: фоновые статусы допустимы, реальное изменение настроек отклоняет старый план. Это закрывает прежние key freshness и pool-capacity замечания в проверенном сценарии; atomic writer barrier, полный readOriginal/independent peer, enrollment/all callers/public speed и остальные пакеты остаются открыты. Реальных CHR, рабочей БД и деплоя не было.
|
||
|
||
**2026-10-26 — исходный admission и production origin в routing.measure приняты.** [Отчёт](mcp-routing-bandwidth-origin-acceptance-20261026.json): оба endpoint проверяются до credentials; immutable sealed input, native beforeDispatch и publication привязаны к настоящему шагу. Исходный grant/его отсутствие и общий wall+monotonic admission deadline закреплены при apply; 3 изменения grant и 2 staged pending replay отклонены. Specialized database.restore получает тот же допуск. **29 unit-проверок**, types/lint/build/full MCP и полный SQL/HTTP с настоящим terminal restore/tamper прошли. Batch core identity сохраняет все guards и validators: core24/node25 снова прошли с TTL5s, структурно 17→9 control SQL на node query. **Открыты key-epoch freshness и pool-capacity seam, полный readOriginal/independent peer (включая external), all callers/enrollment/writer barrier/public speed и остальные пакеты.** 358 tools/5 pending/39 migrations, глобальная активация не выполнена.
|
||
|
||
**2026-10-26 — текущая SQL-привязка service step принята отдельно.** [Дополнение](mcp-service-current-plan-acceptance-20261026.json): настоящий runner проверен в двух режимах; 12 положительных сверок и восемь отказов при подмене intended state, sealed evidence/payload и operation version. Own-only профиль `test:mcp:service-context:pg`, types/lint/build/unit прошли. **Последний полный broker-прогон не принят: исчерпан observation deadline при source resolution; TTL и binding guards сохранены.** Надёжность общего прогона остаётся открытой наряду с production readOriginal/peer provider и caller migration.
|
||
|
||
**2026-10-26 — исходный service-step контекст настоящего MCP runner принят.** [Отчёт](mcp-bandwidth-service-origin-acceptance-20261026.json): human-approved и explicit autonomous (`approved=false`) планы, четыре verified service steps, закрытый точный input и ciphertext-привязки, запрет копий/чужого ALS/следующего шага/позднего продолжения. В owned PostgreSQL прошли 25 node/broker-групп и отдельно 24 core-группы, restore/fault, 2 bandwidth POST и 58 license GET; types/lint/build/full MCP regression. Независимые публичные файлы читаются параллельно; секрет читается после них, TTL и binding checks сохранены. **Это foundation рабочего authority provider: readOriginal, независимый peer proof, caller migration, enrollment/writer barrier и полный speed workflow ещё открыты.** Реестр остаётся 358 tools / 5 pending / 39 migrations.
|
||
|
||
**2026-10-26 — сквозная приёмка общего bandwidth execution host прошла.** [Отчёт](mcp-bandwidth-execution-host-acceptance-20261026.json): **25 actual PG-групп**, включая шесть broker-сценариев, 2 physical localhost bandwidth POST и 58 genuine license GET. Original context охватывает все три ID; third credentials не читаются при запрете; exact remote policy независима от credential provider. Изменённый subject нового GET отклонён до reserve/POST. Response>5,3s завершает journal и configuration audit без удержания четырёх core leases; lost response удерживает unknown и блокирует повтор; tombstone после resolve останавливает отправку. Проверены restore восьми control-таблиц, types/lint/build/full speed. Пользователь явно разрешил owned helper, первоначальный отказ снят. Повторный session.binding сохранён: его удаление было отклонено, применена проверенная альтернатива — новые genuine observations только между фазами, без продления original grants/peer expiry. **Далее production authority/peer providers, caller migration, genuine enrollment/writer barrier и полный public speed workflow**. 5 pending/39 migrations и весь исходный план остаются открытыми.
|
||
|
||
**2026-10-26 — retained poll capacity видна в MCP → Обзор.** [Приёмка](mcp-poll-retained-capacity-acceptance-20261026.json), [оценка](mcp-poll-retained-capacity.md): личные retained admissions, admin global counts, non-admin только global exhausted; сообщение owner/global full, текущий retention, unavailable вместо нулей/старого зелёного статуса. Один read-only scoped SELECT, connector 3s; GC/лимиты/исполнение не меняются. **13 actual PG-групп + terminal restore семи таблиц/128 admissions**, units8+contracts2, весь UI19 и desktop/mobile3, types/build/lint прошли. UX и количественная оценка приняты; **ёмкость для частого autonomous polling ещё не принята**: при 14 днях owner8 даёт номинально ≤0,57 admission/сутки, часовой режим требует ≥336. Public tools/routes/pending и normal39 не менялись; полный план открыт.
|
||
|
||
**2026-10-26 — общий bandwidth execution host собран, его полная приёмка ещё ожидается.** [Срез](mcp-bandwidth-execution-host-progress-20261026.json), [ABI и ограничения](mcp-bandwidth-execution-host.md): genuine observations → resolve-only registry → same-physical alias MAC fence → journal → strict native transport. Source/actual remote/credential provider разделены, исходные права всех трёх обязательны; observation TTL ограничивает predispatch, native response сохраняет original budget. **24 actual core PG / 19 node PG / 28 journal fault-restore**, observation13 и permit18, full speed/types/lint/build прошли. Исправлен durable ACK: SET LOCAL synchronous_commit=on, восемь реальных COMMIT проверены при session default off. Это принятые предпосылки, **не terminal acceptance нового host**: automatic review отклонил добавление его guarded application-pool/localhost helper; файл и запуск отсутствуют, отдельный вопрос человеку задан. Далее приёмка host, production authority/peer providers, caller migration, genuine enrollment/writer barrier и полный public workflow. 5 pending и 39 migrations сохраняются; полный план открыт.
|
||
|
||
**2026-10-26 — strict native bandwidth transport принят.** [Приёмка](mcp-bandwidth-native-permit-acceptance-20261026.json): permit выпускается только admission после новых reserve/arm ACK, private WeakMap связывает client/body/path/signal и исходный monotonic deadline. Последний synchronous consume перед actual HTTP, snapshots endpoint/credentials/body, отказ copy/replay/aliases/apiPath обходов. **18 unit/HTTP-групп / 6 localhost POST**, **22 actual PG-группы**, включая 7 PG→strict HTTP сценариев / 3 POST; после потери arm ACK — 0 POST, unknown сохраняет обоих владельцев. Полный speed-workflow/types/lint/build прошли. **Staged strict path ещё не включён для всех callers**: дальше broker, independent remote binding, original REST/scheduler/MCP authority, genuine enrollment/writer barrier и полный public speed workflow. Public pending остаётся 5, normal migrations — 39; общий план открыт.
|
||
|
||
**2026-10-26 — устранён дополнительный checkout при подписи bandwidth journal.** [Приёмка](mcp-bandwidth-core-same-lease-acceptance-20261026.json): новый signer использует собственный проверенный core lease, фиксирует payload до await и отвергает fake/foreign/released lease, drift ключа, отмену, expiry и отзыв исходного dispatch grant. **15 actual PG-групп**, в том числе четыре настоящие транзакции одновременно удерживают весь пул и проходят reserve/no-send без пятого checkout. Повторно node source 17, strict types/lint/build прошли. Следующая граница — production broker, original REST/scheduler/MCP authority и mandatory native fence всех callers. Отдельно учтён произвольный diagnostic remote: credential provider не доказывает canonical identity фактического получателя. Все 5 публичных pending пока остаются; общий план открыт.
|
||
|
||
**2026-10-26 — операционная сборка canonical node source принята как компонент.** [Отчёт](mcp-bandwidth-node-source-acceptance-20261026.json): отдельный pinned issuer key, подписанный bootstrap, точные catalog/role проверки и один физический core lease на session. **17 actual PG-групп**, повторно core source 13 / registry 18, unit cases 16+16, strict types/lint/build прошли. Четыре параллельные session не требуют пятого checkout; окончательный source/actor guard выполняется после metadata на том же lease. Отзыв исходных прав до INSERT/COMMIT, подмена ключа/bootstrap во время metadata, закрытие зависшего guard, поздний raw fence и public restore восьми control-таблиц проверены. Это заменяет прежний открытый пункт о реализации key/source/catalog/role assembly. **Настоящая human enrollment/quiescence authority, общий writer barrier, Linux issuer/fault, обязательный native guard всех callers и public speed workflow остаются открытыми.** Public pending — 5, normal migrations — 39; весь план ещё не завершён.
|
||
|
||
**2026-10-26 — постоянный canonical node registry принят как SQL/host-компонент.** [Отчёт](mcp-bandwidth-node-registry-acceptance-20261026.json): четыре внешние control-таблицы, immutable UUID/claim bindings, отдельные alias incarnation, необратимые terminal aliases и HMAC-цепочки событий. **18 групп actual PG / 37 localhost license GET**, минимальная отдельная LOGIN-роль, два независимых backend/client, два реальных COMMIT ACK loss, rows-only ACK отказ, expiry/откат часов/revocation, replica guards и настоящий public restore. Новый alias с теми же наблюдаемыми claims сохраняет прежний UUID и не обходит реальную unknown-busy пару; все семь control-таблиц пережили public restore без изменения хешей. Независимый review выявил и исправил authority-check gap после async inspect и недостаточность rows-only COMMIT ACK. Types/lint/build прошли. [Оба реальных CHR подтвердили read-only observation](mcp-bandwidth-node-actual-chr-readonly-20261026.json), их текущие typed vectors различаются; 194.226.121.150 доступен через pinned SSH TCP forwarding менеджера, прямой Desktop HTTP сбрасывается. Значения IDs/credentials не раскрыты, CHR/рабочая БД не изменены, реальные node UUID не создавались. **Операционная сборка issuer key/source/catalog/ролей и настоящая enrollment/quiescence authority ещё открыты**, как и Linux issuer/fault, capacity/retention, mandatory guard всех callers и полный public speed workflow. Public pending остаётся 5, normal migrations — 39; весь исходный план не завершён.
|
||
|
||
**2026-10-26 — вход для canonical CHR enrollment получил настоящую native-приёмку.** [Отчёт](mcp-bandwidth-node-observation-acceptance-20261026.json): fixed `GET /system/license`, оба typed claim (`system-id`/`software-id`), private same-reader WeakMap provenance, текущие source/credentials до и после IO/при inspect, исходный signal и 5s wall/monotonic deadline. **12 групп / 29 actual localhost GET**, 0 default DB calls, без реальных CHR и без node UUID; full speed-workflow, strict types, lint/build прошли. Это genuine observation, а не физическая уникальность/clone resistance или готовый registry. Также подготовлен source-only Linux bundle с 39 byte-pinned миграциями; read-only стенд подтвердил Linux x86_64/glibc2.41 и directory fsync, но host Node/PG отсутствуют, Docker inventory зависает. Передача bundle и изолированный runtime/PG запуск отклонены automatic review до отдельного явного разрешения на payload/назначение; вопрос пользователю задан, удалённые мутации не выполнялись. Далее Linux issuer/fault приёмка, постоянный registry/aliases/incarnations/tombstones, общий native guard и полный public speed workflow. **Public pending остаётся 5; полный план открыт.**
|
||
|
||
**2026-10-26 — подписанный bandwidth source и реальные отдельные SQL-роли приняты как компонент.** [Приёмка](mcp-bandwidth-control-source-acceptance-20261026.json): runtime-reader проверяет Ed25519/pinned SPKI, внешний record/ключ событий, immutable source identity, роли и точный каталог до/после SQL. **13 групп SQL-приёмки с тремя настоящими ограниченными LOGIN-ролями**, actual public dump/restore, restricted complete/no-send и подменами подписи/ключа/ALWAYS guard; 16 role/catalog unit cases и прежняя 28-групповая journal-регрессия прошли. Исправлены ненужная UPDATE-привилегия occupancy и обход проверки application role через PostgreSQL URL query overrides. Явный offline issuer реализован с pending/file+directory fsync, synchronous COMMIT и no-replace публикацией. Текущая Windows FS отказывает directory fsync: проверен отказ issuer до SQL/записи файлов; **положительная приёмка окончательного issuer на поддерживаемой FS остаётся открытой**, reader использует явно synthetic owner-installed identity. [Операторская процедура](mcp-bandwidth-control-source.md). Normal migrations остаются 39; startup не создаёт источник/ключи/поколение. Далее issuer FS/fault-приёмка, canonical CHR enrollment, capacity/retention, mandatory guard всех callers и полный speed workflow; полный rollback/clone fence самого control-провайдера и общие DB-1..4 остаются открытыми. **Public pending по-прежнему 5; весь план не завершён.**
|
||
|
||
**2026-10-26 — bandwidth control-журнал защищён от обычного application restore.** [Отчёт](mcp-bandwidth-control-preservation-acceptance-20261026.json): source SQL/DDL теперь используют фиксированный внешний `mmapp_control`, без fallback на public/search_path и без автоматического provisioning или переноса непустого журнала. **28 групп реальной PG-приёмки** включают настоящий `runPrivateDatabaseDump` и `restorePartitionedDatabase`: public marker откатывается, но даже занятость, созданная ПОСЛЕ backup, сохраняется вместе с хешами control-данных и guards. Full archive с control отклоняется до decode/replacement; missing namespace/public shadows не дают ACK. Independent review выявил и исправил evidence TOCTOU: verifier, SQL и event MAC используют один синхронный immutable snapshot. Types/lint/build прошли. Это не production source-generation issuer, canonical enrollment, role isolation или защита от полного rollback самого control source; эти границы остаются открытыми. [Конкретный следующий шаг](mcp-bandwidth-enrollment-next.md): fixed issuer/роли/enrollment, затем обязательный guard всех callers и полный speed workflow. **5 public pending сохраняются; весь план не завершён.**
|
||
|
||
**2026-10-26 — SQL-слой общего bandwidth-журнала принят в изолированном профиле.** [Отчёт](mcp-bandwidth-sql-journal-acceptance-20261026.json): атомарная занятость двух canonical keys, immutable binding, новые ACK только после COMMIT, HMAC событий и no automatic unknown release. **21 группа настоящих PostgreSQL-сценариев**, два процесса/несколько соединений, четыре реальные потери COMMIT ACK, завершение backend после synthetic HTTP send, dual-client CAS, expiry/deadline, запрет DML/TRUNCATE и replica-mode guards прошли. Собственный dump/restore сохранил хеши трёх таблиц, 9 ALWAYS guards и 6 fixed-search-path функций. Это opt-in proposal: **normal migrations остаются 39**, production enrollment/restore readiness и штатные native callers не изменены; SQL сам не подтверждает private HMAC/native/no-send evidence. Далее trusted generation/canonical enrollment и capacity/restore boundary, обязательный guard всех dispatch callers, полный MCP speed workflow с историей и финальная приёмка. **Публичных pending остаётся 5**, весь исходный план открыт.
|
||
|
||
**2026-10-26 — начат полный MCP speed-test: принята общая admission foundation.** [Отчёт](mcp-speed-admission-foundation-acceptance-20261026.json): отменяемая локальная очередь сохраняет locks до фактического завершения callback; native bandwidth/Ping получили admission/abort hooks. Чистая модель общего допуска связывает исходные поколения/expiry, оба узла и полный native command через keyed proofs; разрешение одноразовое и возникает только после нового arm ACK. После возможного send неизвестный результат не освобождает узлы и не повторяется. **21 adversarial model + 8 queue tests**, настоящая loopback HTTP-проверка, speed REST/persistence, probes/MCP regression, strict types/lint/build прошли. Native response сохраняется до прежних 8 МиБ без нового ограничения на число строк/opaque поля; duration до 2147483647 сохранена. Это ещё не SQL journal, canonical enrollment или межрепличная production-защита: [следующая общая граница и все callers](mcp-speed-common-gate-design-20261026.md). Публичный speed-tool не зарегистрирован; **5 pending остаются**. Далее SQL occupancy и trusted generation/restore, wiring всех native callers, полный speed workflow с историей и сквозная многопроцессная приёмка.
|
||
|
||
**2026-10-26 — полный опрос сервера через MCP принят.** [Сквозной отчёт](mcp-server-poll-public-acceptance-20261026.json): `mm_server_poll_plan` → подтверждение человеком → actual operation → apply/verify завершились за **151506 ms** при исходном лимите 180 секунд: 4 GET, 147 действий обслуживания, 151 публикация, 312 строк журнала. Проверены исходный sealed допуск/expiry, актуальные права, безопасный результат, чтение квитанции и повтор apply без новых native/charge. Настоящий dump/restore/tamper и точные хеши семи таблиц прошли. Сокращено число SQL-запросов для одного согласованного context; проверки до/после фактического SQL сохранены. Полный REST executor также принят на новом reader (72994 ms); штатный UI REST handler не переключён. Retained capacity owner8/global128 и понятное сообщение об исчерпании остаются отдельной эксплуатационной задачей. **358 инструментов; 195 mediated / 62 excluded / 5 pending.** Исторические отказы сохранены, но их старый статус poll заменён этим результатом. Актуальные незавершённые требования и критерии: [реестр оставшейся работы](mcp-remaining-work-20261026.md); полный план ещё не завершён.
|
||
|
||
**2026-10-26 — разрешение на экспорт существующих IPsec-ключей исполнено и повторно проверено.** [Отчёт](mcp-existing-ipsec-export-reverification-20261026.json): активны client/server/other/CA, оба REST-пути требуют вошедшего пользователя с network-write и явного `privateKeyExport=true`, CA дополнительно требует `caPrivateKeyExport=true`. MCP требует человеческого подтверждения, возвращает модели только квитанцию, а владельцу предоставляет зашифрованный файл на 15 минут. Повторно прошли профиль unit-тестов, пять сквозных SQL/HTTP-сценариев на 39 миграциях, настоящий dump/restore и отказ для подменённого архива. Только синтетические ключи; деплоя и экспорта ключей CHR не было. Исторические записи ниже про отсутствие разрешения/flag=false относятся к состоянию до активации и этим результатом заменены. Полный MCP-план остаётся открытым.
|
||
|
||
[Штатный poll-storage enrollment и worker lifecycle закрыты](mcp-server-poll-storage-enrollment-acceptance-v1.json).0039 содержит25statements/6reviewed bodies, atomicmarker, fresh-only guards с сохранностью непустого0038журнала; normal manifest39/selfmanaged22/owner17, sentinelLIMIT40, requiredtables+2,18pristine seedtables. Legacy probe prefix0036 сохраняется, фиксированныйownedpoll prefix0038 используется только в тестах. Fresh-profile выполняет реальный applySqlMigrations дважды; lifecycle-profile исполняет весь literal0039 на одномbackend/transaction с явно синтетическими aged-records междуDDL иguard creation, включая настоящий terminalmarker, безподдельногоmarker/time travel/triggerdisable. **Оба current39 профиля** проходятfullquota poll4GET/147maintenance/151publications/312rows, global128cap, realterminaldump/restore иhash/count сравнение7таблиц(tokens/ciphertext/counters). Существующий tick послеprobeRetention запускаетpollGC приMCPdisabled, stop/drain/sharedgate сохранены, новыйtimer отсутствует; actualexpiredadmissionудалён сrefund черезrealworker.9новыхlifecycleunit,45storageunit+полнаяmanagement/writerregression,17manifestcases, strict/lint/build, independent39reference/18seeds ипубличныеdiagnostic6/IPsec4roleSQL/restore прошли. Найдена и закрыта реальная DB-race: predicate itself locks authoritative retention `FOR SHARE`; конкурентный UPDATE блокируется. Следомread-only authenticated receiptreader(неclaim/execute), sealedoriginalprincipal/owner/receipt/expiry иrealopID/humanapproval, wholeactualauthority/RESTperformance под180s, затемpublicpoll. Практическая storagequota ёмкость/сообщения передpublicтакженуждаютсявпроверке:128global/8owner—retainedadmissionsдоGC, неconcurrentоперации. Прежниеcoverage357/262routes/194mediated/62excluded/6pending, ориентировочно5крупных направлений до полного плана, бездеплоя/реальныхCHR.
|
||
|
||
[Private poll storage: admission/quota/GC и сквозная сборка проверены](mcp-server-poll-storage-acceptance-v1.json). Созданы pure accounting model, bounded physical owner, journal bridge иfixed retention entry. Две подтверждённые транзакции reserve→consume+anchor; original identity/owner/connection/proofs/expiry и stage budget immutable, повтор admission без anchor означает spent.8MiB+32KiB/4019journal rows на попытку; global128/owner8, counters атомарны. DB guards метят только фактические INSERT, включая AFTER-meter для idempotent quarantine; нормализуют activity time, UPDATE запрещён. Перед любым identity/row lock берётся global storage key. Independent quarantine получает10s после уничтожения старого backend и не требует живого исходного допуска; новая reservation при cleanup не создаётся. GC20s/batch8 входит shared database gate, блокирует текущий retention setting, проверяет original expiry/последнюю активность/max persisted-current retention/safety и actual terminal original poll op/connection/owner; удаляет все children+admission иrefund в одной транзакции.36новыхunit; actualSQL10случаев, настоящие ACK-loss после reserve/anchor/intent/GC COMMIT, concurrent quota/rollback/expired-source guards,4nativeGET+147maintenance+151publication+312rows иreplay без native/charge прошли. После настоящего terminal restore сверены7полныхтаблиц hash/rowcount, включая tokens/ciphertext, global/owner counters ипрежний128cap. Исторические GC-данные синтетические ивставлены ДО guards; нет time travel/trigger disable/forged marker. **Normal schema ещё38, новая схема proposalONLY:** следующим этапом штатный fresh-only enrollment, fixed worker lifecycle и real sealed human-approved MCP/runtime/current authority host. Original prepared expiry нельзя переиздать при restart/GC; вpublic adapter это ещё предстоит закрепить. Новая private REST factory выбрала quota-bound session; publicroute/coverage ещёне менялись. Coverage357/262routes/194mediated/62excluded/6pending; ориентировочно5крупных направлений остаются.
|
||
|
||
[Этап полного server poll: enrollment и durable execution завершены](mcp-server-poll-enrollment-acceptance-v1.json). Нормальная0038 атомарно устанавливает5таблиц append-only журнала и ALWAYS guards12partition roots, берёт exclusive advisory key до инспекции/DDL и отказывает на unmarked схеме. Manifest, history overflow sentinel, independent reference и pristine data verification обновлены до38; legacy prefix0036 не меняется. ActualSQL/HTTP:4nativeGET +148maintenance +152публикации, same-backend exclusion, blocked ordinary writer BEFORE relation SQL, replay без native, revocation и dump/restore/tamper прошли. Устранены повторные чтения purpose key при аутентификации растущего journal prefix; решения о правах не кэшируются. Одной оптимизации было недостаточно: старый120s общий envelope завершался UNKNOWN после118/144ACK; установлен общий180s предел для журнала/DDL с прежними native15s/SQL5s/original expiry, оба контрпримера сохранены. Новые текущие authority и private REST host (точный top-level SnapshotRead, safe404, UUID/JWT identity, whole-host cancellation) прошли18unit, strict/lint/build. **Это не public poll acceptance:** до регистрации обязательны journal admission/quota/GC, реальная MCP-operation identity и human-approved sealed plan, SQL/HTTP всего нового REST/MCP host с настоящими authority factories; отдельно оценить65тыс. fresh authority boundaries на холодном148-effect poll. Синтетическая IPsec/CA SQL/HTTP-регрессия всех4ролей и public diagnostics6tools также прошла на38миграциях. Coverage357/262routes/194mediated/62excluded/6pending; ориентировочно5крупных направлений остаются, стенд/CHR не менялись.
|
||
|
||
[Публичная диагностика REST/MCP и retention подключены](mcp-diagnostic-public-v2-acceptance-v1.json): приложение использует общий v2 REST handler, реальный реестр даёт `mm_server_probe_plan`, `mm_server_probe_receipt_get`, `mm_server_probe_cancel`; stop выполняется сразу с актуальным write/owner/run-допуском. Существующий worker обслуживает expiry даже при отключённом MCP, ограничен20s/16owners/25records и возвращает metadata/payload квоту в транзакции; shared gate ждёт завершения, новый timer не добавлен. Настоящие startup37 → public registry → human approval → все6инструментов → pages/checksum/read-only rotation, отмена ДО первого send и ВО ВРЕМЯ send прошли SQL/HTTP/DNS приёмку. DNS реально прошёл owned UDP→TCP; подменён только endpoint конструктора Resolver в тестовом процессе, не методы/результаты. REST проверен через **actual buildApp**, не отдельный plugin fixture. Найден и исправлен дефект: route получен и stage ACK записан, но10s общего бюджета не хватало на текущие fences/receipt. Добавлен фиксированный30s control reserve с прежними wire timeout/counts/private expiry; guard/metadata timeout и no replay сохранены. Убраны лишние mkdir/open-EEXIST при каждом чтении существующего state, но key/generation читаются заново без cache. **85 execution cases,5 retention,3 security, registration/management/build/strict/lint,22storage/GC и133legacy SQL +полная routing-authority регрессия, dump/restore/tamper прошли**. Coverage: **357 tools /262 routes /194 mediated /62 excluded /6 pending**, unmapped0. Старый synthetic six-tool helper заменён только после более сильной fresh public-registry приёмки всех8unique lanes. Деплоя/реальных CHR не было. Следом6manual poll/collect/speed routes и остальные5крупных направлений; общий multi-replica DB control/legacy backfill и реальная forwarding/controller/3node/UI-приёмка ещё открыты.
|
||
|
||
[Fresh-only v2 installation принята](mcp-diagnostic-fresh-v2-installation-acceptance-v1.json): новая **0037** вошла в обычный startup migration discovery. Она блокирует4legacy-таблицы, отказывает до DDL при любой истории/незарегистрированной v2 relation и создаёт только пустое v2-хранилище с global usage0; backfill/copy отсутствуют. Manifest/reference/verifier обновлены до **37 файлов**, overflow sentinel38, mandatory3таблиц и17точных seeds. Реальный normal startup выполнен дважды; непустой quarantine остался неизменным вместе с legacy ciphertext column и без фиктивного marker. На этой штатно созданной v2-схеме прошли **MCP runtime (2 HTTP127 native), REST/JWT/local (8 HTTP127 native), cancel/history/quota и полный dump-restore/tamper**. Независимый controlled reference/actual data verifier прошёл8SQLслучаев; manifest15, dispatcher10, verifier7 unit/build/strict/lint прошли. Старые22storage/GC и8orphan-сценариев работают через явный pinned0036 fixture; их положительный current-version restore перенесён на fresh-v2 профиль, marker не подделывается. На удалённый стенд ничего не применялось. Далее — production REST/MCP wiring и retention lifecycle; непустой dev legacy/backfill, общий DB control и прочие5направлений полного плана остаются открыты. Pending public routes7.
|
||
|
||
[Первая установка и промежуточный legacy теперь разделены по фактическому состоянию](mcp-first-install-readiness-20261025.json): Git HEAD `5efd0339` содержит SQL только до0014, все MCP-миграции ещё в worktree. На предоставленном стенде **read-only** проверены Docker images и schema_migrations: backend `ux-certificates258`, последний marker0012, **таблиц MCP/server_probe нет**. Поэтому первая установка должна получать v2 через отдельную fresh-only0037 с транзакционными locks и отказом при любой существующей anchor/stage/quarantine/cancellation; исторический backfill остаётся отдельной задачей dev-upgrade/restore, а не предпосылкой первоначального создания пустого MCP-журнала. Это не утверждает, что любая другая установка пуста. Миграция/деплой на стенде не выполнялись. Далее: сама0037, manifest/control/reference inventory, явные legacy fixture schemas и fresh-v2 positive restore; затем public REST/MCP wiring и retention. Непустой legacy нельзя молча переписывать или снабжать фиктивным marker.
|
||
|
||
[Фактическая legacy MCP orphan-приёмка завершена](mcp-diagnostic-legacy-orphans-acceptance-v1.json): отдельный профиль остаётся на0036 без v2. Реальная криптография, original sealed plans, exact intent step и fixed source-paired host приняли completed receipt, orphan quarantine0/0 и orphan cancellation, отклонили ещё5 вариантов без достаточных доказательств. Рабочий sibling credential при enabled MCP подтверждён отдельно от отказа истёкшего original. Итог **8 identities:3 verified/5 unresolved**, таблицы/схема не изменились при чтении, новые anchors/payload/native не создавались. SQL/dump-restore/tamper, strict types, lint/runner syntax прошли. До полного плана ориентировочно5 направлений; ближайшее — fresh-v2 first-install migration и подключение оставшихся7маршрутов, при сохранении отдельного legacy-backfill пути.
|
||
|
||
[Текущий источник и данные legacy связаны одним owned snapshot](mcp-diagnostic-source-pairing-acceptance-v1.json): фиксированный pg_catalog reader повторно читает system identifier/DB OID/roles/version/recovery и закрепляет backend PID, полный timestamp транзакции и snapshot. Private observation привязан WeakMap к исходному facade, deadline/signal; JSON/копия/другой client не дают подтверждения. Новый внутренний `inspectLegacyServerProbeSource` читает source до реального collector и перепроверяет после в том же lease, затем проходит свежую проверку прав. **20 новых unit**, actualPG source/data pairing, две временные БД одного кластера с разными OID и переставленный search_path с отвергающим shadow type/operator проверены; SQL/HTTP/runtime/dump-restore/tamper, management/build/strict/lint прошли. Это факты текущего источника, **не независимое подтверждение поколения/архива**; generationAuthenticated/READY/conversionAllowed остаются false. Следом external source-generation binding, backfill и writer/DDL drain. Публичных pending остаётся7; ориентировочно5 крупных направлений до полного плана.
|
||
|
||
[Защищённый операторский запуск проверки legacy принят](mcp-diagnostic-legacy-inspection-acceptance-v1.json): внутренний fixed-production host требует актуальный JWT приложения `mm` и `mm:settings:admin`, сохраняет исходный actor и проверяет portal revocation на независимых свежих lease до чтения и после освобождения snapshot. Весь callback, включая crypto/FS gaps, ограничен signal/deadline/JWT/300s, SQL ≤10s; поздние continuation/checkout не продолжают SQL. Реальный PostgreSQL подтвердил чтение двух старых квитанций, отказ при отзыве до чтения и между сбором/выдачей, отмену **до снятия relation lock за <2s**, исчезновение backend после unlock и неизменность anchors. **9 новых unit**, strict types включая tests/SQL helper, lint, backend/contracts build, полный management и SQL/MCP/REST/JWT/HTTP/dump-restore/tamper прошли. Public coverage остаётся **354/262/193 mediated/62 excluded/7 pending**, unmapped0. Публичного API и conversion grant нет: далее source-generation authority, authenticated backfill, writer/DDL drain и locked conversion. Ориентировочно остаются **5 крупных направлений**: переход схемы и7маршрутов; контроль БД/восстановление; native-маршрутизация/трафик; UI/AI-клиенты; итоговая регрессия/стендовая приёмка.
|
||
|
||
[Внутренняя проверка старых квитанций и read-only snapshot приняты](mcp-diagnostic-legacy-snapshot-acceptance-v1.json): общие protocol parsers сохраняют поведение journal; новый verifier проверяет encrypted receipt/MAC точной plaintext-строки, original MCP sealed source, anchor/stages/quarantine/cancellation. Старый identity MAC подтверждает только context: binding/progress/timestamps не объявляются доказанными; orphan progress без ledger остаётся unresolved. Фиксированный SQL collector собирает union идентичностей и отдельные orphan stages, ограничивает batches/total/deadline и возвращает только counts/reasons/aggregate checksum. Требуется явный READ ONLY REPEATABLE READ: autocommit с такими session defaults отклоняется. **69 verifier +20 snapshot checks**, реальный PostgreSQL/production crypto/legacy writer подтвердили: параллельный COMMIT не меняет текущий snapshot, следующий видит обе квитанции, повторный digest стабилен; read-only original MCP source совпадает с locked digest и сохраняет истёкший original context. Полные management/SQL/runtime/HTTP/dump-restore/tamper/build/types/lint прошли. **migrationReady/conversionAllowed всегда false**: source DB attestation, operator host, authenticated backfill, writer/DDL drain и locked conversion ещё впереди. Public coverage **354 tools /262 routes /193 mediated /62 excluded /7 pending**, unmapped0. До полного завершения ориентировочно **5 крупных направлений**: переход схемы и7маршрутов; контроль БД/восстановление; native-маршрутизация/трафик; UI/внешние AI-клиенты; итоговая регрессия и стендовая приёмка.
|
||
|
||
[Отмена managed metadata/owner SQL принята](mcp-diagnostic-metadata-cancellation-acceptance-v1.json): воспроизведён отказ прежнего пути завершить вызов при удерживаемом PostgreSQL relation lock. Теперь отдельный request window передаёт signal/deadline в owned metadata/owner/portal lease ≤10s; ограничен и callback между SQL-запросами. Строго проверяется закрытие родительских контекстов, включая сохранённый raw client; borrowed planner получает guarded facade и сохраняет своего владельца. Настоящий inherited verified guard не заменён; quarantine имеет отдельные 10s и не зависит от отменённого окна. Реальные factory и **HTTP/JWT handler завершились за 1 ms при удерживаемом lock**, без native/admission; backend исчез после unlock. **6 новых unit**, MCP/REST runtime, 22 journal/6 driver SQL-сценариев, management/build/types/lint, dump/restore/tamper прошли. Устранена нестабильность owned restore fixture: фоновые collectors архивируются выключенными для каждого тестового профиля, production scheduler не менялся. Caller-owned planner, inherited runtime/watchers/cancel host ещё сохраняют собственные timeout/lifecycle правила; не объявляется их полная унификация. Public enrollment/backfill/drain/retention worker и полный план остаются открыты; **354/193 mediated/62 excluded/7 pending**, unmapped0.
|
||
|
||
[REST-сборка и HTTP-адаптер v2 приняты в исходниках](mcp-diagnostic-rest-storage-acceptance-v1.json): общий journal I/O выделен для фиксированных MCP/REST transport. Новый REST factory использует реальный portal/JWT/local authority, выбирает только source+фактический BW peer и работает при MCP disabled и **1001 постороннем сервере**. 404 сохраняется после проверки входа, body не задаёт owner/transport/auth mode, квитанции и квоты общие с MCP. Неподключённый к startup HTTP plugin берёт actor/config с сервера, генерирует UUID и отменяет работу при disconnect. Реальные Fastify/JWT/HTTP127 проверки дали **8 REST native-запросов**, подтвердили 401/403, неизменный `{output}`, отказ подмены body/header, BW fallback/disabled, безопасные ошибки, shared quota и quarantine после отмены. Прежний сквозной MCP runtime (2 native, approval/cancel/history), 22 journal/6 driver SQL-сценариев, dump/restore/tamper, 4 новых unit/11 REST execution cases и management/build/types/lint прошли. Старый production route не переключён. До public readiness остаются authenticated legacy enrollment/backfill/drain, retention worker и короткие сроки/отмена внешних metadata/authority SQL; 10s bound сейчас доказан для owned journal SQL/cleanup. Полный план открыт; **354/193 mediated/62 excluded/7 pending** без изменений.
|
||
|
||
[Общий v2 run/read/cancel host принят в исходниках](mcp-diagnostic-storage-host-acceptance-v1.json): opt-in factory собирает реальные authority/executor/journal/history/cancel компоненты. Journal methods используют свой bounded backend; source/owner/protection SQL не делают обходного checkout под storage lock. Права подтверждённой операции проверяются штатным inherited verified guard вне journal lease. Planner transactionClient используется без захвата чужого lifecycle, stale ALS children отказывают. Сквозной **настоящий MCP runtime** на временной PostgreSQL/HTTP127 проверил план → запрет без человека → approval/apply → один native → metadata-only receipt → историю новым read-only токеном и отказ старого/записывающего доступа. Второй native остановлен **двумя конкурентными cancel**: watcher закрыл socket, один audit, потраченная admission, quarantine без payload, состояние unknown и запрет history/replay. Исправлен выявленный review лимит: journal учитывает private prepared expiry и допускает весь MTU budget, не продлевая план; SQL ≤10s, quarantine отдельно 10s. **4 host unit, 152 adapter assertions, 22 journal/6 driver/12 history SQL-сценариев**, dump/restore/tamper, management/build/types/lint прошли. Это принятая source assembly; **production enrollment/legacy drain/backfill, retention worker и public registration ещё открыты**, инвентарь **354/193 mediated/62 excluded/7 pending** не менялся. Полный план не завершён.
|
||
|
||
[SQL-источники и bounded connector диагностики приняты](mcp-diagnostic-storage-connection-source-acceptance-v1.json): production executor получил trusted hooks для чтения источников без обходного checkout; неполные и runtime-null hooks отказывают без fallback. Scope применяется до чтения credentials, BW selection читает только metadata. Реальные prepare/preflight с production crypto прошли **18 SQL-запросов на одном backend при запрете pool.query**; смена endpoint proof и disabled peer отклонены. Новый connector ограничивает checkout/query deadline, signal, wall timer и query_timeout; lost ACK/abort/overlap уничтожают lease без повтора. **4 source +20 connector unit tests**, постоянный management profile, **6 настоящих driver SQL-сценариев с pool.max=1 +22 journal SQL-сценария**, dump/restore/tamper, build/types/lint прошли. Driver и source-компоненты приняты; полная runtime authority, общий v2 run/read/cancel host, production schema enrollment и public registration ещё не завершены. Инвентарь **354/193 mediated/62 excluded/7 pending** прежний.
|
||
|
||
[Карантин неопределённой диагностики исправлен](mcp-diagnostic-quarantine-cleanup-acceptance-v1.json): после фактического terminal COMMIT и потери ACK отмена запроса, истечение deadline или смена policy больше не блокируют запись карантина. Только эта запись получает отдельный 10-секундный бюджет; требуются точная существующая оплаченная admission и прежние identity proofs/locks. Обычные операции сохраняют текущие проверки прав, policy, deadline и signal. **11 model-тестов, 22 SQL-сценария с 8 фактическими потерями ACK**, dump/restore/tamper, management profile, build/types/lint прошли. Новое чтение возвращает `unknown`; terminal/payload/stages не переписываются. Это исправление opt-in v2 boundary; production enrollment, общий run/read/cancel host и семь pending routes ещё открыты. Инвентарь **354/193 mediated/62 excluded/7 pending** не менялся.
|
||
|
||
[Разрешённая активация IPsec export завершена](mcp-existing-ipsec-export-active-acceptance-v1.json): пользователь отдельно разрешил существующие клиентские, серверные, сторонние и CA-ключи для обоих способов выдачи. Новый `mm_ipsec_existing_certificate_export_plan` зарегистрирован, оба REST пути переведены на общий guarded executor, legacy export/normalization fallback удалён. Общие typed contracts требуют private intent и stable UUID; для CA — отдельный explicit flag. Реальные default production assemblies проверены только на временной PostgreSQL и synthetic RouterOS; MCP human approval, model receipt-only, encrypted owner portal/TTL, current permissions/no-replay/late source guards сохранены. Browser 7/API 5, полный MCP/IPsec/pending foundations, SQL/HTTP и dump/restore/tamper, backend build/frontend/test types/lint прошли. **354 tools;193 mediated/62 excluded/7 pending**. Native CHR key export не выполнялся и разрешением этого этапа не покрыт. Полный план не завершён.
|
||
|
||
[Разрешённый cancellation host принят](mcp-diagnostic-cancellation-host-acceptance-v1.json): patch SHA проверен, source применён без изменений поведения относительно одобренного предложения. **17 SQL-сценариев** проверили active/pending/terminal, текущие owner/scope/credentials/settings и drift перед lock, общую квоту, идемпотентный audit, rollback/lost ACK и реальные COMMIT/claim race barriers. Все проверки и профиль server-probe-management прошли, как и dump/restore/tamper. Это opt-in source host; public API, deployment и текущая рабочая БД не менялись. Прежние ожидания разрешения ниже исторические: разрешение получено и выполнено.
|
||
|
||
[Сквозной IPsec export сценарий](mcp-existing-ipsec-export-integration-acceptance-v1.json): UI confirmation + обязательный stable request key, HTTP mapping обоих путей, guarded MCP registrar и injectable artifact store подключены. **5 API unit +7 реальных browser cases**, 41 HTTP model case и настоящая SQL/HTTP-приёмка охватывают REST client/by-name и MCP client/by-name для client/server/other/CA. Каждая MCP-операция требует человека; модель получает квитанцию, владелец — зашифрованный artifact через портал, проверены TTL/политика/no-replay/отзыв/отмена. Полный MCP, build/type/lint и dump/restore/tamper прошли. Existing/CA flag=false: штатные REST handlers ещё используют прежнюю реализацию, подготовленный новый registrar не увеличивает каталог; окончательная активация и native приёмка остаются открытыми, реестр 353 /191/62/9.
|
||
|
||
Разрешение на `tmp/mcp-diagnostic-cancel-host-reviewed.patch` получено; host применён без API/деплоя/рабочей БД. Его актуальная SQL-приёмка выполняется отдельно; прежние записи об ожидающем разрешении ниже относятся к историческим этапам.
|
||
|
||
[Общий IPsec export core, REST authority и журнал](mcp-existing-ipsec-export-transport-acceptance-v1.json): общий native алгоритм сохраняет MCP authority/receipt и отдельно возвращает REST bundle через transport publication. REST без фиктивного MCP principal требует актуального issuedAt/expiresAt/network-write, explicit private/CA intent и стабильного UUID request key; opaque token расходуется до первого await. Keyed proof связывает inline passphrase, который не входит в token/audit. Durable журнал actor/key блокирует повтор после COMMIT uncertainty; checkpoints 1→2 требуют исходный claim, точный receipt-owned файл и финальный исходный proof. **48 модельных +14 SQL-сценариев**, реальный dump/restore/tamper, полный MCP и build/type/lint прошли. Закрытые production assemblies и portal kind готовы, но REST handlers/UI contract/idempotency header, MCP registration/coverage и полная SQL/HTTP transport-композиция ещё не включены. Existing/CA payload approval пока нет, flag=false; текущие REST handlers сохранены до согласованного переключения. Публичное покрытие остаётся 353 /191/62/9, полный план открыт.
|
||
|
||
[Закрытый service adapter существующего IPsec export](mcp-existing-ipsec-export-adapter-acceptance-v1.json): подготовлены `prepare/execute/verify/reconcile` для selector client/certificate с обязательными injected dependencies. inputProof вычисляется из фактического service input после шифрования binding, без циклической подписи. Синтетические проверки покрывают роли сертификатов, CA flag, секреты, доступ, drift, deadline, отмену, точный receipt/artifact и VERIFIED-only сверку. Исправлена очистка приватных Buffer при ошибках reader/CREATE/executor и позднем download после отмены. Регистрация MCP, общий REST executor, portal branch, отдельный допуск существующих/CA-ключей и SQL-приёмка нового адаптера ещё нужны; coverage остаётся 353 /191/62/9.
|
||
|
||
Уточнение следующего DB baseline этапа: текущий `accessGeneration` относится к отзыву MCP-доступа, а control `epoch` — к смене владельца; ни один не является original database generation. В production пока нет независимого source-generation authority. HMAC от произвольно выбранного caller snapshot не закрывает этот пробел. Для trusted baseline нужны аутентифицированная identity исходной БД/операции и связь с исходным snapshot/archive, отдельно от исторической корректности миграций; READY остаётся закрытым.
|
||
|
||
[Приёмка данных через настоящий MCP restore](mcp-terminal-restore-data-equivalence-acceptance-v1.json): равенство всего содержимого архива проверено на границе после миграций, до возобновления consumers (97 таблиц, 8 sequences). Отдельная проверка после завершения связывает архив, владельца, operation и точный audit receipt. Тестовая instrumentation не добавляет production hooks и не игнорирует таблицы планировщика. Исправлены пустая maintenance-запись свежего Flow engine и попытка запуска выключенного коллектора после операции БД. SQL/model/профильные проверки и build прошли. Аутентифицированный production data issuer, историческая эквивалентность миграций и quiescence остаются открытыми; READY/enrollment не выдаются. Полный план и прежние 9 pending не закрыты.
|
||
|
||
[Сверка полного содержимого БД](mcp-migration-data-inventory-acceptance-v1.json): реализован read-only PG18 capture/compare для физического содержимого таблиц/partition leaves/materialized views и состояния sequence. Потоковые курсоры, C-order и length-framed SHA-256 сохраняют кратность строк; формат v2 объединяет JSONB с native record, чтобы не терять границы массивов. Сырые значения не входят в результат. **15 модельных и 13 настоящих SQL-сценариев** прошли, включая сравнение до/после настоящего `pg_dump/pg_restore`, сохранение данных при различиях fast-default cache, concurrent snapshot/sequence drift, отказ при overflow и исключение внешней `mmapp_control`. Полный system-database профиль, build, lint и отдельный terminal restore/tamper прошли. Это unsigned evidence-компонент: утверждения о доверенном issuer, исходной generation/archive, historical migration semantics и quiescence всех writers/DDL ещё нужны; READY/enrollment не выдаются. Host отмены по-прежнему ожидает ранее запрошенного разрешения; реестр 353/191/62/9 неизменен.
|
||
|
||
[SQL-предпосылки cancellation host](mcp-cancellation-source-prerequisites-acceptance-v1.json): **8 новых SQL-проверок** подтвердили чтение действительного зашифрованного источника pending/running, отказ при подмене шага/version/digest, независимость текущего credential/grant от исходного и отзыв текущего credential. Исправлено распознавание `rejected`/`partial` как терминальных состояний, которые фактически создаёт runner. Сохранены 17 storage/GC-сценариев и настоящий dump/restore/tamper; build, source models и scoped lint прошли. Полный host подготовлен в `tmp/mcp-diagnostic-cancel-host-reviewed.patch`: статическая проверка TypeScript и отдельное review успешны, но файл **не применён и не выполнялся**. Автопроверка требует отдельного разрешения на этот production-pool cancellation/audit wiring; вопрос отправлен пользователю. Эти 8 проверок не доказывают runtime-композицию host. Реестр и 9 pending неизменны.
|
||
|
||
[Разрешённый GC диагностики и общая квота отмены](mcp-diagnostic-expiry-gc-acceptance-v1.json): пользователь подтвердил удаление истёкших payloads, anchors, stages, quarantines, admissions и отмен завершённых операций. Патч применён с адаптацией к общей reservation отмены/выполнения: отдельного возврата 2 КиБ больше нет, полная квота возвращается один раз при удалении admission. **17 SQL-сценариев** проверили GC всех шести видов записей, текущий retention и защитный интервал, свежий quarantine, работающую операцию, rollback после DELETE, неизвестный COMMIT, отсутствие replay и сохранность планов/операций/общего аудита. Отдельно повторены **12 SQL-сценариев истории** и настоящий dump/restore/tamper. Source verifier отмены получил 27 tamper-проверок и блокировку исходной операции; повторная отмена добавляет одну запись и одно audit-событие. Полные MCP/diagnostics profiles, build и scoped lint прошли. Это ещё не production-включение: схема остаётся изолированным proposal, host wiring и регистрация run/read/cancel открыты. Полный план и 9 pending сохраняются; рабочая БД и CHR не менялись.
|
||
|
||
[История диагностики с отдельным payload](mcp-probe-separated-history-acceptance-v1.json) проверена в **12 настоящих SQL-сценариях**: исходная MCP-квитанция с истёкшим credential читается с новым актуальным read-допуском, без замены исходного envelope. Fixed opt-in reader проверяет admission по receipt или исходной execution identity, раздельные anchor/payload proofs, текущие права обоих участников и карантин; отдельный повторный SQL-снимок после расшифровки обнаруживает конкурентный purge, quarantine и отзыв текущего credential. Истёкший payload и отсутствующий результат различаются, попытка остаётся использованной, метаданные сохраняются. **42 исторических теста, 4 проверки deadline/abort**, полный MCP/diagnostics profiles, build, lint и настоящий dump/restore/tamper прошли. Это закрывает reader для схемы v2; её production-подключение, quota cancellation, полный retention/metadata GC и public registration ещё открыты. Инвентарь остаётся 353 / 191 mediated / 62 excluded / 9 pending; полного завершения плана нет.
|
||
|
||
[Этап общего сетевого контекста, эталона схемы и хранилища диагностики](mcp-shared-context-reference-storage-acceptance-v1.json) принят на изолированных стендах. Независимый producer выполняет 36 закреплённых миграций в отдельной временной БД и публикует подписанный эталон только после её удаления; 8 SQL-сценариев проверяют подмену, drift, данные, sequence и потерю ACK создания. Проверка текущего состояния сопоставляет схему, 16 seed-инвариантов, пустые таблицы и sequences, но ещё не выдаёт READY и не доказывает историческую эквивалентность данных.
|
||
|
||
Общий приватный сетевой контекст разделяет транспорт, абсолютный deadline и счётчики между configuration bridge и native snapshots. Прошли 15 HTTP-тестов, 14 SQL/HTTP-сценариев (126 запросов, 0 native writes) и полный scoped prepare/approval/apply с настоящим CONFIG_APPLIED. Полный подписанный сетевой результат и автоматический inverse остаются открытыми.
|
||
|
||
Опциональный адаптер журнала диагностики проверен в 7 SQL-сценариях: перенос ciphertext из legacy anchor, квоты, отдельный зашифрованный payload, три потери COMMIT ACK и удаление только просроченного payload с сохранением метаданных. DDL остаётся proposal; production-регистрации и metadata GC нет. Полные профили MCP, system-database, диагностики и native readers, backend build и scoped lint прошли. Инвентарь неизменен: **353 инструмента; 191 mediated / 62 excluded / 9 pending из 262 REST-маршрутов**. Полный план не завершён; деплоя и изменений настоящих CHR не было.
|
||
|
||
[Новый этап controlled migrations и genuine configuration bridge](mcp-controlled-dispatch-configuration-bridge-acceptance-v1.json): **8 настоящих SQL-сценариев в 7 отдельных БД**, два полных исполнения 36 закреплённых файлов и настоящий dump/restore/tamper прошли. Fixed dispatcher сохраняет intent до SQL, использует exclusive session lease на том же application backend, не переписывает self-managed файлы, проверяет COMMIT command tag и markers, затем сохраняет purpose-separated HMAC квитанцию. Потерянный ACK application COMMIT запрещает повтор; если потерян только ACK публикации уже подтверждённой HMAC-квитанции, новая invocation проверяет prefix и продолжает со следующего файла. Подмена hash одновременно в singleton/history не проходит. Это опциональный внутренний dispatcher: default startup не изменён, READY и schema/data verification не выдаются; актуальная полная сверка схемы/данных и quiescence всех writers перед activation остаются открыты.
|
||
|
||
Genuine configuration bridge проверен в полном scoped SQL/HTTP-профиле через prepare/approval/apply: revision-3 persistent manual request и реальный CONFIG_APPLIED, текущий raw owned rule/dependencies, одноразовый WeakMap context и повторный read-back на consume. JSON-копия, close, отключение профиля и подмена checkpoint блокируются без новой native-записи; autoRecovery guard сохранён. **30 bridge и 10 dispatcher модельных тестов**, native профиль 210 тестов, system-database профиль, backend build и scoped ESLint прошли. Bridge пока использует отдельный ограниченный context reader: общий network budget и per-round full proof этим не доказаны, assembly и automatic inverse не подключены.
|
||
|
||
[Дополнительное read-only наблюдение CHR](mcp-chr-ssh-forwarding-policy-observation-v1.json) подтвердило forwarding-enabled=no и www port 80 на первом CHR. Второй CHR отклонил новый SSH-вход до чтения настроек; повторов и изменений конфигурации не было. Полная recursive/forwarding-приёмка остаётся открытой. Деплоя, production DDL и новых публичных инструментов нет; полный план и 9 pending не закрыты.
|
||
|
||
[Новый этап durable schema control, archive boundary и native assembly](mcp-control-archive-native-assembly-acceptance-v1.json): на временной PostgreSQL прошли **14 сценариев в 9 отдельных БД**, включая конкурирующих владельцев, три потери ACK реального COMMIT, restart quarantine, подмену истории, сохранение control вне public, настоящий pg_dump/restore и отказ архиву с control objects. REST и MCP export теперь исключают mmapp_control; общий restore проверяет TOC до SQL decode и target replacement. Это защита пространства управления, а не проверка произвольного SQL внутри архива. Production control tables/startup/dispatcher ещё не подключены; READY не выдаётся из caller JSON или равенства схемы.
|
||
|
||
Native assembly получила **23 теста** и проверена на фактических baseline/двух forward/двух inverse снимках SQL/HTTP-reader: exact scope/source/phase/time и общий бюджет, strict parser для каждого этапа, явный UNKNOWN при отсутствии genuine configuration proof и log interval. Профиль native models теперь содержит **180 тестов**; ещё 20 control, 3 archive boundary и 4 acquisition CLI теста прошли. Общие MCP/system-database профили, backend build и scoped lint прошли; все backend-профили не повторялись.
|
||
|
||
[Read-only попытка сбора native recursive evidence с CHR](mcp-chr-recursive-acquisition-attempt-v1.json): SSH к стенду и обоим CHR подтверждён по прежним pinned host keys; оба первых REST GET через временные двойные SSH-туннели завершились без response-body, без повторов и изменений конфигурации. Причина не установлена, raw route/nexthop samples не получены. [Ограниченный протокол сбора](mcp-recursive-native-acquisition-contract.md) и CLI готовы; undocumented numeric joins остаются unknown. Это не приёмка recursive convergence или трёхузлового forwarding. Деплоя и production DDL не было; полный план и 9 pending остаются открытыми.
|
||
|
||
[Новый этап native readers и проверки схемы](mcp-native-readers-schema-inventory-acceptance-v1.json): **154 модельных теста**, **14 SQL/HTTP-сценариев (99 запросов, 0 native writes)** и **17 SQL-сценариев schema inventory** прошли на изолированном стенде. Обе SQL-приёмки включают настоящий dump/restore и отказ для подменённого архива. Настоящий loopback HTTPS проверил DNS pin, сохранение Host/SNI, доверенную CA, отказ при неверном имени и недоверенной CA. Полный MCP-профиль, существующие server connection tests, backend build и scoped ESLint прошли.
|
||
|
||
Reader закрепляет текущие полномочия и endpoint, использует один транспорт и общий абсолютный бюджет ≤120 секунд: 1 MiB/ответ, 8 MiB суммарно, 256 запросов, 1000 строк/ответ и 10000 суммарно. Baseline и по 2–3 раунда forward/inverse не сбрасывают лимиты. Подтверждённый ping 3/0 не запускает traceroute. Парсер принимает точный native BGP session ID и прямой next-hop; recursive next-hop и полнота log interval остаются unknown. Это внутренний read-only слой с securityProof:false: подписанный полный checkpoint и автоматический inverse не включены. Process-local запрет повторного reader имеет предел 1024 source operations и не заменяет durable runner admission после рестарта.
|
||
|
||
Новый PostgreSQL 18 comparator сравнивает логическую схему независимо мигрированных БД, отдельно сохраняет и проверяет physical fast-default metadata, отказывается при неподдерживаемых объектах и внешних зависимостях. Реальная SQL-проверка обнаружила и закрыла пропуск зависимости view через pg_rewrite. Равенство DDL не доказывает эквивалентность данных и не разрешает enrollment. Durable startup recovery/control namespace и подключение comparator к dispatcher остаются открыты. CHR, production БД и деплой на этом этапе не затронуты; 9 pending не изменились.
|
||
|
||
Актуальный реестр: **353 инструмента; 191 mediated / 62 excluded / 9 pending из 262 REST-маршрутов**. Полный план остаётся открытым. Проверки, хеши исходников и границы приёмки: [протокол сетевого управления](mcp-network-management-acceptance-v1.json).
|
||
|
||
[Полный common poll, реальные writers и private reservation store проверены](mcp-poll-reservation-acceptance-v1.json). Новый `createDurableServerPollSession` собирает production SQL/native adapter, durable journal и maintenance lease из одной фабрики: все транзакции используют backend, удерживающий исключение writers. На отдельной PostgreSQL и loopback HTTP прошли **4 GET, 148 maintenance effects всех 12 parents и 152 публикации**, включая имя/cache/snapshot, точную очистку старых raw и удаление только своего пустого expired fixture-раздела. Обычный writer блокируется до relation SQL; повтор не делает новых GET, изменение подписи/внешнего input не подменяет план/identity/authority, отзыв блокирует запуск. Настоящий dump/restore/tamper прошёл. Срок 120 секунд и весь footprint сохранены; HMAC purpose key теперь выводится один раз на private session, решения о допуске не кэшируются. Предыдущие deadline-отказы сохранены в протоколе; production/MCP scalability этим стендом не доказана.
|
||
|
||
Отдельно прошли **28 настоящих SQL/HTTP-сценариев** шести collector entrypoints, замены probes и server repository DELETE: real Drizzle, 11 родителей с FK cascade, 8 pre-relation waits, 8 фактических `55P03`, 8 потерянных ACK фактически выполненного COMMIT. Минимальные `PartitionWriteOptions` — доверенный внутренний seam для SQL fault tests; HTTP JSON их не принимает. Это подтверждение writers, а не завершение ручных collector MCP-адаптеров или HTTP authentication middleware.
|
||
|
||
Private reservation proposal/store прошёл **10 SQL-сценариев** и настоящий dump/restore/tamper: атомарные 2 generic mutation units + 2 durable profile slots, единый source-step PK с manual inverse в 0031, исходные plan/operation/profile/authority/deadline, строгий учёт legacy switch history. Некорректная/будущая/слишком большая история отказывается без allocations. Одноразовые forward/inverse allocation capabilities не выдаются из ID/JSON/read/repeated reserve/new store; forward capability появляется только после подтверждённого нового COMMIT. После lost ACK строка может остаться held, но без capability продолжение невозможно; отдельный durable SQL unknown marker не заявляется. Proven-unused/unknown capacity пока остаётся списанной на час; legacy/ledger overlap консервативно суммируется. Полный MCP, адресные модели, build и ESLint прошли; все 27 backend-профилей не повторялись.
|
||
|
||
Открыты runtime admission на том же transaction owner без двойного debit, переход всех controller writers на общий ledger, принятие reserved slot общим inverse engine, положительный полный inverse lifecycle, activation/baseline/verifier/restart и production-схема/HTTP/MCP full poll. Store и poll assembly не зарегистрированы; controller не включён. Read-only bootstrap-аудит дополнительно выявил cross-restart migration/import uncertainty и restart consumers после ошибки restore migrations; durable control и его restart gates ещё не реализованы. CHR, production БД и деплой не затронуты; pending по-прежнему 9. Ниже сохранены предыдущие снимки.
|
||
|
||
[Следующий этап: запись разделённых таблиц и постоянные полномочия маршрутизации](mcp-writer-routing-integration-acceptance-v1.json). Shared admission до обращения к целевым таблицам подключён к обычным SQL/Drizzle writers, flow, collectors, каскадным удалениям, DDL, миграциям, SQLite import и actual psql restore backend. CLI-пересборка NetFlow переведена на общий атомарный сервис с настоящим drain, защитами и квитанцией. Аудит сопоставил все 17 writer-групп и 12 partition parents; это покрытие исходников, а не заявление о полной SQL-приёмке каждого entrypoint. Ошибки сохранения измерения больше не превращаются в ложный offline/down sample: 27 проверок исполняемого кода collectors.
|
||
|
||
Постоянные profile ID/version передаются только доверенным внутренним контекстом; forward request v3 и checkpoint v2 сохраняют исходные полномочия. Изменение профиля, grant, credential или management channel блокирует запись после durable intent. Сессия ручного inverse отдельно захватывает исходную authority, проверяет её на каждом authorize и ограничивает deadline исходным validUntil. Временная PostgreSQL подтвердила writer admission **12**, CLI **3**, persistent routing **11** и metadata **7** сценариев, сохранив baseline 133/8/17/10/40, полную прежнюю scoped/inverse приёмку и настоящий dump/restore/tamper. Финальная дельта захваченной inverse authority проверена отдельно: 3 поздних изменения, 3 durable intent, ноль PATCH/HTTP; полный inverse lifecycle после этой дельты заново не заявляется. Существующий SQL-тест классификации CLI, полный MCP, IPsec, module-completion, адресные модели, build и ESLint прошли. Все 27 backend-профилей в этом этапе не повторялись.
|
||
|
||
Открыты production assembly/миграция full poll, фактическая SQL-приёмка каждого runtime writer, порядок конкурентного обычного DDL, durable import quarantine между рестартами и quiescence всех реплик при restore. Controller, reserved inverse budget и автоматическое восстановление не включены. Новые маршруты не зарегистрированы; production БД, CHR и деплой не затронуты. Следующие абзацы описывают предыдущие снимки; их ограничения уточнены новым протоколом выше.
|
||
|
||
[Проверен настоящий diagnostic runner и постоянный routing authority validator](mcp-runner-routing-authority-acceptance-v1.json): все шесть диагностик прошли dispatcher → approval → apply → leased runner; 8 SQL-сценариев проверили actual operation/steps, полные страницы, новый observer credential и отмену. До execute отмена теперь даёт rejected/cancelled с нулём этапов без needsReview; во время отправки — unknown и quarantine без повтора. Отдельно прошли 17 SQL-сценариев profile authority с нулём simulated PATCH после 16 изменений после durable intent, 40 SQL-сценариев durable poll journal и 10 проверок SQL lease. Всё вместе прошло настоящий dump/restore/tamper; базовые 133 SQL-сценария сохранены. Routing authority пока не встроен в controller/native checkpoints; схемы poll journal и writer triggers применялись только во временной БД.
|
||
|
||
Проверка lease обнаружила реальную границу: row trigger получает advisory lock после relation lock, поэтому один trigger не обеспечивает безопасный DDL. SQL зафиксировал ожидаемый 55P03 через LOCK NOWAIT без DROP и положительный early-admission случай. Инвентаризированы 12 partition parents и 17 writer-групп, включая Drizzle, flow, DDL и FK cascade. Следующий обязательный шаг — shared admission **до SQL на том же backend**, включая каскадные удаления и обслуживание разделов. Production-активации неполного барьера нет; полный poll сохраняет весь maintenance footprint.
|
||
|
||
[Принят слой журнала серверной диагностики](mcp-server-diagnostics-journal-acceptance-v1.json): миграция 0035, **114 настоящих SQL-сценариев** и dump/restore/tamper на отдельном PostgreSQL. Проверены реальные MCP operation/connection/credential и REST JWT/local identities, CAS, последовательные stages, неизменяемые encrypted receipts и quarantine после lost COMMIT ACK. Common executor прошёл 80 моделей, authority — 18, injected journal — 47; полный MCP model profile, build и ESLint прошли. Полные публичные результаты до 128 KiB передаются страницами с SHA-256 без усечения Unicode/массивов. API страниц пока не подключён. GET admission проверен на loopback и действует перед созданием запроса; DNS/TLS/socket queue следуют после него.
|
||
|
||
[Следующий слой общих adapters и отмены проверен отдельно](mcp-server-diagnostics-adapters-acceptance-v1.json): **133 SQL-сценария** и настоящий dump/restore/tamper; все шесть REST-диагностик прошли loopback HTTP через common executor и SQL journal с синтетическими ответами. REST сохраняет собственные JWT/local identities, scoped BW fallback, DNS CNAME и MTU output; MCP adapter закрепляет реальный operation/step и полный private binding. Историческое чтение сохраняет исходную подписанную identity и использует текущий read-допуск; инертные модели проверили новый credential той же connection после истечения плана. Миграция 0036 и SQL-запросы отмены проверены; runtime получил opt-in AbortSignal и отдельные diagnosticProgress/completedServiceSteps при confirmedWrites=0. Модели MCP adapter — 146 проверок, REST-контракт — 140; полный MCP/IPsec/module-completion профили, build и scoped ESLint прошли.
|
||
|
||
Это ещё не завершение `/probes/run`: остаются production-подключение storage admission/quota/retention, замена существующего REST handler, регистрация MCP run/read/cancel, production key provisioning и HTTP transport-приёмка зарегистрированных маршрутов. Разрешение на GC получено; его исходники и изолированная SQL-приёмка описаны в актуальном этапе в начале плана. Очистка действующей БД не выполнялась. Server poll получил production dependency adapter всех четырёх GET и полного partition maintenance; durable journal и полный writer admission ещё нужно подключить. Новые маршруты не зарегистрированы, production-схема не применялась и счётчик pending не изменился.
|
||
|
||
[Новый протокол runtime admission и восстановления](mcp-reservation-runtime-bootstrap-acceptance-v1.json): на отдельной PostgreSQL прошли **15 сценариев** атомарного admission через `applyPlan` — операция, 2 mutation units, 2 profile slots и общий source-step slot записываются на одном backend без двойного debit. Повторное применение и lost COMMIT ACK не выдают capability продолжения. Полный manual inverse SQL/HTTP и dump/restore/tamper прошли; исправлена найденная регрессия подписи: отсутствующие optional reserved-поля больше не меняют fingerprint ручной квитанции. Reserved engine использует тот же 0031 PK и общий исполнитель; положительный autoRecovery lifecycle и его запуск остаются закрыты context guard. Отдельная повторная IPsec delete/pool-приёмка также прошла.
|
||
|
||
Добавлена **инертная модель полного сетевого verifier: 46 тестов**. Она различает installation table и probe VRF, требует точные route/next-hop/BGP/BFD/probe/log identities, две стабильные полные выборки, полноту log interval и общий бюджет ≤120 секунд между forward/inverse. Любая неопределённость преобладает над failure. Это классификация переданных наблюдений, не native reader, подписанный checkpoint, authority или разрешение на откат; per-response wire/page limits ещё должен обеспечивать native adapter.
|
||
|
||
Для restore введена общая process-local защёлка: после начала target psql NetFlow/планировщик/RIPE не запускаются до успешных миграций, включая последующий export в том же процессе. Шесть тестов реальных entrypoints с инертным I/O, независимые 15 адресных проверок и настоящий owned terminal restore прошли. **Durable startup recovery не реализован.** Подготовлен точный манифест 36 SQL-файлов (14 сценариев); dispatcher, независимый schema comparator и control namespace ещё не подключены. Финальные MCP-профиль, модели, backend build и lint прошли; все backend-профили не повторялись. Деплоя, production DDL и обращений к CHR не было.
|
||
|
||
Ниже сохранены предыдущие этапы; их открытые пункты нужно читать с учётом нового протокола. Общий план остаётся открытым, реестр и 9 pending не изменились.
|
||
|
||
- [x] **IPsec init v3**: общий REST/MCP executor всех полей мастера, подпись только новых ACK-owned сертификатов, source/authority fences, полный raw preflight и обязательная история. Изменение существующего IPv4-пула учитывает DHCP, PPP, Hotspot и next-pool; внешние потребители блокируют план.
|
||
- [x] **IPsec revision restore v1**: строгие schema/fingerprint/xmin, точные записанные поля и empty clears, сохранение PSK включая пробелы, проверка PKI/profile/proposal/group/NAT/pool зависимостей и отсутствие replay. Незаданные native-поля существующего mode-config сохраняются. Если старый snapshot не позволяет восстановить отсутствующую policy или mode-config, legacy certificate-поле либо unknown auth capability, операция отказывается до записи; утраченные ключи не генерируются заново. Непустой native default для записанного пустого значения не принимается как успешное восстановление.
|
||
- [x] **WireGuard revision restore v1**: полная форма интерфейсов/peers/IPv4/IPv6, encrypted desired keys, явный inventory удалений, staged disable/enable, private per-command proof/read-back и обязательная история. Ключи в модель не выдаются; сверка использует только точный сохранённый VERIFIED checkpoint.
|
||
- [x] **IPsec server delete v2**: после отдельного разрешения применён шестифайловый патч предохранителей IPv4-пулов. Сценарий удаления не расширен: внешние DHCP/PPP/Hotspot/next-pool потребители запрещают удаление, старые планы v1 не выполняются. Внешняя RADIUS Framed-Pool authority не выводится из native-конфигурации.
|
||
- [x] **VRF production preparation**: явный productionAdmission:true на существующих typed tools сохраняет прежнюю подготовку простых планов без флага. Encrypted ticket сохраняется вместе с реальным планом в одной транзакции; ключ выводится из durable private material с отдельным purpose. Admission/private domains v2 исключают только скалярную telemetry соответствующего каталога; неизвестные и вложенные поля остаются sealed. 86 моделей отказа, 7 runtime SQL-сценариев и 11 SQL-контрактов tickets пройдены. Unknown claim не перезаписывает завершённую операцию.
|
||
- [x] **VRF transition model**: 62 проверки шести lifecycle-фаз и произвольных IPv4 /23, IPv6 /56. Это чистый classifier для доказанных bridge effects; reenable/LL revival требуют непрерывного checkpoint, disable ограничен наблюдавшимся циклом. Production executor и native companion admission не включены.
|
||
- [x] **Мониторинг частичного результата**: bounded nativeProgress отдельно показывает ACK и подтверждённые read-back команды; счётчик завершённых service steps сохранён отдельно. Private error payload не публикуется.
|
||
|
||
SQL/HTTP использует временный PostgreSQL и локальные RouterOS fixtures. Новый fixture agent переиспользует максимум два соединения только с точным связанным loopback endpoint, сохраняет настоящий HTTP/parser/guards и не повторяет запросы; teardown восстанавливает transport. Это устраняет подтверждённый Windows EADDRINUSE в накопительном тесте. Production HTTP agent не изменён; его нагрузочная и живая CHR-приёмка этим протоколом не заявляются. Сборка, профили MCP/IPsec/WireGuard, новые модели, scoped ESLint и настоящий dump/restore/tamper проверены в указанном отчёте; все 27 backend-профилей не повторялись. Деплоя, live collector или изменений CHR не было.
|
||
|
||
Остаются **9 REST-сценариев**: два экспорта существующих IPsec-сертификатов и семь ручных collectors (server/API ping/probes, traffic, uptime/group/speed-test). Persistent routing authority/reserved inverse/controller, production VRF executor/recovery/forwarding, внешние AI-клиенты, live portal sender/UI и независимая трёхузловая приёмка остаются в полном плане. Доступны только два CHR.
|
||
|
||
Подготовлены отдельные, ещё не зарегистрированные основы server poll, шести видов server probes и экспорта существующих IPsec-сертификатов. Для poll ещё нужны настоящий SQL journal и global writer lease; общий reader/DDL adapter пока проверен на инертных зависимостях. Для probes нужен adapter, связывающий принятый SQL journal 0035 с REST/MCP, и перечисленные выше проверки полного сценария. Для экспорта нужны отдельное разрешение на существующие ключи, полноценная SQL/HTTP-приёмка и подключение портала. Production export и его artifact readers выключены. Эти исходники не закрывают ни один из девяти pending-маршрутов.
|
||
|
||
## Исторические этапы
|
||
|
||
Прежние счётчики и ограничения ниже относятся к соответствующим снимкам; текущий реестр и протокол приведены выше.
|
||
|
||
|
||
Актуальный итог этого этапа: [объединённый протокол](mcp-modules-consolidated-acceptance-v1.json), **350 инструментов; 188 mediated / 62 excluded / 12 pending из 262 REST-маршрутов**. Полный план остаётся открытым.
|
||
|
||
[NetFlow принят с финальными поправками](mcp-netflow-settings-acceptance-v2.json): `netflow.settings.update` **v3**, полный `{settings: …}` из десяти полей, резерв **4 публикации** при двух фазах. SQL подтвердил отказ старого v2 и бюджета 3 до записи. До ACK нет timer/packet/enrichment и автоматического повтора startup; normal runtime после ACK отделён от UDP readiness. [IPsec CREATE принят с точным bounded reader](mcp-ipsec-user-create-acceptance-v2.json): приватный PKCS12 читается по проверенному native ID без поиска нового файла по имени; поток, размер, общее время и допуск ограничены. v1 этих двух отчётов сохраняется как исторический снимок, текущие ограничения и поправки описаны в v2.
|
||
|
||
Основная MCP SQL/HTTP-регрессия завершилась с кодом 0 вместе с настоящим dump/restore/tamper на baseline до последних двух поправок. Финальные дельты отдельно прошли свежие целевые SQL/HTTP, весь MCP model profile, NetFlow settings/file profiles, backend build и ESLint. Это не повтор всех 27 backend-профилей и не живая CHR/UDP-приёмка. VRF reader/admission/tickets прошли 76 моделей и 11 SQL-сценариев; native execution пока выключен. Деплоя и новых обращений к CHR не было.
|
||
|
||
|
||
Текущий подтверждённый срез: **350 инструментов; 188 mediated / 62 excluded / 12 pending из 262 REST-маршрутов**. Полный план открыт. Ниже сохранены исторические этапы; их прежние счётчики и ограничения относятся к указанным снимкам.
|
||
|
||
- [x] [Полные настройки NetFlow и ключи](mcp-netflow-settings-acceptance-v1.json): общий REST/MCP executor всех десяти полей, включая no-op/display-only restart; full-config CAS, постоянные phase intents и внутренние main/worker lifecycle checkpoints. Старый handler из четырёх полей заменён общим executor; актуальная версия v3 и бюджет 4 описаны выше (промежуточный v2 исторический). `mm_netflow_host_keys_generate_plan` создаёт только неполную пару и выдаёт публичный ключ. SQL/HTTP проверяет настоящий disabled main flush; worker startup/shutdown проверены инертными моделями. Живой UDP worker отдельно не принимался.
|
||
- [x] [CREATE клиента IPsec](mcp-ipsec-user-create-acceptance-v1.json): PSK/certificate/static IP, полный private proof и dependency closure, подпись/export/cleanup без повторов, обязательная история. После отдельного разрешения пользователя PKCS12 выдаётся владельцу с network-write через зашифрованный портал на 15 минут только при `privateKeyExport=true` и human approval; модель получает квитанцию. Loopback SQL/HTTP всех веток и owner download прошли; настоящие CHR/SA/forwarding не проверялись.
|
||
- [x] [Production VRF raw reader и durable tickets](mcp-vrf-production-ticket-acceptance-v1.json): 17 raw-каталогов и конкретные parent/peer/VTEP зависимости, HMAC admission, реальные encrypted plan bindings, отдельное соединение для одноразового claim. 76 моделей отказа и 11 SQL-сценариев прошли. Это precondition, **native execution не включён**; runtime journal/key provisioning и production transition classifier остаются открытыми.
|
||
|
||
Целевые SQL-приёмки, настоящий dump/restore/tamper, весь MCP model profile, IPsec/settings/purge/ownership profiles, backend build и адресный ESLint прошли. Основная SQL-регрессия baseline затем завершилась; финальные дельты и точные границы проверки приведены в объединённом протоколе выше. Все 27 backend-профилей повторно не заявляются. Деплоя, запуска живого collector и обращений к CHR в этом этапе не было.
|
||
|
||
Оставшиеся REST-сценарии: IPsec certificate export, user certificate export, server init и revision restore; ручные servers/API-ping/probes/traffic/uptime/speed-test collectors; WireGuard revision restore. Persistent routing profile authority/reserved inverse/controller, production VRF native/forwarding, внешние AI-клиенты/portal sender/live UI и независимая трёхузловая приёмка остаются в исходном объёме; доступны два CHR.
|
||
|
||
|
||
- [x] [Удаление IPsec-сервера принято](mcp-ipsec-server-delete-acceptance-v1.json): `mm_ipsec_server_remove_plan` использует общий REST/MCP executor с полным ordered manifest, защитами foreign references и объявленными CA cascade. Profiles/proposals и чужие объекты сохраняются; каждый DELETE проходит private stage proof, read-back и checkpoint, затем обязательную историю. Proof v2 исключает только certificate expires-after; даты, trust, CRL, ссылки и неизвестные поля сохранены. Старые планы блокируются повышенными версиями действий. SQL/HTTP, весь IPsec-профиль, весь MCP model profile, build, lint и настоящий dump/restore/tamper прошли. Реестр: **348 инструментов; 185 mediated / 62 excluded / 15 pending из 262 REST-маршрутов**. Настоящий CHR cascade/forwarding остаётся отдельной приёмкой; полный план открыт.
|
||
|
||
Параллельно подготовлены [основы модулей NetFlow settings и production VRF](mcp-parallel-module-foundations-v1.json): 43 чистые модели executor и 65 моделей отказа admission соответственно. NetFlow ещё требует CAS/intents и внутренних collector fences; VRF — raw reader, durable ticket store, transition classifier и native executor. Runtime этих компонентов не подключён; это не закрывает ожидающие REST/VRF-сценарии.
|
||
|
||
- [x] [Полный PATCH клиента IPsec принят](mcp-ipsec-user-update-acceptance-v1.json): `mm_ipsec_user_edit_plan` использует общий REST/MCP executor для имени, static IPv4/возврата к пулу, PSK, Remote ID и disabled, включая cert-only promotion/ignored fields, shared/foreign mode-config и историю. PSK в MCP передаётся только через привязанную к владельцу/серверу/клиенту ссылку. Каждый ACK проверяет точную сохранность полного private state; отзыв PSK-reference после первого ACK блокирует следующую команду. Исправлена ветка пустого staticIp: 400 до изменения имени. SQL/HTTP parity, весь IPsec-профиль, весь MCP model profile, build, lint и настоящий dump/restore/tamper прошли. Реестр: **347 инструментов; 184 mediated / 62 excluded / 16 pending из 262 REST-маршрутов**. Живые CHR и forwarding этим прогоном не проверялись; полный план остаётся открытым.
|
||
|
||
- [x] [Native IPsec dependency guards приняты](mcp-ipsec-native-closure-acceptance-v1.json): `mm_ipsec_peer_create_plan` v4 закрепляет точный/default profile и существующие ссылки; `mm_certificate_update_plan` v3 учитывает цепочку сертификатов, identities и peers и требует одновременно network-write и certificates-write. Оба входа требуют human approval и полного private proof вместо усечённого generic snapshot. Смена подключения блокируется до первого GET, старые прямые native/inverse шаги — до SQL и native access. SQL/HTTP, прежние IPsec DELETE/PATCH, настоящий dump/restore/tamper, весь MCP model profile, build и lint прошли. Ожидаемый rename ссылок проверен на loopback; настоящий CHR rename остаётся открытой приёмкой. Реестр без изменений: **346 инструментов; 183 mediated / 62 excluded / 17 pending**.
|
||
|
||
- [x] [REST/MCP rebuild NetFlow принят](mcp-flow-rebuild-adapter-acceptance-v1.json): `mm_netflow_facts_rebuild_plan` требует human approval и полного global/server scope; `mm_netflow_facts_rebuild_reconcile` сверяет историческую квитанцию без повтора записи. На временном PostgreSQL прошли actual main-writer drain, атомарные факты/событие/квитанция, scope/protection guards, новый credential и JWT REST parity. Backend build, весь MCP model profile и scoped lint прошли. Реестр: **346 инструментов; 183 mediated / 62 excluded / 17 pending из 262 REST-маршрутов**. Живой worker отдельно не запускался, деплоя не было; полный план остаётся открытым.
|
||
|
||
- [x] [Flow engine wiring принят](mcp-flow-engine-wiring-acceptance-v1.json): после отдельного разрешения применён цельный патч engine/worker/purge. Backend build, native-conservation SQL/HTTP, весь traffic-flow профиль, SQL logs и настоящий dump/restore/tamper прошли. Общий rebuild проверен на настоящих partitioned таблицах с явной no-op drain-фикстурой: дневная агрегация, rollback обоих кубов, поздние защиты/отзыв и чтение известной квитанции до drain. REST/MCP принят следующим этапом выше; проверка живого существующего worker остаётся открытой; деплоя и запуска collectors не было.
|
||
|
||
- [x] [Изолированный native VRF lifecycle v5 принят](mcp-chr-vrf-companion-native-v5-acceptance.json): отдельный новый fixture подтвердил create/rename/disable/re-enable/member transfer/delete, 18 ACK с read-back и штатную очистку. Независимый GET без исключений подтвердил ноль тестовых объектов и все 34 исходных хеша 17 каталогов; SSH закрыт. Base-контракт содержит 218 моделей отказа. Generic production MCP companion admission и forwarding этим прогоном не проверены и остаются открытыми.
|
||
|
||
Отдельный [SQL-контракт flow writer](mcp-flow-write-transaction-pg-acceptance-v3.json) прошёл на временном PostgreSQL: атомарность двух shadow-кубов, события и квитанции, отсутствие повторного тела, lost COMMIT ACK, реальный advisory-lock barrier и отказ по отзыву до COMMIT. Это отдельный writer-контракт; последующая REST/MCP-приёмка приведена выше. `npm --prefix backend run test:mcp:vrf-cleanup` теперь запускает все три cleanup-контракта (50 + 53 + 94 модели отказа); весь профиль прошёл.
|
||
|
||
Сейчас в работе: OSPF template listing order сохраняется в projected snapshots и общем cost writer; snapshots/source-domain повышены до v3, optimizer до v9, template C/U/D до v5/v4/v3. Старые v2 snapshots не проходят prefix admission. [SQL-приёмка OSPF order завершена](mcp-ospf-template-order-acceptance-v1.json): main MCP SQL/HTTP, OSPF-профиль, SQL logs, настоящий dump/restore/tamper и весь MCP model profile прошли; до dispatch reorder даёт rejected/0 PATCH, после ACK — unknown/1 PATCH/0 VERIFIED. Все 27 backend-профилей не повторялись. Shared flow executor и writer fencing подключены после отдельного разрешения; подтверждённая регрессия приведена выше. REST/MCP adapters приняты последующим этапом выше.
|
||
|
||
[Native VRF v4](mcp-chr-vrf-companion-native-v4.json) подтвердил create/rename/disable/re-enable с полным read-back. Transfer получил ACK, затем proof остановился: RouterOS переназначил ID между собственными semantic connected routes и убрал LL/LL-route нового временного участника. [Первый GET](mcp-chr-vrf-companion-readonly-diagnostic-v4.json) и [поздний GET](mcp-chr-vrf-companion-readonly-diagnostic-v4-late.json) подтвердили одинаковую форму. В исходном lifecycle DELETE VRF не запускался. [Отдельная очистка завершена](mcp-chr-vrf-companion-transfer-cleanup-result-v1.json): все семь ACK-owned объектов удалены без повторов команд, с pinning present/absent kernel choices и ACK-only checkpoint advance; независимый финальный GET подтвердил ноль тестовых объектов и все 34 исходных хеша без исключений. Старый runner не возобновляется; полный lifecycle этим прогоном v4 не принят.
|
||
|
||
Предыдущая зафиксированная дельта прошла [проверку снимка 383 файлов](mcp-vrf-accumulator-regression-v1.json): native-conservation SQL/HTTP, весь профиль traffic-flow (включая существующий rebuild), SQL logs, настоящий dump/restore/tamper, весь MCP model profile и backend build — код 0. Выделен чистый instance-based fact accumulator с сохранением нормализации, ASN200/tuple8000 и stable ties; прежний live API использует один экземпляр. Это подготовка атомарного rebuild, сам MCP-адаптер ещё не включён. VRF v3 содержит ACK-bound полные kernel evidence и 138 моделей отказа. [Новый native-прогон](mcp-chr-vrf-companion-native-v3.json) подтвердил создание семи объектов и rename с read-back, затем остановился после ACK disable на неподтверждённой disabled-форме; re-enable/transfer не выполнялись. [GET-диагностика](mcp-chr-vrf-companion-readonly-diagnostic-v3.json) показала удаление dynamic table, сохранение выключенного virtual interface и возврат адресов/маршрутов в main. [Отдельная очистка завершена](mcp-chr-vrf-companion-disabled-cleanup-result-v1.json): удалены все семь ACK-owned объектов без повторов PATCH/DELETE; независимая GET-проверка подтвердила ноль тестовых объектов и все 34 исходных хеша без исключений. Полный native lifecycle не принят.
|
||
|
||
- [x] `POST /api/traffic/flow/rebuild-facts`: общий REST/MCP executor и отдельная read-only сверка приняты; [протокол](mcp-flow-rebuild-adapter-acceptance-v1.json). Права/полный scope/human approval, строгий main drain, атомарная публикация кубов/события/квитанции, source/protection guards и unknown без replay проверены. Приёмка существующего живого worker остаётся отдельной.
|
||
|
||
Этап в работе: общий native verifier проверяет назначенный CREATE ID, состав и неизменность соседних объектов в видимой проекции; сохранён порядок 11 каталогов. Source-bound snapshots v2 и expected-prefix checks защищают подготовку, каждый шаг и dispatch после durable native intent. Целевая SQL/HTTP-приёмка, 54 HTTP-модели, ECMP+hash/singleton inverse и dump/restore прошли. OSPF builder исправлен со свежим source-bound capture (v8); SQL/HTTP подтвердил полный owner graph и VRF context, [измерив 93 HTTP-запроса](mcp-ospf-read-budget-observation.json) на один PATCH. Web CREATE adapter исправлен: CREATE не передаёт id даже как undefined, строгая схема сохранена. [Повторная объединённая SQL-регрессия снимка 379 файлов](mcp-native-conservation-regression-v1.json) завершилась с кодом 0: main integration, профиль OSPF, SQL logs, настоящий pg_dump/restore и tamper refusal. Весь MCP model profile и backend build также прошли. Все 27 backend-профилей этой дельты не повторялись.
|
||
|
||
- [x] Вложенный polling OSPF устранён: [статический аудит](mcp-ospf-read-amplification-audit.json) вывел 1232 GET на один cost PATCH в трёхузловой HTTP-фикстуре из-за вложенного полного graph guard. Это не native timing measurement. Исправление внесено: grant/source перед каждым чтением сохранены; полный граф проверяется на пяти границах, последним перед dispatch и после ACK до VERIFIED. Модели source ABA/revocation и post-ACK classification прошли; успешная объединённая SQL-регрессия подтвердила 80 GET + 12 read-only POST + 1 PATCH = 93 HTTP-запроса вместо 1232 GET. Это трёхузловая HTTP-фикстура, не native forwarding-приёмка.
|
||
|
||
- [ ] Общий этап пока не принят: VRF требует typed companion-контрактов для автоматически перемещаемых/удаляемых connected routes, таблиц и virtual interfaces. [Native-v2](mcp-chr-vrf-companion-native-v2.json) на RouterOS 7.24.5 подтвердил создание двух bridge, четырёх адресов и VRF, затем остановился на неизвестных kernel companions; rename/toggle/transfer не выполнялись. [Отдельная очистка завершена](mcp-chr-vrf-companion-cleanup-result-v1.json): все семь ACK-owned объектов удалены без повторов команд и без прямого удаления kernel-объектов. Первый cleanup остановился после ACK IPv4 DELETE из-за изменения собственного bridge status; GET-диагностика и отдельный guard точного наблюдённого перехода позволили проверить отсутствие удалённых ID и удалить оставшиеся три объекта. [Независимая заключительная GET-проверка](mcp-chr-vrf-companion-cleanup-final-verification-v1.json) подтвердила ноль тестовых объектов и совпадение всех 34 исходных хешей 17 каталогов уже без исключений. Исходный unknownWrite latch и отчёт не изменены. Полный native lifecycle и generic MCP companion admission остаются открытыми.
|
||
|
||
Предыдущая принятая дельта: устранена подмена ID в native CREATE. Все 30 CREATE-схем запрещают `id`; старые некорректные шаги блокируются до отправки, проверка использует только acknowledged `.id`, inverse выбирает единственную добавленную строку. CREATE-версии повышены, recovery — v4. [SQL/HTTP-протокол](mcp-native-create-id-acceptance.json): код 0, нормальный create/inverse сохраняет существующий объект, legacy poison и старые версии блокируются, ignored/lost не повторяются. Весь профиль MCP, build и ESLint прошли; целевая recovery/maintenance SQL-регрессия на v4, включая primary-down alternate, и настоящий dump/restore/tamper завершились с кодом 0. Независимое read-only review не нашло ошибок в этой дельте. Полные 27 профилей после этой дельты не повторялись; принятый предыдущий прогон указан ниже. Реестр остаётся **344 инструмента; 182 mediated / 62 excluded / 18 pending**.
|
||
|
||
- [ ] Усилить общий verifier: новый assigned ID должен отсутствовать before, изменения должны сохранять соседние объекты и порядок правил. Добавить expected-prefix proof между шагами и полные private/source/dependency contracts. Эта дельта не доказывает whole-catalog conservation. [Статический аудит до исправления ID](mcp-native-write-hardening-audit.json).
|
||
|
||
Предыдущий этап: SLA после записи и два IPsec-адаптера прошли целевую SQL/HTTP-приёмку с кодом 0, включая настоящий dump/restore/tamper. Реестр: **344 инструмента; 182 mediated / 62 excluded / 18 pending из 262 REST-маршрутов**. [Целевой протокол](mcp-routing-sla-ipsec-focused-acceptance.json). Первый полный прогон остановился на дубликате разрешения в ACME-фикстуре (код 1); дубликаты исправлены только в двух тестовых фикстурах. [Повторная полная регрессия нового снимка 360 файлов](mcp-routing-sla-ipsec-acceptance.json) завершилась с кодом 0: все 27 backend-профилей, SQL `/logs`, настоящий dump/restore/tamper прошли; весь план остаётся открытым.
|
||
|
||
- [x] `mm_route_optimizer_plan` v6 проверяет свежие SLA/preflight до PATCH, в том числе после durable intent. После PATCH конфигурационный read-back и CONFIG_APPLIED не зависят от новых SLA; исходная path-row identity, rights/policy/source/protection proofs сохраняются. Подписанные stale/100%-loss samples после записи, failed/unknown/passed probe, reconciliation и no replay проверены. Изменение прав/защиты/epoch/preflight row после записи по-прежнему запрещает подтверждение.
|
||
- [x] `mm_ipsec_certificate_remove_plan` / `network.ipsec.certificates.delete`: общий REST/MCP DELETE любого выбранного сертификата, force только для peer/identity ссылок. CA children, CRL true/yes и неоднозначный issuer не обходятся. Общий guard используется и при certificate cascade удаления пользователя. Private proof, per-dispatch fence, exact read-back, обязательная managed-only история и exact generic VERIFIED проверены; unknown не повторяется.
|
||
- [x] `mm_ipsec_peer_edit_plan` / `network.ipsec.peers.update`: все REST-поля, raw empty strings, same-value PATCH и history-only `{}`. Certificate presence возвращает 400 до чтений. Business MCP/native поддерживают comment; REST сохраняет прежнюю схему без comment. Ожидаемое переименование native-ссылок проверяется whole-state proof; mock без обновления ссылок даёт partial. Настоящее native rename поведение ещё не принято.
|
||
- [x] Native certificate DELETE, peer DELETE/PATCH имеют версию 2 и входят в общие guards; business scope нужен отдельно до native reads. Для native certificate также сохраняется certificates-write. Известные секреты, отражённые в dependency labels, маскируются; отражённое в native certificate name закрытое значение не материализуется в MCP-план. Проверены REST/MCP/alias/grant/protection/ABA/history/tamper и потеря ответа.
|
||
- [x] Шесть IPsec model modules, весь `test:mcp`, build, адресный ESLint и standalone REST history/mutation прошли. Первый запуск MCP-моделей в sandbox получил loopback EACCES; повтор с доступом к локальным fixtures прошёл без product patch. UI не менялся; предыдущие UI hashes сверены. Реальные CHR в этой серии не менялись.
|
||
- [x] Два generic native IPsec пробела закрыты через отдельные guarded services: certificate UPDATE учитывает issuer/child/identity/peer closure и оба права network-write/certificates-write; peer CREATE закрепляет profile и блокирует late binding. [SQL/HTTP и модели](mcp-ipsec-native-closure-acceptance-v1.json) прошли. Прямой generic dispatch и старые inverses этих ресурсов больше не обходят проверки. Живой CHR rename/reference и остальной write perimeter остаются отдельными пунктами.
|
||
- [ ] Persistent profile authority/version fence, reserved scoped recovery и scoped controller остаются выключенными. Native peer rename/reference и force-certificate-delete, независимый/обратный трафик, live portal/external clients и трёхузловая приёмка остаются открытыми; доступны только два CHR.
|
||
|
||
Предыдущий этап: WireGuard export подключён к MCP и порталу. Реестр: **342 инструмента; 180 mediated / 62 excluded / 20 pending из 262 REST-маршрутов**. [Целевая приёмка](mcp-wireguard-export-focused-acceptance.json) и [полная регрессия объединённого снимка](mcp-wireguard-export-full-acceptance.json) завершились с кодом 0: 27 backend-профилей, SQL logs, настоящий dump/restore/tamper. Две последующие коррекции прошли [отдельную целевую проверку](mcp-wireguard-export-contract-acceptance.json); повторный полный прогон после этой дельты не заявляется. Полный план не завершён.
|
||
|
||
- [x] `mm_wireguard_export_plan` / `network.wireguard.export`: human approval обязателен даже в autonomous mode; модель получает только квитанцию. Файл зашифрован, хранится 15 минут, доступен вошедшему владельцу с network-write и действующим допуском; нужен exact generic VERIFIED checkpoint. Отзыв во время чтения, policy/source ABA, защита объекта, подмена, expiry и cancellation проверены. Ответ скачивания — private/no-store.
|
||
- [x] Общий REST/MCP reader и renderer сохраняют rsc/conf/peer-conf, JSON REST `{format, filename, content}`, native/composite peer IDs и явный includePrivateKey=true. Без него ключ интерфейса не включается; peer-conf не выдаёт приватные ключи. Безопасные имена файлов нормализуются. PSK, неоднозначные каталоги и невоспроизводимые состояния отклоняются; conf не скрывает disabled peers, несколько/динамические/специальные адреса не экспортируются как готовая конфигурация.
|
||
- [x] JWT HTTP-приёмка на синтетических ключах: равенство REST/MCP содержимого и имён во всех форматах, omitted/false opt-in, отказ anonymous/MCP bearer/foreign owner/missing permission до native reads, receipt listing без ключей. Build, ESLint, пять export model tests и inventory прошли. UI не менялся; hashes прежних UI-исходников и логов сверены, новый live browser/AI-client пока не принят.
|
||
- [x] Предыдущий full v2 завершился с кодом 1 только на старом standalone IPsec mock. [Отдельный результат](mcp-recovery-maintenance-regression-v2-result.json) сохранён; исправлена модель source/intent/native deletion/read-back в тесте, production guards не ослаблены. Повторная полная регрессия с export прошла, включая исправленный IPsec профиль, строгий ноль primary requests и SQL logs.
|
||
- [x] Две дельты read-only аудита исправлены: REST использует тот же строгий request schema и возвращает 400 до native reads; keepalive `25s`/`00:00:25` разбирается общим peer codec. Шесть моделей, SQL/HTTP всех форматов и approved owner download, dump/restore/tamper прошли с кодом 0. Первый расширенный fixture упёрся в квоту восьми пакетов; duration-сценарий включён в уже существующий пакет, production квота не менялась и unknown operation не повторялась.
|
||
|
||
Ручной scoped Community inverse, заранее закреплённый независимый management transport, удаление IPsec users и глобальная очистка NetFlow прошли целевую локальную SQL/HTTP-приёмку с настоящим dump/restore/tamper и терминальным кодом 0. Реестр: **341 инструмент; 179 mediated / 62 excluded / 21 pending из 262 REST-маршрутов**. [Целевой протокол](mcp-recovery-maintenance-focused-acceptance.json). Проверки production core этого этапа также прошли в объединённой полной регрессии export; исходный full v2 был остановлен только устаревшим test fixture. Для Home → JumpHost → ExitNode доступны только два CHR; независимая трёхузловая приёмка остаётся открытой.
|
||
|
||
- [x] Ручной inverse использует только зашифрованный исходный operation/step и exact native body/ID. Нужны human approval и свежая A-проба уже в B-контексте. Один исходный step занимает один durable inverse intent; срок не более 120 секунд, продление подменой времени запрещено. RECOVERY_CONFIG_APPLIED и RECOVERY_VERIFIED разделены, полный reconcile требует exact generic VERIFIED; unknown не повторяется.
|
||
- [x] Отдельный management transport закрепляется до потери primary. После потери primary alternate read/PATCH/reconcile не обращаются к его адресу; logical source epochs, license identity, channel expiry/replacement/revocation и live policy проверяются. Конкурентные планы, lost/ignored/collateral, late protection/ABA, future/stale source и path timestamps проверены локально.
|
||
- [x] Полное shared REST/MCP удаление IPsec users с optional certificate/mode-config cascade, сохранением общих ссылок/CA/server cert, per-command intents/read-back, prefix checkpoints и managed-only историей. Ошибка истории и совпадение после lost response не становятся VERIFIED.
|
||
- [x] Полный shared REST/MCP NetFlow purge: acknowledged shutdown и clean exit всех current/retiring workers, permanent failed-stop latch, generation fence против позднего spawn; шесть таблиц в одном transaction, настройки/ключи/peers сохранены. Глобальный retention maintenance явно показан в review; каждый DROP входит в утверждённый inventory/budget, новый раздел не удаляется. Lost COMMIT не повторяется; normal restart может принять новые flows.
|
||
- [x] 18 targeted model tests, backend build, адресный ESLint и inventory прошли. После HTTP-приёмки public review дополнен более коротким execution deadline, проверенным моделью; полный прогон проверит финальный снимок целиком. UI не менялся, новые реальные CHR-команды не выполнялись.
|
||
- [ ] Reserved scoped recovery, привязка версии persistent profile у native transport и scoped controller остаются выключенными. Оставшиеся 21 REST-адаптер, ожидающие разрешения collectors и подключения разрешённого key-export, независимая/packet/return/трёхузловая/NAT/RPF/hash/PSK-SA приёмка, live portal/external clients и исторические route hashes остаются в плане.
|
||
|
||
Пользователь явно разрешил оба способа экспорта WireGuard private keys по includePrivateKey=true: REST и MCP-план с human approval, зашифрованным файлом на 15 минут и скачиванием вошедшим владельцем. Это разрешение выполнено в текущем этапе; повторно спрашивать его не требуется.
|
||
|
||
Полный прогон v1 остановился на interference фонового GRE/BGP poll с HTTP-счётчиком. Для owned test fixtures теперь закрывается scheduler admission и дожидается завершения текущих jobs; исходное состояние восстанавливается, строгое требование нуля primary requests сохранено. Production core этого исправления не менялся. [Протокол повторного запуска](mcp-recovery-maintenance-regression-progress.json) сохранён как исторический; результат full v2 и новый объединённый прогон описаны выше.
|
||
|
||
Уточнения следующего этапа после read-only аудита:
|
||
|
||
- [ ] Сначала связать persistent profile ID/version с конкретным подтверждённым human grant operation и server-only authority receipt. Проверять grant/version/pause до intent и непосредственно после durable configuration.intent перед native PATCH; orchestration lease не удерживать как блокировку, которую затем повторно ждёт runtime.
|
||
- [x] После forward PATCH конфигурационный read-back и CONFIG_APPLIED отделены от eligibility/SLA уже выбранного B; это принято текущей целевой SQL/HTTP-проверкой. Network outcome сохраняется отдельно. До PATCH свежий SLA B обязателен, для inverse сохраняются SLA A и новая A-проба в B-контексте. Автоматический inverse этим изменением не включён.
|
||
- [ ] Для reserved inverse нужны отдельные stable source proof и internal runner capability: исходная операция ещё running. Публичный allowRunning запрещён. Admission атомарно резервирует оба native writes и оба profile switch slots, включая unknown attempts; новый tick/credential/restart не продлевает 120 секунд. Использовать тот же уникальный source operation/step inverse slot и exact inverse generic VERIFIED.
|
||
- [ ] Controller должен хранить expected native ID/target/dependency/source proofs и authority version, а не один candidate ID. Same-candidate foreign drift и любой unknown останавливают профиль. Новый enabled grant требует подтверждённого baseline; обычное approval профиля не подменяет дополнительные object protections.
|
||
- [x] REST/MCP PATCH клиента IPsec охватывает все поля, no-op с history, cert-only promotion/ignored fields и shared/foreign mode-config upsert с consumer/pool closure. Пустой staticIp теперь возвращает 400 до переименования identity. [Полная SQL/HTTP-приёмка](mcp-ipsec-user-update-acceptance-v1.json) прошла; expected companion references при peer rename приняты ранее на loopback, настоящий CHR rename остаётся отдельным открытым gate.
|
||
- [x] Одиночный certificate DELETE и bulk server DELETE используют раздельные полные executors. Для bulk принят полный ordered manifest, staged proof, profiles/proposals preservation, foreign mode-config → pool/peer → certificate checks, native name/ID ambiguity guards и полный certificate graph с объявленными owned CA cascade. [Приёмка](mcp-ipsec-server-delete-acceptance-v1.json) включает REST/MCP parity, false/true removeCertificates, CRL subtree, счётчик срока и неизвестные поля. Настоящий CHR cascade/interoperability остаётся открытым gate.
|
||
|
||
Этап подтверждения конфигурации Route AI, конкурентного управления профилем и ещё двух REST/MCP адаптеров локально принят: [финальный протокол](mcp-scoped-checkpoint-adapters-acceptance.json), [предшествующая focused-приёмка](mcp-scoped-checkpoint-adapters-focused-acceptance.json). Реестр: **339 инструментов; 177 mediated / 62 excluded / 23 pending из 262 REST-маршрутов**. Полная последовательная регрессия завершилась с кодом 0: 27 backend-профилей, SQL `/logs`, настоящий dump/restore/tamper. Scoped executor сохраняет зашифрованный exact `CONFIG_APPLIED` после PATCH/read-back до post-probe; он связан с operation/step/receipt, original/desired body и candidate, dependency/target proofs и endpoint epochs. Отдельная подписанная квитанция пробы обязательна для положительного результата вместе с exact generic VERIFIED. Подтверждённый сетевой отказ даёт partial, неизвестная проба — unknown; оба случая сохраняют configuration checkpoint без inverse/replay. Автовосстановление и scoped controller не включены.
|
||
|
||
- [x] Profile save использует expected-version CAS, create не превращается в update при collision. State/pause tick учитывают version/connection/enabled; session advisory lease принадлежит одному tick профиля. Новый human grant и emergency pause не перезаписываются устаревшим tick. Транспортная привязка profile-version для уже подготовленной операции остаётся отдельной работой.
|
||
- [x] Focused SQL/HTTP, настоящий dump/restore/tamper, 9 targeted model/transport tests, backend build, ESLint и inventory прошли. `POST /api/servers/test-connection` и `DELETE /api/ipsec/peers/:serverId/:rosId` повышены до mediated после точной приёмки REST/MCP.
|
||
- [x] Полная последовательная регрессия 27 backend-профилей и SQL `/logs` завершилась с терминальным кодом 0. Исходники совпали с focused snapshot; сохранён отдельный финальный протокол, предшествующие протоколы не переписаны.
|
||
|
||
Этап защиты native ID 24 октября локально принят: [SQL/HTTP-протокол](mcp-protection-scope-acceptance.json). Регистрация RouterOS `*ID` без `serverId` возвращает 400 до INSERT/audit; старые записи читаются по прежней схеме. Одинаковые native IDs разных серверов независимы. Поздняя scoped-защита peer после durable activation intent останавливает REST/MCP import до первого PATCH: четыре объекта остаются отключёнными, повторной записи нет. Focused SQL/HTTP, настоящий dump/restore/tamper, backend build, JWT administration model и ESLint завершились с кодом 0. Полные 27 профилей на этой небольшой правке повторно не запускались; предыдущая полная регрессия зафиксирована ниже. Реестр остаётся **337 инструментов; 175 mediated / 62 excluded / 25 pending из 262 REST-маршрутов**. Доступны только два CHR; трёхузловая приёмка остаётся открытой.
|
||
|
||
Этап 24 октября — строгие WireGuard codecs, общий многошаговый импорт и native-проверка PATCH — локально принят: [протокол и отпечатки исходников](mcp-wireguard-import-scalar-acceptance.json). Реестр: **337 инструментов; 175 mediated / 62 excluded / 25 pending из 262 REST-маршрутов**. Два новых инструмента импорта зарегистрированы; secure export и его portal download пока не подключены. Полный план остаётся открытым.
|
||
|
||
- [x] Bounded `.rsc`/`.conf`: 256 КиБ, до 100 peers и 100 allowed routes на peer. Непредставимые параметры/PSK, неоднозначные поля, чужие bindings и команды отклоняются. Сохраняются escaping, Unicode, multiline comments, disabled states, client fields и IPv6 endpoints. Без явного opt-in codecs не выводят private keys; отражение ключа через другие поля отклоняется.
|
||
- [x] Общий REST/MCP import executor: disabled preparation → selective activation всех peers/address/interface. MCP использует owner/purpose/server `contentRef` с purpose `wireguard-import-config`; raw config/keys не возвращаются. REST preview сохраняет совместимую форму с placeholder `[KEY]`. Copy revision, command/object budgets, per-command intent/fences/read-back, prefix checkpoints и exact generic VERIFIED reconcile реализованы; неизвестные записи не повторяются, автоматической компенсации нет.
|
||
- [x] Два focused SQL/loopback прогона завершились с кодом 0. Финальный включает настоящие REST apply/failure, совпадение native команд/body с MCP, multiline/IPv6/два peers, copy revision, бюджет каждого объекта, защиту отдельного peer после intent и потерю финального checkpoint acknowledgement. Настоящие dump/restore/tamper прошли.
|
||
- [x] Native-диагностика собственного отключённого WG подтвердила generic/WG ID и нормализацию private scalar при PATCH: public identity и clamped scalar совпали. Три неуспешные попытки сохранены отдельно; каждая завершилась отдельной подтверждённой очисткой с четырьмя fingerprints и полным private baseline proof. Partial PATCH не повторялись.
|
||
- [x] Scalar proof v2 нормализует только proof-local clone при валидном ключе и совпавшей производной public identity. Правило сверено с [RFC 7748 §5](https://www.rfc-editor.org/rfc/rfc7748.html#section-5). Версии business/native/generic update — 3, proofRevision — 2; старые планы требуют новой подготовки. [Два CHR](mcp-chr-wg-interface-update-67ca5c07-acceptance.json): basic PATCH/alias/reconcile завершились с кодом 0, восемь подтверждённых операций, по четыре fingerprints и полный private baseline proof восстановлены, SSH закрыт. Все fixture-интерфейсы оставались отключёнными. Наблюдение проведено до последующего выделения общей scalar-функции; эквивалентность её basic-update логики проверена моделями. Это не native-приёмка окончательного multi-peer import/activation.
|
||
- [x] Общая scalar-функция используется create/import prefix/preservation guards только для собственного ключа при activation. Проверены все 32 ignored-bit представления, реальные key/public rotations, opaque/foreign drift и неизменность raw source/native body. Loopback fixture действительно выполняет clamp при PATCH; SQL/REST/MCP activation принята. Версии business create — 3 и native create — 2.
|
||
- [ ] Native multi-peer import/activation, key rotation, rename children/address на финальном shared-helper snapshot и независимый трафик остаются отдельной приёмкой.
|
||
- [x] Ранее отложенный export подключён после явного разрешения пользователя; общий REST/MCP-сервис и owner portal прошли текущую целевую HTTP-приёмку. Полный прогон итогового снимка остаётся отдельным пунктом.
|
||
- [x] Полная последовательная регрессия завершилась с кодом 0: все 27 backend-профилей, SQL `/logs`, настоящий dump/restore/tamper, build и ESLint прошли. Import route повышен до mediated после focused REST/MCP приёмки. UI не менялся: прежние 16 браузерных сценариев, два helper-теста и frontend TypeScript унаследованы после сверки hashes; новый live import/browser не заявляется.
|
||
- [x] Регистрация native RouterOS `*ID` требует `serverId` в write-request validation защиты. Общая схема чтения legacy-защит сохранена. HTTP проверяет 400 без INSERT/audit, одинаковые ID разных серверов и global app/probe/server references; late scoped native-peer protection после intent проверена перед activation в REST/MCP без PATCH/replay.
|
||
|
||
Предыдущий этап 24 октября — WireGuard PATCH, пакет событий и совместимость Route AI — локально принят: [протокол и отпечатки исходников](mcp-interface-events-compatibility-acceptance.json). Повторная полная последовательная регрессия завершилась с кодом 0. Реестр: **335 инструментов; 174 mediated / 62 excluded / 26 pending из 262 REST-маршрутов**. Полный план остаётся открытым.
|
||
|
||
- [x] `mm_wireguard_interface_edit_plan` / `network.wireguard.interfaces.update`: общий REST/MCP PATCH всех полей, owner/purpose/server key reference, primary/secondary IPv4/IPv6, rename peer/address ссылок и сохранение opaque конфигурации. Native `mm_wireguard_update_plan` и общий `mm_interfaces_update_plan` v2 делегируют этому сервису. Сторонние routing/firewall/application зависимости требуют отдельного плана. Private proof, epoch ABA, metadata-only tolerance, intent/read-back, unknown/partial/no replay и exact VERIFIED reconcile проверены SQL/HTTP.
|
||
- [x] WireGuard shared readers ограничивают native GET фактическими UTF-8 байтами до JSON parse. Общий транспорт сохраняет стандартный предел 8 МиБ, WireGuard GET использует 1 МиБ; проверены declared/streamed Unicode overflow, отмена и отсутствие повторов.
|
||
- [x] `mm_events_batch_append_plan` / `events.batch.append`: все поля REST, trimming/time/payload, серверные UUID, один атомарный INSERT, обязательное человеческое подтверждение и полный global scope. Каждое событие — отдельный object reference для лимита и защиты; один SQL INSERT не обходит objectsPerPlan. Нормализованный пакет ограничен 64 КиБ/12 уровнями и зашифрован в плане. Это данные клиентского журнала, а не подтверждения системных действий.
|
||
- [x] `mm_global_operation_reconcile` / `operations.global.reconcile`: отдельная глобальная read-only сверка, разрешение которой нужно выдать явно. Проверяются текущий полный каталог, исходное действие и connection. Портал выбирает её для глобального плана. Совпавшие события после lost acknowledgement без точного generic VERIFIED checkpoint не выдаются за успешное выполнение; сверка не повторяет запись.
|
||
- [x] Контекст Route AI допускает отключённого постороннего BGP peer только с проверенными наследованием и dormant filter references; raw зависимости остаются в HMAC. Недоступный резерв получает `candidateDiagnostics`, выбранный кандидат требует полного подтверждения; известную идентичность текущего неисправного gateway можно отделить от readiness. SOURCE_AUTH_FAILED/INVALID_NATIVE_RESPONSE, drift/cancel/budget прерывают весь контекст.
|
||
- [x] Явно обнаруживаемый legacy read-only BGP mode использует положительно прочитанную версию RouterOS и `instance: null`. Ошибка HTTP не доказывает legacy, выдуманного instance и legacy executor нет. Переход BGP к отдельным instances документирован в [актуальной](https://help.mikrotik.com/docs/spaces/ROS/pages/328220/BGP) и [прежней](https://help.mikrotik.com/docs/spaces/ROS/pages/59277470/BGP) документации MikroTik; native pre-7.20 приёмка ещё открыта.
|
||
- [x] Общая логика трёх ручных REST-сборщиков извлечена с сохранением глобального alert hook. Опциональные access guards alert engine/outbox/Telegram проверены только на имитациях; ожидание закрывает in-flight authorization poll. Никакой новый MCP runner этих эффектов не зарегистрирован.
|
||
- [x] Два полных последовательных прогона завершились с кодом 0; финальный включает учёт каждого события в objectsPerPlan и позднюю защиту отдельного UUID. Все 27 backend-профилей, SQL `/logs`, настоящий dump/restore/tamper, MCP-модели, backend build, ESLint и diff check прошли. Focused v3 содержит все completion markers, но его process handle истёк до записи кода завершения: отдельный exit code не заявляется; те же сценарии подтверждены финальным полным прогоном. UI не менялся: hashes исходников и прежних логов совпали, результаты 16 браузерных сценариев, двух helper-тестов и frontend TypeScript унаследованы из предыдущей приёмки, а не выданы за новый live-прогон.
|
||
- [ ] Подключить ручные сборщики к MCP после отдельного разрешения глобальной обработки оповещений. Автоматическая проверка отклонила добавление guarded scheduler runner: он меняет alert state/outbox и может отправить уже ожидающие Telegram-уведомления, а отдельное разрешение payload/destination не было подтверждено. Отклонённый patch не применён; вопрос пользователю задан, ответ ожидается. Эти три REST-операции остаются pending.
|
||
- [ ] Native WireGuard PATCH/readiness и pre-7.20 BGP: оба CHR доступны через существующий SSH-стенд, но WireGuard-каталоги пусты. [Read-only наблюдение](mcp-chr-wg-identity-13787ac0-acceptance.json) — 10 GET, 0 native mutations, не доказательство непустой ID equivalence. Прямое REST-соединение было недоступно; SSH проверил существующий host key и закрыт после чтения.
|
||
- [ ] Scoped controller/Community recovery, оставшиеся 26 REST-адаптеров, независимые трёхузловые прямые/обратные пути, ECMP/NAT/RPF/hash/PSK/SA и live portal/client/UI.
|
||
|
||
Предыдущий этап 24 октября — scoped Community и терминальная диагностика — локально принят: [протокол и отпечатки исходников](mcp-scoped-route-diagnostics-acceptance.json). Исторический реестр: **332 инструмента; 172 mediated / 62 excluded / 28 pending из 262 REST-маршрутов**.
|
||
|
||
- [x] `mm_route_path_verify` v2 разделяет `community` и `control-path`. Самостоятельная проба не зависит от BGP; purpose/version и отдельный HMAC исключают её использование для переключения Community. Legacy proof без purpose требует новой проверки. Hops ограничены устройствами выбранного кандидата до чтения credentials.
|
||
- [x] `mm_route_optimizer_plan` v3: отдельный `routing.community.scoped` исполняет ручной human-approved переход в non-main table/VRF/custom input-chain. Меняется только поле `rule` одной owned записи после полного compiler roundtrip; остальные Community, native comment/opaque, соседние контексты и SQL filter metadata сохраняются. После durable intent повторно проверяются SLA, source epoch и защиты; lost/ignored/collateral не повторяются. Read-only reconcile требует точного generic VERIFIED checkpoint.
|
||
- [x] `mm_server_terminal_diagnostic` / `servers.terminal.read`: общий с REST allowlist, все 15 диагностик и 23 alias/clamp parity случая. Сохраняется `mm:servers:write`; observer с таким делегированным правом может читать. Help не читает credentials и не опрашивает устройство; произвольный CLI не принимается. Bounded transport/output, UTF-8, endpoint ABA, отмена и поздний отзыв проверены SQL/HTTP.
|
||
- [x] В UI добавлен выбор назначения пробы; `autoRecovery` явно блокирует активацию контроллера, но позволяет сохранить отключённый профиль. Все 16 fixture-сценариев и два frontend helper-теста прошли.
|
||
- [x] Focused SQL/HTTP и полная последовательная регрессия завершились с кодом 0: все 27 backend-профилей, SQL `/logs`, настоящий dump/restore/tamper. Все 16 браузерных fixture-сценариев, два frontend helper-теста, MCP-модели, build, frontend TypeScript, ESLint и diff check прошли. Протокол содержит source/log hashes и неуспешные промежуточные попытки; прошлые принятые протоколы не менялись.
|
||
- [ ] Scoped controller и Community recovery: ручной executor их не включает. Остаются 28 REST-адаптеров, совместимость старого BGP и резервных контекстов, live portal/client/UI и traffic gates. Пользователь подтвердил только два физических CHR; независимая Home → JumpHost → ExitNode приёмка требует третьего устройства. Новых native-команд CHR на этом этапе нет.
|
||
|
||
Предыдущий этап 24 октября — контексты Route AI и три сервисных адаптера — локально принят: [протокол и отпечатки исходников](mcp-routing-context-adapters-acceptance.json). Исторический реестр: **331 инструмент; 171 mediated / 62 excluded / 29 pending из 262 REST-маршрутов**. Предыдущие протоколы ниже являются историческими снимками.
|
||
|
||
- [x] В модели и редакторе разделены installation routing-table, VRF контрольной пробы и BGP connection/instance/input-chain/transport-VRF. Редактирование сохраняет скрытые параметры; неполная BGP-привязка отклоняется. Все 14 браузерных сценариев на API fixtures и два frontend helper-теста прошли.
|
||
- [x] Bounded read-only контекст проверяет FIB, ordered VRF membership, effective BGP inheritance/AFI/shared chains, точный recursive host resolver и endpoint epochs. Path-check подписан по зависимостям и телу owned rule; изменение любого из них после измерения не признаётся свежим доказательством. Обратный путь остаётся unknown.
|
||
- [x] Приняты общие REST/MCP операции изменения ACME settings, создания WireGuard peer и human-only экспорта PostgreSQL. Старый native peer-create alias использует тот же защищённый сервис. WireGuard proof сохраняется в той же JSON-форме, что durable plan; reconcile требует точного verified checkpoint.
|
||
- [x] Focused SQL/HTTP и полный последовательный прогон завершились с кодом 0: все 27 backend-профилей, SQL `/logs`, настоящий dump/restore и tamper. Прошли 14 браузерных сценариев на API fixtures, два frontend helper-теста, MCP-модели, build, TypeScript, ESLint и diff check. В протоколе сохранены также неуспешные попытки: два конкурентных тяжёлых прогона получили неожиданный unknown, причина не доказана; production guards/timeouts не ослаблялись.
|
||
- [x] Main Community переключение проверено через human-approved runtime plan и один локальный HTTP PATCH. Исходный owned comment сохранён; публичный initial/retrieved preview не раскрывает native scripts/comments или внутренние seals. Версии switch/profile-save подняты до 2. Это локальная SQL/HTTP-приёмка, а не новая CHR/forwarding-проверка.
|
||
- [x] Ручной scoped Route AI gateway executor и exact receipt reconcile реализованы и проверены SQL/HTTP на текущем этапе выше.
|
||
- [ ] Отдельные scoped controller и recovery для non-main/VRF. Автоматическая активация пока блокируется; сохранение отключённого профиля доступно.
|
||
- [x] Локально проверены modern BGP dormant references и недоступные резервные кандидаты, а также явно обнаруживаемый legacy read-only режим; текущий этап выше содержит границы проверки.
|
||
- [ ] Native pre-7.20 compatibility и отдельный legacy write contract. Автовосстановление Community требует исполнителя с proof состояния после переключения и до его готовности недоступно.
|
||
- [x] Ручной scoped executor меняет только `rule` одного заранее подтверждённого native filter ID. Chain/comment/disabled, порядок, остальные правила и opaque поля сохраняются; глобальный `bgp-in` executor и его SQL metadata для этого сценария не используются. Original/desired target proof вычисляет сервер по исходной строке, dependency proof и фиксированные endpoint epochs проверяются непосредственно перед PATCH и после него. Shared/output/jump зависимости и неподтверждённая gateway-грамматика блокируют запись. Reconcile только читает: совпадение конфигурации и наличие точной verified квитанции показываются раздельно, потерянный ответ не приводит к повтору. Проверено текущей SQL/HTTP-приёмкой.
|
||
- [x] До 7.20 реализован отдельно обнаруживаемый read-only BGP context mode; HTTP-отказ не считается признаком старой версии, имя instance не выдумывается. Запись требует отдельного контракта и native-приёмки старой формы BGP.
|
||
- [x] Отделён контекст самостоятельных OSPF/GRE/ECMP control probes от Community/BGP: свои endpoint/VRF/interface/address proof, purpose/version и домен подписи. Path-only без BGP не принимается как Community switching proof. Все пять native diagnostic callers используют явный `control-path`; на CHR после этого изменения они ещё не запускались. Старые native-протоколы не являются приёмкой нового контекста.
|
||
- [ ] Для независимой приёмки Home → JumpHost → ExitNode нужен третий отдельный маршрутизатор. Пользователь подтвердил наличие только двух CHR; парные проверки продолжаются, трёхузловая traffic-приёмка остаётся открытой и не подменяется логическими ролями на одном устройстве.
|
||
|
||
Повторная приёмка 24 октября — MCP UI и оба CHR: [протокол и отпечатки исходников](mcp-artifact-ui-acceptance.json). Полный план остаётся открытым.
|
||
|
||
- [x] В карточке завершённой операции MCP доступно скачивание backup. API публикует только ограниченную квитанцию verified шага `backups.download` для актуального владельца с правом backup; проверяет подписанные метаданные, scope, credential, policy/generation, защиты и срок. Список операций не читает файл/S3 или ciphertext. Чужой администратор, unverified/unknown шаг и отозванный доступ ссылку не получают.
|
||
- [x] UI строит путь из проверенного UUID, использует портал JWT, запрещает redirects, скачивает бинарный Blob и освобождает object URL. Отмена и безопасные сообщения об ошибках проверены; provider body не отображается. Все 11 браузерных сценариев MCP и два frontend helper-теста прошли на изолированных API fixtures.
|
||
- [x] Повторены focused и общая SQL/HTTP-приёмка, настоящий dump/restore и tamper, все 27 backend-профилей и SQL `/logs`. Build, обе TypeScript-проверки, ESLint и `git diff --check` прошли. Новый projection helper включён в backend `test:mcp`, frontend helper — в корневой `test:mcp`.
|
||
- [x] Новый [GRE CHR цикл 1d8eb626](mcp-chr-gre-revision-1d8eb626-acceptance.json) завершился с кодом 0 на обоих устройствах: create/no-op/expand/restore/empty, readonly reconcile, IPv4/IPv6 конфигурация и 24 команды. Восстановлены все 16 исходных native fingerprints и полные private dependency proofs обоих устройств. Marker-объектов нет, SSH закрыт. Forwarding, IPv6 readiness и IPsec SA этим конфигурационным циклом не подтверждаются.
|
||
- [ ] Остаются 32 REST-адаптера, Route AI non-main/VRF, независимые трёхузловые прямые/обратные пути и аварийная traffic-приёмка, ECMP/NAT/RPF/hash и PSK/SA, настоящий portal sender/внешние клиенты и финальная live UI-приёмка. Исторические `c74d0d3c` route hashes и приватный HMAC прерванного `f1147896` не объявляются доказанными задним числом.
|
||
|
||
Следующий этап Route AI по аудиту:
|
||
|
||
- [x] Разделены routing-table, VRF контрольной пробы и BGP connection/instance/input-chain binding; совпавший gateway не определяет выбранный путь без AFI/table/binding context. Локальная приёмка — в текущем протоколе выше.
|
||
- [x] Сохраняются bounded proof таблицы/FIB, VRF membership/order, BGP effective dependencies, resolver и endpoint. Свежая path-check связана с dependency и target rule proof; обратный путь остаётся unknown до отдельной проверки.
|
||
- [x] Ручной scoped gateway executor: per-command fences/protections и original/desired read-only reconcile с exact VERIFIED receipt проверены в SQL/HTTP. Non-main автоматизация по-прежнему заблокирована с явной причиной.
|
||
- [ ] Реализовать отдельный scoped controller/recovery и пройти независимую traffic-приёмку.
|
||
|
||
Предыдущий принятый этап 24 октября — [пять сервисных адаптеров](mcp-application-adapters-acceptance.json): **328 инструментов; 168 mediated / 62 excluded / 32 pending**.
|
||
|
||
- [x] ACME token test, принудительный GeoIP update, обе NetFlow overlay формы, безопасный human-only backup download и полный WireGuard interface create используют общие REST/MCP-сервисы. Поля и реальные side effects сохранены; scope, human approval, защиты, секретные ссылки, source drift, intent/read-back, partial/unknown и no replay проверены локальными SQL/HTTP/named-pipe/UDP fixtures.
|
||
- [x] Reconcile overlay/WireGuard с новыми сгенерированными ключами требует сохранённого точного verified checkpoint. Совпавший после неизвестной операции граф, чужой receipt/credential/connection, отсутствующий или unverified checkpoint не объявляются успехом.
|
||
- [x] GeoIP source fences проверяют каталог, файлы/ETag/metadata; основной файл остаётся доступным до атомарной публикации. Backup пакет подписан по purpose/owner/policy/generation/source, зашифрован и выдаётся только актуальному человеку-владельцу; модель не получает backup body.
|
||
- [x] Focused профиль `npm --prefix backend run test:mcp:pg -- --application-adapters --restore`, общая SQL/HTTP-приёмка, 27 backend-профилей с новыми model/HTTP тестами, SQL logs, настоящий dump/restore и tamper приняты. Build, ESLint и inventory прошли; source hashes в протоколе. Реальные провайдеры/backup destinations не вызывались.
|
||
- [ ] GRE CHR whole-section restore остаётся открытым: [f1147896](mcp-chr-gre-revision-f1147896-auth-interrupted.json) принял цикл CHR 1, но CHR 2 остановился на 401, затем 500 при чтении для очистки. [Отдельная новая очистка](mcp-chr-gre-revision-f1147896-recovery.json) завершилась с кодом 0 и восстановила 16 исходных native fingerprints; объектов marker нет, SSH закрыт. Исходный приватный HMAC CHR 2 не переносится после удаления временного signing key/SQL; не выдаётся за доказанный. Unknown операция не повторялась.
|
||
- [ ] Полный объём сохраняется: 32 REST-адаптера, Route AI non-main/VRF, независимые трёхузловые пути и полная traffic/аварийная приёмка, ECMP/NAT/RPF/hash и PSK/SA, реальный portal sender/внешние клиенты и финальный браузерный прогон. Два исторических route hash `c74d0d3c` также остаются недоказанными.
|
||
|
||
Срез предыдущего этапа 24 октября: [повторная приёмка после восстановления лимита](mcp-resumed-checks-acceptance.json).
|
||
|
||
- [x] Реализован `mm_netflow_live_observe` / `traffic.flow.live.read`: общий REST live engine, 1–3 scoped uncached выборки, ограниченные источники/страницы/размер, общий с SSE лимит четырёх подписок, отмена и отзыв перед публикацией. Настоящие SQL и HTTP SSE проверки прошли; fresh exporter/forwarding не заявляются. Реестр: **323 инструмента; 162 mediated / 62 excluded / 38 pending из 262 REST-маршрутов**.
|
||
- [x] GRE source reads отменяют и дожидаются всех sibling-запросов при отказе, malformed источнике, превышении бюджета или отзыве доступа. Необязательные PSK capability/get 400/404 допускают явный sensitive print; 401/cancel/deadline/revoke запрещают следующие запросы. Проверено настоящим HTTP, без команд записи.
|
||
- [x] Все 27 backend-профилей, SQL `/logs`, общая MCP SQL/HTTP-приёмка, dump/restore и tamper завершились с кодом 0. Финальный GRE query/fallback дополнительно принят отдельным SQL/HTTP/restore-профилем, итоговый inventory проверен отдельно. Build и ESLint прошли. Порядок изменений и границы снимков зафиксированы в протоколе.
|
||
- [ ] CHR GRE whole-section restore пока не принят. [Последняя завершённая попытка](mcp-chr-gre-revision-1585ecd1-query-unknown.json) остановилась после первого PUT: native static provenance не подтверждён, результат unknown не повторялся. Отдельный новый человеческий план DELETE применён; восемь исходных fingerprints и полный proof зависимостей восстановлены. Тестовый GRE удалён, SSH-туннель закрыт. SA/IPv6 readiness/forwarding не подтверждены.
|
||
- [ ] Полный план остаётся открытым: 38 REST-адаптеров, Route AI для non-main/VRF, полная native/трёхузловая аварийная traffic-приёмка с независимыми путями, ECMP/NAT/RPF/hash и PSK/SA, реальный portal sender/внешние клиенты и финальная браузерная приёмка. Два исторических route hash `c74d0d3c` остаются недоказанными.
|
||
|
||
План согласован 16 октября 2026 года; актуальный статус выполнения отмечен ниже.
|
||
|
||
Реализация ведётся в ветке `codex/mcp-foundation`. Актуальный статус и команды проверки — в [MCP: состояние реализации](mcp.md). Этот документ сохраняет полный согласованный объём; наличие инструмента в реестре не заменяет приёмку соответствующего сценария.
|
||
|
||
### Статус на 23 октября 2026 (UTC+7)
|
||
|
||
- [x] Контракты, миграции, реестр инструментов, политики, ограничения области доступа и лимиты.
|
||
- [x] Streamable HTTP, stdio-мост, непрозрачные токены, OAuth/PKCE, отзыв и ротация доступа.
|
||
- [x] Планы, подтверждения, межпроцессные блокировки, аудит до записи, idempotency и проверка результата.
|
||
- [x] Отдельный web-раздел MCP: подключения, разрешения, защиты, обращения, планы, операции и настройки.
|
||
- [x] Логи: поиск, контекст, follow, summary, настройки и ограниченный экспорт; SQL-проверка миллиона событий.
|
||
- [x] Типизированные инструменты пользователей/привязок, сетевых объектов и основных сервисов; точное покрытие показывает актуальный каталог.
|
||
- [x] Web-редактор Ethernet/bridge/VLAN/адресов/VRF через ограниченное подключение и общий исполнитель планов.
|
||
- [x] Анализ Route AI, профили и контроллер с подтверждениями; подготовка Community/OSPF/ECMP/RPF/VRF и ограниченных измерений.
|
||
- [x] Базовая приёмка на двух CHR: топология, подтверждение, создание/изменение/удаление собственного bridge, idempotency и восстановление baseline.
|
||
- [x] Изолированные маршруты на обоих CHR: отдельная non-FIB таблица, создание/включение/изменение distance, обратный план, запрет удаления используемой таблицы и восстановление исходных таблиц/маршрутов. Это проверка конфигурации, без перенаправления пользовательского трафика.
|
||
- [x] Реальная двухузловая GRE/VRF-приёмка: собственные IPv4/IPv6 подсети, ping/traceroute в обе стороны, подтверждённый отказ при отключении тестового GRE, сохранение управления и восстановление отдельным обратным планом. Полная очистка и сравнение исходных fingerprints семи ресурсов на каждом CHR.
|
||
- [x] GRE/WireGuard/VXLAN в зависимостях адресных и интерфейсных планов; защиты родителей. Создание VRF перед существующими записями, проверка порядка после записи и конфликт при перестановке после подтверждения. Автоматические IPv6 link-local адреса отделены от изменяемой конфигурации.
|
||
- [x] Типизированные OSPF instances/areas/templates и ограниченные правила BFD; зависимости и защиты VRF/таблиц/областей/интерфейсов, запрет неявного каскадного удаления. OSPFv2/v3 оптимизируются раздельно; включённый BFD проверяется до/после записи и в обратных планах.
|
||
- [x] Реальная CHR-приёмка OSPFv2/v3 в тестовой GRE/VRF: четыре Full/BFD Up соседства, измерения, cost 30→10 для каждого семейства без изменения другого, отдельное восстановление cost и полный возврат baseline.
|
||
- [x] ECMP с разрешённым неактивным higher-distance кандидатом: до записи проверяется точный resolved next-hop, после — active обоих маршрутов. На CHR пройдены IPv4/IPv6 10/20→10/10→10/20 с контрольными routed loopback-пробами и очисткой. Два next-hop через один GRE не объявляются независимыми физическими путями.
|
||
- [x] Типизированные BGP instances/connections, зависимости VRF/таблиц и peer-защиты. На двух CHR пройдены отдельные IPv4/IPv6 сессии, активные префиксы обоих семейств через MCP observer, явный withdrawal/reannounce, остановка IPv4 peer с сохранением IPv6 и обратное восстановление. BGP и все 20 overlay fingerprints вернулись к исходным; exit 0, 20 октября 08:18:38 UTC. Двухузловая dual-AFI Community-приёмка принята позднее: [протокол](mcp-bgp-community-dual-afi-acceptance.json); полная forwarding/failover и независимая трёхузловая приёмка остаются открытыми. [CHR prefix-отчёт](mcp-chr-bgp-prefix-acceptance.json).
|
||
- [ ] Полная приёмка маршрутизации на CHR, включая аварии и восстановление.
|
||
- [x] Независимый management-канал с проверкой ID/отзывом, контрольные пробы, failover по разным подтверждённым отказам, checkpoints/обратные native-планы и заранее разрешённый recovery Community. Реальная трёхузловая аварийная приёмка остаётся отдельным пунктом.
|
||
- [x] Терминальный restore БД: загрузка человеком, SHA-256/шифрование, отдельное подтверждение, внешний результат и отзыв доступа; настоящий изолированный pg_dump/restore-тест.
|
||
- [x] Права каталога /users, реальные типы привязок, PATCH без сброса defaults; настройки мониторинга, каталоги Ping/bandwidth, NetFlow analytics и host reconcile.
|
||
- [x] URL-фильтры обращений, время обновления, обзор исходного состояния/шагов плана и общая аварийная остановка.
|
||
- [x] Подписанный webhook отзыва портала, replay/idempotency и внешний журнал отзыва, переживающий restore. Настройка отправителя в настоящем портале ещё требуется.
|
||
- [ ] Полное покрытие оставшихся DB/host-сервисов общей policy-границей и всеми согласованными инструментами.
|
||
- [x] Проверяемый реестр всех 262 REST-маршрутов: 161 сервисный сценарий с MCP, 62 исключения транспорта/авторизации/самоуправления, 39 явно незавершённых адаптеров. Новый endpoint без записи в реестре ломает проверку; незавершённые сценарии видны в UI. Общие GRE, OSPF/BFD и BGP-каталоги подключены с ограничением области до опроса и двумя уровнями пагинации. Legacy OSPF preview/apply/restore приняты SQL/CHR; серверная и пользовательская история трафика — SQL/REST parity и test:mcp.
|
||
- [x] Общие REST/MCP WAN runtime и BGP sessions/raw: scope/disabled до опроса, пагинация, известный ноль/unknown, mask native keys, отсутствие forwarding claim. На обоих CHR десять видов чтения, ambiguous WAN и пустой BGP подтверждены без изменения конфигурации.
|
||
- [x] Read-only анализ OSPF из общего с cost-планом расчёта: наблюдатель не создаёт план/изменения, видит рейтинг и актуальные замеры; maxLossPct=1% по умолчанию, свежий плохой/неподтверждённый результат блокирует fallback к старому хорошему. SQL-приёмка анализа и сравнения с планом пройдена.
|
||
- [x] SQL-приёмка привязки OSPF cost-плана к observation ID/fingerprint/validUntil перед guarded-записями: свежий плохой замер, изменение строки и истечение пригодности после approval блокируют применение. Прежнее ограничение запуска снято, изолированная PostgreSQL-проверка пройдена.
|
||
- [x] GeoIP: общий status и guarded-план настроек, стабильный fingerprint конфигурации, предупреждение о немедленном запуске обновления при refresh расписания, проверка сохранения и защиты REST/MCP. Принудительный update ещё ожидает отдельного адаптера.
|
||
- [x] EvoBGP: общий GET без записи и без ключа, guarded-план настроек, секрет владельца привязан к нормализованному URL, явное удаление/безопасная смена назначения, fingerprint ротации ключа, read-back и маскирование секретов в журналах. Проверка доступности подключена через общий ограниченный modules GET; сохранённый ключ не пересылается новому URL без отдельного secret reference.
|
||
- [x] Каталог EvoBGP: общие parser/formatter и уникальные server counts, проверка полной области до HTTP/SQL, null для неизвестных счётчиков, пагинация до 200 и версия каталога, 8 MiB/15 s, отмена fetch, запрет redirects и отражения ключа. Реальный BGP prefix exchange этим не подтверждается.
|
||
- [x] Проверка оставшегося бюджета учитывает всю стоимость пакета и резерв обратной операции уже в симуляции/подготовке; точная граница и расход после подтверждения проверены отдельно.
|
||
- [x] История конфигураций filters/recursive-routes/firewall/WireGuard/IPsec/GRE через общий REST-сервис: серверная область, отдельные права, до 50 записей метаданных, без payload/ключей и без автоматического восстановления ревизии.
|
||
- [x] Строгие каталоги рекурсивных маршрутов/шлюзов: общий REST/MCP parser, effective properties, unknown состояния шлюзов. REST сохраняет подтверждённое наблюдение; MCP observer не меняет кеш/ревизии.
|
||
- [x] Восстановление ревизии recursive-routes отдельным человеческим планом: scoped SQL/fingerprint, полный owned-набор до 50 строк, таблицы/интерфейсы/защиты, запрет используемых rec:ID в BGP-фильтрах, стоимость create+delete+metadata, read-back и явная пустая ревизия. Проверены дрейф, нехватка бюджета, чужие маршруты и partial. На двух CHR пройдены отключённые маршруты в собственной non-FIB таблице и полная очистка; переключение трафика этим тестом не принимается.
|
||
- [x] Бюджет пакетного service-step резервируется по рассчитанной стоимости, а доступ повторно проверяется перед каждой guarded записью внутри шага. SQL/RouterOS-имитатор подтвердил остановку после отзыва между PUT и DELETE; уже отправленная команда не отменяется и не повторяется.
|
||
- [x] Scoped-каталоги containers/certificates и история серверов: пагинация, unknown/partial/unsupported, часовой пояс сертификатов, скрытие всех env values и cmd. Определение IPv4 управляющего host явно не подтверждает адрес интерфейса.
|
||
- [x] Удаление контейнеров через общий REST-сервис только из свежего stopped-состояния, с проверкой конфигурации и интерфейса. Native delete alias использует ту же подготовку; start/stop/restart проверяют идентичность до/после команды и защиты родителя. Подмена ID, дрейф, отсутствие read-back и повторы проверены имитатором/SQL; live-удаление на CHR без установленного containers не объявляется принятым.
|
||
- [x] Read-only preflight ECMP IPv4/IPv6: конфигурационные признаки NAT/FastTrack/mangle/notrack/RPF/общего egress, hash-policy и connection tracking; нет утверждения о проверке пакетов или независимости путей. Оба CHR подтвердили все десять источников, конфигурационные fingerprints до/после совпали. Физическая и traffic-приёмка остаётся незавершённой.
|
||
- [x] Readiness выполняет фактический initialize/tools-list через публичный MCP URL официальным SDK: временный токен без прав на операции, срок до 20 секунд, очистка после успеха/ошибки, cooldown, дедлайн и запрет redirects. Это проверка транспорта; настройки и credentials конкретного внешнего AI-клиента отдельно не подтверждаются.
|
||
- [x] Общие REST/MCP каталоги активных интерфейсов Ping/speed-test, scoped SQL-история скорости по обоим участникам и человеческий план видимости Ping-пробы без изменения расписания. Unknown flags/адреса, чужие строки, защиты, дрейф и read-back проверены.
|
||
- [x] Ограниченный live-трафик: до трёх срезов общего с REST сервиса, полный набор интерфейсов/один интерфейс, повторная проверка credential/grant и источника перед native-запросами. SQL проверяет отмену, partial, exact zero и отзыв; на обоих CHR подтверждены интерфейсы проб и live выбранного интерфейса без изменения конфигурации.
|
||
- [x] Общая REST/MCP проверка доступности EvoBGP: фиксированный modules GET, deadline/size/redirect, только сохранённый ключ либо secret reference владельца для назначения, полный scope до HTTP, отсутствие сохранения/отражения ключа и явное отсутствие подтверждения routing.
|
||
- [x] Общие OSPF/BFD state-read сервисы для legacy REST и MCP: nullable observed-проекция, areas/instance по настоящим ссылкам, native ID до IPv4/IPv6 namespace, отдельное чтение BFD и пагинация по серверу/коллекциям. Неподтверждённые cost/version/счётчики/state не выдумываются; scope/disabled/failure проверены SQL и моделями.
|
||
- [x] Общий firewall-каталог: десять scoped источников, отдельные matcher-поля, известный ноль и unknown flags/counters, paging/failures и запрет сохранения предположительного observed snapshot. Все конфигурационные REST-сценарии Firewall подключены к сервисным MCP-адаптерам; packet matching принимается отдельно. На двух CHR пройдены 16 видов чтения с 15 неизменными fingerprints; OSPF/BFD/firewall в этом запуске пустые, непустые состояния проверены SQL/имитатором.
|
||
- [x] Общий REST/MCP move правила firewall: sealed human plan, полная конфигурация/порядок таблицы без runtime counters, подтверждённо статические source/destination, защиты всей затронутой таблицы/сервера, read-back и отсутствие retry. На двух CHR выполнены три отключённых правила в отдельной цепочке, перемещение/явный возврат, idempotency и очистка с восстановлением восьми firewall fingerprints. Сопоставление реальных пакетов этим тестом не принимается.
|
||
- [x] Общие VPN-каталоги WG/IPsec/VXLAN с серверной областью до HTTP и вложенной пагинацией interfaces/peers/allowedIps/VTEP/certificates. Native identity/parents, nullable flags/counters, unknown/ambiguous IPsec sessions, маскирование key material и отражённых секретов проверены SQL/моделями. Read-only на обоих CHR: 20 видов чтения, 15 неизменных fingerprints. Непустой VXLAN выявил отсутствующий l2mtu — поддержан null в API/MCP/web-схеме без выдуманного MTU или экспорта.
|
||
- [x] На обоих CHR пройдена непустая конфигурационная приёмка GRE/WG/VXLAN/IPsec: собственные отключённые объекты, приватный WG-ключ исключён из MCP/аудита, null L2 MTU и destination port подтверждены нативным ответом, fixtures удалены и шесть fingerprints восстановлены. Peers/SA и передача VPN-трафика этим тестом не принимаются.
|
||
- [x] Общий GRE reader REST/MCP: три scoped источника, native identity/parent и family адресов, страницы, nullable flags/MTU/keepalive, непроверенные comment metadata и скрытие PSK/отражений. SQL подтверждает права, отказ каждого источника, отсутствие записи истории и секретов в аудите. На двух CHR прочитаны собственные отключённые GRE, MTU/keepalive совпали; после удаления GRE/WG/VXLAN/IPsec fixtures восстановлены шесть fingerprints. Read-only приёмка расширена до 20 видов чтения без мутаций.
|
||
- [x] Четыре сервисных Firewall rule CRUD-плана и общие REST-обработчики: static native identity, sealed full-table/order proof без counters, все защиты сервера, locks/source refresh, точный read-back и отдельный статус ревизии. SQL/REST/модели проверяют TLS/L7, дрейф, блокировки, partial/no replay. На двух CHR пройдены IPv4/IPv6 create/edit/toggle/delete в собственной непривязанной chain; восемь fingerprints восстановлены, packet matching отдельно не проверялся.
|
||
- [x] Четыре общих REST/MCP address-list CRUD-плана: native ID/known origin, серверные защиты зависимых правил, locks/source refresh/read-back/no retry и канонизация IPv4/IPv6/range. Отдельное expiry window и срок плана сохраняют естественный countdown и блокируют продление вне точности источника. SQL/REST проверяют finite drift/partial/idempotency. На обоих CHR пройдены v4/v6 permanent CRUD и timed delete, десять fingerprints восстановлены. Dynamic entries не объявляются сохранёнными в постоянной ревизии; DNS forwarding/packet matching отдельно не проверялись.
|
||
- [x] Общий строгий REST/MCP Firewall revision restore: scoped hash/schema, полный static порядок/дубликаты, расширенные native matcher-снимки, консервативные защиты/budget/locks и read-back каждой стадии. Все новые записи сначала disabled; старые удаляются только после подготовки, затем включаются нужные. Dynamic rows сохраняются перед новым static-набором, RAM entries не восстанавливаются. SQL/REST проверяют partial/unknown/no retry, отзыв, activation и ошибочные ревизии. На двух CHR пройдены шесть отключённых v4/v6 правил, два списка, пустой restore и десять восстановленных fingerprints. Legacy snapshots и отсутствие packet/production activation-приёмки обозначены явно.
|
||
- [ ] Настроенная и принятая доставка отзыва из настоящего auth-portal; приёмка внешних AI-клиентов с OAuth/Bearer.
|
||
- [x] Полная backend-регрессия по всем профилям и SQL/live logs зелёная; девять web E2E пройдены. Отдельные старые SQL-ветки с собственным MMAPP_OWN_TEST_DB не объявляются выполненными.
|
||
|
||
- [x] NetFlow exporters/clients/monthly через общие REST/MCP readers: серверная область и временный grant до SQL/агрегации, исключение пользователей со скрытыми привязками, страницы и пределы источников. История отключённых серверов сохранена, счётчики проверяются на переполнение; named ingress, peer/ifIndex и кольцо flow отмечены по фактическому происхождению без заявления о wire rate/полноте трафика. Модели, SQL/REST, полный backend-прогон и настоящий pg_dump/restore пройдены.
|
||
|
||
- [x] Общие legacy REST/MCP каталоги контейнеров: один collector для общего и серверного списка, стабильный native-ID порядок страниц, exhausted/truncated страницы помечены неполными. HTTP/SQL подтверждает одинаковые объекты и статусы, скрытие env/cmd в MCP, сохранение legacy 502 при partial и явный unsupported в MCP. Реальный loopback-профиль и проверки удаления/состояний контейнеров прошли; запуск контейнеров на CHR без пакета не заявляется.
|
||
|
||
- [x] Общий источник legacy REST/MCP сертификатов с schema/clock offset: GET и refresh используют те же ограниченные чтения, malformed ответ даёт failures, ключи не выдаются. MCP сохраняет unknown для неподтверждённых сроков/статусов и стабильную пагинацию по ID. SQL/REST, профиль сертификатов и настоящий pg_dump/restore прошли; legacy DTO сохранён отдельно от более строгого observed DTO.
|
||
|
||
- [x] Сервисный каталог BGP-in filters: общие REST/MCP live/cache источники и schema/native-ID проверка, scoped cache fallback, nullable native flags и относительный порядок. MCP observer не заменяет cache и не создаёт ревизию; parser Community/gateway, recursive refs и эффекты script не объявляются подтверждённой политикой. SQL/REST, модели, config-sync/live-maps и настоящий pg_dump/restore прошли. GET с некорректным serverId отклоняется до DB/опроса; отключённый сервер не опрашивается. Повторная read-only приёмка двух CHR: 21 вид чтения, 15 совпавших fingerprints; новый BGP-in live-каталог пустой, непустая семантика отдельно не заявляется.
|
||
|
||
- [x] Три GRE business CRUD-плана и общий REST-исполнитель: native ID/полный opaque proof, IPv4/IPv6 адреса, сохранение вторичных адресов/таймеров/PSK, scoped secret reference и явная очистка ключа, проверки серверных защит и зарегистрированных зависимостей. Disabled staging, бюджет всех команд, locks/source refresh, проверка каждой команды, partial/unknown/no replay и отзыв между шагами подтверждены SQL/HTTP. На двух CHR пройдены собственные отключённые GRE, v4→v6, удаление и восемь восстановленных fingerprints. invalid-адрес на выключенном GRE не объявляется готовым к передаче трафика; конфигурация и readiness разделены.
|
||
- [ ] Дополнительная приёмка GRE business: активный туннель с передачей пакетов и непустой PSK/SA; SQL-проверка ключей не заменяет эту сетевую приёмку.
|
||
- [x] Native GRE update/delete используют общий видимый proof и проверки DB-привязок/filters, адресов, интерфейсных/маршрутных/протокольных/Firewall ссылок. Rename/delete не удаляют адреса каскадно; scalar update сохраняет прежнюю грань одного интерфейса. Прямой исполнитель GRE delete/rename, включая inverse/legacy ROS steps, проходит тот же guard. SQL/модели проверили поздние связи, opaque drift, порядок VRF/rules/Firewall, counters, пустой comment и отсутствие повторов. На двух CHR выполнены native rename/comment-clear/delete и восстановлены восемь fingerprints.
|
||
- [x] Legacy recursive GET подключены общими readers: устойчивые DB ID и ссылки rec:<id>, строгие нули/nullable свойства, scoped live/stale fallback, up/down/unknown без forwarding claims. UPDATE/INSERT вместо замены всех строк; неоднозначность, удаление/смена префикса используемого маршрута блокируются до native-команд. Общее владение блокировками с BGP-фильтрами; observer не меняет кеш/ревизии. Модели, HTTP, PostgreSQL и настоящий pg_dump/restore прошли. На двух CHR подтверждены ID после native recreation, повторные чтения с rec-binding, отсутствие observer writes и полная очистка (19 октября 11:56:57 UTC).
|
||
- [x] Полный apply/copy recursive-набор через mm_recursive_routes_replace_plan: до 50 строк, явный пустой набор, человеческое подтверждение, create+delete+metadata budget, sealed native/DB/BGP proof, стабильные ссылки и отсутствие повторов. Общий REST/MCP исполнитель проверяет каждый PUT до удаления старого набора, исходный target перед DELETE и отсутствие ID после него; metadata/native read-back обязателен. Проверены ignored writes, ID reuse, late drift, partial/unknown и отзыв между командами. На обоих CHR редактирование отключённого non-FIB маршрута с rec-binding и пустой набор прошли, baseline восстановлен (19 октября 12:07:12 UTC). Пакет не принимается как проверка forwarding/failover.
|
||
- [x] Мониторинг реальной REST backup-очереди через mm_backup_job_get: задача доступна только целиком в разрешённой области, проверены серверы/прогресс/страницы результатов. Заметки, имена файлов/устройств, S3 keys и тексты ошибок не отражаются в MCP-ответе/аудите. Сохранены известный ноль и upload-error flag; неизвестное состояние файла не подменяется available. Общий реестр очищается при app close и DB restore. Модели, backup HTTP-профиль, PostgreSQL/MCP и настоящий pg_dump/restore прошли. Постоянная история очереди этим адаптером не реализуется.
|
||
- [x] После recursive/backup блока повторён весь backend test:all через test:mcp:pg:all --restore в отдельной временной БД, включая SQL logs и настоящий pg_dump/pg_restore; итог Regression failed profiles: none, процесс завершился с кодом 0. Отдельно прошли backend build и ESLint. Последующие изменения требуют своих проверок.
|
||
- [x] Сохранённый Internet path подключён общим latest-reader с проекцией в SQL до разбора скрытых JSON-записей, проверкой привязок, маскированием секретных полей и вложенными страницами. Отдельно отмечены legacy interpretation, возраст/stale/clock skew и отсутствующие серверы; live/current routing/forwarding не подтверждаются. Проверены пустая история, повреждённые/непривязанные записи, скрытые mixed speed probes, REST timestamp parity и отсутствие запросов RouterOS. Для этого следующего блока выполнены модели, SQL/MCP, build и ESLint; полная регрессия выше относится к предшествующему recursive/backup состоянию.
|
||
- [x] PUT backup storage подключён через общий REST-сервис: глобальный человеческий план, полный каталог/защиты, owner/destination-bound secretRef, запрет переноса сохранённого ключа на новое usable-назначение без ссылки. Учтены существующие S3-архивы, late busy/catalog/key/ref drift, конфигурация целиком и сохранение непрошенных полей/ключа. Очистка неиспользуемого bucket и повторное включение с подходящей ссылкой проверены. Отпечаток секрета вычисляется с закрытым серверным ключом и разделением по назначению/установке; plaintext не попадает в план/аудит. Модели, backups-профиль, SQL/MCP, build, ESLint и настоящий pg_dump/pg_restore прошли; последний guard пустого bucket дополнительно проверен SQL. Доступность S3 этим действием не заявляется, для неё отдельный test-план.
|
||
|
||
- [x] Legacy OSPF preview подключён общим REST/MCP reader: peer scope и probe SQL ограничиваются до чтения, latest aggregate traffic требует подтверждённой дельты; отдельные WG peers и первый/ошибочный sample не выдаются за скорость интерфейса. MCP разделяет modeled/observed, ограничивает peers/страницы, проверяет доступ и источник перед GET/POST и после чтения. Отмена GET закрывает HTTP; ошибка одного источника отменяет остальные запросы группы. SQL, OSPF/transport модели, build и ESLint прошли. На обоих CHR — 22 read-сценария, 15 неизменных fingerprints, пустой набор OSPF templates; мутаций и планов записи нет (19 октября 13:37:07 UTC). Непустой рейтинг проверен SQL, изменение cost этим preview не принимается.
|
||
- [x] После изменения отображения coverage повторены test:mcp и связанный test:live-maps: оба процесса завершились с кодом 0. Coverage подтвердил 292 инструмента, 137 mediated / 62 excluded / 63 pending. После восстановления доступности аккаунта оба запуска прошли штатную проверку разрешений; обхода прежнего отказа review не было.
|
||
- [x] Полная регрессия после Internet path/storage/OSPF: исправлены зависимые от timezone date-only границы разделов PostgreSQL, добавлен SQL-тест UTC+7/UTC/DST, суток/недель/високосного месяца и DATE keys. Build/ESLint, test:mcp:pg:all --restore (26 профилей и дополнительный SQL logs, настоящий pg_dump/restore) и 9 браузерных MCP-сценариев прошли, exit 0. На Debian-стенде read-only аудит подтвердил UTC-границы всех 85 timestamp-разделов; SSH закрыт. Существующие разделы не перестраивались. Подробности и границы доказательств: [отчёт регрессии](mcp-regression-acceptance.json), [аудит разделов](mcp-postgres-partition-audit.json).
|
||
|
||
- [x] Три сервиса истории трафика серверов подключены через общие REST/MCP readers: список enabled-серверов, отдельный сервер/интерфейс и интерфейсы за 24 часа. Scope/grants применяются до SQL, известный ноль отделён от unknown, native status известен только при statusKnown, error/stale/pending/disabled не становятся текущей скоростью. Предел 20000 samples на историю и 100000 на интерфейсный каталог отклоняет расчёт целиком; страницы не скрывают неполноту. Late source drift, отзыв права владельца и pause во время SELECT блокируют выдачу. PostgreSQL/MCP, реальный pg_dump/restore, профиль traffic-rate с SQL logs, модели/coverage, build и ESLint прошли. Native-запросов, observer-планов и изменений CHR нет. Исправлен OSPF SQL fixture: traffic_samples использует недельные разделы, как приложение. Пользовательские адаптеры подключены следующим отдельным блоком ниже.
|
||
|
||
- [x] История пользователей/привязок подключена тремя общими REST/MCP адаптерами. SQL eligibility исключает mixed users с привязкой вне grant до JSON/метрик; выбранный поднабор серверов явно помечает subtotal и completeSourceSet. Пагинация серверов, пользователей и привязок; максимум 200 выбранных привязок пользователя/20000 samples сервера. Peer-specific counters доступны без вывода ключа; unknown/disabled/account состояния разделены. Unbound users требуют allowGlobal и весь каталог серверов. Binding drift после чтения блокирует результат; observer не создаёт планы и не опрашивает устройства. MCP/SQL с настоящим pg_dump/restore, модели/coverage (298 tools, 143/62/57), build и ESLint прошли. В общем REST/MCP reader исправлена верхняя граница окна: будущий sample больше не искажает текущую скорость; финальный SQL проверил это в обоих API.
|
||
- [x] После восстановления лимита аккаунта штатный review разрешил повтор traffic-rate профиля и SQL logs с последней верхней границей окна: MCP SQL, настоящий pg_dump/restore и оба профиля прошли, exit 0, Regression failed profiles: none. Наблюдавшаяся гонка teardown traffic-status SQL исправлена ожиданием scheduler jobs/journal до закрытия pool; в заключительном прогоне сообщения о закрытом pool нет. Build и ESLint прошли. Прежний отказ review не обходился. [Отчёт пользовательского блока](mcp-user-traffic-history-acceptance.json).
|
||
|
||
- [x] BGP redistribution через mm_bgp_export_plan: connected/static/disabled одного статического peer, три совместных права, обязательное человеческое подтверждение, явные instance/VRF/table, запечатанные источники/фильтры/шаблоны. Смена credentials после approval отклоняется до сетевого запроса; nil не подменяется false, неоднозначное наследование и возврат inherited export при очистке запрещены. SQL/restore, build, ESLint и модели прошли; native prefix exchange принимается отдельным CHR-отчётом.
|
||
- [x] Полная backend-регрессия после серверной/пользовательской истории трафика и BGP export: 26 профилей test:all и SQL logs, MCP SQL и настоящий pg_dump/restore, Regression failed profiles: none, exit 0. Первый запуск без client tools в PATH остановился; успешный повтор использовал существующий локальный комплект. Последний static-query fallback дополнительно прошёл SQL/restore, build и ESLint.
|
||
|
||
- [x] Read-only mm_bgp_prefixes_get: совместные BGP/network права, одна таблица и семейство, native origin/prefix checks, 10000 строк до пагинации, nullable active/distance, table/source/access fences и отмена. Observer не создаёт планов, не отражает native secrets и не заявляет attribution к peer/advertised attributes/forwarding. Модели/coverage (300 tools, 143/62/57), build, ESLint и SQL/настоящий pg_dump/restore прошли, включая доказанный late owner/pause race. [Отчёт observer](mcp-bgp-prefix-observer-acceptance.json).
|
||
- [x] Двухузловая BGP-передача контрольных пакетов через MCP path verifier: 11 IPv4/IPv6 проверок 3/3 с traceroute до loopback и 7 подтверждённых отказов 3/0 после withdrawal/peer stop/удаления connections. Повторный анонс и inverse восстановили путь, IPv6 сохранился при отключении IPv4. Connected GRE используется для ответа; пользовательский трафик и независимый транзитный failover не заявляются. 20 fingerprints восстановлены, SSH закрыт; CHR exit 0 20 октября 08:28:01 UTC. Build/ESLint нового fixture прошли. [Отчёт контрольных проб](mcp-chr-bgp-forward-acceptance.json).
|
||
|
||
Community допускает ограниченную автономность только при явном допуске, свежих метриках/проверке пути, независимом управлении и действующих защитах. Остальные нативные изменения требуют человека. В коде 328 инструментов; REST 168 mediated / 62 excluded / 32 pending. Полное покрытие сервисных REST-сценариев, завершение всего native harness, независимые пути/hash-policy/NAT/RPF и трёхузловая аварийная приёмка ещё не завершены. Последняя полная backend-регрессия после общего GRE revision restore прошла: 27 профилей, MCP SQL/HTTP, настоящий pg_dump/restore и SQL logs; build и lint успешны. Предыдущие отдельные WireGuard/UTF-8 сценарии сохранены в собственных отчётах. 9 браузерных MCP-сценариев выше относятся к состоянию перед историей трафика.
|