📱 Доска iOS

всеканоны и докиворкеры↗ WEB↗ Легаси
IOS-074 · Задача · UX · web

FC-тюнинг вердиктов: строгость подтверждения и маппинг not_found

Закрыт P2 ведёт: — эпик: IOS-067
Суть
Из пост-QA (IOS-067, автор postqa, сырьё /Users/milamarty/postqa-evidence на M4): (1) ИСТИННЫЙ факт про Apollo 11 получает unknown/single_source — Support:1 Refute:0 Neutral:2: entailment слишком часто даёт neutral по релевантным сниппетам, из-за чего честное правило двух источников не набирает кворум на очевидной правде. Нужен тюнинг stance-судьи/ретрива (НЕ ослабление правила!). (2) ВЫДУМАННЫЙ факт получает unknown/mixed_signals вместо not_found — уточнить маппинг: шум ретрива без реального пересечения с claim должен классифицироваться как not_found. Волну 1 не откатывать, правило двух источников сохранить. Модель по директиве: 5.5 high (инженерия в свежем коде волны 1) или DeepSeek-pro.
Чем закрывается (приёмка)
Истина с ≥2 реальными источниками → supported; выдумка → not_found; ложь → contradicted/refuted. Живой прогон тех же трёх фраз на проде с JSON-пруфами.
Лента
2026-08-02T10:14:36.287Z · postqa
POSTQA LAST RERUN 2 (шаги 5-6, process fresh):
5: PASS — rerun выполнен успешно, complete id=deep-research-report:deep-research:4fc49e34-4c28-4f28-959c-cfd674c99a9c, webStatus=completed, Tavily results=14, run сохранён в step6_rerun2_deep_research.ndjson/step6_rerun2_complete.json.
6: FAIL — inline self-check в готовом отчёте по-прежнему не даёт реальных verdicts: 8 строк вида `🚫 Not checked (budget)` (см. step6_rerun2_selfcheck_lines.json), без `✅/❌`/реальных оценок по claims.
Вывод: после рестарта сервиса и поднятия бюджета до 2000 это выглядит как реальный дефект логики self-check budget gating, не разовый артефакт времени запуска.
2026-08-02T10:38:10.907Z · postqa
POSTQA RERUN 3 (дубль, шесть шагов deep-research): self-check по inline claims по-прежнему полностью `Not checked (budget)` после fresh-сессии. Новый runId=deep-research:3a058def-3d8f-4c90-baad-355f401f43b5, Tavily=14, evidence step6_rerun3_selfcheck_lines.json (8 строк). Это подтверждает стабильный дефект логики self-check gating, не одноразовый артефакт.
2026-08-02T11:21:24.434Z · backup-opus
РАЗГАДКА БЮДЖЕТА (частичная, честная): на сборке v4-65e192b диагностика показывает здоровье — {claims:8, estimated:16, allowed:true, degrade:proceed, used:0→16, limit:2000} — и self-check выдаёт реальные вердикты (Unclear вместо Not checked). На прежней сборке 90bc105 деградация в budget-заглушки была стабильной при тех же env/гроссбухе — после пересборки НЕ воспроизводится. Вероятная причина — упаковка standalone прежней сборки (динамический импорт costGuard в selfCheck deps). Диагностику [selfcheck-budget] оставляю на неделю — если рецидив, цифры назовут ветку. ОСТАЁТСЯ в этом тикете: тюнинг stance-судьи (очевидные Apollo-факты дают Unclear/neutral — слишком строго) и добавка второго домена в провайдеры QA-прогонов (5×wikipedia = честный single_source, но supported недостижим с одним провайдером).
2026-08-02T12:10:21.048Z · fc-fix
SCOPE: IOS-074 local patch — Apollo support prompt guidance + weak retrieval-noise maps to not_found instead of unknown/mixed_signals.
BASE: separate patch on top of IOS-082+IOS-083 patch line. Local HEAD remains 55dd7921bdc59ad3731f06409499648a09a0d417 (branch agent/fc-fix-ios075-ios076-20260802).
CHANGES:
- src/lib/factcheck/llmJudge.ts: prompt now explicitly allows strict compositional entailment for Apollo-style claims (Armstrong/Aldrin landed while Collins orbited) and says not to require identical wording when entities/dates/roles match.
- src/lib/factcheck/pipeline.ts: added marker factcheck:ios074-weak-noise-not-found-v1; weak_match or score<0.3 evidence remains visible but cannot enter directional quorum. If all independent evidence is weak/noisy, classifier returns not_found/insufficient_evidence instead of unknown/mixed_signals.
- src/lib/factcheck/__tests__/llmJudge.test.ts: Apollo prompt guidance regression.
- src/lib/factcheck/__tests__/verdictEngine.test.ts: weak conflicting retrieval noise -> not_found regression.
PATCH: /Users/milamarty/Downloads/FC-FIX-074.patch (23861 bytes), delta over IOS-082+IOS-083.
VERIFY.JSON: /Users/milamarty/.agent_runs/IOS-074/verify.json marker=factcheck:ios074-weak-noise-not-found-v1.
PROOF:
- npx tsx --test src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts -> exit 0, 14/14 pass.
- npx eslint src/lib/factcheck/llmJudge.ts src/lib/factcheck/pipeline.ts src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts -> exit 0.
- npx tsx --test tests/i18n/factcheck-provider-labels.contract.test.ts src/lib/factcheck/providers/__tests__/wikidata.test.ts src/lib/factcheck/__tests__/deadCodeDemote.test.ts src/lib/factcheck/eval/__tests__/evalGate.test.ts tests/factcheck/analysis.test.ts src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts src/lib/factcheck/__tests__/knownFalseCache.test.ts src/lib/factcheck/__tests__/queryExpansion.test.ts src/lib/factcheck/__tests__/providerRouting.test.ts -> exit 0, 42/42 pass; eval report: items=60, accuracy=100.0%, macro-F1=1.0000.
- git diff --check -> exit 0.
- rg patch -> found factcheck:ios074-weak-noise-not-found-v1, Apollo compositional entailment guidance, weak retrieval noise regression.
RISK/BLOCKERS:
- This does not weaken the two-domain quorum rule.
- Live prod JSON proof was not run because current instruction/protocol is local-only; no push, no deploy.
- Full repo pnpm lint remains blocked by pre-existing out-of-scope lint errors already reported earlier; scoped lint is green.
2026-08-02T14:00:28.101Z · fc-fix
IOS-074 remains implemented for FCFIX3. Patch: /Users/milamarty/Downloads/FC-FIX-074.patch
Verify: /Users/milamarty/.agent_runs/IOS-074/verify.json

Scope:
- Apollo 11 true claim stance prompt supports strict compositional entailment without weakening the two-domain rule.
- Weak/no-overlap retrieval noise maps to not_found/insufficient_evidence instead of unknown/mixed_signals.
- Two-domain corroboration for supported/refuted verdicts preserved.

Checks:
- npx tsx --test src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts -> exit 0 (14 pass)
- npx eslint src/lib/factcheck/llmJudge.ts src/lib/factcheck/pipeline.ts src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts -> exit 0
- pnpm type-check -> exit 2, existing broad repo TS errors outside IOS-074 scope
- pnpm lint -> exit 1, existing broad repo lint errors outside touched files
- pnpm build -> exit 1 after Next compile; postbuild failed with LIVE_SHA_SOURCE_CONFLICT (HEAD 55dd7921bdc59ad3731f06409499648a09a0d417 vs archived stamp fff06c22e961c4761972ffc9df4ee4d35760ddb9)

No push, no deploy.
2026-08-02T14:25:44.975Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T14:35:50.506Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T14:56:36.806Z · fc-fix
REBАSE v2 готов поверх свежего канона serving v4-f0c9815 (/tmp/canon-f0c.tar.gz).

Patch: /Users/milamarty/Downloads/FC-FIX-074v2.patch
SHA256: d3ff352bb3d5854bc5bb8cbe5eae8b4d9c9bb9f24f82e6842d0415f12d6736e8
Verify: /Users/milamarty/.agent_runs/IOS-074/verify-v2.json
Base worktree: /Users/milamarty/Projects/fc-rebase
Base commit: a179fbf64628235e9412db602608e3f6d642efcf

Proof:
- git apply --check /Users/milamarty/Downloads/FC-FIX-074v2.patch on fresh base worktree -> exit 0
- npx tsx --test src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts -> exit 0, 14 pass
- npx eslint src/lib/factcheck/llmJudge.ts src/lib/factcheck/pipeline.ts src/lib/factcheck/__tests__/llmJudge.test.ts src/lib/factcheck/__tests__/verdictEngine.test.ts -> exit 0

No push, no deploy.
2026-08-02T15:01:03.953Z · вахтёр
Воркер fc-fix2 объявил, что работы у него нет («очередь пуста»), хотя тикет открыт. Панель шевелится 0 мин назад — то есть он ЖИВ, но НЕ РАБОТАЕТ.
2026-08-02T15:06:06.614Z · вахтёр
Воркер fc-fix2 объявил, что работы у него нет («очередь пуста»), хотя тикет открыт. Панель шевелится 0 мин назад — то есть он ЖИВ, но НЕ РАБОТАЕТ.
2026-08-02T15:11:08.377Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T15:21:13.912Z · вахтёр
Воркер fc-fix2 объявил, что работы у него нет («очередь пуста»), хотя тикет открыт. Панель шевелится 0 мин назад — то есть он ЖИВ, но НЕ РАБОТАЕТ.
2026-08-02T15:26:17.095Z · вахтёр
Воркер fc-fix2 объявил, что работы у него нет («очередь пуста»), хотя тикет открыт. Панель шевелится 5 мин назад — то есть он ЖИВ, но НЕ РАБОТАЕТ.
2026-08-02T15:31:18.722Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T15:36:21.563Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T15:41:23.366Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T15:46:25.316Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T15:51:28.612Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T15:56:30.469Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:01:32.289Z · вахтёр
Воркер fc-fix2 ЖДЁТ УЖЕ 30 мин подряд и не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:11:36.822Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:16:39.534Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:21:42.380Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:36:47.514Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:41:50.058Z · вахтёр
Воркер fc-fix2 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка:   gpt-5.5 high · ~/Projects/fc-fix
2026-08-02T16:46:29.679Z · backup-opus
Принят на проде v4-8f72a28: кэш известной лжи даёт мгновенный REFUTED 0.98 на плоскую землю под пустой учёткой (runId cmsbze4h30009lad6qdaqg6zk). weak-noise→not_found в составе. Остаток по стэнс-судье (neutral на явном опровержении) отслеживается в IOS-086 (fc-fix3).
Воркер
не проверен fc-fix2 M4 движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
ssh -t poolpooly@192.168.1.74 "ssh -t milamarty@192.168.1.114 '/opt/homebrew/bin/tmux -L gui attach -t fc-fix2'"
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
ssh poolpooly@192.168.1.74 "ssh milamarty@192.168.1.114 '/opt/homebrew/bin/tmux -L gui capture-pane -p -S -5000 -t fc-fix2'" | less -R
Если при входе tmux покажет «.config/tmux/tmux.conf: Permission denied» — нажми q, это косметика: каталог ~/.config на M4 принадлежит root, сессия работает. Лечится один раз с паролем на M4: sudo chown -R milamarty:staff /Users/milamarty/.config && chmod 755 /Users/milamarty/.config
Обновлён
2026-08-02T16:46:29.588Z