# review-synthesis — gate spec v1 (em-main-solo sau #53-garble reviewer-Fable) — VERIFIED lane

## Sự cố + recovery ladder (ghi trung thực)

- **Invocation 2 `/fable-real reviewer`** (`wf_a0aa62f5-9e8`, agent `a4220ee1f342957bb`, model tier:fable): chạy 13.2 phút · 36 tool-use · 208.955 tok → **chết TRƯỚC StructuredOutput** ("completed without calling StructuredOutput after nudge") = **#53 garble, return rỗng `[]`**. Sub-file KHÔNG được ghi (dù prompt ép ghi-đĩa-trước-return — prompt-đúng KHÔNG chặn #53, tái xác nhận bài S123).
- Recovery ladder đã leo đủ: **(0)** disk-truth → `sub-reviewer-0.md` KHÔNG tồn tại · **(1)** journal.jsonl chỉ có `started` · **(2)** SendMessage-resume → FAIL "No transcript found" (**phát hiện mới: workflow-agent KHÔNG resume được qua SendMessage** — khác agent thường; agentId workflow nằm ngoài registry) · **(3)** transcript-forensics `agent-a4220ee1f342957bb.jsonl` (572KB) → vớt được **coverage đầy đủ + 5 re-count cuối** · **(4)** **em-main-solo gate** (tiền lệ S116 fable-real reviewer garble ×19 → em-main-solo GO-WITH-FIXES).

## Coverage vớt từ transcript (bằng chứng nó ĐÃ kiểm)

36 call: spec + sub-MD + 3 bản gốc (đọc TRỌN) + 5 script đo (measure/nhip-no/mfe ×2/crystallized ×2/archive-gate ×3 — narration "memory-archive-gate 3/3 anchors khớp") + governance-detectors ×5 lượt (inventory + fence-tracking + H25) + 4 file cửa + implementer-backend.md (boundary) + VALID_ROLES + 5 Bash re-count. Chết đúng lúc soạn verdict (text cuối: "Giờ governance-detectors.ps1 anchors").

**Re-count của nó (dùng làm evidence):** HANDOFF pending-token = 7 dòng · STATUS = 14 dòng (khớp invest §7.7) · danh sách vị trí "Prev S" trong HANDOFF: **:7 (GIỮA current-segment) · :9 · :13 · :17 · :21 · :25 · :58** · STATUS In-Progress headings = :578 (S117) + :585 (S113) — toàn lineage cũ · rules.md §6.6 @ :379 ✓ · G-011 ngoài adap-reports = chỉ usage trong session-logs/agent-memory (0 định-nghĩa canonical ✓).

## VERDICT (em-main-solo): **GO_WITH_FIXES** — 3 MAJOR / 3 minor / 1 nit, đã áp trọn vào spec v2

| # | Finding | Evidence | Fix (đã áp v2) |
|---|---|---|---|
| M-1 | H24-4 boundary "trước match `Prev S` đầu-tiên" bằng SUBSTRING sẽ **cắt current-segment sớm tại HANDOFF:7** ("chi tiết segment Prev S134 dưới" nằm giữa dòng NEXT-anh) → mất dòng :7-:8 khỏi vùng quét = âm-giả cấu trúc | re-count transcript: `Prev S` @ :7 giữa-dòng vs :9 `**Prev S134:**` đầu-dòng | boundary = dòng **BẮT ĐẦU** `**Prev S` (anchor `^`); fault-inject +ca: current-segment chứa "Prev S" giữa dòng → KHÔNG cắt |
| M-2 | H24-4 scope v1 gồm `STATUS §In Progress hiện-hành` — nhưng STATUS **không có** In-Progress hiện-hành (chỉ section cũ S117/S113 @ :578/:585) → quét = dương-giả nền ngày đầu | re-count transcript In-Progress headings | scope v1 = **HANDOFF current-segment ONLY** (2 ca thật đều ở HANDOFF); mở rộng STATUS = sau triage, khai thẳng |
| M-3 | "mã RC cạnh token, cùng đoạn-logic" KHÔNG định nghĩa đo được trên mega-line (61K ký tự/dòng) | O3 owner-decision: dòng-carry = đoạn LOGIC không dòng vật-lý | concretize: split dòng theo separator ` · ` / ` ; ` → token chờ + mã RC phải nằm **CÙNG MẢNH** split (deterministic, fault-inject được) |
| m-1 | C6 thiếu 2 khai limit: (a) multi-root resolve có thể mask dead-cite khi trùng basename ở root khác; (b) range-cite `file.md:12-15` regex chỉ bắt+kiểm line đầu | thiết kế v1 | +2 dòng khai limit header C6 + fault-inject +ca dòng-có-🧊 → IM (tổng 7 ca) |
| m-2 | L1 acceptance "dry-run liệt được 4-nhóm" mơ hồ (ai chạy, đo gì) + thiếu kiểm cấu-trúc | thiết kế v1 | concretize: (i) EM in-thử khối từ WAL/HANDOFF THẬT ngay post-land — mỗi nhóm ≥1 mục hoặc ghi "(trống)" tường-minh, chờ-anh có số; (ii) heading-count 4 file TRƯỚC=SAU (chỉ THÊM nội dung); (iii) BƯỚC 0 echo session-start còn nguyên |
| m-3 | EM tự edit `reviewer.md:46` (câu của chính vai reviewer) — cần no-self-exempt | thiết kế v1 | L3 diff-check BẮT BUỘC phủ cả edit này; edit anchor theo CONTENT (old_string) không theo line-number |
| n-1 | implementer-backend (scope tuyên bố .NET) làm governance .md/.ps1 | tiền lệ wave S135-S136 + 7760cdf | scope-grant tường-minh trong prompt lane + ghi nhận trong report |

**Trục owner-gate (axis 6):** giữ phương án spec — defaults + đánh-số trình anh trong report cuối (câu luật = FUNCTION-floor từ digest quyết-owner-hub, anh đã ra lệnh /adap-apply; placement = form tailor). L3 reviewer độc lập sau implement sẽ soi lại; anh veto được từng số.

**KHÔNG-BẮT-ĐƯỢC (khai):** chưa có diff code (L2 fault-inject + L3 re-run sẽ phủ) · volume cite 291 chưa re-đếm độc lập (lệnh invest có kèm; re-count pending-token 7/14 của reviewer-chết khớp invest → tin gián tiếp) · reviewer-Fable KHÔNG kịp phát biểu trục nào khác ngoài coverage trên — solo gate này là phán của LEAD, không phải của reviewer-Fable (không mạo danh).

## memoryDelta (on-behalf reviewer — lead ghi sau VERIFY-đĩa, nhãn on-behalf)

- task: review spec v1 wave 3-bản (bị #53 cắt trước verdict — em-main-solo gate thay, evidence transcript 36-call)
- verdict: GO_WITH_FIXES 3M/3m/1n (M-1 boundary line-start · M-2 scope HANDOFF-only · M-3 đoạn-logic split)
- learned: workflow-agent CHẾT không resume được SendMessage ("No transcript found") — recovery thang cho wf-lane = disk → journal → transcript-forensics → em-main-solo; transcript re-count của lane chết vẫn là EVIDENCE dùng được (2/3 MAJOR đến từ số nó đo trước khi chết)
- surprise: chính file HANDOFF hiện-hành chứa chuỗi "Prev S134" giữa dòng NEXT-anh (:7) — boundary marker và nội dung trùng mặt chữ ngay ngày đầu = bẫy tự-quy-chiếu lớp mới (marker-collision), cùng họ citation-trap S123
