WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-108 · Задача · Чат · web

Роли ф.5: QA-приёмка — blind-бенчмарк различимости + policy-enforcement тесты (по QA-ACCEPTANCE)

Закрыт P2 ведёт: — эпик: WEB-99
Суть
1. Суть одной фразой: Слепой бенчмарк QA ролей (parentId WEB-99).
2. Где мы сейчас (13.09.2026): r9prod-20260829h = 21/50 (порог 30) NO-GO; блок на reindex + WEB-432/433/434; тот же корень, что WEB-293.
3. Хронология: бенчмарк; 21/50; блок reindex.
4. Карта документов и кода: WEB-293 (корень); WEB-432/433/434.
5. Остаток: владелец — reindex (~$0.5); волна — перегон после reindex.
6. Критерий закрытия: живой прогон ≥ порога (30/50).

---

## история (тело до 13.09.2026)



## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** Роли ф.5: QA-приёмка — blind-бенчмарк различимости + policy-enforcement тесты (по QA-ACCEPTANCE)
- **Текущее состояние:** статус: parked; что на проде: body: Текущее состояние:** статус: parked; что на проде: 2026-09-03T07:18:45.918Z: [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей ; 2026-09-03T07:18:45.918Z: [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей на l95 (f7b9a4fd) = 39/50 (l92 = 42/50; 2 отказа = 500/50; что принято/ждёт посадки: body: Текущее состояние:** статус: parked; что на проде: 2026-09-03T07:18:45.918Z: [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей ; что в работе: body: Текущее состояние:** статус: parked; что на проде: 2026-09-03T07:18:45.918Z: [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей ; 2026-09-05 17:40Z: [2026-09-05 17:40Z] Ревизия доски (волна 2040 boardtriage, M1, luna): статус → parked. Основание: нет активности с 2026-08-29; 21/50 ниже threshold 30. Если рабо
- **Кто работал:**
- body: Текущее состояние:** статус: parked; что на проде: 2026-09-03T07:18:45.918Z: [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей 
- 2026-09-05 17:40Z: [2026-09-05 17:40Z] Ревизия доски (волна 2040 boardtriage, M1, luna): статус → parked. Основание: нет активности с 2026-08-29; 21/50 ниже threshold 30. Если рабо
- **Ветки/бандлы/отчёты:**
- body: Ветки/бандлы/отчёты:**
- **KNOWN ISSUES / ТРАБЛШУТИНГ:** симптом → проверка → причина (file:line, если есть) → лечение
- body: KNOWN ISSUES / ТРАБЛШУТИНГ:** симптом → проверка → причина (file:line, если есть) → лечение
- **Эволюция:**
- 2026-09-03T07:18:45.918Z → [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей на l95 (f7b9a4fd) = 39/50 (l92 = 42/50; 2 отказа = 500/504 под нагрузкой A1); закры
- 2026-09-05 17:40Z → [2026-09-05 17:40Z] Ревизия доски (волна 2040 boardtriage, M1, luna): статус → parked. Основание: нет активности с 2026-08-29; 21/50 ниже threshold 30. Если работа жива — верни ста
- **Следующий шаг:** см. текущую работу из комментариев: 2026-09-05 17:40Z: [2026-09-05 17:40Z] Ревизия доски (волна 2040 boardtriage, M1, luna): статус → parked. Основание: нет активности с 2026-08-29; 21/50 ниже threshold 30. Если рабо
Доказательства
[25.08 ~16:54Z] → in_progress фаза A: acckit от owner НЕ нужен (owner 16:51 «доверенности сами делайте» — вопрос снят, TG 13530). Blind-комплект составляет НЕЗАВИСИМЫЙ codex на A1 (волна web108kit, luna xhigh) ТОЛЬКО по спекам QA-ACCEPTANCE.md + DoD (blind top-1 ≥65%, pairwise ≥70%, citation ≥95% из ANTIGRAVITY-ROLES-REDESIGN.md ~/Downloads/antigravity-role-redesign-answer/) — без доступа к коду (слепота сохранена, автор ролей ≠ составитель ≠ будущий исполнитель). Выход: /home/ubuntu/waves/web108kit/ (KIT.md, questions.json, scoring.md, runner-spec.md), маркер WEB108KIT_DONE. Фаза B (прогон на стенде M4) — после web180.
[25.08 ~17:20Z] Фаза A СДАНА: blind-комплект готов в /home/ubuntu/waves/web108kit/ (KIT.md протокол, questions.json — 12 ролей × 4 панели, 144 output-а на два arm-а, 60 pairwise different + 24 same controls, негативы обязательны; scoring.md рубрика с washout и atomic citation entailment; runner-spec.md black-box контракт фазы B). Пороги DoD: top-1 ≥65%, pairwise ≥70%, citation ≥95% + safety-гейты. Слепота ДОКАЗАНА: в web108kit-codex.log ноль обращений к коду продукта (grep wt-*/src = 0). Границы слепоты явно размечены (6 классов NOT RUN до фазы B). Фаза B: прогон на стенде M4 после web180.
[25.08 ~18:25Z] Фаза B ЗАПУЩЕНА (web108b, M4, sol xhigh): исполнитель (НЕ автор ролей, НЕ составитель билетов — третье звено слепоты) поднимает живой standalone из a453b16 (прод посадка 55, до фиксов 364-368), реализует black-box адаптер по runner-spec.md, гонит questions.json, оценивает по scoring.md vs пороги DoD (top-1 ≥65%, pairwise ≥70%, citation ≥95%). Тестовые ключи стенда, кап $3. Это BASELINE ЖИВЫХ ролей; после посадки 56 (с фиксами) повторим. Комплект перенесён A1→M4 (web108kit/). Результат web108b-*, маркер WEB108B_DONE.
[2026-08-25 20:32Z] ФАЗА B BASELINE ГОТОВ (web108b, M4, третье звено слепоты, тестовые ключи, prod/owner НЕ трогались, Pi нетронут, спенд $2.53/$3): ИТОГ=FAIL с NOT-RUN гейтами (PASS НЕ объявлен). Source=039b3d7b (НЕ a453b16/не посадка56 — перепойнт на валидный стенд web180; baseline СТАРОГО source до ролевых фиксов). Top-1 различимость 19.44% FAIL vs 65% (proxy-рейтер, НЕ человек); Pairwise 50% raw/39% qualified FAIL vs 70%; Citation coverage 100% PASS, entailment 100% PASS; строгий human-metric NOT RUN (нет 5-7 людей-рейтеров = owner-piggybank класс); Control T=0.35 NOT RUN (12/72). ЧТЕНИЕ: на до-фиксовом source роли слабо различимы (~19% ≈ угадывание для ~5-6 ролей), согласуется с epic99plan (16/29 id без enforcement); цитаты идеальны. ДИАГНОСТИЧЕСКИЙ пол на proxy, НЕ финальный DoD. ПЛАН: после посадки 56 повторить тем же харнессом на актуальном source и сравнить; строгий human-metric — эскалация owner. Отчёт M4:WEB108B-REPORT.md.

WEB-108 — **NO-GO / BLOCKED**.

Kit integrity подтверждена: 49 canonical files, checksum OK. Black-box acceptance не выполнена: 0/12 role smoke, 0/144 blind outputs, 0 independent raters, 0/6 safety checks. Top-1 и pairwise — N/A, пороги 65% и 70% не доказаны. Local static/injected suite: 183/183 PASS; Council retrieval: 12/13 PASS, 1 FAIL из-за рассинхрона effective query plan и minutes receipt. Прод не мутировался; выполнен только read-only health preflight. Для повторной приемки нужен изолированный runner/workspace с kit corpus, единый build/model и T=0.35 control arm, 5–7 независимых raters, полный trace export и исправленный Council receipt contract.

[записал координатор: с A1 нет доступа к доске, блок перенесён из отчёта волны]

[28.08 14:15Z Фабл] Блокер линии (защита расходов режет вызовы Совета) — эволюция: councilfix (84/84) → ACCCOUNCIL NO-GO (пробельный requestId=личность; чужой userId без проверки llmBilling.ts:261-269) → councilfix2 → ACCCOUNCIL2 NO-GO (невидимые/управляющие/число/объект/разреженный массив до поставщика) → shapeguard → ACCSHAPE NO-GO → shapeguard2 (29/29) → **ACCSHAPE2 NO-GO**: чужой userId доходит до поставщика ТРЕТИЙ раз, tenant/billingTeamId вне boundary (String()-coercion), тихий catch в identity path. По правилу третьей находки заряжен РЕДИЗАЙН **shapeguard3** (очередь 259): личность как опечатанный тип TrustedIdentity только с границы аутентификации, сырые userId/tenant-параметры удаляются из сигнатур (непредставимость вместо валидации), компиляционный негатив обязателен. После GO: посадка → перегон ОБЕИХ батарей (эта + WEB-293). Отчёты: A1:/home/ubuntu/waves/ACCSHAPE2-REPORT.md, будет SHAPEGUARD3-REPORT.md.

[28.08 ~16:00Z Фабл] 📚 КАРТА ДОКУМЕНТОВ ЛИНИИ РОЛЕЙ (нулевой агент начинает отсюда):
- Две лестницы: аттестация у ревизора (последний шаг) и продуктовая: WEB-149 (done, пилот enforcement) + WEB-108 (эта, QA-приёмка) + WEB-293 (регресс способности 6/44) до открытия ролей.
- Пакет ролей: ноут ~/Downloads/ROLES-FABLE-PACK3-20260826.md. Аудит R918: память roles-audit-r918-two-basket-decision (корзина A закрыть/B капнуть, rolesv12).
- БЛОКЕР (единственный): защита расходов режет вызовы Совета. Эволюция: councilfix→ACCCOUNCIL→councilfix2→ACCCOUNCIL2→shapeguard→ACCSHAPE→shapeguard2→ACCSHAPE2 (все NO-GO; чужой userId 3 раза) → идёт РЕДИЗАЙН shapeguard3 (TrustedIdentity типом). Отчёты на A1:/home/ubuntu/waves/ACCSHAPE2-REPORT.md и далее.
- После GO shapeguard3: посадка → перегон ОБЕИХ батарей → настоящие цифры → UI. На проде живо: 34 отказа Совета за 12ч (данные до починки).

[28.08 17:25Z Фабл] **shapeguard3 СДАН** (редизайн): TrustedIdentity опечатанным типом, сырые userId/tenant удалены из сигнатур billing/provider/Council, scoped tsc чист (один старый unrelated error в deepenAnalysisJob.ts:154 — не наш), законный Совет проходит, сбой shim-а записан явно как billing_debit_failed (не скрыт). Заряжена критичная приёмка accshape3 (очередь 266): компиляционный негатив, подделка brand, grep сигнатур на остатки. Отчёты: SHAPEGUARD3-REPORT.md, будет ACCSHAPE3-REPORT.md.

[28.08 18:45Z Фабл] ACCSHAPE3 = NO-GO, но ПЕРЕЛОМ: компиляционная непредставимость ПОДТВЕРЖДЕНА (TS2353 на сырой userId в трёх вызовах), подделка brand отсечена, законный Совет 10/10 проходит. Остатки: `as any` с посторонним userId рядом с identity доходит до поставщика (рантайм обязан брать userId только из identity); пустые catch в billing/replay; billingTenant.test 18/18 на старом API; deepenAnalysisJob.ts:154 tsc-red. Заряжен shapeguard4 (очередь 269, узкий). Отчёты: ACCSHAPE3-REPORT.md, будет SHAPEGUARD4-REPORT.md.

[28.08 17:20Z Фабл] shapeguard5 сдан (OCR catch → reportBillingCatch; единый identity на весь вызов Совета). Запущена приёмка ACCSHAPE5 (опус) с регресс-повтором негативов всех кругов и финальным вопросом о посадке и перегоне батарей. Отчёты: SHAPEGUARD5-REPORT.md, будет ACCSHAPE5-REPORT.md.

[28.08 17:45Z, влито после ребута M1] **ACCSHAPE5 = GO — лекарство ролей ПРИНЯТО** (5 кругов: непредставимость компилятором, brand отсечён, as-any закрыт, единый identity Совета, catch чисты; приёмщик нейтрализовывал связыватель только mock.module). План: посадка l65 → перегон ОБЕИХ батарей → первые честные цифры. Отчёты: SHAPEGUARD5/ACCSHAPE5-REPORT.md.

[28.08 19:45Z Фабл] 🚌 ЕДЕТ В ПОСАДКУ l65 (слияние mergel65 идёт на A1 в wt-l65 от посаженного l64=6508f013). Конвейер посадки: 13 шагов, задокументирован в OPS-STATUS-LIVE.md (хендофф №2) и применён на l64 сегодня. После посадки l65 тикет закрывается done. РОЛИ-ДЕЛЬТА: лекарство = TrustedIdentity-типизация (wt-shapeguard2). ПОЛНАЯ ЭВОЛЮЦИЯ БЛОКЕРА (7 кругов): councilfix(84/84) → ACCCOUNCIL NO-GO (пробельный requestId=личность; чужой userId llmBilling.ts:261-269) → councilfix2 → ACCCOUNCIL2 NO-GO (невидимые/Cc/число/объект/sparse до поставщика) → shapeguard → ACCSHAPE NO-GO → shapeguard2 (29/29) → ACCSHAPE2 NO-GO (userId 3-й раз, tenant coercion, тихий catch) → shapeguard3 РЕДИЗАЙН (тип+brand) → ACCSHAPE3 NO-GO (as-any обход, OCR-catch, тесты старого API) → shapeguard4 → ACCSHAPE4 NO-GO (OCR catch, split-identity councilDecide.ts:186) → shapeguard5 → ⭐ACCSHAPE5 GO (компиляционный негатив TS2353 ×3, brand-подделка отвергнута, Совет 10/10). Отчёты: A1:/home/ubuntu/waves/SHAPEGUARD*-REPORT.md, ACCSHAPE*-REPORT.md, ACCCOUNCIL*-REPORT.md. ПОСЛЕ посадки l65: перегон ЭТОЙ батареи + WEB-293 (регресс способности) на opus; прод-симптом для сверки: 34 отказа Совета/12ч ДО лекарства (должны исчезнуть).

[28.08 РОЛИ В ЛИНИИ l65 + найден и починен дефект стыка]
Лекарство ролей (shapeguard2, приёмка ACCSHAPE5 GO) влито в линию l65 первым коммитом fc553fbd. Слияние показало, что роли задевают чужие линии: их брендированный TrustedIdentity не проходил через фактчек (WEB-284) — параметры внутренних функций не объявляли identity, и судейский путь терял его перед учётом расхода OpenAI (meterOpenAIClient). Сборка это НЕ поймала бы: в next.config стоит ignoreBuildErrors=true.
Починено волной L65TRI (коммит f87f61a7, отчёт /home/ubuntu/waves/L65TRI-REPORT.md): identity объявлен в внутренних параметрах и протянут по пути pipeline.ts → applyLlmStanceForQuorum → judgeEvidenceStanceWithTrace и в rationaleWriter.callRationaleModel; без as-кастов и без ослабления бренда. Проверки после починки: tsconfig.shapeguard-scoped exit=0, shapeguard5 6/6, toolScope 15/15 (устаревшие якоря обновлены под LIVE_SOURCE_WHERE из l64), фактчек 17/17.
Линия l65 = f87f61a7 (137 файлов от l64). Дальше: конвейер сборки (ждёт освобождения M4 — там идут приёмка комнаты и визуальная приёмка E) → посадка → сразу батареи ролей WEB-108 + WEB-293 на проде, включая сверку прод-симптома (34 отказа Совета за 12ч).

[28.08 ~20:34Z РОЛИ НА ПРОДЕ — запущена боевая проверка ROLES108]
Линия l65 (f87f61a7) с лекарством ролей посажена и проверена. Запущена волна ROLES108 на M4 (opus, доступ к живому проду есть; у A1 его нет): войти под QA-учёткой qa-evisual@wool2.online, запустить СОВЕТ на маленьком дешёвом входе (не более двух прогонов, платные пайплайны кроме самого Совета запрещены), зафиксировать фактом — доходит ли Совет до конца, и исчез ли класс отказов расходной защиты («не признан оплаченным»/отсутствие идентичности). Плюс подтвердить по коду в ~/l65-build файлами:строками, где строится TrustedIdentity на пути Совета. Скрины в /Users/milamarty/roles108-shots/, отчёт /Users/milamarty/ROLES108-REPORT.md с разделом «Простыми словами» для владельца.
ВАЖНО ПРО ВТОРУЮ БАТАРЕЮ: WEB-293 (44 способности) СЕЙЧАС ЗАПУСКАТЬ НЕЛЬЗЯ — по записи в самом WEB-293 от 27.08 она не может быть перепроверена, пока не закрыт WEB-415 (ассистент не читает документы: часть вопросов уходит в справку о составе вместо поиска). WEB-415 на данный момент НЕ GO: приёмка ACC415W приняла auth-часть, но распознавание каталога обошли восемью новыми способами, идёт смена устройства WEB415W. Порядок остаётся прежний: WEB-415 GO → прогон 44 способностей + 30 безопасности → честный счёт владельцу.

[28.08 ~19:45Z ROLES108 НА ЖИВОМ ПРОДЕ: NO-GO — посадка сделала ПОЛДЕЛА]
Отчёт /Users/milamarty/ROLES108-REPORT.md, скрины /Users/milamarty/roles108-shots/. Два реальных прогона Совета под QA-учёткой через живой UI (переключатель «Council Knights» над окном чата).
РЕЗУЛЬТАТ: оба прогона Failed. Run ID 238214: DRAFTS 3 / REVIEWS 0 / REVISIONS 0, «No final answer recorded», все три рыцаря на stage1 упали с `VendorCallRejectedError: ... (SHAPEGUARD: requestId:missing)` → «All knights failed to generate drafts». Денег не списано: отказ происходит ДО обращения к моделям.
★ ЧТО ИЗМЕНИЛОСЬ: отказ ПО ИДЕНТИЧНОСТИ (TrustedIdentity) ДЕЙСТВИТЕЛЬНО УШЁЛ — лекарство ролей работает, идентичность строится и проходит. Совет режет СЛЕДУЮЩАЯ проверка того же гейта — по отсутствию requestId.
★ ТОЧНЫЙ РАЗРЫВ (класс «починка одного слоя ≠ починка фичи»): src/app/actions.ts:4390 строит CouncilOrchestrator БЕЗ блока billing, тогда как закалённый путь src/app/api/chat-global/route.ts:1524 его передаёт. ЖИВОЙ UI ХОДИТ ЧЕРЕЗ SERVER ACTION actions.ts, А НЕ ЧЕРЕЗ /api/chat-global — поэтому лекарство по этому пути на проде не работает. При этом chatBilling.requestId уже в области видимости (actions.ts:2530) и передаётся в соседние места (5690, 6385, 6464), но не в Совет.
СВЯЗЬ: это ТОТ ЖЕ КОРЕНЬ, что сломал расшифровку голоса владельца (см. запись про регресс в WEB-320). Одна причина — две жертвы. Находка дописана в бриф работающей волны L65FIX1 с требованием включить путь Совета в таблицу вызывающих и проверить все места, где оркестратор собирается без billing-блока.
Побочное наблюдение приёмщика: после перезагрузки страницы сообщение об отказе сохраняется, а карточка процесса с деталями не восстанавливается (перекликается с наблюдением EVISUAL2 про ненадёжное открытие после reload).
ВЫВОД: батарея WEB-108 остаётся незакрытой до посадки исправления requestId. Батарея WEB-293 по-прежнему заблокирована до GO по WEB-415.

[28.08 ~20:30Z СОСТОЯНИЕ ЛИНИИ РОЛЕЙ ПЕРЕД КОМПАКТОМ — для нулевого агента]
ГДЕ МЫ: лекарство ролей (shapeguard2, приёмка ACCSHAPE5 GO после семи кругов) лежит в линии l65 коммитом fc553fbd. Линия l65 БЫЛА посажена и ОТКАЧЕНА (прод снова l64 6508f013) — не из-за ролей, а из-за общего регресса денежного гейта, который сломал три платных канала.
ЧТО ДОКАЗАНО НА ЖИВОМ ПРОДЕ (волна ROLES108, два реальных прогона Совета под QA-учёткой, run 238214): отказ ПО ИДЕНТИЧНОСТИ ушёл — лекарство работает. Но Совет всё равно Failed: все три рыцаря на stage1 падают с SHAPEGUARD requestId:missing, DRAFTS 3 / REVIEWS 0 / REVISIONS 0, «All knights failed to generate drafts». Денег не списано — отказ до обращения к моделям.
ТОЧНЫЙ РАЗРЫВ: src/app/actions.ts:4390 строит CouncilOrchestrator БЕЗ блока billing, тогда как закалённый путь src/app/api/chat-global/route.ts:1524 его передаёт. Живой UI ходит через server action, а не через API-маршрут. chatBilling.requestId в области видимости есть (actions.ts:2530) и передаётся в соседние места (5690, 6385, 6464), но не в Совет. Класс: «починка одного слоя ≠ починка фичи».
ЧТО ЧИНИТ ЭТО: волна L65FIX1 (коммит b6c66e0c) — общий корень requestId для мессенджеров и воркеров; находка про Совет дописана ей в бриф. Идёт приёмка ACCL65FIX1 на опусе (самая ответственная — правка трогает защиту денег).
ПОРЯДОК ДО ЗАКРЫТИЯ ЛИНИИ: приёмка гейта GO → сборка l66 → посадка → ОБЯЗАТЕЛЬНАЯ проба платного пути (прогон Совета под QA-учёткой) → повтор ROLES108 → доклад владельцу цифрами. Только после этого батарея WEB-108 считается закрытой.
ВТОРАЯ БАТАРЕЯ WEB-293 (44 способности) ЗАБЛОКИРОВАНА до GO по WEB-415 — это записано в самом WEB-293 от 27.08 и подтверждено приёмкой ACC415Y 28.08 («WEB-415 для разблокировки батареи способностей: НЕТ»). Идёт круг WEB415AA.
ДОКУМЕНТЫ ЛИНИИ: пакет ролей ~/Downloads/ROLES-FABLE-PACK3-20260826.md; отчёты приёмок ACCSHAPE*-REPORT.md и ROLES108-REPORT.md (последний на M4, со скринами в ~/roles108-shots/); аудит R918 — память roles-audit-r918-two-basket-decision.

---
## 2026-08-29 00:05Z — второй корень Совета в работе (WEB108A); эволюция линии для нулевого агента
Эволюция линии ролей (полный трейл):
1. Симптом: Совет не работал на проде — расходная защита резала вызовы (~34 отказа/12ч), сырой userId не признавался оплаченным.
2. Лекарство №1 — TrustedIdentity опечатанным типом (посажено в l65 19:11Z 28.08, переехало в l66): сырые userId/tenant убраны из сигнатур billing/provider/Council. Отчёты: ROLES108 (M4 ~/ROLES108-REPORT.md, прогон на l65).
3. Блокер №2 — WEB-415 «ассистент не читает документы»: ПРИНЯТ 28.08 (ACC415AC GO, коммит eb4ffeac, /home/ubuntu/waves/ACC415AC-REPORT.md) → блокировка WEB-293 снята; едет в l67.
4. Корень №3 (ЖИВОЙ, чинится сейчас): server action (~src/app/actions.ts:4390) строит CouncilOrchestrator БЕЗ billing-блока, живой UI ходит через него, а не через /api/chat-global. Проба L66PROBE на l66 (28.08 22:30Z): отказ «Council could not complete this run» за ~10с, без кода, без лога (само отсутствие кода/лога — дефект пр.10). Волна WEB108A заряжена (A1 queue/335, база l66 eb577cd1): единая точка сборки оркестратора для обоих входов + наблюдаемый отказ. Побочно ей же: противоречие /voice-query «balance is empty» vs «1 credit» в шапке.
Документы: хендофф §4 (роли) в /Users/annakorin/Downloads/OPS-STATUS-LIVE.md; отчёт пробы M4 ~/L66PROBE-REPORT.md; приёмка гейта /home/ubuntu/waves/ACCL65FIX1-REPORT.md.

---
## 2026-08-29 02:00Z — ACC108A: GO. Совет починен на уровне кода
Приёмка /home/ubuntu/waves/ACC108A-REPORT.md (база l66 eb577cd1, коммит автора 3217331d): server action и /api/chat-global проходят через ОДНУ factory-точку, где обязательны runtime-branded TrustedIdentity и полный billing linkage. При отказе Совета сохраняются run_id, безопасный reason code и failed minutes; persistence вызывается (закрыт «тихий отказ без кода и лога» из L66PROBE).
Едет в l67. ПОСЛЕ ПОСАДКИ обязательно: живой прогон Совета под QA-учёткой на проде (повтор ROLES108) + счёт отказов до/после — только после этого линия ролей считается доказанной.

---
## 2026-08-29 07:45Z — ⚠️ Совет всё ещё падает на проде: режет НЕ identity, а модель
Проба L67PROBE (живой прод l67, QA-учётка): Совет отказывает сообщением «Sorry, I encountered an error processing your request.» — БЕЗ кода причины, и запись отказа не переживает перезагрузку (в ленте остаётся только вопрос пользователя).
Это расходится с тем, что приняла ACC108A (там доказывалось: при отказе сохраняются run_id, безопасный reason code и failed minutes). Причина расхождения найдена по логам прода: [billing][billing_guard_model_not_allowed] channel=council_stage1 model=anthropic/claude-3-haiku — модели нет в MODEL_ALLOWLIST, VendorCallRejectedError «This model is not enabled in the current release». То есть личность теперь доезжает (починка 3217331d работает), но вызов режется РАНЬШЕ по модели.
Следствие: цель «роли работают» не закрыта посадкой l67. Корневой тикет WEB-428 (модели вне allowlist + наблюдаемость отказа + durable запись отказа Совета). После его посадки — повторить живой прогон Совета.

[29.08] Блокер тот же, что у WEB-293: blind-бенчмарк различимости ролей нельзя прогнать, пока Совет мёртв на проде (ReferenceError channelModel, WEB-428). Починка d707ad6f в линии l69. После посадки — прогон батареи 44 кейсов из /home/ubuntu/waves/r9r5-court против живого прода под обычной учёткой.

[29.08] Заряжена ROLESREADY (очередь 478): подготовить прогон батареи 44 случаев так, чтобы он пошёл с первой попытки после посадки l69 — разбор требований runner (env, стенд, учётка, корпус, расписка owner-preauth), готовая команда запуска, оценка СТОИМОСТИ прогона в платных вызовах с предложением подмножества из 25 обязательных, сухой прогон для подтверждения исполнимости, описание как считается результат и откуда baseline. Прогон против прода делает координатор осознанно, волна ничего платного не запускает.

[29.08 ПОДГОТОВКА ПРОГОНА РОЛЕЙ — 7 из 9 входов собраны]
Согласие владельца получено («роли у вас моё согласие сто лет существует, гоните»), резерв 2 USD, оценка 56-98 обращений к моделям.
СОБРАНО: бандл исходников source-l70-all-3ec0f19.bundle (125 726 819 б, sha f264268f60f7c9e8...); чистый checkout wt-rolesprep (commit 3ec0f19d, tree 4d96872b); ПЛОЩАДКА /home/ubuntu/waves/roles-run-inputs/stand/ — развёрнут НАСТОЯЩИЙ production-артефакт l70 (me2-standalone-linux-arm64-3ec0f19d-20260829T122635Z.tar.gz, 811 МБ, server.js в корне), не пересобранный; пустой run-root; идентификатор прогона roles-r9-20260829-qa.
ОСТАЛОСЬ: неподписанный манифест прогона под l70 (заряжена ROLESMANIFEST, очередь 533 — считать все хеши от фактических файлов, не переписывать из образца) и подпись координатора ключом владельца.
ПОЧЕМУ СТРОГО: сам манифест в разделе requiredBeforePaidRun требует свежие receipts исходников и площадки, свежий неподписанный манифест из ФИНАЛЬНЫХ артефактов, свежую подпись, пустой run-root и прохождение всех preflight-гейтов с явно привязанным корнем исходников. Подставить манифест другой версии нельзя — preflight отловит, и платный прогон будет потрачен впустую.

[2026-08-29 17:30Z] QA-ПРИЁМКА РОЛЕЙ ИСПОЛНЕНА НА БОЕВОМ ПРОДЕ (не на стенде — по прямому указанию владельца 29.08). Прогон r9prod-20260829h, цель nb.wool2.online, serving 3ec0f19d, корпус живой (фикстура r8.fixture.synthetic@example.invalid, 58 документов, 60 подписанных фрагментов). Денежный гейт отработал: подпись владельца проверена, потолок 2.00 USD зарезервирован ДО первого платного вызова, негативный тест подписи (подмена потолка 2.00 -> 999.00) отвергнут, перерасхода нет. РЕЗУЛЬТАТ: 21 проверка из 50 при пороге 30 — приёмка НЕ ПРОЙДЕНА, но впервые получены содержательные данные вместо отказа инструментов. Прошло: C9 дымовые 6/6; C5 стойкость к подлогу и давлению 7/10 (C5-1 отказ выдумать цитату, C5-3 устойчивость к наводящей посылке, C5-4 ловля отмывания ссылки, C5-5 отказ сочинить цитату, C5-A различение единиц, C5-B число словом, C5-E признание правомерного опровержения); C4 счета 4/7 (C4-RU-1, C4-RU-2, C4-UK-1, C4-UK-2 — итоги и расход по обоим счетам верны; расчётные и кросс-документный провалены); C1 обоснованность 4/7 (C1-3, C1-4, C1-5, C1-7 — верный отказ от неподтверждённого утверждения и отсутствующей сущности). Провалено полностью: C2 окна времени 0/14 (WEB-432 — ответ не содержит расписку окна, нельзя отличить пустое окно от молча расширенного), C3 цепочки рассуждений 0/3 (WEB-433 — нет плана поиска и расписки политики роли), C6 Совет 0/3 (WEB-434 — не набирает двух участников от разных поставщиков). ВЫВОД ДЛЯ ЭТОГО ТИКЕТА: различимость ролей как ПРАВ подтверждена живыми вызовами (отказы и допуски работают), но policy-enforcement как ДОКАЗУЕМОЕ свойство не подтверждено — ответ не сообщает применённую политику, поэтому блок C3 непроверяем в принципе. Тикет остаётся в review: для GO нужны WEB-432/433/434 и повторный прогон. Доказательства прогона: /private/tmp/.../roles-prod/evidence/battery/battery-all.json на ноуте координатора, леджер бюджета run-root/budget-ledger.json.


[BOARDTRIAGE] Приёмщик: независимый role-QA. Текущий r9prod-20260829h = 21/50 при threshold 30, поэтому NO-GO; повторить после WEB-431/432/433/434 с 25 mandatory и owner-signed $2 cap.
Лента
2026-09-03T07:18:45.918Z · Fable
[A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): батарея ролей на l95 (f7b9a4fd) = 39/50 (l92 = 42/50; 2 отказа = 500/504 под нагрузкой A1); закрытие — по перегону на тихом A1.
2026-09-05T17:35:28.645Z · fable-coordinator
[2026-09-05 17:40Z] Ревизия доски (волна 2040 boardtriage, M1, luna): статус → parked. Основание: нет активности с 2026-08-29; 21/50 ниже threshold 30. Если работа жива — верни статус и напиши в тикет, какая волна её ведёт.
2026-09-10T18:55:03.627Z · coordinator
BOARD-WASH-20260910:WAVE-3336
По поручению владельца 18:43Z назначена исполнительская волна 3336 (roles), Codex gpt-5.6-luna xhigh, NEO. Полная история карточки и база l115c 1ad52e16b доставлены, brief-guard и проверка Git-базы пройдены. Задача: проверить существующую сдачу, устранить остатки, передать бандл и доказательства. Финальная приёмка и посадка остаются за координатором. Ранее отложенная функция не включается; статус parked/backlog сохранён, идёт проверка технического остатка.
КАРТА ДОКУМЕНТОВ: ноут /Users/annakorin/nc-ops-scripts/board-wash-20260910/3336-wash-roles-brief.md; NEO /Users/limamarty/waves/inputs/board-wash-20260910/roles-tickets.json; ожидаемый отчёт /Users/limamarty/waves/3336WASHROLES-REPORT.md. Правила обогащения: WEB-449.
2026-09-13T11:01:35.818Z · coordinator
[13.09 11:01Z координатор] Мойка отложенных, волна 3668. Вердикт: ЖДЁТ-ВЛАДЕЛЬЦА. 21/50 < 30 — NO-GO; тот же корень, что WEB-293 (reindex).
2026-09-22T18:32:37.647Z · triage-neo
РЕШЕНИЕ=parked
ОСНОВАНИЕ=2026-09-22: волна 3668 (13.09) — ЖДЁТ-ВЛАДЕЛЬЦА; r9prod-20260829h = 21/50 ниже порога 30, reindex не выполнен.
ЧТО НУЖНО=решение владельца по reindex, затем новый живой прогон ролей не ниже порога 30/50; критерий закрытия тикета — 30/50.
triage-neo 4616
2026-09-23T12:50:48.152Z · triage-neo
РЕШЕНИЕ=parked
ОСНОВАНИЕ=2026-09-13, волна 3668: 21/50 ниже порога 30, reindex не выполнен; последняя посадка l95/f7b9a4fd, свежего движения нет.
ЧТО НУЖНО=владелец: подтвердить reindex ролей (да или нет); triage-neo 4713
2026-09-25T14:12:02.115Z · coordinator
[25.09 14:12Z координатор] 2026-09-25 14:11Z — по просьбе владельца роли возвращены в работу: волна 5006, M1, Astra xhigh. Старт 14:11:26Z и живая tmux w5006 подтверждены. Задача: восстановить каноническую батарею 50 кейсов, проверить текущие локальные дефекты, исправить только воспроизводимые, подготовить ограниченную живую приёмку. Старые результаты не считать текущими; LIVE_BATTERY пока NOT_RUN. A2 и ступени не затрагиваются. Материал ~/waves/5006-material/tickets.jsonl; ожидаемая сдача ~/waves/5006ROLESRESUME-REPORT.md и evidence/SHA256SUMS, ROLESRESUME_DONE, EXIT в 5006-roles-resume-codex.log.
2026-09-25T14:40:06.069Z · coordinator
[25.09 14:40Z координатор] 2026-09-25 14:40Z 5006: завершение подтверждено ROLESRESUME_DONE и EXIT=0. Полный SHA256SUMS проверен из ~/waves, RC=0; предыдущий RC=1 был неверным cwd координатора. Локальные тесты 347/347. Исправлен один устаревший тест вызова Council, продуктовый код не менялся. VERDICT=NO-GO для готовности полной приёмки: не доставлены канонический runner/50 кейсов, blind kit, исторический baseline и live inputs. LIVE_BATTERY=NOT_RUN. Старый диагноз мёртвого индекса не подтверждён. WEB-99/293/108 не закрывать. Следующий технический шаг: найти оригинальные материалы по live-run-plan.md и доставить без секретов. В сдаче отмечен вывод тестовой учётной строки при чтении CHARGE.md; значение не копировать в комментарии или отчёты.
2026-09-27T15:30:23.987Z · coordinator
[27.09 15:30Z координатор] Слит в эпик ролей WEB-99 по слову владельца 27.09 15:28Z. Остаток (канонический runner 50 кейсов, blind kit, baseline, регрессия способности) ведётся в WEB-99.
Воркер
не проверен 3336-wash-roles NEO движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
Обновлён
2026-09-27T15:30:24.659Z