WEB board

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

[Admin-Defaults Ф3] Фолбэк-цепочки при провале провайдера + телеметрия (спека §6)

Закрыт P2 ведёт: coordinator-fable эпик: WEB-025
Суть
Центральный fallback-executor + классификатор ошибок (какие коды переключают target) по спеке §6. ПЕРВЫЙ шаг цепочки = та же модель юзера через OpenRouter (страховка owner-а, ответ на вопрос §10-Q1), потом approved namespace-chain; сохранённый выбор юзера НЕ меняется, показывать плашку «ответила запасная». Retry/cooldown/deadline-бюджеты, health-memory. Правило 10: телеметрия каждого срабатывания (не тихо), биллинг-лейбл фактического target. Fault-injection suite. 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/provider resolution paths were inspected, but fallback/telemetry has no deployed build/evidence pointer.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
Доказательства
ТРЕЙЛ. Ф3 цепочки фолбэков СДАН+СПАСЁН 13.08 ~03:20: коммит b2f51c6 (Интел, ветка agent/admin-defaults-f2c-20260813, база 026725e). RESULT PARTIAL: деривация цепочки по умолчанию (openrouter-та-же-модель ПЕРВЫМ шагом = owner-страховка от аварии провайдера, затем дешевле, затем code-default), типизированный executor с circuit-breaker + запрет апскейла вверх, ship-dark без ADMIN_DEFAULTS_ENABLED/OPENROUTER_API_KEY. Остаток: namespace-override не прошит во все call-sites (резолвер-план есть). F3-REPORT.md+f3.patch. Это последняя фаза эпика WEB-025.

[24.08 04:30] ПРИЁМКА против серва 452800ff4 (волна reviewacc, ~/work/REVIEWACC-REPORT.md): PARTIAL. ЕСТЬ: typed fallback-executor (providerFallbackChain.ts:80-265 — classifier, mirror→дешевле→default, circuit/cooldown/deadline, hop-телеметрия), metered wiring (providers/metered.ts:117-143), resolver plan (serverModelDefaults.ts:52-75), юниты порядка/guard/TTL (admin-defaults.service.test.ts:523-663). ОСТАТОК: (1) протянуть plan/namespace override по всем call-site (actions.ts:44,2272,5252; bossActions.ts:96-125; council/adapters/openrouter.ts:45 зовут старый resolveServerModelDefault); (2) integration/fault-injection пруф metered/deadline/billing-label; (3) rollout: ADMIN_DEFAULTS_ENABLED default-off + нужен OPENROUTER_API_KEY — deployed≠enforcing, prod env не проверялся. Остаток (1)+(2) раздан волной l44fix (24.08).


[24.08 07:15] Прошивка ДОСТАВЛЕНА В ПРОД (посадка 42, v4-b1fcad2f0) SHIP-DARK: fallback-план подключён к фактическим call-site (actions/boss/council-адаптеры/dictation/image-caption, 19 файлов), при ADMIN_DEFAULTS_ENABLED=off (текущий прод) — старый путь (негативный тест). Попутно гейт покрытия поймал незарегистрированный платный call-site генерации заголовка → зарегистрирован в paidEntrypointRegistry (entrypoint+callsite+контрактный тест 8/8), generator ok:true/uncovered=0. ОСТАТОК: включение ADMIN_DEFAULTS_ENABLED + OPENROUTER_API_KEY (owner-спенд-решение) и live-приёмка фолбэка.

[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] NO-GO приёмки (PARTIAL-LANDED): fallback executor (providerFallbackChain.ts из snapshot 752c798) не исполняет failurePolicy — нет same-target retry, нет rule-10 telemetry. Запущен фикс web02930fix (A1, luna), негативный harness приёмщика сохранён как гейт.
[2026-08-25 20:05Z] ФИКС ГОТОВ (web02930fix @9643c55): executor исполняет failurePolicy (same-target retry, maxAttempts/DistinctTargets, cooldown, Retry-After), none=без ретраев, rule-10 telemetry beacon best-effort. Зонные 41/41 + harness приёмщика 5/5 (не менялся) + новые 53/53 + boundary rc=0. → review (acc2).
[2026-08-25 21:08Z] acc2 NO-GO по полному `pnpm type-check` rc=2 — НО функционально 53/53 PASS. rc=2 = 1606 предсуществующих baseline-ошибок репо (ровно проблема WEB-045), НЕ регресс web02930fix. web045b классифицирует гейтом (новые vs baseline); если новых нет — 029/030 GO.
[2026-08-25 21:22Z] КЛАССИФИКАЦИЯ web045b = NEW_ERRORS (acc2 NO-GO ВЕРЕН): type-gate нашёл 4 новые TS-ошибки в изменённых web02930fix файлах (SettingsModal.tsx: resetUserSettingsToDefaults/saveUserSettings не найдены + 2). Функц.тесты 53/53 их не поймали. Запущен web02930fix2 — доработать 4 ошибки типов.
[2026-08-25 21:55Z] ФИКС web02930fix2 @d708402: 4 новые type-ошибки устранены (SettingsModal подключил resetUserSettingsToDefaults/saveUserSettings правильно). type-gate 0 новых (даже 4 baseline исчезли), функц.53/53, boundary rc=0. → review на re-accept.
[2026-08-25 22:52Z] ПРИНЯТ reacc02930 (независимо после web02930fix2): GO на acceptance scope. Тип-ошибки устранены, функц.53/53, harness приёмщика чист. → done.
Починено в
a453b16
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-029","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T22:54:57.043Z