WEB-026 · Задача · Инфраструктура · web
[Admin-Defaults Ф2a] API-контракт /admin/defaults: routes+CAS+audit+rollback (спека §4)
Закрыт
P1 · важно
ведёт: codex-f2a
эпик: WEB-025
Суть
Реализовать admin API по спеке §4: GET (все admin-defaults:* rows + effective-preview), PUT (upsert namespace, admin-сессия как в src/app/api/admin/settings/route.ts), CAS по updatedAt+revision (409 conflict с diff), append-only audit (кто/когда/было/стало, retention 365д), rollback-endpoint. ОБЯЗАТЕЛЬНЫЕ правки поверх Ф1 (спека §1.5, §1.3, §8.3): кэш 60с SWR → 30с blocking refresh + LKG/max-stale 5мин; плоский slug-set в defaultsService.ts:78-93 → schema-aware catalog validation (provider/capability из src/data/models.ts + registry.ts:230-242,355-400). Тесты: CAS-конфликт, audit-append, catalog-reject, blocking-refresh. Флаг ADMIN_DEFAULTS_ENABLED. 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 route files exist at src/app/(full)/admin/defaults and src/app/api/admin/defaults, but no deployed build/evidence pointer is present.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
Доказательства
ТРЕЙЛ (кумулятивно). Спека эпика: https://bugs.wool2.online/labs/admin-defaults/SPEC.md (§4 API), опись Ф0: https://bugs.wool2.online/labs/admin-defaults/INVENTORY.md. 12.08 23:48 запуск волны m4-f2a (codex gpt-5.5, M4, дерево /Users/milamarty/work/f2a-tree, ветка agent/admin-defaults-f2a-20260812, база 71c03bd6=HOT-kill). 13.08 СДАНО+СПАСЕНО: коммит 8827fe23. Скоуп: API /api/admin/defaults (root+[namespace]+audit+rollback), typed-валидация целей по каталогу (422), CAS PUT/DELETE (409 без аудита), атомарный audit-append, rollback c rollbackOfEventId, резолвер-кэш 30s blocking + LKG 5m. SHIP-DARK: без ADMIN_DEFAULTS_ENABLED резолвер на кодовых дефолтах, PUT=черновик applied:false. Пруф: 13/13 unit exit 0 (reports/f2a-admin-defaults-test.log), ESLint 0. Честный остаток: наследованный красный council-сьют (billing/mock, известен с Ф1) не чинился; GUI=Ф2b WEB-027. Пакет приёмки owner-у: ~/Downloads/ADMIN-F2A-ACCEPT-20260813.zip sha256 8957ee7d65475a7e0a79b834567a2de85328f071eac41f45cc7e10924ce9f390 (bundle+patch+report+логи+COVER). Ждёт: приёмка owner (внутренний эпик, не внешнему ревьюеру) → посадка одним билдом с Ф1 97ca0e8a + HOT-kill 71c03bd6.
[2026-08-25 19:11Z] Независимая приёмка запущена: волна accadmdef на A1 (sol xhigh, приёмщик≠автор), worktree от прод-коммита a453b16; обязательны негативные тесты новых классов; для не-влитых тикетов волна установит факт NOT-LANDED. Бриф /home/ubuntu/waves/accadmdef-brief.md, отчёт будет в ACCADMDEF-REPORT.md.
[2026-08-25 19:33Z] ПРИНЯТО (accadmdef): LANDED (mutation API, CAS, transactional audit, rollback, fail-closed RBAC). Новые независимые негатив-классы 5/5 (CAS stale, rollback на несуществующую ревизию, RBAC и др.). GO → done.
Починено в
a453b16
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-026","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T19:28:49.773Z