# Reviewer lane R2 — completeness

> RETURN-only /fable-clone reviewer ensemble wf_78a84f9b-03e. Lead ghi (B3). agentId=a8854c2ee4412f3f2

---

VERDICT: FAIL — Spec đúng về chẩn-đoán nhưng **4 gate tự-mâu-thuẫn/bất-khả-thi** (đếm agent sai số-học · detector độ-tươi KHÔNG THỂ bắn vào chính positive-control của nó · Sàn-1 tách wave = vỡ engine đang chạy · gate W0.2 đã-xanh-sẵn) + 8 sàn broadcast bị rơi/khai-n-a-sai; phải sửa TRƯỚC khi wave thực-thi.

---

## C — CRITICAL

**C1 · `ls .claude/agents/*.md = 14` SAI SỐ-HỌC — gate fail trên việc làm ĐÚNG**
- **file:** spec §2.4(1)(a) + §3.9 dòng 271 (kế thừa lane D §2 hàng (1))
- **WHY:** Đo live: `ls .claude/agents/*.md | wc -l` = **13** — vì glob `*.md` bắt luôn `README.md` (12 agent + README). +2 vai ⇒ **15**, không phải 14. Gate này FAIL trên implementation đúng, hoặc tệ hơn: ép worker xoá/đổi tên file cho ra 14.
- **FIX:** đổi thành `= 15`, HOẶC đo đúng thứ cần đo: `ls .claude/agents/*.md | grep -v README | wc -l` = 14 — và neo vào bất-biến thật `VALID_ROLES.length === số agent-file (trừ README)`.
- **VERIFY:** `ls .claude/agents/*.md | wc -l` → nay 13; sau W2 → 15.

**C2 · Regex neo §2.4(2) KHÔNG THỂ bắn vào positive-control §2.4(4) ⇒ toàn chuỗi W4 bất-khả-thi**
- **file:** spec §2.4(2) ("mốc-trái = anchor `Last updated`" + regex DUY-NHẤT `\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})` + "tài-liệu KHÔNG anchor ⇒ **BỎ QUA**") ⟂ spec §2.4(4)(1) + §3.9:272 ("detector MỚI chạy TRƯỚC vá ⇒ **PHẢI in** `permission-matrix/SKILL.md`")
- **WHY:** Đo live: Grep `Last updated` trong `.claude/skills/` = **No matches** (0). `permission-matrix/SKILL.md:16` neo là `**Status (post Session 6 — 2026-04-30):**`. ⇒ luật "không anchor ⇒ BỎ QUA" **loại thẳng** chính positive-control. Lane D §3 dùng `anchor_patterns[]` **SỐ NHIỀU** (2 dạng neo, phủ permission-matrix + form-engine = chống-Goodhart); spec **nén còn 1 dạng** mà vẫn giữ acceptance đòi bắn vào file chỉ có dạng kia. Đây là điểm H24 §2(4) coi là nghiệm-thu THẬT duy-nhất ⇒ mất nó = "xanh từ commit đầu" = đúng thứ H24 bảo phải nghi.
- **FIX:** khôi phục `anchor_patterns[]` số-nhiều gồm cả `\*\*Status \(post Session \d+ — (\d{4}-\d{2}-\d{2})\)\:\*\*`; HOẶC đổi positive-control sang `docs/rag-setup-plan.md:4` (`**Last updated:** 2026-05-12`, có neo đúng dạng) — nhưng phải xử cảnh-báo lane E R7 ("có thể đúng-là-frozen ⇒ false-positive").
- **VERIFY:** Grep `Last updated` trong `.claude/skills/` = 0 hit. Chạy detector trước vá ⇒ phải in dòng `permission-matrix/SKILL.md`.

**C3 · Sàn-1 gate ⟂ cờ-wrapper TÁCH WAVE + thiếu wrapper ⇒ "vỡ đường đang chạy" (đúng cảnh-báo broadcast §4)**
- **file:** spec §2.1 Sàn-1 ("**CÙNG COMMIT** truyền cờ 3 wrapper") ⟂ §3.3 (gate `hmw.js` = **W2①**; `fable-clone.md` = **W3**; `ultra-on.md` = **KHÔNG wave nào**, cũng không có hàng nào trong bảng xung-đột §3.2)
- **WHY:** (1) Đo live bằng Grep tool: `args.run` trong `.claude/commands/` = **0 hit** — tức cả 3 wrapper đều CHƯA có cờ. (2) `/hmw` **không tồn tại dưới dạng file** (`ls .claude/commands/` = 18 file, không có `hmw.md`) ⇒ "3 wrapper" đếm 1 thứ không vá được. (3) **`fable-real.md` = wrapper thứ 4** gọi `hmw.js` (lane C §1 hàng 7) — vắng khỏi danh sách. Broadcast §4: *"Vá một wrapper lẻ gần như chắc-chắn làm vỡ hoặc bỏ-lọt các wrapper còn lại — phải phủ ĐỦ đồ-thị lời-gọi."* Tripwire land ở W2 ⇒ mọi `/fable-clone` ≥3 lane (**chính run này = 5 lane**) + `/ultra-on` auto-HMW (H6.1 `ultra-on.md:18`) **THROW ngay**, trước khi W3 kịp vá.
- **FIX:** gộp `hmw.js` + `fable-clone.md` + `fable-real.md` + `ultra-on.md` vào **1 wave / 1 commit**; liệt kê `ultra-on.md` + `fable-real.md` vào §3.2; bỏ `/hmw` khỏi danh-sách-file hoặc chỉ rõ nó = raw-invoke (em-main tự set args, không phải file).
- **VERIFY:** Grep tool `args.run` trong `.claude/commands/` → nay **0**; sau phải ≥3 và **cùng commit** với tripwire.

**C4 · Gate W0.2 ở §3.9 ĐÃ XANH SẴN — không thể fail, không chứng minh re-smudge chạy**
- **file:** spec §3.9:262 (`git ls-files --eol .claude/agents .claude/commands .claude/skills | grep -c 'i/lf.*w/crlf'` → 0)
- **WHY:** Đo live **NGAY BÂY GIỜ, 0 việc làm**: scoped = **0**; repo-wide = **188**. Gate "đóng spec" pass vacuous. Tệ hơn: spec có **3 acceptance mâu-thuẫn cho cùng W0.2** — §2.0 W0.2 đòi *toàn-repo* = 0 (test thật, 188→0); §2.2 SCOPE nói toàn-repo = **INFORM-only**, gate = scoped; §3.9 lấy bản scoped. Bản lọt vào gate cuối = bản duy-nhất không thể fail.
- **FIX:** chốt 1 định-nghĩa. Nếu re-smudge 188 là việc thật ⇒ gate = `git ls-files --eol | grep -c 'i/lf.*w/crlf'` = 0 **toàn-repo, đo SAU W0.2**, kèm `git status --porcelain` không mất file đang edit. Nếu chấp-nhận scoped ⇒ phải khai thẳng "W0.2 = no-op về mặt gate, giá-trị = materialize theo attr mới" và bỏ khỏi §3.9.
- **VERIFY:** 2 lệnh trên; chênh 188 vs 0 là bằng-chứng gate sai tầng.

---

## M — MAJOR

**M1 · §3.7 "Sàn-1 nửa-(ii) ≈n-a vì không có lời-gọi engine→engine" = ĐỌC SAI broadcast + spec tự mâu-thuẫn**
- **file:** spec §3.7 hàng 5 ⟂ spec §2.1 Sàn-1
- **WHY:** Broadcast wal-defect-fix §4 Sàn 1 nguyên-văn: *"Nửa (ii) — truyền cờ ở mọi lời-gọi nội-bộ: mỗi khi một **wrapper gọi xuống engine dùng-chung**, nó phải truyền kèm cờ 'đã-đăng-ký'."* ⇒ **wrapper→engine**, KHÔNG phải engine→engine. SE có ≥4 wrapper gọi `hmw.js`. §2.1 LÀM đúng việc này ("CÙNG COMMIT truyền cờ 3 wrapper"), §3.7 lại khai n-a — hai mục cùng spec nói ngược nhau. Hậu quả kép: (a) **n-a SAI gửi lên hub** trong adap-report; (b) wave đọc §3.7 có cớ bỏ luôn việc §2.1 ⇒ dẫn thẳng vào C3.
- **FIX:** xoá hàng này khỏi §3.7; nửa-(ii) = **ÁP**, deliverable = cờ ở 4 wrapper.
- **VERIFY:** đọc broadcast `2026-07-13-Governance-harness-22-wal-defect-fix.md:58`.

**M2 · Bỏ khai "lỗ chưa-test" mà H23 §2(2) BẮT BUỘC — và nó chính là tiền-đề để fix GAP#6 có tác dụng**
- **file:** spec §2.3 + §3.9 dòng 270 (acceptance = `Grep tier:'opus' ≥1 hit`)
- **WHY:** H23 §2(2) nguyên-văn: *"thứ-tự ưu-tiên giữa 'có tham-số tại spawn' và 'pin ở tệp định-nghĩa' khi **CẢ HAI cùng hiện-diện** — rất có thể chưa từng được test trong hệ của bạn... **Hãy khai đây là lỗ chưa-test**."* Ở SE **cả hai HIỆN-DIỆN thật**: `hmw.js:44` `if (tier === 'fable' || tier === 'opus') return tier` → `agent(…, {model: resolveModel(…)})` trong khi frontmatter 12/12 = `model: inherit`. **Chưa ai test bên nào thắng.** Nếu frontmatter thắng ⇒ toàn bộ fix GAP#6 (§2.3(a)) = **no-op**, floor-2 vẫn thủng khi Fable UP — đúng lỗi reviewer S108 đã bắt. Acceptance hiện tại chỉ đo **chữ có trong file**, không đo runtime ⇒ Goodhart-able 100%.
- **FIX:** thêm dòng khai "lỗ chưa-test precedence spawn-param ⟂ frontmatter" vào §Nấc-trung-thực + §3.7; nâng acceptance: chạy 1 lane `tier:'opus'` khi lead=Fable → **đọc model-thực-tế resolve** (H23 §6 phép-thử-phá #3), lệch ⇒ báo owner.
- **VERIFY:** `hmw.js:43-51` + frontmatter bất kỳ agent nào = `model: inherit`.

**M3 · §2.4(2)(a) "0 số hardcode trong .ps1" = phình scope + bất-khả-thi**
- **file:** spec §2.4(2) acceptance (a) + §3.9
- **WHY:** Broadcast H24 §2(3) chỉ đòi *"Tất-cả các **số nhịp** đọc từ một file config single-source"*. Spec tổng-quát hoá thành "0 số hardcode trong .ps1". Đo live trong `governance-detectors.ps1`: `:419 $walLineCount -gt 40` (trần WAL — **số anh đã ký** trong mark `RC-pqhuy1987-12-07-2026-11-43-45`), `:256 $ratio -ge 0.5 -and -le 2.0`, `:295 ($maxGotcha + 50)`, `:399 -ge 2`. Đưa hết vào config = refactor toàn-bộ detector cũ **ngoài scope H24** + dời số owner-signed sang chỗ khác (đụng quyền anh). Gate này sẽ FAIL, hoặc bị diễn-giải lại lúc chấm = mất răng.
- **FIX:** thu hẹp đúng nguyên-văn broadcast: "**số nhịp H24** (cadence + carry-threshold + fire-cap) đọc từ config; 0 số nhịp hardcode".
- **VERIFY:** `grep -nE '(-gt|-ge|-lt|-le)\s+[0-9]+' scripts/governance-detectors.ps1` → nhiều hit sống.

**M4 · Scheduler H24 §2(3) = NET-NEW nhưng KHÔNG thuộc wave nào; config + enum ĐÓNG mồ-côi**
- **file:** spec §3.3 (W0→W6) ⟂ §3.2 (liệt `memory-budget.json` 2 hạng-mục) ⟂ §2.4(2)(3)
- **WHY:** Rà 7 wave: W0=git/EOL/README/orphan · W1=3 script · W2=hmw.js+2 agent · W3=5 command · W4=skill · W5=engine · W6=push/report. **`memory-budget.json` KHÔNG ở wave nào**; `.claude/governance/.session-counter.json` KHÔNG ở wave nào; logic tick/idempotent-HEAD-sha/fail-loud-lùi/fire-guard/cap = net-new **không chủ**. Đo live: keys memory-budget.json = tiers/archive_gate/mfe/crystallized_backfill/harness_floor/token_governor/measured ⇒ **không có `lead_self_audit`, không có counter**. Cộng thêm: §2.4(1)(b) đòi "class ∈ **enum ĐÓNG** trong config" nhưng spec **không liệt 11 class** và **không nêu config key** — enum chỉ sống ở lane D §5, mà spec dòng 3 khai *"worker thực-thi THEO spec (bơm qua args, **worker KHÔNG tự Read**)"* ⇒ worker **không bao giờ thấy** enum ⇒ tự chế class = loãng thống-kê, đúng thứ H24 §2(1) cấm.
- **FIX:** thêm wave (hoặc gộp W3) sở-hữu `memory-budget.json` + `.session-counter.json`; **chép 11 class + key `lead_self_audit.*` vào thân spec**; §3.2 bổ sung `.session-counter.json`.
- **VERIFY:** đọc §3.3 tìm `memory-budget.json` → 0 hit.

**M5 · EOL khai "4 khối" nhưng RƠI ② SYMPTOM và ③(d) RESTART+VERIFY — và §3.9 không có dòng spawn-probe nào**
- **file:** spec §2.2 (bảng chỉ có ①, ③, ④a, ④bcd, SCOPE) + §3.9
- **WHY:** Broadcast EOL có ①②③④; ③ có (a)(b)(c)(d). Spec §2.2 map ③ → chỉ W0.1+W0.2 và khai ③(c)=N/A ⇒ **③(d) "RESTART rồi VERIFY danh-sách agent" biến mất**. Lane B §3 đã flag ("BƯỚC 0.6 = model-probe, KHÔNG phải registry-probe → thiếu 0.6b"); lane E (e) chốt *"③d VẪN LÀM — bảo-đảm falsifiable duy-nhất"*. ② SYMPTOM cũng rơi — mà nó vừa thành **thời-sự** vì roster 12→14 (lane B: "3 con-số = 12/12/12" → 14/14/14). Nghiêm trọng nhất: broadcast ④(d) nguyên-văn *"**Mọi kiểm static-text đều KHÔNG falsifiable** — tại hub các lớp kiểm tĩnh đều PASS trong khi agent đã chết; chỉ spawn-probe / assert-registry mới thật-sự chứng-minh agent còn sống"* — vậy mà **acceptance cho 2 agent MỚI của spec = `ls *.md` + `VALID_ROLES` = thuần static-text**. 2 file agent mới land ở W2 và không bao giờ được chứng minh là load được.
- **FIX:** thêm ③(d) vào §2.2 (0.6b registry-probe); thêm ② (roster ↔ VALID_ROLES ↔ file = 14/14/14); thêm vào §3.9: *"RESTART → spawn-probe 14/14 agent sống (KHÔNG static-check)"*.
- **VERIFY:** đọc `2026-07-15-…-eol-crlf-…md:68` (③d) + `:75` (④d).

**M6 · §3.7 "push-guard (b) precheck ref = n-a — giữ else **vô-hại**" trái phát-hiện đo được của lane E**
- **file:** spec §3.7 hàng 6 + §2.1 push-guard (b)
- **WHY:** Lane E (e) đo và cảnh báo: *"SE không first-push (`origin/main`=`3fde8af`). **Nếu nhánh đó chạy → đếm 57+ → CHẶN VĨNH VIỄN**. Giữ nhánh nhưng phải khai n/a."* Nhánh else của mẫu broadcast là `n=$(git log --format='%s' HEAD | grep -c '^wal:')` = đếm **toàn lịch-sử** = 57 ⇒ `-eq 0` fail ⇒ deadlock push vĩnh viễn. Gọi "vô-hại" là **sai sự-thật đo được** và là đúng loại mìn mà §3.8 dòng "DEADLOCK push" đang cố chặn.
- **FIX:** đổi chữ "vô-hại" → "**mìn ngủ**: nếu ref biến mất/đổi tên, else đếm 57 ⇒ chặn cứng"; hoặc bỏ hẳn else (ref EXISTS, đã verify), hoặc đổi else thành fail-loud báo owner.
- **VERIFY:** `git rev-parse --verify --quiet origin/main` → tồn tại; `git log --format='%s' HEAD | grep -c '^wal:'` → 57.

**M7 · Rơi thí-nghiệm QUYẾT-ĐỊNH của lane B; câu CHƯA-VERIFY của L3 biến mất khỏi sổ trung-thực**
- **file:** spec §2.2 ④(a) + §Nấc-trung-thực dòng 287
- **WHY:** Lane B §6/§8 xếp **ưu-tiên #1**: CRLF-hoá 1 bản COPY `reviewer.md` → **RESTART → spawn-probe** ⇒ *"thí-nghiệm quyết-định **duy-nhất**... nó quyết SE dính CRLF thật hay không; **mọi thứ khác phụ-thuộc kết-quả này**"* — vì lane B tự khai CHƯA VERIFY: *"đường nào trong 2 đường LF-only đọc đúng `.claude/agents/`"*. Spec §2.2 ④(a) rút xuống còn "CRLF-hoá copy trong cây-tạm → **validator** FAIL" = kiểm **validator**, KHÔNG kiểm **bộ-đọc thật**. Và dòng 287 CHƯA-VERIFY liệt R3/spawn_model_audit/fable-clone-history nhưng **bỏ đúng câu hỏi mở của L3** — trong khi **kết-luận** của L3 ("KHÔNG tuyên miễn-nhiễm") thì giữ. Giữ kết-luận, bỏ độ-bất-định của nó = lệch sổ trung-thực đúng chiều có lợi.
- **FIX:** đưa probe lane B §6 vào W0 hoặc W5 (rẻ, ~5', trả lời dứt điểm); thêm vào dòng 287: *"CHƯA VERIFY: đường đọc frontmatter `.claude/agents/` là nhánh `\s*`/`\r?\n` (CR-tolerant) hay nhánh `[ \t]*\n` (LF-only) — quyết bằng spawn-probe copy-CRLF."*
- **VERIFY:** lane B §2b + §6 + §8 ưu-tiên 1.

**M8 · Đồng-bộ roster 12→14: acceptance grep quá hẹp + 3 file chủ-quản không có wave (và dùng đúng idiom grep spec vừa cấm)**
- **file:** spec §2.4(5)(c) (`grep 12-agent\|12 sub ⇒ 0 hit sót (5 chỗ)`) + §3.3
- **WHY:** (1) Chuỗi sống thật KHÔNG khớp pattern đó: `fable-clone.md:18` "roster 12" · `:19` danh-sách 12 · `:21` "VALID_ROLES 10→12" · `:34` "VALID_ROLES = **12 vai**" · `fable-real.md:19` "roster 12" · `harness-11-engine.md` · `fable-real-runbook.md`. Grep `12-agent|12 sub` **pass sạch** trong khi 4 chỗ ở `fable-clone.md` vẫn ghi 12. Bằng-chứng drift có thật ngay trong engine: `hmw.js:9` meta vẫn ghi *"fan-out **9-agent** roster"* (đã lệch 2 đợt). (2) Wave: `fable-real.md`, `fable-real-runbook.md`, `ultra-on.md` = **không wave nào** ⇒ không bao giờ được sync. (3) Chính §2.4(5)(c) dùng Bash-grep `\|` — idiom mà spec **tự cấm** ở §2.3(a) (*"⚠️ KHÔNG Bash-grep — pattern `\|`+quote cho false-negative; lane C tự dính"*).
- **FIX:** acceptance đổi sang **Grep tool**, pattern phủ `roster 12|12 vai|12 sub|12-agent|10→12|9-agent`; liệt đủ file chủ-quản vào wave (tối thiểu +`fable-real.md`, +`ultra-on.md`, +`fable-real-runbook.md`, +`hmw.js:9` meta).
- **VERIFY:** Grep tool pattern trên → 49 file hit; `sed -n '18,21p;34p' .claude/commands/fable-clone.md`.

---

## m — minor

**m1 · "6 broadcast" ⟂ "7 copy" không bao giờ được đối-soát** — §1 dòng 10 tự ghi *"7 copy verbatim, hash 7/7"* rồi §1.1 chỉ lập bảng 6. **Tôi đã cố phá điểm này và KHÔNG phá được**: bản thứ 7 (`presence-not-age-reinject`, `ab6c387e`) **đã adopt xong ở S115** (`docs/governance/adap-reports/2026-07-13-Governance-presence-not-age-reinject.md` + outbox report + code đổi thật: `memory-archive-gate.ps1:137` *"value-PRIMARY drain (was A4/A5 oldest-first)"*, `:183/:199/:213` age-blind). Scope 6 = **ĐÚNG**. Nhưng spec không nói lý-do ⇒ anh/reviewer không audit được việc rớt 7→6 từ chính spec. **FIX:** 1 dòng vào §3.7: *"presence-not-age (`ab6c387e`) = ĐÃ adopt S115, ngoài scope phiên này"*.

**m2 · Không chạy vocab/floor-collision-check cho trục TUỔI** — `carry_age_threshold_lines` là ngưỡng-tuổi đúng nghĩa, trong khi SE có mark **ACTIVE-HIGH** `RC-pqhuy1987-20-06-2026-10-29-11`: *"time/age/recency-decay = **false-proxy**"*. Hai tầng khác nhau (detector-flag ≠ refine-selector) nên **không vi-phạm** — nhưng spec đã chạy collision-check cho `derived-staleness`/`GAP` (§2.4(1)) mà bỏ đúng trục vừa ký mark. **FIX:** 1 dòng khai phân-tầng.

**m3 · §3.7 "H23 §2(4) n-a: chưa dựng" — tiền-đề escape-hatch không thoả.** Broadcast §4 nguyên-văn: *"ghi 'n-a: chưa dựng bộ-soát' **và giữ nguyên phòng-thủ pin**"*. SE **không có pin trong repo** (chính §1.3: *"0 full-id sống"*, *"alias trần khoá HỌ"*). n-a (4) + 0 pin = **0 lớp** trên trục thẩm-quyền-phiên-bản. **FIX:** khai n-a kèm điều-kiện: *"n-a (4) hợp-lệ về hình-thức nhưng SE thiếu luôn lớp bù (pin) ⇒ trục version = 0-coverage, treo O1/PA-2"*.

**m4 · §3.7 "H23 §2(5) = n-a ĐÃ THOẢ" dán nhãn PASS thành n-a** — n-a = không áp-dụng; đã-thoả = áp-dụng và đạt. Báo n-a lên hub làm **giảm** nấc tuân-thủ thật của SE và nhiễu ma-trận adoption. **FIX:** chuyển sang mục "đã thoả, giữ 0 mis-nấc".

**m5 · Rơi owner-decision so với lane E (d)** — lane E nêu 6, §3.4 giữ 4. Thiếu: (i) **duyệt chi-phí roster 12→14** (lane E (d)3: *"Anh chốt thêm 2 / gộp / SKIP=n-a"* — all-inherit ⇒ 2 vai mới ăn top-tier ×2 đầu-phiên; §3.4 O2 ghi "anh đã OK đồng ý adopt H24" nên **có thể** đã phủ); (ii) **stamp-mark** (lane E (d)5) — §3.1 D9 nhắc stamp nhưng §3.4 không liệt và **W6 không lên lịch** (W6 = push → adap-report → adap-request → send-email); (iii) **scope-set detector độ-tươi** (lane E (d)6). **FIX:** bổ sung (ii) vào §3.4 + W6, khai rõ (i) đã phủ bởi "OK đồng ý".

**m6 · §3.9 thiếu acceptance cho ~7 việc đã specced:** W0.1 `git check-attr` · W0.4 `README:52` · W0.5 baseline orphan · Sàn-1 `git grep args.run ≥3` · ④(b) wire validator vào session-end · §2.3(c) checklist kết-nạp · §2.4(1)(b) format FLAG + enum · và **toàn bộ W6** (adap-report ×N / adap-request R1-R4 / send-email = 0 acceptance).

---

## REFUTATION LOG — claim tôi ĐÃ THỬ PHÁ nhưng KHÔNG phá được

1. **"6 broadcast, không phải 7"** — tấn công mạnh nhất (7 file trong inbox; spec tự khai "7 copy"). **KHÔNG phá được:** #7 đóng ở S115 với adap-report + code đổi thật (`memory-archive-gate.ps1` value-primary/age-blind). Chỉ còn m1 (thiếu dòng lý-do).
2. **§1.2 L1 "57 wal: bị-kẹp, §5.0 chỉ đếm đuôi"** — verify verbatim `session-end.md:112` (*"K = số subject **LIÊN-TỤC**... DỪNG ngay khi gặp subject KHÁC"*) + `:113` (*"wal: kẹp sâu hơn → **GIỮ NGUYÊN**, chấp-nhận noise"*). **ĐỨNG.** Kết-luận "sửa §5.0 = tiền-đề" hợp-lệ.
3. **§1.4 F2 `workflows/README.md:52` stale** — verify verbatim: *"**SE TAILORED-OUT** … bypass-surface ~N/A"*. **ĐỨNG.** W0.4 đặt trước Sàn-1 = đúng thứ tự.
4. **§1.1 "188 file `i/lf+w/crlf`"** — đo lại live: **188** chính xác. **ĐỨNG.**
5. **§2.5 "SE đã stamp trước owner-sign hub ⇒ 0 hành-động"** — verify `ACTIVE-MARKS.md:19-20`: `RC-…11-07-2026-20-42-01` + `RC-…12-07-2026-11-43-45`, cả 2 🔖 Active-High, ngày 07-11/07-12 < hub-sign 07-14. Broadcast owner-sign chỉ đòi *"đóng dấu vào ledger phía mình rồi báo lại nấc"*. **ĐỨNG.**
6. **§2.4(2) GAP-3 "C2/B3 mù menu/policy" + "grep `memory-budget|ConvertFrom-Json` = 0 hit"** — đo lại: **0 hit**. **ĐỨNG.**
7. **H24 caveat (b) + (d) bắt buộc** — broadcast §6 đòi đúng 2 caveat này. Spec giữ (b) = phép-thử-xoá-carry §2.4(1)(c) *"máy im (đúng — caveat (b))"*; (d) = dòng 286 *"Flag TĂNG khi thêm detector-class = mở-rộng-thiết-bị"*; bonus (a) dòng 284 + (c) dòng 286. **4/4 có mặt — KHÔNG phá được.**
8. **§1.2 L4 / §1.3 "H23 ⟂ H8 không xung-đột; GAP#6 là lỗi sống"** — đối chiếu H23 §4 (*"Hệ chỉ dùng MỘT model duy-nhất: (2)(3) rút gọn… vẫn nên làm (1) và (5)"*) + pin-simple. GAP#6 verify live: `fable-clone.md:15` hứa *"ENSEMBLE tier-2-mạnh-nhất"*, `:38-40` chỉ nói ghế lead, Grep `tier:'opus'` trong file = **0**. **ĐỨNG.**
9. **§3.5 "57 KHÔNG dọn"** — cite floor verify `session-end.md:113`; blast-radius (78 commit / 21 đổi SHA / `12071c5`+`67be443` là chứng hook-FIRE của chính H22) hợp-lệ; hub cũng giữ 1/1. **ĐỨNG.**
10. **Truy tìm selector age-based còn sống** (sẽ nâng m1 lên Critical) — `memory-archive-gate.ps1` age-blind từ S115. **KHÔNG phá được.**

---

**Ghi chú vai:** RETURN-only theo lệnh lead (B3 single-writer) — **không Write/Edit file nào, kể cả `.claude/agent-memory/reviewer/MEMORY.md`** (đè yêu-cầu "update MEMORY trước khi stop" trong persona). Vật-liệu đáng nhớ để lead harvest: *(a)* **anti-pattern MỚI: "acceptance-vacuous" — gate đo thứ ĐÃ xanh sẵn (C4) và gate đo chữ thay vì runtime (C1/M2/M5)**; *(b)* **lane-compression drift: lead nén `anchor_patterns[]` số-nhiều → 1 regex làm gãy chính positive-control (C2)** — bài học: khi nén lane→spec, mọi cấu-trúc SỐ-NHIỀU phải kiểm lại với acceptance phụ-thuộc nó; *(c)* **spec tự cấm Bash-grep `\|` ở §2.3(a) rồi tự dùng ở §2.4(5)(c)** — luật viết ra không tự áp cho chính mình.