WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-474 · Дефект · — · web

Судья цитат (citation entailment judge) никогда не выполняется на проде: replay-конфликт биллинга (тот же logicalActionKey, что у ответа) → «no_judgments_returned» → claim enforcement режет верные цитаты; ~6 провалов батареи ролей

Закрыт P1 · важно ведёт: Fable
Суть
Факт (прод l90 26da36faba, батарея r30 02.09 11:08–11:14 A1; то же на l89 r29): судья цитат (citation entailment judge, src/app/actions.ts maybeApplyCitationEntailmentJudge) НИКОГДА не доходит до вендора. Журнал nc-a1 за 24 ч: 2701 «[citationJudge] skipped reason: no_judgments_returned», 0 «verdict». TerminalSpendEvent за 90 мин: web_rag_chat/chat.global.answer = 43, web_rag_chat_claim_judge = 43, web_rag_chat_citation_judge = 0. SpendActionReplayReceipt: llm:web_rag_chat COMPLETE 87 (= ответы + claim-judge), судьи цитат нет.

Корень (код l90): судья цитат вызывается через MeteredAIProvider.chat с billing {requestId: chatBilling.requestId, logicalActionKey: chatBilling.logicalActionKey} — тот же logicalActionId, что у основного ответа. prepareLLMBilling → claimLlmActionReplay (src/lib/billing/llmActionReplay.ts:137): прежняя запись той же логической операции с другим requestHash → {kind:'conflict'} → receipt degraded 'idempotency_conflict' с userMessage → MeteredAIProvider возвращает {content: userMessage} (проза) вместо throw → parseCitationEntailmentJudgments не находит judgments → annotate «no_judgments_returned». Claim-judge (actions.ts:3536) это обходит: logicalActionKey = `${parent}.${CLAIM_JUDGE_LOGICAL_ACTION_SUFFIX}` («child logical key prevents replay conflicts with the answer call») — судье цитат такого суффикса не дали. Аналогичный вызов в src/app/api/chat-global/route.ts:2585 (kind web_rag_chat_citation_judge) — проверить тем же способом.

Проверка вне приложения (A1, ключ прода, не печатался): buildCitationEntailmentJudgeMessages + buildOpenAIChatCompletionParams (gpt-5.4-mini, max_completion_tokens 1200) → HTTP 200, finish stop, JSON {"judgments":[…]} парсится (2/2 supported). Модель и парсер исправны; проблема — биллинговая идентичность.

Следствие: все цитаты уходят с pass=null / unverified; claim enforcement (strictCitationEnforcement) режет и правильные утверждения и цитаты (например C1-5: удалена единственная фраза, остался обрывок «” [1]»; C4-CROSS: снята цитата второго счёта → cites_two_or_more=false; C1-2: «не могу подтвердить 63» вырезано и ответ формально «упоминает 63»). В батарее ролей это минимум 6 из 9 провалов на l90 (C1-2, C1-5, C1-6, C4-CROSS, C5-4, C5-C); хвосты l89tails ничего не дали, потому что чинили не тот слой (память fix-one-layer-is-not-fix-the-feature).

Класс: тихая деградация вместо ошибки (rule10): MeteredAIProvider возвращает прозу с billing.status='degraded', а потребители парсят content, не глядя на billing. Третья находка этого класса → менять устройство: (а) судья цитат — child logicalActionKey (суффикс, как у claim-judge) и свой callsiteId; (б) maybeApplyCitationEntailmentJudge: если response.billing?.status==='degraded' → skip reason `billing_degraded:<reason>` + warn, не «no_judgments_returned»; (в) общий guard: потребители «служебных» вызовов (judge/claim/rerank/translate) обязаны проверять billing.status; (г) тест-негатив: replay conflict → skip reason billing_degraded, и тест, что ключ судьи цитат ≠ ключа ответа.

Приёмка: на проде после посадки — journal «[citationJudge] verdict» > 0, TerminalSpendEvent callsite web_rag_chat_citation_judge > 0, delivered_citations.pass не null в батарее; батарея ролей C1/C4/C5 — ожидаемо ≥ +4 кейса.

Ссылки: батарея r30prod-l90full-20260902 (scratchpad roles-prod/evidence/battery/battery-all.json), OPS-STATUS-LIVE.md 02.09 11:25; связанные: WEB-138 (skip reason), WEB-267 (cross-doc judge), WEB-461/468 (учёт), эпик ролей R918.

## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** Судья цитат (citation entailment judge) никогда не выполняется на проде: replay-конфликт биллинга (тот же logicalActionKey, что у ответа) → «nojudgmentsreturned» → claim enforcement режет верные цитаты; ~6 провалов батареи ролей
- **Текущее состояние:** статус: done; Факт (прод l90 26da36faba, батарея r30 02.09 11:08–11:14 A1; то же на l89 r29): судья цитат (citation entailment judge, src/app/actions.ts maybeApplyCitationEntailmentJudge) НИКОГДА не доходит до вендора. Журнал nc-a1 за 24 ч: 2701 «[citationJudge] skipped reason: nojudgmentsreturned», 0 «verdict… | Корень (код l90): судья цитат вызывается через MeteredAIProvider.chat с billing {requestId: chatBilling.requestId, logicalActionKey: chatBilling.logicalActionKey} — тот же logicalActionId, что у основного ответа. prepareLLMBilling → claimLlmActionReplay (src/lib/billing/llmActionReplay.ts:137): п… | Проверка вне приложения (A1, ключ прода, не печатался): buildCitationEntailmentJudgeMessages + buildOpenAIChatCompletionParams (gpt-5.4-mini, maxcompletiontokens 1200) → HTTP 200, finish stop, JSON {"judgments":[…]} парсится (2/2 supported). Модель и парсер исправны; проблема — биллинговая иденти… | Следствие: все цитаты уходят с pass=null / unverified; claim enforcement (strictCitationEnforcement) режет и правильные утверждения и цитаты (например C1-5: удалена единственная фраза, остался обрывок «” [1]»; C4-CROSS: снята цитата второго счёта → citestwoormore=false; C1-2: «не могу подтвердить… | Приёмка: на проде после посадки — journal «[citationJudge] verdict» 0, TerminalSpendEvent callsite webragchatcitationjudge 0, deliveredcitations.pass не null в батарее; батарея ролей C1/C4/C5 — ожидаемо ≥ +4 кейса. | Ссылки: батарея r30prod-l90full-20260902 (scratchpad roles-prod/evidence/battery/battery-all.json), OPS-STATUS-LIVE.md 02.09 11:25; связанные: WEB-138 (skip reason), WEB-267 (cross-doc judge), WEB-461/468 (учёт), эпик ролей R918. | [A1 12:00 Фабл] Волна 1197-web474citjudge (M4) сдана: коммит 86bd1e72a08127edbbd53b926daf4ab239f414aa (ветка web474citjudge-1197). Суть: CITATIONJUDGELOGICALACTIONSUFFIX=citationjudge + callsite webragchatcitationjudge в src/lib/billing/chatCallsites.ts; оба вызова (actions.ts ~7245, chat-global/… | [A1 12:25 Фабл] Приёмка 1200-accweb474citjudge (M4, дерево от 86bd1e72): GO. Доказано: child-ключ <parent.citationjudge + callsite webragchatcitationjudge в обоих местах; негатив degraded → billingdegraded:<reason, pass=null, judgeApplied=false, warn; нормальный JSON → verdict; пустой ответ → noj…
- **Кто работал:**
- 2026-09-02T11:58:46.923Z — Fable — [A1 12:00 Фабл] Волна 1197-web474citjudge (M4) сдана: коммит 86bd1e72a08127edbbd53b926daf4ab239f414aa (ветка web474citjudge-1197). Суть: CITATIONJUDGELOGICALACTIONSUFFIX=citationjudge + callsite webragchatcitationjudge в
- 2026-09-02T12:21:54.452Z — Fable — [A1 12:25 Фабл] Приёмка 1200-accweb474citjudge (M4, дерево от 86bd1e72): GO. Доказано: child-ключ <parent.citationjudge + callsite webragchatcitationjudge в обоих местах; негатив degraded → billingdegraded:<reason, pass=
- 2026-09-02T14:12:25.896Z — Fable — [A1 14:12 Фабл] ПОСАЖЕНО l91 на прод A1: release arm64-l91-20260902T140416Z, run l91-9ad68bc2, sourceCommit 9ad68bc261c833e792bc17523245975e15f48612, артефакт sha 96b3466b…dc3f; ready TRUE (boot/database/release/drain ok
- 2026-09-02T14:25:03.332Z — Fable — [A1 14:27 Фабл] ПОДТВЕРЖДЕНО НА ПРОДЕ l91: journal nc-a1 с 14:10 — [citationJudge] verdict = 249, skipped = 0 (на l90 за сутки было 0 verdict / 2701 skipped). Батарея C1 r31b: C1-2 и C1-5 (ранее резались claim enforcemen
- 2026-09-04T22:50:54.781Z — координатор — Село на прод в l105 (1185ca257, 22:33Z 04.09): 4f11425e1 fix(WEB-474) close temporal citation delivery bypass (C2WINDOW5, приёмка круга 5 GO). Шов с a09df7eed (chat-global/route.ts) слился автоматически, проверен 50/50 т
- 2026-09-04T23:31:46.893Z — координатор — Пост-QA l105 на живом проде (1869) — GO по 4f11425e1 (C2WINDOW5): A/B одним вопросом на одном корпусе под QA-сессией — без роли 200, 3 цитаты, claimEnforcement.status=verified; с roleId=timeline (temporal-окно) цитата из
- 2026-09-05T01:37:16.341Z — координатор — ROLESR7 (1884): гипотеза, что C2WINDOW5 / enforceRoleTemporalCitationDelivery режет цитаты в не-temporal кейсах, проверена и ОПРОВЕРГНУТА — тот же класс coverage=0 + counts.removed0 воспроизводится независимо от temporal
- 2026-09-05T01:39:28.480Z — координатор — KNOWN ISSUES / ТРАБЛШУТИНГ (по требованию владельца 05.09): документ ~/Projects/nc-agent-ops/board/specs/ROLES-KNOWN-ISSUES.md — как за 2 минуты отличить класс поломки цитат по отпечатку evidence (corpus 58/58 + citation
- **Ветки/бандлы/отчёты:** /home/ubuntu/waves/L105POSTQA-REPORT.md., ~/Projects/nc-agent-ops/board/specs/ROLES-KNOWN-ISSUES.md; sha: 26da36faba, 20260902, 86bd1e72a08127edbbd53b926daf4ab239f414aa, 0dba7368, fcf5d933, 86bd1e72a0, 86bd1e72, 9ad68bc2
- **KNOWN ISSUES / ТРАБЛШУТИНГ:**
- Корень (код l90): судья цитат вызывается через MeteredAIProvider.chat с billing {requestId: chatBilling.requestId, logicalActionKey: chatBilling.logicalActionKey} — тот же logicalActionId, что у основного ответа. prepareLLMBilling → claimLlmActionReplay (src/lib/billing/llmActionReplay.ts:137): п…
- Проверка вне приложения (A1, ключ прода, не печатался): buildCitationEntailmentJudgeMessages + buildOpenAIChatCompletionParams (gpt-5.4-mini, maxcompletiontokens 1200) → HTTP 200, finish stop, JSON {"judgments":[…]} парсится (2/2 supported). Модель и парсер исправны; проблема — биллинговая иденти…
- Следствие: все цитаты уходят с pass=null / unverified; claim enforcement (strictCitationEnforcement) режет и правильные утверждения и цитаты (например C1-5: удалена единственная фраза, остался обрывок «” [1]»; C4-CROSS: снята цитата второго счёта → citestwoormore=false; C1-2: «не могу подтвердить…
- Класс: тихая деградация вместо ошибки (rule10): MeteredAIProvider возвращает прозу с billing.status='degraded', а потребители парсят content, не глядя на billing. Третья находка этого класса → менять устройство: (а) судья цитат — child logicalActionKey (суффикс, как у claim-judge) и свой callsite…
- [A1 12:00 Фабл] Волна 1197-web474citjudge (M4) сдана: коммит 86bd1e72a08127edbbd53b926daf4ab239f414aa (ветка web474citjudge-1197). Суть: CITATIONJUDGELOGICALACTIONSUFFIX=citationjudge + callsite webragchatcitationjudge в src/lib/billing/chatCallsites.ts; оба вызова (actions.ts ~7245, chat-global/…
- [A1 12:25 Фабл] Приёмка 1200-accweb474citjudge (M4, дерево от 86bd1e72): GO. Доказано: child-ключ <parent.citationjudge + callsite webragchatcitationjudge в обоих местах; негатив degraded → billingdegraded:<reason, pass=null, judgeApplied=false, warn; нормальный JSON → verdict; пустой ответ → noj…
- [A1 14:12 Фабл] ПОСАЖЕНО l91 на прод A1: release arm64-l91-20260902T140416Z, run l91-9ad68bc2, sourceCommit 9ad68bc261c833e792bc17523245975e15f48612, артефакт sha 96b3466b…dc3f; ready TRUE (boot/database/release/drain ok), paid TRUE enforceready, public 200, live-sha 9ad68bc2; SIP-стек перезапуще…
- Село на прод в l105 (1185ca257, 22:33Z 04.09): 4f11425e1 fix(WEB-474) close temporal citation delivery bypass (C2WINDOW5, приёмка круга 5 GO). Шов с a09df7eed (chat-global/route.ts) слился автоматически, проверен 50/50 тестами и rolePolicyEnforcementWiring 13/13 на итоговом дереве. Пост-QA на жив…
- **Эволюция:**
- 2026-09-02 → [A1 12:00 Фабл] Волна 1197-web474citjudge (M4) сдана: коммит 86bd1e72a08127edbbd53b926daf4ab239f414aa (ветка web474citjudge-1197). Суть: CITATIONJUDGELOGICALACTIONSUFFIX=citationjudge + callsite webragchatcitationjudge в src/lib/billing/chatCallsites.ts; оба в
- 2026-09-02 → [A1 12:25 Фабл] Приёмка 1200-accweb474citjudge (M4, дерево от 86bd1e72): GO. Доказано: child-ключ <parent.citationjudge + callsite webragchatcitationjudge в обоих местах; негатив degraded → billingdegraded:<reason, pass=null, judgeApplied=false, warn; нормальн
- 2026-09-02 → [A1 14:12 Фабл] ПОСАЖЕНО l91 на прод A1: release arm64-l91-20260902T140416Z, run l91-9ad68bc2, sourceCommit 9ad68bc261c833e792bc17523245975e15f48612, артефакт sha 96b3466b…dc3f; ready TRUE (boot/database/release/drain ok), paid TRUE enforceready, public 200, l
- 2026-09-02 → [A1 14:27 Фабл] ПОДТВЕРЖДЕНО НА ПРОДЕ l91: journal nc-a1 с 14:10 — [citationJudge] verdict = 249, skipped = 0 (на l90 за сутки было 0 verdict / 2701 skipped). Батарея C1 r31b: C1-2 и C1-5 (ранее резались claim enforcement из-за unverified-цитат) теперь проходя
- 2026-09-04 → Село на прод в l105 (1185ca257, 22:33Z 04.09): 4f11425e1 fix(WEB-474) close temporal citation delivery bypass (C2WINDOW5, приёмка круга 5 GO). Шов с a09df7eed (chat-global/route.ts) слился автоматически, проверен 50/50 тестами и rolePolicyEnforcementWiring 13/
- 2026-09-04 → Пост-QA l105 на живом проде (1869) — GO по 4f11425e1 (C2WINDOW5): A/B одним вопросом на одном корпусе под QA-сессией — без роли 200, 3 цитаты, claimEnforcement.status=verified; с roleId=timeline (temporal-окно) цитата из окна не доставляется. Добавленная грани
- 2026-09-05 → ROLESR7 (1884): гипотеза, что C2WINDOW5 / enforceRoleTemporalCitationDelivery режет цитаты в не-temporal кейсах, проверена и ОПРОВЕРГНУТА — тот же класс coverage=0 + counts.removed0 воспроизводится независимо от temporal-гейта; настоящий корень — один factual-
- 2026-09-05 → KNOWN ISSUES / ТРАБЛШУТИНГ (по требованию владельца 05.09): документ ~/Projects/nc-agent-ops/board/specs/ROLES-KNOWN-ISSUES.md — как за 2 минуты отличить класс поломки цитат по отпечатку evidence (corpus 58/58 + citationCount 0 + coverage 0 + counts.removed ≥1
- Факт (прод l90 26da36faba, батарея r30 02.09 11:08–11:14 A1; то же на l89 r29): судья цитат (citation entailment judge, src/app/actions.ts maybeApplyCitationEntailmentJudge) НИКОГДА не доходит до вендора. Журнал nc-a1 за 24 ч: 2701 «[citationJudge] skipped reason: nojudgmentsreturned», 0 «verdict…
- Ссылки: батарея r30prod-l90full-20260902 (scratchpad roles-prod/evidence/battery/battery-all.json), OPS-STATUS-LIVE.md 02.09 11:25; связанные: WEB-138 (skip reason), WEB-267 (cross-doc judge), WEB-461/468 (учёт), эпик ролей R918.
- Село на прод в l105 (1185ca257, 22:33Z 04.09): 4f11425e1 fix(WEB-474) close temporal citation delivery bypass (C2WINDOW5, приёмка круга 5 GO). Шов с a09df7eed (chat-global/route.ts) слился автоматически, проверен 50/50 тестами и rolePolicyEnforcementWiring 13/13 на итоговом дереве. Пост-QA на жив…
- KNOWN ISSUES / ТРАБЛШУТИНГ (по требованию владельца 05.09): документ ~/Projects/nc-agent-ops/board/specs/ROLES-KNOWN-ISSUES.md — как за 2 минуты отличить класс поломки цитат по отпечатку evidence (corpus 58/58 + citationCount 0 + coverage 0 + counts.removed ≥1 = класс A «один factual-спан» ROLESR…
- **Следующий шаг:** Корень (код l90): судья цитат вызывается через MeteredAIProvider.chat с billing {requestId: chatBilling.requestId, logicalActionKey: chatBilling.logicalActionKey} — тот же logicalActionId, что у основного ответа. prepareLLMBilling → claimLlmActionReplay (src/lib/billing/llmActionReplay.ts:137): п… | Приёмка: на проде после посадки — journal «[citationJudge] verdict» 0, TerminalSpendEvent callsite webragchatcitationjudge 0, deliveredcitations.pass не null в батарее; батарея ролей C1/C4/C5 — ожидаемо ≥ +4 кейса.
Лента
2026-09-02T11:58:46.923Z · Fable
[A1 12:00 Фабл] Волна 1197-web474citjudge (M4) сдана: коммит 86bd1e72a08127edbbd53b926daf4ab239f414aa (ветка web474citjudge-1197). Суть: CITATION_JUDGE_LOGICAL_ACTION_SUFFIX=citation_judge + callsite web_rag_chat_citation_judge в src/lib/billing/chatCallsites.ts; оба вызова (actions.ts ~7245, chat-global/route.ts ~2570) идут child-ключом; maybeApplyCitationEntailmentJudge: billing degraded/allowed=false → skip reason billing_degraded:<reason> + warn с billingReason, «no_judgments_returned» только для пустого/битого ответа модели (лог contentLen + 80 символов); callsite зарегистрирован в paidEntrypointRegistry.json, манифест W34 регенерирован. Тесты: citationJudgeBilling.test.ts (node:test) 4/4, focused 53/53, replay core 24/24, shapeguard tsc PASS. Аудит других вызовов с родительским ключом (не судьи — попытки/стадии той же операции): answer/tool-decision/recovery (actions.ts 6438–6552), council (4896), strict-evidence repair (7116), chat-global runSingleModelChat (2384), council global (2079) — оставлены. Линия: A2 nc-build ветка web474citjudge-1197, cherry-pick в l91-candidate = 0dba7368 (поверх hetzbk v3 ×3 и WEB-468 fcf5d933); A1 mirrors/lines/web474citjudge-1197-86bd1e72a0.bundle. Приёмка 1200-accweb474citjudge на M4 (негатив degraded, реальный replay-сценарий на одноразовом PG, детерминизм манифеста).
2026-09-02T12:21:54.452Z · Fable
[A1 12:25 Фабл] Приёмка 1200-accweb474citjudge (M4, дерево от 86bd1e72): **GO**. Доказано: child-ключ `<parent>.citation_judge` + callsite web_rag_chat_citation_judge в обоих местах; негатив degraded → billing_degraded:<reason>, pass=null, judgeApplied=false, warn; нормальный JSON → verdict; пустой ответ → no_judgments_returned с contentLen/preview; replay core 24/24; shapeguard tsc PASS; второе мнение по «другим вызовам с родительским ключом» — согласен, не судьи. Каталог src/lib/chat/__tests__ = baseline 905/12/1 (не связано). Follow-up (не блокируют посадку): F1 — нет pnpm-скрипта регенерации activation-артефактов (только прямой генератор); F2 — строка callsite только openai/gpt-5.4-mini: в enforce для anthropic/openrouter/google/xai судья получит callsite_mismatch → billing_degraded (та же поза, что у стандартного chat-callsite) — нужны provider-specific строки или нейтральное разрешение, иначе у пользователей на других провайдерах судья по-прежнему не работает (теперь хотя бы честно виден в skip reason). Линия в l91-candidate (0dba7368). Проверка после посадки: journal `[citationJudge] verdict` > 0; TerminalSpendEvent callsite web_rag_chat_citation_judge > 0; батарея C1/C4/C5.
2026-09-02T14:12:25.896Z · Fable
[A1 14:12 Фабл] ПОСАЖЕНО l91 на прод A1: release arm64-l91-20260902T140416Z, run l91-9ad68bc2, sourceCommit 9ad68bc261c833e792bc17523245975e15f48612, артефакт sha 96b3466b…dc3f; ready TRUE (boot/database/release/drain ok), paid TRUE enforce_ready, public 200, live-sha 9ad68bc2; SIP-стек перезапущен (readiness 200/200, монитор аренды пережил рестарт: 2 poll-failed, LOST=0). Откат: land-l90 run/l90-26da36fa (nc-a1.service.bak-l90). Фикс судьи цитат (86bd1e72 → 0dba7368 в l91) в serving. Проверка: journal [citationJudge] verdict > 0 и TerminalSpendEvent callsite web_rag_chat_citation_judge > 0 после первых чатов; батарея r31 после пересева фикстуры.
2026-09-02T14:25:03.332Z · Fable
[A1 14:27 Фабл] ПОДТВЕРЖДЕНО НА ПРОДЕ l91: journal nc-a1 с 14:10 — `[citationJudge] verdict` = 249, `skipped` = 0 (на l90 за сутки было 0 verdict / 2701 skipped). Батарея C1 r31b: C1-2 и C1-5 (ранее резались claim enforcement из-за unverified-цитат) теперь проходят. Паритет провайдеров (F2: callsite только openai/gpt-5.4-mini) — follow-up в WEB-093/P17-контуре. Тикет → done.
2026-09-04T22:50:54.781Z · координатор
Село на прод в l105 (1185ca257, 22:33Z 04.09): 4f11425e1 fix(WEB-474) close temporal citation delivery bypass (C2WINDOW5, приёмка круга 5 GO). Шов с a09df7eed (chat-global/route.ts) слился автоматически, проверен 50/50 тестами и rolePolicyEnforcementWiring 13/13 на итоговом дереве. Пост-QA на живом проде под свежей QA-сессией — волна 1869-l105postqa (A1), пункт 2.2 брифа: доставка цитаты в temporal-окне + негатив вне окна. Правила: WEB-449.
2026-09-04T23:31:46.893Z · координатор
Пост-QA l105 на живом проде (1869) — GO по 4f11425e1 (C2WINDOW5): A/B одним вопросом на одном корпусе под QA-сессией — без роли 200, 3 цитаты, claimEnforcement.status=verified; с roleId=timeline (temporal-окно) цитата из окна не доставляется. Добавленная граница enforceRoleTemporalCitationDelivery() (rolePolicyTemporalScope.ts) вызывается в actions.ts:3734, chat-global/route.ts:2196 и :2908. Регрессия rolePolicyEnforcementWiring 13/13 на пине и на родителе. Отчёт: /home/ubuntu/waves/L105POSTQA-REPORT.md. Правила: WEB-449.
2026-09-05T01:37:16.341Z · координатор
ROLESR7 (1884): гипотеза, что C2WINDOW5 / enforceRoleTemporalCitationDelivery режет цитаты в не-temporal кейсах, проверена и ОПРОВЕРГНУТА — тот же класс coverage=0 + counts.removed>0 воспроизводится независимо от temporal-гейта; настоящий корень — один factual-спан в composeProducedAnswer (см. WEB-99). Правила: WEB-449.
2026-09-05T01:39:28.480Z · координатор
KNOWN ISSUES / ТРАБЛШУТИНГ (по требованию владельца 05.09): документ ~/Projects/nc-agent-ops/board/specs/ROLES-KNOWN-ISSUES.md — как за 2 минуты отличить класс поломки цитат по отпечатку evidence (corpus 58/58 + citationCount 0 + coverage 0 + counts.removed ≥1 = класс A «один factual-спан» ROLESR7; indexedSources < selectedSources = индексация WEB-340/121; C2-кейсы 0/14 = класс B окно цитат C2WINDOW5), живая проверка на проде через chat-global с вопросом «частично отсутствует в документе», таблица классов A–E (спан, окно, верификатор does_not_affirm, дрейф фикстуры, кошелёк) с файлами/строками и статусом, чек-лист батареи на новой линии с расшифровкой ошибок преflight (PRODUCTION_SHA_MISMATCH / PRODUCTION_ARTIFACT_MISMATCH / LEDGER_RELEASE_MISMATCH), ловушка suite ROLESR7 (# tests 6 vs 7), история замеров l89–l105. Правила: WEB-449.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-474","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-05T21:05:36.560Z