WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-028 · Задача · Инфраструктура · web

[Admin-Defaults Ф2c] Реестр всех namespace + миграция HOT-остатка под резолвер (спека §3)

Закрыт P2 ведёт: codex-f2c эпик: WEB-025
Суть
Завести registry-entries ВСЕХ namespace по спеке §3 (global-chat, council, factcheck extractor/judge/rationale, deep-research planner, arcade, messaging image, ingest extractors, oracle/gardener/mirror, web-search, translation, voice/TTS, role-prompts; embeddings — NON-governed с обоснованием). Перевести HOT-остаток (env-строки из HOT-kill 71c03bd6) под admin-резолвер, чтобы owner мог менять их из GUI. WARM-остаток из WEB-024 (gpt-4o-mini в src/lib/ai/tools/*, протухшие слаги claude-3-haiku/gemini-1.5/grok-2 в фолбэках — риск 404) закрыть тем же механизмом. Ship-dark.

ТРЕЙЛ: спека M4:/Users/milamarty/work/ADMIN-DEFAULTS-EPIC-SPEC.md (виза координатора); родитель эпик WEB-025; опись WEB-024 (~/Downloads/WEB024-INVENTORY.md); Ф1 код 97ca0e8a + HOT-kill 71c03bd6 (ветка agent/admin-defaults-f1-20260812 в board-fix-w5). Ответы owner-а на 5 вопросов зафиксированы в WEB-025 (evidence). Правило: не начинать production-enable фазы до exit-gate предыдущей (спека §11).

## 2026-08-23 BOARDSWEEP: STALE-NOT-DEPLOYED
- Evidence: buildFixed is empty. Canonical admin-defaults routes/config were inspected, but namespace registry migration has no deployed build/evidence pointer.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.


## 01.09 11:45Z — реанимация Ф2c (Fable)
Прод (A1, l81b) минутами сыплет admin_defaults_missing_config (council/global-chat/messaging/voice/arcade) — строк admin-defaults:<ns> в RuntimeConfig нет; этот тикет done, но STALE-NOT-DEPLOYED (buildFixed пуст) — реестр не доехал. Волна 966-admdef2c поставлена в очередь A1: опись реестра против §3, добивка entries со схемами (дефолты = текущие env/код 1-в-1), идемпотентный seed-скрипт (dry-run; --apply НЕ исполняется волной), unit-тесты. Ship-dark, env-фолбэк не меняется. Спека на M4 недоступна (машина спит) — волна работает от кода Ф1/Ф2a + списка §3 из этого тикета. Источник дерева: mirrors/l81-line-db40f5c6.bundle (постоянное зеркало l81 доставлено с A2).

## 01.09 12:35Z — авторская волна 966 СДАЛА (Fable)
Коммит 94ba9724 (ветка admdef2c-966, база db40f5c6), отчёт /home/ubuntu/waves/ADMDEF2C-REPORT.md. Итог: реестр = 26 namespace, пробелов против §3 нет (корень missing_row: фикс 00ef2149 был в базе, но строк RuntimeConfig не создавал); добиты slot/schema и env-bindings (council knights, factcheck×6, messaging, ingest, oracle/gardener/mirror, dictation/transcription, translation gate); role-prompts 99 entries (cap документа 50→128); embeddings NON-governed с обоснованием (размерность/целостность индекса/spend). scripts/admin-defaults-seed.ts: dry-run default, createMany skipDuplicates, только отсутствующие строки; unit-тесты на моках. Резолвер и env-фолбэк НЕ менялись, живая БД не читалась/не писалась.
Приёмка 967-accadmdef поставлена в очередь (Luna high, дерево от коммита автора; негативные тесты: строка-мутант, матрица мусора, обрыв на середине createMany, живость старого cap 50).

## 01.09 13:20Z — ПРИЁМКА ПРИНЯТА (Fable, вердикт-связка)
967-accadmdef (Luna, независимое дерево от 94ba9724, коммит 1776421b): «принято: да; кандидат l82: да». Негативы пройдены: mutant-строка не перезаписывается, dry-run = 0 write-вызовов, обрыв createMany + повтор = досев без дублей, матрица мусора отвергается схемой, старого cap 50 в коде нет, 5 слотов доказанно равны env/code-резолверам. Тесты 14/14; координатор ЛИЧНО перепрогнал приёмочный файл верным раннером (node --test + tsx): 7 pass / 0 fail — не фикстурное зелёное. Legacy-хвост: 6 stale assertions в старом suite (алиасы моделей, Cache-Control) — вне контракта, перечислены в полном отчёте в дереве.
СТАТУС ЛИНИИ: кандидат l82 (ветка admdef2c-966 + acc-967). При посадке l82: прогнать scripts/admin-defaults-seed.ts --apply штатно (создаёт ТОЛЬКО отсутствующие строки, поведение 1-в-1 с фолбэком) → admin_defaults_missing_config уйдёт по всем 26 ns.

## 01.09 13:05Z — Ф2c ПОСАЖЕН на прод l82 (Fable)
release/l82 (0aa0ac8f) собран, аттестация переподписана owner-ключом (kind=release-artifact, pin da2e5642, builderIdentity fable-a2-l82), сухой прогон через enforce+systemd-run на :3011 = paidReady True 0 failures (первый прогон поймал artifactKind=local-source-candidate — регенерил releasable). Прод переключён: serving-sha 0aa0ac8f, paidReady True публично. seed --apply на прод-БД: createdCount 26 (все namespace), повторный запуск 0 (идемпотентно), admin_defaults_missing_config в логах ИСЧЕЗ (0 за 45с). СТАТУС: done.
Доказательства

[2026-08-24 STALEREV против 61bc04462; в проде с посадки 45 v4-5a4edbac3] Вердикт SERVED: реализация+тесты доказаны в target tree; принято по приёмке 45-тикетного разбора. Отчёт: A1 /home/ubuntu/waves/STALEREVIEW-REPORT.md (STALEREVIEW_DONE).
[2026-08-26 01:35Z] Автор web028: реестр ВСЕХ config-namespace + миграция HOT-остатка под единый резолвер (спека §3, на базе WEB-025/026). Тесты 43/43. -> review.
[2026-08-26 02:20Z] acc028 NO-GO: инвентарный gate не пройден — prod namespace 'editor-actions' используется через resolveModelLayered, но отсутствует в ADMIN_DEFAULT_NAMESPACE_REGISTRY. Фикс web028fix: полный скан namespace + автоматический инвентарный тест (падает при namespace вне реестра).
[2026-08-26 03:10Z] ПРИНЯТ acc028b (повторно, независимо): GO — 'editor-actions' в реестре, AST-инвентарный gate падает на synthetic namespace (exit 1), независимый скан приёмщика: 0 пропущенных. -> done.
Починено в
a453b16
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-028","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-01T12:32:38.866Z