IOS-072 · Задача · UX · web
FC волна 3: BOLD-1 self-check wiring поверх волны 2
Закрыт
P1 · важно
ведёт: fc-replay
эпик: IOS-067
Суть
Киллер-фича замысла: отчёт дип-ресёрча ПРОВЕРЯЕТ САМ СЕБЯ — каждый факт прогоняется через entailment, inline-светофор в отчёте. Wave3-core-only ложился после Wave2-core на старую базу; теперь база = пост-волна2 канон (ветка live/deploy-fc-wave2-202608020238, коммит уйдёт в прод). Нужно: (1) FC-W3-core-rebased.patch — entity-layer, F3/F4 reliability/cost, self-check core; (2) FC-W3-wiring-rebased.patch — self-check enrichment в researchActions ПОСЛЕ создания тела отчёта, fail-closed, abort/error сохранить. Мины прежние: RRF≠cosine, i18n в messages/*.json, не ломать волны 1-2.
Чем закрывается (приёмка)
Обе заплатки exit 0 от пост-волна2 канона; self-check строго пост-синтез и fail-closed; отчёт в тикет со списком сохранённых потоков.
Лента
2026-08-02T01:39:23.089Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
2026-08-02T01:44:15.587Z · fc-replay# IOS-072 fc-wave3 report
SCOPE: Wave3 BOLD-1 self-check core + wiring rebased onto post-Wave2 canon; no push, no deploy.
BASE: `0336313016a817cf808d71744263d09ed3feee5e` (scratch branch `main`, local import from `/tmp/canon-fcw2.tar.gz`).
CHANGES:
- `/Users/milamarty/Downloads/FC-W3-core-rebased.patch`
- `/Users/milamarty/Downloads/FC-W3-wiring-rebased.patch`
- Scratch commits:
- `47ddf9cae05263561a0eb819213c145f753c4518` `IOS-072 Wave3 core rebased`
- `22cfcac40cff299a2212573157bbaaa0b62b7318` `IOS-072 Wave3 core classifyVerdict bridge`
- `4e1d4facd23ca865bada33b14ec7969817ee88e1` `IOS-072 Wave3 self-check wiring`
Core patch:
- Adds entity layer: `src/lib/entities/*`.
- Adds F3/F4 reliability, cache, telemetry, cost guard, and tests.
- Adds BOLD-1 self-check core in `src/lib/research/selfCheck.ts`.
- Adds self-check markdown presentation in `src/lib/deepResearch/presentation.ts`.
- Updates deep research pipeline/PDF/presentation/retrieve support.
- Rebased fix: `runSelfCheck` now calls post-Wave2 `classifyVerdict(evidence, mode, claimSourceIds, claimSourceUrls)` with both empty sets. Without this bridge, self-check failed closed to `not_checked` for real checked claims.
Wiring patch:
- File: `src/app/researchActions.ts`.
- Preserved Wave2 canon flow:
- server-owned retrieval pipeline via `runResearchPipeline()`;
- RRF/cosine invariant stays in `src/lib/research/mine.ts` (`rescoreByCosine()` before gates);
- runtime resolution/fallback handling;
- abort checks before planning, retrieval, writer, save, and stream completion;
- autosave via `processDocument()` and `normalizeDeepResearchSaveTargetMetadata()`;
- metadata source counts from grounded MINE evidence.
- Added BOLD-1 only after the classic writer has produced `reportBody`.
- Self-check is fail-closed:
- self-check failure logs `Deep Research self-check failed; shipping report without inline verdicts`;
- report generation continues with the original body;
- abort errors are rethrown via `isAbortError(error, params.signal)`.
- Native OpenAI/Perplexity paths are unchanged.
PROOF:
- Core apply-check from fresh base: `/Users/milamarty/Downloads/fc-wave3-ios072-checks/core-apply.log`, exit 0.
- Wiring apply-check after core: `/Users/milamarty/Downloads/fc-wave3-ios072-checks/wiring-apply.log`, exit 0.
- Focused lint: `./node_modules/.bin/eslint src/app/researchActions.ts src/lib/research/selfCheck.ts`, exit 0, log `/Users/milamarty/Downloads/fc-wave3-ios072-checks/eslint.log`.
- Whitespace/range check: `git diff HEAD~3..HEAD --check`, exit 0, log `/Users/milamarty/Downloads/fc-wave3-ios072-checks/diff-check.log`.
- Focused tests: `npx tsx --test src/lib/research/__tests__/selfCheck.test.ts src/lib/research/__tests__/f3f4-reliability-observability.test.ts src/lib/entities/__tests__/entities.test.ts src/lib/deepResearch/__tests__/pipeline.test.ts src/lib/pdf/__tests__/pdfShared.test.ts`, exit 0, 44 pass / 0 fail, log `/Users/milamarty/Downloads/fc-wave3-ios072-checks/focused-tests.log`.
- `git show --name-only --oneline HEAD`: `4e1d4fa IOS-072 Wave3 self-check wiring`, changed `src/app/researchActions.ts`.
RISK/BLOCKERS:
- Full `tsc` was not rerun because the previous IOS-071 full-project type-check OOMed on this Mac (`exit 134`) and CHARGE local resource guard says to prefer focused proof.
- `node_modules` was absent from the tar tree; for proof only, an ignored temporary symlink to `/Users/milamarty/Projects/fc-wave2/node_modules` was used, and `prisma generate` was run to restore generated Prisma client required by tests.
NOT-DONE:
- No push.
- No deploy.
- No browser/prod check; this scope only produces rebased patches.
2026-08-02T01:54:29.612Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
2026-08-02T01:59:31.916Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
2026-08-02T02:04:33.598Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
2026-08-02T02:09:35.304Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
2026-08-02T02:14:38.213Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
2026-08-02T02:19:41.636Z · вахтёрВоркер fc-replay-069 объявил БЛОКЕР или ждёт сборочный слот. Жив, но не продвигается. Последняя строка: gpt-5.5 high · ~/Projects/fc-replay
Воркер
не проверен
fc-replay-069
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-replay-069'"
Прочитать историю панели без подключения — листается и ищется (/ поиск, 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-replay-069'" | 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-02T02:23:06.970Z