WEB board

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

Роли ф.1: RolePolicy-движок + канонический каталог 12 профилей + aliases 38 старых id (по GPT-Pro спеке)

Закрыт P1 · важно ведёт: role104 эпик: WEB-99
Суть
<!-- M1KNOWNISSUES 2026-09-06 -->

## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-06 UTC)
- **Суть одной строкой:** батарея ролей и compositional retrieval: evidence, negation, completeness и карантинные чанки дают нестабильные результаты.
- **Текущее состояние:** прод l113h 83683d48; откат l113g 4c322c46.
- **Что принято/ждёт посадки:** freshness/evidence и deterministic negation fixes приняты; roles r5/r5b, quarantine repair/generation и Astra Block 19 extraction/config r2 ждут посадки/приёмки.
- **Кто работал:** координатор, A2, M4; luna high/xhigh, sol xhigh, claude-opus.
- **Следующий шаг:** повторить roles battery после repair карантина и закрыть Block 19 r2: 2352/2356.

## KNOWN ISSUES / ТРАБЛШУТИНГ (обновлено 2026-09-06 UTC)
- **Battery ролей нестабильна: l113c 46/50, l113e 45/50 и 43/50 →** проверка: `roles-prod/evidence/run-l113c-full.log`, `battery/battery-all.json`, `battery-all-l113e-run{1,2}.json`, real PG/pgvector и RED 2235/2265 → причина: evidence bridge, receipt, negation scope и completeness; общий file:line не указан → лечение: relevance gate, stop bridge при `addedChunkIds=[]`, все hits до admission, negation только на claim predicate, judge для чужого predicate → ссылки: 2189/2203/2209/2212/2214/2230/2232/2235/2247/2265/2270/2278.
- **Нужный контент отсутствует в retrieval →** проверка: SQL `DocumentChunk.sourceContentRevision IS NULL`; receipts и quarantine buckets → причина: `src/lib/rag/sourceReadPolicyServer.ts:68-73`, новый splitter лишь в `chunking.ts:376-430` → лечение: repair чанков, reuse embeddings, batch-CLI/checkpoints, generation для крупных → ссылки: 2278c/2286/2289, 2301/2310/2313/2318.
- **Judge/чекер искажает структурированный ответ →** проверка: RED 2235/2265 и C4-RU-3 → причина: `compositionalRetrieval.ts:302-352`, `src/lib/chat/citationFragments.ts:964,966`; удаляется `Шаги:\n1.`, остаётся `2.` → лечение: claim-split fix 11f3cdd5 и проверки структуры; battery kit исправить для `could not/cannot confirm` → ссылки: 2324/2333.
- **Completeness показывает indexedSources=0 →** проверка: evidence receipts и SQL quarantine → причина: `evidenceReceipts.ts:126-137` читает `Source.metadata.processing.indexing.status`, который processDocument не пишет → лечение: писать indexing status и учитывать quarantine в health/completeness → ссылки: 2278c/2286.
- **Extraction/config acceptance не закрыта →** проверка: `NEXT_PHASE=phase-production-build`, scoped `tsc`, M4 acceptance → причина: `src/lib/admission/index.ts:480` не type predicate; x64 explicit-root расходится в status/stop со start; test-contract file:line не указан → лечение: WEB-568 faf26ab9 принят, extraction r2=2352 и config r2=2356 ждут → ссылки: 2303/2305, 2335/2336, 2352/2356, `~/audit/reports/block18-checkpoint.md`.

<!-- END M1KNOWNISSUES 2026-09-06 -->



## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** Роли ф.1: RolePolicy-движок + канонический каталог 12 профилей + aliases 38 старых id (по GPT-Pro спеке)
- **Текущее состояние:** статус: done; что на проде: body: Текущее состояние:** статус: done; что на проде: нет данных в тикете; что принято/ждёт посадки: нет данных в тикете; что в работе: нет данных в тикете; что принято/ждёт посадки: body: Текущее состояние:** статус: done; что на проде: нет данных в тикете; что принято/ждёт посадки: нет данных в тикете; что в работе: нет данных в тикете; что в работе: body: Текущее состояние:** статус: done; что на проде: нет данных в тикете; что принято/ждёт посадки: нет данных в тикете; что в работе: нет данных в тикете
- **Кто работал:**
- нет данных в тикете
- **Ветки/бандлы/отчёты:**
- body: Ветки/бандлы/отчёты:**
- **KNOWN ISSUES / ТРАБЛШУТИНГ:** симптом → проверка → причина (file:line, если есть) → лечение
- body: KNOWN ISSUES / ТРАБЛШУТИНГ:** симптом → проверка → причина (file:line, если есть) → лечение
- **Эволюция:**
- ## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Следующий шаг:** см. текущую работу из комментариев: body: Текущее состояние:** статус: done; что на проде: нет данных в тикете; что принято/ждёт посадки: нет данных в тикете; что в работе: нет данных в тикете
Починено в
v4-a50a1ae
Лента
2026-09-06T05:05:01.712Z · coordinator
[06.09 05:05Z координатор] [2026-09-06T05:04Z координатор] БАТАРЕЯ РОЛЕЙ НА ПРОДЕ l113c (0390afc9), run r39prod-l113cfull-20260906, provider anthropic/claude-opus-5, манифест l113c-0390afc9-prod подписан владельцем: 46/50 (прошлый рекорд 42/50 на l97, 41/50 на l107). C2 timeline/window 14/14 (было 4/14) — фикс WEB-505 3bb21db4 подтверждён на проде; C1-4 unsupported-claim ok — фикс WEB-497 a1b3f9fd подтверждён; C4 7/7, C5 9/10, C6 3/3, C9 6/6. FAIL: C1-6-cross-document, C3-1-exclusion-chain, C3-2-method-chain (!weeks_18_19 !reason_maintenance !cites_two_or_more / !flow_meter !accuracy_3pct !throughput_1180), C5-C-non-quantitative (!refuses_or_says_absent). Evidence: laptop roles-prod/evidence/run-l113c-full.log + battery/battery-all.json. Пересев корпуса 04:10Z (700 док). Ловушки прогона: Cloudflare 403 на python-urllib (User-Agent в verify_rolesv10_preflight.py → пересоздать манифест), ledger reservedTotalUsd строкой.
2026-09-06T07:46:12.857Z · coordinator
[06.09 07:46Z координатор] [2026-09-06T07:46Z координатор] ПРИЁМКА 2189-accroleschains (A2, sol xhigh): NO-GO на f00d3639. Принято: цепочечные кейсы C1-6/C3-1/C3-2 0/3 → 3/3, real-route 6/6 на PG, расписка C3 с двумя hop, трёхдокументная цепочка. Блокер: при вопросе, полностью отвеченном seed-документом, entity pass даёт addedChunkIds=[], но evidence bridge всё равно выполняется и притягивает нерелевантный документ окна (compositionalRetrieval.ts:302-352, нет остановки по «нет нового evidence»). → Волна 2203-roleschains2 (A2, luna xhigh) поверх f00d3639: остановка + релевантностный гейт + расписка причин.
2026-09-06T07:59:49.009Z · coordinator
[06.09 07:59Z координатор] [2026-09-06T07:59Z координатор] Волна 2203-roleschains2 (A2, luna xhigh): VERDICT=GO, commit=7663ba59 (поверх f00d3639) — entity-pass без нового chunk не запускает evidence-bridge, bridge-hit через relevance gate, C3 receipt хранит причину остановки и отброшенные документы. Независимая приёмка 2209-accroleschains2 поставлена (sol xhigh). Отчёт: A2 /home/ubuntu/waves/ROLESCHAINS2-REPORT.md.
2026-09-06T08:13:50.549Z · coordinator
[06.09 08:13Z координатор] [2026-09-06T08:13Z координатор] ПРИЁМКА 2209-accroleschains2 (A2, sol xhigh): NO-GO на 7663ba59 по одному дефекту расписки: при исчерпании maxExtraChunks на релевантном hit цикл прерывается до оценки остальных → отброшенный unrelated-bridge не попадает в rejectedDocuments (зависимость от порядка ранжирования). Основной фикс подтверждён (3/3, harness 6/6, real route 6/6). → Волна 2212-roleschains3 (luna high): оценка всех hits до бюджета, детерминированная расписка. Отчёт: A2 /home/ubuntu/waves/ACCROLESCHAINS2-REPORT.md.
2026-09-06T08:23:49.857Z · coordinator
[06.09 08:23Z координатор] [2026-09-06T08:23Z координатор] Волна 2212-roleschains3 (A2, luna high): VERDICT=GO, commit=475f2872 — bridge hits классифицируются целиком до admission в бюджет, отвергнутые и budget-exhausted в C3 receipt. Независимая приёмка 2214-accroleschains3 поставлена (sol xhigh). Отчёт: A2 /home/ubuntu/waves/ROLESCHAINS3-REPORT.md.
2026-09-06T08:50:38.549Z · coordinator
[06.09 08:50Z координатор] [2026-09-06T08:50Z координатор] ПРИЁМКА 2214-accroleschains3 (A2, sol xhigh): VERDICT=GO на 475f2872 — multi-hop с остановкой без нового evidence, relevance gate, детерминированная расписка (оба порядка, budget-exhausted). Кандидат l113e (роли: C1-6/C3-1/C3-2). Слияние social callbacks 11148078 (2225 GO) → приёмка 2227. WEB-538 fence 5895c8d0 (2223 GO) → приёмка 2228 (M4).
2026-09-06T10:21:12.165Z · coordinator
[06.09 10:21Z координатор] [2026-09-06T10:21Z координатор] ПОСАЖЕНО: ПРОД = l113e 65ff9060 (flip 10:17:49Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; 3 миграции применены (WEB-538 email idempotency, WEB-555 daily reward receipt, WEB-542 oauth atomic generation); hetzbk l113e-65ff9060, Pi standby → l113e). Состав (15 коммитов над l113d): social OAuth callback guard + origin validator (3391848c, 11148078), роли — многошаговые цепочки v3 (f00d3639, 7663ba59, 475f2872 → C1-6/C3-1/C3-2), WEB-553 clipper owner state (ba3acc4b), WEB-555 daily reward (d7e486e9), WEB-538 email delivery idempotency+fence (df0399da, 5895c8d0), WEB-542 OAuth atomic generation (3f281a9b, e04fd90d, 1d87f676), P19 манифест 187, api-perimeter baseline. Откат = l113d 4c73d845 (RUN l113d-4c73d845, REL arm64-l113d-20260906T085722Z). Дальше: батарея ролей на l113e; l113f = WEB-560 merge 8dd1682e, WEB-541 3fd18f21, WEB-545 c4373797, WEB-509 9ad8335c + ждущие приёмок.
2026-09-06T10:27:46.107Z · coordinator
[06.09 10:27Z координатор] [2026-09-06T10:27Z координатор] Роли C5-C круг 5: автор 2247 сдал 3ad54814 (GO, 175 строк) — negation scope только на предикат claim + TS2339 закрыт. Приёмка 2265-accrolesrefusal5 (A2, sol xhigh) с RED-набором приёмки 2235 как критерием. Батарея ролей на проде l113e (50 кейсов) запущена 10:41Z.
2026-09-06T10:36:28.056Z · coordinator
[06.09 10:36Z координатор] [2026-09-06T10:36Z координатор] БАТАРЕЯ РОЛЕЙ НА ПРОДЕ l113e 65ff9060 (run r39prod-l113efull-20260906, 10:35Z): 45/50 — C1 5/7, C2 14/14, C3 1/3, C4 7/7, C5 9/10, C6 3/3, C9 6/6. Провалы: C1-2-mutated-number (НОВЫЙ vs l113c), C1-6-cross-document, C3-1-exclusion-chain, C3-2-method-chain (multi-hop v3 475f2872 принят на моках, на живом проде цепочки по-прежнему падают → fixture-green≠польза), C5-C-non-quantitative (круг 5 3ad54814 в приёмке 2265). Evidence: /private/tmp/claude-501/-Users-annakorin/6629976e-83de-4c99-b805-a10c80046b68/scratchpad/roles-prod/evidence/battery/battery-all.json. Следующий шаг: волна на A2 по ЖИВЫМ ответам прода (вопрос/ответ/цитаты из evidence) для C1-2/C1-6/C3-1/C3-2.
2026-09-06T10:50:59.884Z · coordinator
[06.09 10:50Z координатор] [2026-09-06T10:50Z координатор] БАТАРЕЯ РОЛЕЙ l113e, прогон 2 (r40, 10:49–10:59Z, корпус полностью проиндексирован): 43/50 — C1 5/7, C2 14/14, C3 1/3, C4 5/7, C5 9/10, C6 3/3, C9 6/6. Провалы: C1-6/C3-1/C3-2 (оба прогона: приложение попадает в retrieval — journal council-retrieval-receipt items=10 chars=4615 [cmtpo0qpz…] — но факты «Weeks 18 and 19 / maintenance / flow meter / 1,180» в ответ не доходят → гипотеза: обрезка чанка в контексте или гейт), C4-CROSS-both-bills и C1-2 — ответ «based on general knowledge, not confirmed by your documents» при cites=0 (в прогоне 1 C4 был 7/7 → нестабильный пустой retrieval), C4-RU-3 (уравнения), C5-C (круг 6 идёт). Волна 2278-roleschains-prodevidence (A2, sol xhigh, real PG+pgvector, evidence обоих прогонов + журнал) — разбор по живым ответам, не по фикстурам. Evidence: battery-all-l113e-run{1,2}.json.
2026-09-06T11:09:19.663Z · coordinator
[06.09 11:09Z координатор] [2026-09-06T11:09Z координатор] РАЗБОР ПО ЖИВЫМ ОТВЕТАМ (волна 2278c, claude-opus, черновик): (1) C1-6/C3-1/C3-2 — не обрезка и не reranker: 3 чанка корпуса (brief-0, brief-1, appendix-0 — именно с «Weeks 18 and 19 / flow meter / 1,180») физически невидимы retrieval: в receipts обоих прогонов 57 уникальных chunkId из 60; это QUARANTINE-строки с sourceContentRevision=NULL, скрытые sourceChunkFreshnessSql() (src/lib/rag/sourceReadPolicyServer.ts:68-73) — чанки, чей текст не дословная подстрока источника (legacy splitter склеивал абзацы через 
). Код 65ff9060 уже чинит splitter (46ee733d, chunking.ts:376-430) для НОВЫХ посевов, но корпус прода посеян сеятелем старого дерева (reseed-l105.sh) → стойкие QUARANTINE-строки, которые ничто не обнаруживает и не чинит. (2) «based on general knowledge» при cites=0 — retrieval отдал 10 фрагментов, но claim judge удалил 7/7 заземлённых предложений (removedText содержит верные суммы счетов) → ответ схлопнулся в пустую строку, наружу ушло только уведомление (citationVerificationPresentation.ts:7); run1/run2 разница = недетерминизм судьи. (3) corpus_completeness слеп: indexedSources=0 во всех 44 кейсах (evidenceReceipts.ts:126-137 читает Source.metadata.processing.indexing.status, который processDocument не пишет). Действия: repair-инструмент для QUARANTINE-чанков + пересев/реиндекс фикстуры прод-чанкером; судья не должен удалять supported-предложения / запрет «general knowledge» при непустом корпусе; починить completeness receipt.
2026-09-06T11:31:21.150Z · coordinator
[06.09 11:31Z координатор] [2026-09-06T11:31Z координатор] Волна 2278c (claude-opus) сдала b5389194 (GO): freshness-предикат ушёл из WHERE агрегата здоровья корпуса (inspectSemanticIndex врал isHealthy при потерянных абзацах) → staleProvenanceChunks/sourceIds в SemanticIndexHealth, ремонт-мост до retrieval (≤8 источников/запрос), evidence-гейты не схлопывают заземлённый ответ в «general knowledge». Приёмка 2286-accroleschains (A2, sol xhigh, PG). Для прода (54 728 карантинных строк) отдельно batch-CLI: 2289-quarantine-backfill (A2, luna xhigh). Revive5 51b32e57 сам по себе GO (приёмка 2283), но WEB-499 тест зовёт удалённый __internal API → 2287-web499b. Пост-QA l113e с A1: перимeтр — /api/models/openrouter 500 без сессии, embed/chat|realtime 400 до auth → 2288-perimeter-500; Google/Apple: GET signin → error=Configuration = UnknownAction (метод пробы), проверяю POST с csrf.
2026-09-06T11:33:20.718Z · coordinator
[06.09 11:33Z координатор] [2026-09-06T11:33Z координатор] ПРИНЯТО: роли C5-C круг 6 (2280 ACCROLESREFUSAL6, sol xhigh) = GO 59d4f3ee — детерминированный отказ на прямом отрицании предиката, judge для чужого предиката; RED-наборы 2235/2265 зелёные → кандидат l113f. WEB-508 круг 2 (2281 ACCWEB508B) = GO b93d862f (коммит A 8c76aa7d только infra/sip) → l113f; хост-синк в окне. Фикс большого PDF круг 2: автор 2285 сдал 76dcb114 (GO) → приёмка 2290 (sol, PG).
2026-09-06T11:59:30.392Z · coordinator
[06.09 11:59Z координатор] [2026-09-06T11:59Z координатор] Приёмка 2286 (sol, real PG) = NO-GO b5389194: наблюдаемость карантина (staleProvenanceChunks) и защита от «general knowledge» работают, но ремонт-мост repairSourceBoundChunkOffsets отказывает историческим чанкам старого splitter (repaired=0, refused=4) → hybridSearch их не видит. Круг 2 = 2301-roleschains2 (claude-opus): настоящий ремонт = пересчёт чанков прод-чанкером с переиспользованием embeddings, общий модуль для моста и batch-CLI 2289.
2026-09-06T12:17:04.682Z · coordinator
[06.09 12:17Z координатор] [2026-09-06T12:16Z координатор] ПРИНЯТО: WEB-568 (SEC-046) круг 2 — 2305 ACCWEB568B (M4) = GO faf26ab9 → кандидат l113g. Роли круг 2: автор 2301 (claude-opus) сдал d4e3ea82 (GO) — настоящий ремонт карантина (пересчёт чанков, переиспользование embeddings, общий модуль с batch-CLI) → приёмка 2310-accroleschains2 (A2, sol xhigh, PG, историческая фикстура).
2026-09-06T12:38:33.617Z · coordinator
[06.09 12:38Z координатор] [2026-09-06T12:38Z координатор] ПРИНЯТО: revive-identity 5 + WEB-499 (2308 ACCWEB499B, sol xhigh, PG) = GO 42b61743 → кандидат l113g. WEB-552 (SEC-035) круг 3 (2312 ACCWEB552C, M4) = GO ecca7846 → l113g. Роли круг 2 (2310) = NO-GO d4e3ea82: ремонт функционально верен (repaired=3/refused=0, факты, embeddings переиспользованы), блокер — гонка с конкурентным обновлением Source → круг 3 = 2313-roleschains3 (claude-opus, compare-and-swap по contentRevision + общий модуль с CLI). Backfill-CLI (2304) = NO-GO 81acd297: отказывает историческим Source по contentHash — чинится в 2313 общим модулем.
2026-09-06T12:42:50.348Z · coordinator
[06.09 12:42Z координатор] [2026-09-06T12:42Z координатор] ПОСАЖЕНО: ПРОД = l113f 221e8f39 (flip 12:39:47Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; миграций новых нет (187/192); hetzbk l113f-221e8f39 + env-pack, Pi standby → l113f). Состав (15 коммитов над l113e): роли C5-C детерминированный отказ на прямом отрицании предиката (9fdfd6fe, 86afe601, 3ad54814, 59d4f3ee), WEB-541 SEC-024 retention contract (ebecd7f2, 3fd18f21), WEB-545 SEC-028 lighthouse headers (c4373797), WEB-509 gateway install (9ad8335c, репо-копия), WEB-463 barge-in + VAD env (0d7b50ee, 44ea7cea), WEB-542 rate-limit на client-account-generation (4891645b), WEB-508 SIP reload (8c76aa7d, b93d862f, репо-копия), WEB-506 куки-баннер (fc462e1d), периметр 500/embed (5837dd0f). Откат = l113e 65ff9060 (RUN l113e-65ff9060, REL arm64-l113e-20260906T101257Z). Снято с линии: WEB-560 merge (Prisma при импорте валил сборку → фикс 2309 → l113g). l113g: WEB-550 ed246cae, WEB-531 merge e8c97f1f, WEB-568 faf26ab9, revive5+499 42b61743, WEB-552 ecca7846 + ждущие: big-PDF r3, roles r3, backfill, 560 fix. Хост-синк SIP (508/509/463) — отдельное окно.
2026-09-06T13:05:09.406Z · coordinator
[06.09 13:05Z координатор] [2026-09-06T13:05Z координатор] Роли круг 3: автор 2313 (claude-opus) сдал 9d59aba3 (GO) — compare-and-swap по contentRevision, общий модуль ремонта для моста и batch-CLI → приёмка 2318-accroleschains3 (A2, sol xhigh, PG: фикстура 2286 + гонка 2310 + репро CLI 2304).
2026-09-06T13:28:17.882Z · coordinator
[06.09 13:28Z координатор] [2026-09-06T13:28Z координатор] Роли круг 3 (2318, sol xhigh, PG 16.15) = NO-GO 9d59aba3: функционально принято (фикстура, CAS, общий модуль, SIGKILL/restart), блокер один — SELECT … FOR UPDATE в interactive transaction ждал row lock 12.4 с (>5 с), Prisma timeout не прерывает lock wait → круг 4 = 2321-roleschains4 (claude-opus): SET LOCAL lock_timeout/statement_timeout или NOWAIT/SKIP LOCKED → refused=lock-busy без ожидания.
2026-09-06T13:47:00.399Z · coordinator
[06.09 13:46Z координатор] [2026-09-06T13:46Z координатор] Роли круг 4: автор 2321 (claude-opus) сдал c7e9f946 (GO) — DB-side lock/statement deadline, refused=lock-busy без ожидания → приёмка 2323-accroleschains4 (A2, sol xhigh, PG 16: гонка с row lock 15 с + всё зелёное из 2318 + замеры + runbook для прода).
2026-09-06T14:13:49.485Z · coordinator
[06.09 14:13Z координатор] [2026-09-06T14:13Z координатор] Роли круг 4 (2323, PG 16) = NO-GO c7e9f946: lock-busy закрыт (6–10 мс при удержанном FOR UPDATE, 0 lock-wait), но на 10 000 чанков publication transaction 5.066 с (>5 с, INSERT DocumentChunk) → круг 5 = 2332-roleschains5 (claude-opus): батчи ≤1000 строк в коротких tx + атомарное переключение ревизии, идемпотентное возобновление. Realtime повтор (2329): session-start с пустым телом даёт sessionId=null → session-turn 400 missing_session_id (форма пробы; браузерный клиент передаёт параметры) — код-фикс 2328 (redis) остаётся; OAuth Google/Apple POST с csrf = 302 на провайдера (PASS); paid chat PASS (/bin/zsh.00047). Сборка l113h (83683d48: WEB-560 + build-fix, WEB-507, revive --new-attempt) запущена.
2026-09-06T14:26:31.313Z · coordinator
[06.09 14:26Z координатор] [2026-09-06T14:26Z координатор] Авторы сдали GO → приёмки: C4-RU-3/структура списков в claim-split 11f3cdd5 (2324; корень: judge удалял «Шаги:\n1.», оставляя сиротский «2.»; чекер батареи принимал ordinal за разряд) → 2333 (A2); realtime-сессии в redis 3d63dfd9 (2328) → 2334 (A2, PG+redis); Astra блок 19: extraction wiring c0e3c353 (WEB-521/522) → 2335 (M4), generated config mode cd9cee08 (WEB-547/548) → 2336 (M4). SIP fix plan (2322) = NO-GO по замыслу (хост не трогали): корень провала окна — Asterisk 20.19: «No such command pjsip reload», CLI вернул rc 0, helper счёл reload успешным; v2 скрипты в /home/ubuntu/waves/siphostsync-v2/ — новое окно только после стендовой проверки с реальным Asterisk.
2026-09-06T14:38:35.841Z · coordinator
[06.09 14:38Z координатор] [2026-09-06T14:38Z координатор] ПРИНЯТО: C4-RU-3 / структура списков в claim-split — 2333 ACCC4RU3 (sol) = GO 11f3cdd5 → кандидат l113i (l113h уже в сборке). Чекер батареи (внешний kit): ordinal «2.» принимался за разряд — исправлю в kit перед следующей батареей.
2026-09-06T15:05:26.024Z · coordinator
[06.09 15:05Z координатор] [2026-09-06T15:05Z координатор] Роли круг 5 (2332, claude-opus) = NO-GO по измеренному структурному пределу: батчи staging + единственное переключение реализованы (max tx 1.056 с, resume без дублей), но переключение привязки на стороне чанков стоит ~2.4 мс/строка (широкая строка с embedding): 10 000 строк = 22–30 с в одной tx, разбить нельзя (partial pages). Решение: (а) круг 5b = admission-порог ≤2000 чанков (переключение ≤5 с) — большинство карантинных документов чинится сейчас, крупные = refused=too-large; (б) круг 6 = поколение чанков (Source.currentChunkGeneration + DocumentChunk.generation, публикация = одна строка Source) — additive миграция, O(1) переключение. Обе волны на claude-opus (2350, 2351).
2026-09-06T23:52:21.437Z · astra-security
block22-relay9-adjudication-web-104 — 2026-09-06T23:52:21.437064+00:00 / IST=2026-09-07T05:22:21.437074+05:30

BLOCK22 RELAY-9: вердикты по доставленному пакету. l113j 46393080 source bundle проверен локально; runtime и live — по расписке. Численные тесты ниже выполнены авторами доставленных отчётов, родитель их не перезапускал.

QUARANTINEADMISSIONPLAN-REPORT.md — новый отчёт.
Вердикт: NO-GO to apply until accepted 5b plan and calibration exist. The read-only sizing/queue plan is useful, but it is not authorization to repair production data and not proof that embeddings can all be reused.
Commit/base: No code commit. Report requires accepted/deployed 5b after l113j; l113j receipt says ROLES5BREBASE c010b7de and DOCENGINECOMPLETENESSR2 e3558f48 were NOT_DEPLOYED in 46393080 and moved to l113k. / Frozen histogram.csv SHA-256 e41057f4e13807f041b54a253e324913ef99285d0bd5028db2359bfa193498c7. Live l113h was explicitly not to be used.
Доказательства: No DB/write/provider/build tests. Deterministic CSV validation counted 1245 sources, 54748 chunks, 54728 quarantined; default threshold 250 admits 1229 sources/32926 chunks and refuses 16 sources/21802 chunks.
Anchors: /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:7; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:37; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:50; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:69; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:84; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:198; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md:244; /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/L113J-RELEASE-RECEIPT.md:31
KNOWN ISSUES / ТРАБЛШУТИНГ: Need accepted 5b CLI/help/PLAN schema, ROLES5B calibration ms/row, fresh exact-batch dry-run, embeddingsComputed=0 proof, source-list checksum, explicit write permission, and post-apply revision/hash/retrieval oracle.
Действие: Hold apply. Use the plan only after l113k/roles/docengine acceptance and a fresh dry-run PLAN. Keep phase order primary-owner first, then other owners.
Report: /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a1/QUARANTINEADMISSIONPLAN-REPORT.md
SHA256: 1c16a0c963c011248e9b8a2e652e6bbc22e423a2af8ca95e4f5d8a24403fb6d2

ROLES5BREBASE-REPORT.md — повтор ранее полученных байтов, не новая приёмка.
Вердикт: Author GO for roles/quarantine 5b rebase onto l113i; independently accepted by ACCROLES5BREBASE. Not deployed in l113j.
Commit/base: c010b7de66a28e97abd7fb757ad38dcfa89de98b / 18f130938b8d2a8f4376811651ad21beb4e28838
Доказательства: roleschains2 real PG: 1/1 pass; roleschains3/4/visibility/bounded/CLI/groundedAbsence: 44/44 pass; roleschains5 batched publication: 3/3 pass; roles5brebase admission negatives A-E: 5/5 pass; P19 and API perimeter exit 0; check-ai-import-boundary, check-client-server-boundary, cron-auth exit 0; scoped roleschains2 and prodevidence tsc exit 0
Anchors: src/lib/rag/quarantineRepair.ts; src/lib/rag/staleChunkRecovery.ts; src/lib/rag/sourceChunkWriter.ts; src/lib/rag/vectorStore.ts; scripts/reindex-quarantined-chunks.ts; src/lib/sources/sourceReadGateway.ts
KNOWN ISSUES / ТРАБЛШУТИНГ: 5b pins default repair threshold at 250. Later roles6 intentionally raises the effective default to 100000, making 5b negatives A/B obsolete unless parameterized. Not in l113j.
Действие: Treat as lineage base for roles6/6c accepted wave; do not replay 5b independently after roles6 decision.
Report: /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a2/ROLES5BREBASE-REPORT.md
SHA256: 445619e198751f4f0832e5d265c1c443423f4f29c4d1b6c95e3dacf95831104d

ACCROLES5BREBASE-REPORT.md — новый отчёт.
Вердикт: Independent GO for roles5b rebase; confirms semantics and exposes two non-blocking operational issues. Not deployed in l113j.
Commit/base: c010b7de66a28e97abd7fb757ad38dcfa89de98b / 18f130938b8d2a8f4376811651ad21beb4e28838
Доказательства: independent N1-N8: 7/7 pass; chain regression suite: 43/43 pass; P19 check-migration-compatibility, api perimeter, AI/client boundary, cron auth exit 0; scoped tsc roleschains2 and prodevidence exit 0; corrected dry-run --in-process-repair command rc 0 on stand
Anchors: src/app/api/chat-global/route.ts:3086; src/app/api/chat-global/route.ts:3101; scripts/reindex-quarantined-chunks.ts:1637; src/lib/rag/quarantineRepair.ts; src/lib/rag/sourceReadPolicyServer.ts
KNOWN ISSUES / ТРАБЛШУТИНГ: F1 duplicate enforceGroundedAbsenceAnswer call is behavior-neutral but hot-path waste. F2 author dry-run command omitted --in-process-repair and --conditions=react-server. Localization key for no-supporting-evidence missing in base. Later roles6 threshold change supersedes 250-specific A/B negatives.
Действие: Use corrected runbook during l113k/quarantine repair; fold duplicate-call cleanup only if touched by integration, not as a new product brief.
Report: /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a2/ACCROLES5BREBASE-REPORT.md
SHA256: 4996fe6e2bed8fa773407840fa8605f9f8faa30835f4539c2f3f34676c4861e5

ACCROLESCHAINS6C-REPORT.md — повтор ранее полученных байтов, не новая приёмка.
Вердикт: Independent GO with conditions for original 6c candidate; superseded by ROLES6CREBASE replay because original chain did not cleanly apply to production l113i.
Commit/base: 55cc6015504fdebcc6a4cb4079e1519a693dff00 / 65ff9060a9987a12c8d0a34bde0ab649e8dccccd; parent 419768e280ea676148c57466f48b19dd4737e147; production comparison 18f130938b8d2a8f4376811651ad21beb4e28838
Доказательства: independent 6c battery parent 2 pass / 7 fail -> candidate 9 pass / 0 fail; prisma migrate deploy clean PG: candidate 190 migrations, parent 189; check-migration-compatibility exit 0; tsconfig.roleschains6.json exit 0; expanded tsconfig.roleschains6c exit 2 with byte-identical parent errors
Anchors: DocumentChunk generation/ordinal constraints; src/lib/sources/sourceReadGateway.ts; scripts/reindex-quarantined-chunks.ts:62; scripts/chunk-revision-report.ts:328; readProtectedChunkExportPage
KNOWN ISSUES / ТРАБЛШУТИНГ: Original chain conflicts on production replay. Non-blocking but real follow-ups: dead QUARANTINE_PREDICATE, misleading rollbackSafe/dual manifest wording, chunk-revision-report MIN/MAX physical index, export pagination by id, and unmeasured staging throughput.
Действие: Original 55cc6015 has independent GO with conditions. Current replay 98f2055a awaits independent 2494; use the replay lineage through c010b7de only after that acceptance, not direct old-chain replay.
Report: /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a2/ACCROLESCHAINS6C-REPORT.md
SHA256: 6d2916d0edeb84f0faae02fd40c34a6908e0bbe3f75a6c2f04d3254021853ffe

ROLES6CREBASE-REPORT.md — новый отчёт.
Вердикт: AUTHOR GO WITH CONDITIONS; independent acceptance 2494 pending; not deployed on l113j
Commit/base: 98f2055ac7d88ca18bcd893403b9fe7a724cf28e / 18f130938b8d2a8f4376811651ad21beb4e28838; rebase_base c010b7de66a28e97abd7fb757ad38dcfa89de98b
Доказательства: roleschains6cRealPg: 9/9 pass; roleschains6GenerationPublicationRealPg: 1 pass / 1 fail, same fail on original 55cc6015 control; roles5brebaseAdmissionRegressionRealPg: 3 pass / 2 fail A/B due intentional threshold change; check-migration-compatibility exit 0, 192 migrations; prisma migrate deploy clean DBs 192/192; check-api-perimeter exit 0; scoped roleschains6 and roleschains2 tsc exit 0; roleschains6c tsc exit 2 inherited from original
Anchors: src/lib/rag/quarantineRepair.ts; prisma/migration-compatibility-manifest.json; src/lib/sources/sourceReadGateway.ts; src/app/noteGraphActions.ts; scripts/chunk-revision-report.ts
KNOWN ISSUES / ТРАБЛШУТИНГ: True product decision: 5b default threshold 250 is superseded by roles6 100000 after O(1) source generation switch; 5b A/B negatives must be rewritten with explicit threshold if the higher default is accepted. Inherited failures: 10000-chunk staging timeout and roleschains6c noteGraphActions typing debt.
Действие: Existing 2494 must independently adjudicate replay 18f13093 → c010b7de → 98f2055a, including threshold 250 → 100000, preserved semantics, inherited failures and calibration. 2490 owns integration; no independent GO inferred from queue assignment.
Report: /Users/poolpooly/audit/evidence/block22-relay9/intake-originals/a2/ROLES6CREBASE-REPORT.md
SHA256: d21e08d187088c587ca6acba8aa9bf6ef21c2fe2f115bee131a2aeb983444e8e

КАРТА ДОКУМЕНТОВ: /Users/poolpooly/audit/reports/block22-relay9-update.md; /Users/poolpooly/audit/evidence/block22/ledger46.json; /Users/poolpooly/audit/evidence/block22-relay9/adjudications.json. Новые брифы 2497/2498 — ROUTING: A2; существующие coordinator waves не дублируются. Правила обогащения: WEB-449.
2026-09-07T00:48:32.237Z · coordinator
[07.09 00:48Z координатор] ПРОД-РЕПЕЙР КАРАНТИНА на l113k (координатор, 00:46Z): runner /home/ubuntu/run-quarantine-dryrun.sh (env по unit-контракту nc-a1, дерево wt-l113k-migrate). (1) Fixture-owner dry-run rc 0: PLAN 3 чанка/2 источника, refused 0. (2) Fixture APPLY (--apply --confirm-owner): failed=2 — `in-process-repair-threw: Error: headers was called outside a request scope` → CLI-режим репейра зовёт request-scoped API Next → волна 2509 QUARANTINEREPAIRCLI (sol xhigh). (3) Owner-first dry-run для _@wool2.online (cmmqphkdw…, 37 788 карантинных чанков): PLAN selectedChunks=26614 selectedDocuments=845 plannedChunks=29 refusedSources=842 reason=source-body-unavailable (google-drive:* без сохранённого body; чанки есть) → волна 2510 QUARANTINEDRIVEADMISSION (claude-opus xhigh): стратегия adopt-existing (ревизия по существующим чанкам без re-embedding). fandyy2023@gmail.com — 0 карантина. Evidence: A2 inputs/quarantine/prod-repair-evidence-20260907.md.
2026-09-07T01:12:25.786Z · coordinator
[07.09 01:12Z координатор] КОРЕНЬ «ПУСТЫХ» GOOGLE DRIVE-ИСТОЧНИКОВ (волна 2510 QUARANTINEDRIVEADMISSION, claude-opus xhigh, 01:06Z): adopt-existing для 842 body-less Drive-источников владельца физически невозможен (Source.contentHash NULL → предикат видимости sourceChunkFreshnessSql никогда TRUE; guard source_content_hash_pair_guard запрещает hash без content; синтез тела из чанков отклонён §3). Механизм (§1, активен до сих пор): сервер индексирует Drive (google/index route.ts:233-266 → чанки), но тело Source берётся из КЛИЕНТСКОГО sync payload (sync/route.ts:1121-1146 deleteMany+createMany) и появляется только после открытия документа; следующий sync снова обнуляет тело; миграция web447 backfill пропустила их. Реализовано: strategy adopt-existing (CLI --strategy) для доказуемой популяции (0 из 26 614 у владельца — корректно). Владелец (01:09Z): «тело подгружается только после клика — конфузит; нужен индикатор/правильная модель» → волна 2517 DRIVEBODYSERVERSIDE (opus xhigh): серверное тело/хеш при индексации, sync не затирает, индикатор состояния, серверный ре-индекс 842 источников.
2026-09-07T01:36:15.776Z · coordinator
[07.09 01:36Z координатор] ТЕЛО DRIVE-ИСТОЧНИКОВ НА СЕРВЕРЕ (волна 2517 DRIVEBODYSERVERSIDE, claude-opus xhigh, 01:34Z): причина «пустых» Drive-источников — не гонка и не только sync: ПИСАТЕЛЯ тела на сервере не было (индексация создавала чанки, Source.content/contentHash никогда не публиковались) + /api/sync затирал тело пустым клиентским + contentRevision не переживал deleteMany+createMany. Фиксы (commit 3dd4ed6d7 над d00b8f35, bundle sha a4918849…, миграции НЕ нужны): (1) тело+хеш публикуются ДО чанкования одним стейтментом (guard двигает contentRevision) → чанки видимы сразу без клика; (2) sync не затирает серверное тело integration-источников; (3) contentRevision переживает пересоздание Source; маркер состояния {state:indexing|indexed|body-missing} в Source.metadata для UI; новый scripts/reindex-drive-sources.ts (dry-run по умолчанию, --owner/--limit/--max-usd/checkpoint, budget-stop). Тест driveBodyServerSideRealPg 9 кейсов на реальном PG. Оценка ре-индекса владельца: 842 источника / 26 614 чанков ≈ $0.133. Приёмка 2524 ACCDRIVEBODYSERVERSIDE (M4 sol xhigh) запущена → l113m → прод ре-индекс owner-scoped.
2026-09-07T05:33:42.974Z · coordinator
[07.09 05:33Z координатор] 🛬 ПОСАЖЕН l113l (da6799b2c7acd2d7da08ce4eeb36c55ee9ce8726) на прод 07.09 05:30:25Z (nc-a1) / 05:30:33Z (nc-a1-b) без простоя; edge ×8 200, paid enforce_ready, /login 200, webhook POST 401, attestation-ошибок 0. Артефакт me2-standalone-linux-arm64-da6799b2c-20260907T014612Z sha 6a49a417…, RUN l113l-da6799b2; миграций новых нет. Состав (L113LPREP2 GO): OVERDRAFTONLYFUNDED cd4684cb (WEB-521 «Б», ACC GO), LANDINGREWRITEFIX e5391fea (WEB-545, ACC GO; PUBLIC_LANDING_ENABLED=true с посадкой), C4RU3CITATIONPOOL+R2 (WEB-099, ACC GO), DOCENGINEPANEL 4af7884c ×3 (WEB-086, ACC GO), QUARANTINEREPAIRCLI f4eb5f85 (ACC GO на M4), regen activation manifest. Откат = l113k d00b8f35. Задержка посадки: артефакт был готов 01:46Z, координатор был разлогинен 01:40–05:25Z. Сразу после: корень «/» с включённым лендингом дал 403 (origin-lock отверг внутренний host localhost:<port> rewrite) → APP_ALLOWED_HOSTS += localhost:3010/3011/3012 + rolling restart.
2026-09-07T05:36:05.962Z · coordinator
[07.09 05:36Z координатор] ПРИЁМКА 2524 ACCDRIVEBODYSERVERSIDE (M4 sol xhigh, 01:49Z) = NO-GO для посадки 3dd4ed6d7 и категорически NO-GO для прод reindex --apply: happy path исправен (readableChunks 0→7, sync не затирает, contentRevision переживает пересоздание, чужой пользователь ничего не получает), но 6 P1: processDocument игнорирует published:false после tombstone; нет generation/lease между индексаторами и sync; Google principal не связан с владельцем notebook; re-index декодирует PDF/office как UTF-8 в обход extractors и size guards; ранняя публикация + ошибка → source невыбираем, DTO врёт indexed; checkpoint-бюджет не hard и «сразу stop». Круг 2 — волна 2530 DRIVEBODYSERVERSIDER2 (claude-opus xhigh).
2026-09-07T05:43:05.462Z · coordinator
[07.09 05:43Z координатор] ПРИЁМКА 2527 ACCPENDINGINDEXANSWER (claude-opus, 05:40Z) = NO-GO: контракт pending→уведомление / ready→ответ подтверждён, но источник status=done с частичным карантином (visible<total) классифицируется как pending → ложное «документ ещё индексируется (0 из 1)», citations=[], без retrieval — регрессия обычного пути (на l113k та же фикстура отвечает ORBIT-42 [1]). Фикс в одной функции → круг 2 волна 2532 PENDINGINDEXANSWERR2 (sol): pending только без видимых чанков и незавершённой индексации; degraded = ответ по видимым + receipt.
2026-09-07T11:40:32.988Z ·
ЭВОЛЮЦИЯ ЗА 12 Ч (гигиена 2609, 11:25Z 07.09)

ХРОНОЛОГИЯ КРУГОВ
- волна 2517 → `d00b8f35f1699d9372616f6230c51f1e2b73c0d1` → VERDICT — **WEB-086/WEB-099/WEB-104 — Drive-источники пустые, пока не кликнешь документ.** Источник: `A2 waves/DRIVEBODYSERVERSIDE-REPORT.md`.
- Линии посадки: l113j 22:56Z → l113k 00:41Z → l113l 05:30Z → l113m 06:33Z → l113n 07:48Z → l113o 09:35Z → l113p 10:21:43Z. Текущий PROD: l113p `1c850d92876757812eab9ffa7f381bcea95aad86`; общий verify — green по release receipt.

ДЛЯ НУЛЕВОГО АГЕНТА
- Board done; текущая линия l113p `1c850d92876757812eab9ffa7f381bcea95aad86`. Проверенные SHA: `d00b8f35f1699d9372616f6230c51f1e2b73c0d1`=предок. Новые отчёты не требуют переоткрытия при сохранении указанной scope-диспозиции.
- Следующий шаг / владелец: Нового product шага из выбранных отчётов нет; остаточные evidence/registry действия ведутся родительским эпиком.

KNOWN ISSUES / ТРАБЛШУТИНГ
- Дельта без домысла: **WEB-086/WEB-099/WEB-104 — Drive-источники пустые, пока не кликнешь документ.** Проверка/причина привязаны к отчётам выше; anchors: `src/lib/ingest/integrationSourceAdmission.ts:148-172`, `src/lib/rag/sourceChunkWriter.ts:552-611`, `src/lib/rag/sourceReadPolicyServer.ts:123-128`, `src/lib/documents/processDocumentRuntime.ts:337-370`. Лечение — только указанное в report disposition; отсутствующий live/receipt не объявляется продуктовой регрессией.

СВЯЗИ / ИСТОЧНИКИ
- Release: `M4 waves/L113P-RELEASE-RECEIPT.md`; координаторский срез: `M4 waves/OPS-STATUS-HEAD-1120.md`; точные отчёты перечислены в хронологии/KNOWN ISSUES.
- Если сегодняшняя карточка уже содержит более ранний coordinator-комментарий с тем же фактом, эта запись является только дельтой 2609 и не отменяет тот trail.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-104","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-06T15:28:38.656Z