# SPEC — fable-real investigator-codebase: spec-cách-làm chi-tiết + checklist đợt 16-07 (Giai đoạn B)

> Spec-file 3-mục H21 (lead ghi TRƯỚC spawn). Engine: real-single (lệnh anh S127: "/fable-real invest spec-cách làm chi tiết-checklist" — consent per-invocation còn hiệu lực, ghi ở run.md Giai đoạn B). Vai: investigator-codebase. Model: fable (spawn-param thắng pin — đo S126). Lượt này SOẠN (propose), KHÔNG phán (đó là reviewer #2 lượt C).

## ① Tính-năng / đề-bài

Ground-truth repo SE từng anchor + PROPOSE **spec-cách-làm chi-tiết + checklist execute** cho 6 việc theo THỨ-TỰ-VIỆC verdict A (`sub-reviewer-1-verdict.md` cùng folder). Output đủ chi-tiết để HMW workers Opus-MAX (Giai đoạn D) execute KHÔNG cần đoán: per việc = file đích tuyệt-đối · thay-đổi diff-level · lệnh verify chạy được · gate nào cần anh. Reviewer #2 (C) sẽ re-review spec này — soạn cho người-phán đọc được.

## ② Cách implement (cho investigator)

1. Đọc `sub-reviewer-1-verdict.md` (cùng folder) — bảng per-bản + caveat + thứ-tự 6 việc. Đọc 6 broadcast gốc `broadcasts/inbox/2026-07-1[56]-*.md` (bảng sha ở `run.md`).
2. **Ground-truth TỪNG việc — mở file đích, xác nhận trạng-thái/line THẬT trên đĩa** (đừng chép verdict A mù — line có thể xê dịch):
   - **Việc 1 (bản 5, nhỏ nhất):** tìm config RAG per-project SE trong khung AI_INFRA (`D:\Dropbox\CONG_VIEC\AI_INFRA\**` — verdict A neo rag.json:26 `contextual_retrieval: true` + :31 rationale trial-week-3 treo). Xác nhận đường-dẫn TUYỆT-ĐỐI + giá trị hiện tại + mirror `projects.py:39`. Spec: flip `true`→`false` + rationale mới (revisit đóng bởi owner-final f5ce2778) + báo hub 1 dòng. Ghi rõ: quyền SE sửa = tiền lệ S41 (exclude_paths); hiệu-lực chờ re-bootstrap = AI_INFRA-op.
   - **Việc 2 (bản 1, re-verify nhịp):** (a) `docs/governance/adap-reports/2026-07-15-Governance-h17-cadence-update-bookend.md` dòng 8 "7 khoản SAI" → sửa thành "5-sai + 2-đổi-cách-đọc"; (b) 2 citation stale: `.claude/commands/session-start.md:206` + `memory-budget.json` `_owner_ratified` — đọc ngữ-cảnh thật, đề-xuất wording re-tune neo cycle-2 CỦA SE; (c) counter GIỮ NGUYÊN (điều kiện gỡ hub KHÔNG áp — SE phiên ngắn-nhiều); (d) STAGE-2: `broadcasts/_index.md` 6 row INBOUND pending→ai_infra — xác nhận khuôn move hiện tại.
   - **Việc 3 (bản 2, lớn nhất):** inventory **3-câu-hỏi × 7 vòng lặp** SE (wal-flush Stop-hook · memory-archive-gate.ps1 · crystallized-backfill.ps1 · governance-detectors.ps1 · measure-agent-memory.ps1 · sleep-recovery L2 gist · curate L1→L2). Per vòng trả lời: (q1) trigger có đọc instrument đông-cứng? (q2) có niêm-phong sau move hay chỉ bảo-toàn-byte? (q3) ĐO/LÀM tách tầng + phanh chưa? Seed từ verdict A: niêm-phong = GAP thật (`memory-archive-gate.ps1` DRY-planner không verify seal sau move; moved-not-cut S102 = kỷ-luật TAY); frozen-instrument: `budget.measured` STALE nhưng consumer ignore+re-measure (`memory-selfimprove-audit.ps1:18,110`). CHỈ port 3 CÂU HỎI — CẤM chép ngưỡng hub.
   - **Việc 4 (bản 3):** kiểm-kê nhãn đã-đo — 2 ứng viên verdict A: `scripts/crystallized-backfill.ps1:117-119` "calibrated" /4.0 /3.0 (không assert/phản-chứng) + `memory-budget.json:89` `measured_token_estimate=55000` (metadata giàu ≠ phản-chứng). Per con chọn 1/3 lối-thoát (đo-lại-được | hạ-nhãn | thêm-phản-chứng) + soạn **câu cửa-duyệt** vào checklist reviewer. Grep thêm nhãn measured/empirical/calibrated/đã-đo trong `scripts/*.ps1` + `.claude/workflows/hmw.js` + `memory-budget.json` — có ứng viên thứ 3 sót không?
   - **Việc 5 (bản 4):** n-a — spec chỉ 1 mục: adap-report nắm-hướng (không code). CẤM copy mục 2 (hub tự khai chưa build).
   - **Việc 6 (thư 0):** adap-reports ×5 theo REPORT-FORMAT LOCK (khuôn `/adap-report`, xem file mẫu trong `docs/governance/adap-reports/`) + email hub GỘP 1 thư (khuôn `/send-email` outbox `broadcasts/outbox/ai_infra/`). Ask do-token GIỮ pending (đừng đóng sớm — errata batch hub đang soạn).
3. **PROPOSE spec-execute per việc:** `{file-đích tuyệt-đối · diff đề-xuất (before→after) · lệnh verify chạy được · owner-gate?}` + phân-lane D: việc nào HMW worker mechanical được, việc nào lead-solo (cross-repo AI_INFRA = việc 1), việc nào chờ anh.
4. **GHI-ĐĨA-TRONG-LÚC-LÀM (chống #53, bài S123):** ghi draft TĂNG-DẦN vào `sub-investigator-2-spec-draft.md` (CHỈ file này — B4/B6). KHÔNG sửa bất-kỳ file nào khác (kể cả file đích — lượt này PROPOSE-only). KHÔNG tự ghi MEMORY (memoryDelta RETURN — lead VERIFY→APPEND).
5. **Adversarial với verdict A:** ground-truth lệch verdict A (line xê-dịch / giá-trị đã đổi / anchor không tồn tại) → ghi mục LỆCH riêng, spec theo ĐĨA không theo verdict.

## ③ Checklist + deliverable + acceptance (đo được)

- [ ] Draft trên đĩa `sub-investigator-2-spec-draft.md`: đủ 6 việc × 4-trường {file:line verify-từ-đĩa · diff · lệnh-verify · gate} + phân-lane D
- [ ] ≥5 evidence `file:line` TỰ MỞ từ đĩa (không chép verdict A)
- [ ] ≥1 mục KHỚP/LỆCH explicit vs verdict A (adversarial check — "khớp hết" phải kèm cách đã thử phá)
- [ ] Checklist execute đo-được cho D: per việc ≥1 acceptance chạy được (lệnh + expected output)
- [ ] RETURN dòng-1 = `VERDICT: SPEC-READY|SPEC-BLOCKED — <1 dòng>` + pointer draft + mục LỆCH (nếu có); RETURN ≤400 words (draft nằm trên đĩa)
- [ ] memoryDelta 4-field {task, verdict, learned, surprise}
- Acceptance lead-verify: spot-check ≥3 anchor draft vs đĩa · draft đủ 6 việc · lệch-vs-verdict-A có xử-lý · rồi lead ghi spec-execute cho C
