# sub-task-0 — LANE W-A (wiring nghi-thức + sweep roster + budget)

**Vòng-2 CẮT-GỌT** (vòng-1 chết @S141). Có Write/Edit → **ghi TRỰC TIẾP file này** (anti-#53).
**Hạng mục:** A4 · A5 · A6 · A7 (A1/A2/A3 ĐÃ LAND vòng-1 — CẤM đụng lại).

## Tiến-độ (🔴 TICK NGAY sau MỖI file — đừng đợi cuối; vòng-1 chết giữa 2 lần tick nên mất dấu 3 việc đã xong)

- [x] A4 — `session-start.md`: (i) §2.1.8(b) 3-điều-kiện · (ii) §2.1.9 MỚI (consent-gated, TUẦN TỰ, PIN, vết-2-lớp M4) · (iii) [M3] `:97` BỎ-số **+ EXTRA `:64` "14/14 ALIVE" (site AC4 ngoài spec — sửa dạng honest-historical)**
- [x] A5 — `session-end.md`: (i) §L.b(k) MỚI + header `:52` (a)→(k) + [M3] `:142` BỎ-số · (ii) annex phép-8 tại §L.b(j)(vi) chứa `da349fc`
- [x] A6 — sweep 6 site còn SỐNG: `fable-clone.md`(3) · `fable-real.md`(2) · `harness-11-engine.md:345`(+[n6] bỏ line-range) · `vocab-alias-map.md:51` · `workflows/README.md:64` · `agents/README.md:5`+`:222`+decision-tree+skill-matrix **+ EXTRA `harness-11-engine.md:298`** — file-set MÌNH = 0 residual
- [x] A7 — `memory-budget.json` +3 row `measured` (số THẬT từ script) + `_note` addendum [n2] — **fresh-run diff = 0-mismatch**
- [x] TỰ-VERIFY AC1·AC2·AC3·AC4·AC5·AC13 — xem §"Tự-verify" cuối file

## Log chi-tiết
(append sau MỖI file — ghi cả lệnh verify đã chạy + output thật)

### A4 — `.claude/commands/session-start.md` ✅ DONE

**(i) §2.1.8(b) REWRITE 3-điều-kiện** (thay 1 câu cũ "counter thấp hơn HOẶC not-reachable → BÁO ANH"):
- ĐK1 counter LÙI → FAIL-LOUD · ĐK2 not-reachable ∧ `git cat-file -t`=commit ∧ counter-không-lùi → `squash-benign` append 1 dòng `history[]` + ĐI TIẾP KHÔNG báo anh · ĐK3 object-MISSING ∨ counter-lùi → FAIL-LOUD như cũ.
- +1 dòng ranh 2 tầng: contract runtime = RĂNG THẬT, detector chỉ INFORM (KHÔNG vào TOTAL).
  🔴 **Thứ-tự chống ghost-wire (làm 2 nhịp, CÓ CHỦ ĐÍCH):** viết lần đầu **KHÔNG nêu tên detector** (lúc đó lane W-B chưa land ⇒ cite = ghost-wire claim, `feedback_h18_ghostwire`). Cuối lane, **verify ĐĨA** `grep -c 'counter-ancestor-classify\|H24-5' scripts/governance-detectors.ps1` → **5** (+ đọc `:1360 :1400 :1515 :1540` xác-nhận tên id + nhãn `INFORM-only, NOT folded into TOTAL`) ⇒ MỚI Edit thêm cite đích-danh `H24-5 counter-ancestor-classify`. **Cite chỉ được viết SAU khi vật tồn tại trên đĩa**, không viết theo kế-hoạch.

**(ii) §2.1.9 MỚI** chèn ngay trước `### 2.2 Skill registry` (heading ở `:218`). 9 khoản (a)→(i): consent-gated KHÔNG auto-run · TUẦN TỰ CẤM `parallel()` · lead scribe NGAY từng con vào `runs/<run-id>/harness-{eval,refine,audit}-return.md` · PIN đích-danh fail-closed · Mirror C1 đóng-băng · post-wave `git status --short` assertion · KHAI script-arm ⟂ sub-arm · phiên-LOGIC map tạm = `S<nn>` + KHÔNG cadence-key KHÔNG tick · **[M4] vết-2-lớp** (proposal-line in CẢ khi Light + vết WAL `trio: skipped S<nn> (ly-do)`).

**(iii) [M3] `:97`** → `**10 product/quality + monitor INFORM-only (H1 · H2 · 2×H24 · 3×trio-memory)**` (BỎ-số, giữ con-trỏ canonical STATUS §Sub-agents) + **3 bullet trio** vào topology list + 1 dòng 🔴 ranh-trục trio.

**(iv) EXTRA ngoài spec — `:64`** `Đo S122: **14/14 ALIVE…**`. SPEC A6 KHÔNG liệt-kê site này nhưng **AC4 repo-wide** đòi 0 site sống. 🔴 KHÔNG đổi thành `17/17` (= **bịa số đo chưa hề chạy** — AC12 nói trio probe = phiên SAU restart). Sửa thành `toàn-roster-khi-đó ALIVE — 14 vai, 0 error, 0 garble` + 1 câu khai "MỐC ĐO LỊCH-SỬ S122, +3 trio CHƯA probe". Giữ nguyên số 14 đã đo, chỉ bỏ dạng `N/N` (dạng này khiến người đọc hiểu = roster hôm nay).

**Verify đã chạy (output THẬT):**
```
grep -o 'squash-benign' session-start.md | wc -l   -> 2
grep -o 'FAIL-LOUD'     session-start.md | wc -l   -> 4
grep -o 'cat-file -t'   session-start.md | wc -l   -> 2
grep -n '^### 2.1.9'    session-start.md           -> 218:### 2.1.9 Bộ-ba đồng-kiểm memory …
grep -o '14/14'         session-start.md | wc -l   -> 0
grep -o '4 monitor'     session-start.md | wc -l   -> 0
grep -o 'trio-memory'   session-start.md | wc -l   -> 7
grep -o 'trio: skipped' session-start.md | wc -l   -> 1
```

### A5 — `.claude/commands/session-end.md` ✅ DONE

**(i) §L.b(k) MỚI** chèn sau (i) H18-D(a) → heading ở `:115`. 8 khoản (i)→(viii) **mirror §2.1.9**: consent · tuần-tự CẤM `parallel()` · scribe NGAY · PIN fail-closed · **(v) ĐỌC số instrument ĐÃ chạy ở khối (c), CẤM chạy lại** (chạy lại = đo-2-lần lệch cửa-sổ + phá đóng-băng bề-mặt-đo; ngoại-lệ = con KIỂM re-chạy ≥2 số load-bearing đúng contract) · post-wave `git status --short` · [M4] vết-2-lớp · đơn-vị nhịp + KHÔNG cadence-key/KHÔNG tick.
- Header `:52` `**(a)→(j)**` → `**(a)→(k)**` + thêm map `(k) = bộ-ba đồng-kiểm memory (S141)`. **GIỮ NGUYÊN ghi-chú `:53`** ("đếm từ thân" — verify còn nguyên).
- [M3] `:142` (§3.2 Sub-agent state) → `**10 product/quality + monitor INFORM-only (H1 · H2 · 2×H24 · 3×trio-memory)**` BỎ-số, giữ con-trỏ canonical.

**(ii) Annex phép-8** 1 dòng verbatim SPEC v2 A5(ii), đặt cuối §L.b(j)**(vi)** (ngay sau câu "PASS-với-carve-out (consent)"), thụt lề khớp cấp `(vi)`. Chứa `dede7ec5` + `da349fc` + "re-đo 19:12:41+07" + "closeout trước = baseline hợp-lệ ghi n/a".

**Verify đã chạy (output THẬT):**
```
grep -o '\*\*(a)→(k)\*\*' session-end.md | wc -l  -> 1
grep -o '\*\*(a)→(j)\*\*' session-end.md | wc -l  -> 0   (header cũ hết)
grep -o 'da349fc'   session-end.md | wc -l        -> 1
grep -o 'dede7ec5'  session-end.md | wc -l        -> 1
grep -o '4 monitor' session-end.md | wc -l        -> 0
grep -n '^- \*\*(k)' session-end.md               -> 115:- **(k) 🧪🧭🧮 Bộ-ba đồng-kiểm memory @ĐÓNG-PHIÊN …
grep -n 'đếm từ thân' session-end.md              -> 53 (ghi-chú GIỮ nguyên)
```

### A6 — sweep roster (BỎ vs ĐỔI, per-site) ✅ DONE

🔴 **Đếm bằng `git grep -o … | wc -l` (occurrence), KHÔNG `grep -c` (dòng)** — repo này đầy mega-line. `git grep` cũng tránh treo do node_modules (lần đầu `grep -rn` timeout 120s).
🔴 **Exclusion citation-trap** áp đúng 7 nhánh: `docs/_archive/` · `docs/changelog/sessions/` · `.claude/workflows/runs/` · `broadcasts/` · `.claude/agent-memory/` · `docs/governance/adap-reports/` · `outbox/` (+ `.claude/auto-memory/` — memory-file, ISOLATION cấm ghi).

| Site | Loại vá | Làm gì |
|---|---|---|
| `fable-clone.md:3` `:18` | **ĐỔI** (SPEC v2 A6 chỉ đích danh) | `roster 14` → `roster 17` |
| `fable-clone.md:19` | enum | +3 tên trio |
| `fable-clone.md:21` | **BỎ số** | `VALID_ROLES đủ roster 14` → `…đủ roster` (chính dòng đó nói "KHÔNG chép số ở đây" ⇒ ĐỔI-số là tái-phạm) + nối chuỗi lịch-sử `14→17 (S141, +3 trio-memory)` |
| `fable-real.md:3` `:19` | **ĐỔI** | `roster 14` → `roster 17` |
| `fable-real.md:20` + dòng `>` dưới | enum + lineage | +3 tên trio · `+3 @S141 = bộ-ba đồng-kiểm memory` |
| `harness-11-engine.md:345` | enum + **[n6]** | +3 tên trio · cite `hmw.js VALID_ROLES` **bỏ line-range `:22-36`** (ghi rõ "tra bằng TÊN không bằng số dòng — line-range cũ đã lệch khi enum dài thêm") · lineage `+3 trio-memory S141 (14→17)` |
| `harness-11-engine.md:298` **(EXTRA — ngoài 13 site SPEC)** | **BỎ số** | `worker-tier-pin S124 (14/14 frontmatter opus+effort:max…)` → `(TOÀN-ROSTER frontmatter … — số vai canonical → STATUS §Sub-agents, B1)`. Verify tiền-đề TRƯỚC khi viết "toàn-roster": `grep -l '^model: opus' .claude/agents/*.md \| grep -v README \| wc -l` → **17**; `^effort: max` → **17**; tổng agent → **17** ⇒ phát-biểu ĐÚNG |
| `vocab-alias-map.md:51` | **ĐỔI** (SPEC chỉ đích danh) | `14/14` → `17/17` (đã verify 17/17 thật ở trên, KHÔNG bịa) |
| `workflows/README.md:64` | **BỎ số → con-trỏ** | `trong 9 roster` → `trong roster — số vai canonical → docs/STATUS.md §Sub-agents, B1 KHÔNG chép số` |
| `agents/README.md:5` | **BỎ số [n8]** | `**10 product/quality** … + **4 monitor INFORM-only** …` → `**nhóm product/quality** (…) + **nhóm monitor INFORM-only** (H1 · H2 · H24×2 · **trio-memory ×3 S141**)` + 1 câu 🔴 "Liệt-kê NHÓM, KHÔNG tổng-số" trỏ canonical (đúng luật `README:3` "vá bằng BỎ số, không ĐỔI số") |
| `agents/README.md:222` | **ĐỔI + enum** | `14 folder: …` → `17 folder: … · **harness-eval · harness-refine · harness-audit (+S141 trio-memory)**` |
| `agents/README.md` decision-tree | **THÊM nhánh** | nhánh trio đặt TRƯỚC "Quick task < 30 min": consent-gate → **TUẦN TỰ 3 spawn RIÊNG** (CẤM `parallel()`) + 2 dòng ⟂ ranh-trục (vs H1/H2/H24 · vs reviewer/harvest) + 1 dòng "3 vai KHÔNG có Write/Edit ⇒ lead scribe NGAY" |
| `agents/README.md` skill-matrix | **THÊM 3 row** | 3 row `ref-only` (eval: đọc output 5 script · refine: đọc `harness-eval-return.md` PIN + reinject-ledger · audit: đọc run-folder PIN + re-chạy ≥2 số) |
| `session-start.md:64` **(EXTRA)** | **BỎ dạng `N/N`, GIỮ số đo** | xem log A4(iv) |

**Verify AC4 (output THẬT, sau vá):**
```
git grep -n -o -E "roster 14|14/14|14 folder|14 vai" -- '*.md' '*.js' | grep -v <7 exclusions + auto-memory>
  -> .claude/WAL.md:3 · .claude/governance/ACTIVE-MARKS.md:23 (×2) · docs/HANDOFF.md:22,54,76 · docs/STATUS.md:227,450(×2),512,552,578

git grep -n -o -E "roster 14|14/14|14 folder|14 vai" -- <9 file file-set W-A>
  -> (rỗng) = 0 residual TRONG file-set được giao ✅

git grep -o -E "9 roster" -- '*.md' '*.js'
  -> chỉ còn agent-memory/investigator-codebase + runs/ (đều thuộc nhánh EXCLUDED) ✅
```
🔴 **4 file CÒN SỐNG NẰM NGOÀI file-set W-A — KHÔNG tự ý sửa** (isolation B6): `docs/STATUS.md` + `docs/HANDOFF.md` = **em-main @closeout** (SPEC A6 đã giao) · `.claude/WAL.md` = sổ lead, dòng `:3` đang MÔ-TẢ chính việc "sweep roster 14→17" (citation-trap, tự-tiêu khi WAL flush) · `.claude/governance/ACTIVE-MARKS.md:23` = **con dấu ĐÓNG-BĂNG** `RC-pqhuy1987-15-07-2026-15-32-23` ghi "roster→14" tại thời-điểm ký ⇒ §Q3 **no-retrofit**, sửa = giả-mạo bản-ghi đã ký. ⇒ AC4 chỉ ĐÓNG được sau closeout em-main; W-A báo nấc **executed-file / verified-trong-file-set**.

### A7 — `.claude/agent-memory/memory-budget.json` ✅ DONE (số THẬT, 0 bịa)

**Tiền-đề trước khi đo:** 3 seed đã tồn tại từ vòng-1 → `harness-eval` 1547B · `harness-refine` 1616B · `harness-audit` 1513B (`wc -c`).

**CHẠY THẬT** `powershell.exe -ExecutionPolicy Bypass -File scripts/measure-agent-memory.ps1` → script in JSON 17 agent. Số 3 row trio script in ra:
```
harness-eval   : l1_hot_bytes 1547 · l2_verbatim 0 · l2_index 0 · l2_gist 0
harness-refine : l1_hot_bytes 1616 · l2_verbatim 0 · l2_index 0 · l2_gist 0
harness-audit  : l1_hot_bytes 1513 · l2_verbatim 0 · l2_index 0 · l2_gist 0
```
CHÉP NGUYÊN 3 số vào `measured` (KHÔNG ước-lượng, KHÔNG làm tròn) + `rollout` = "S141 seed - first-run pending restart+consent; re-measure @drift-audit 2026-08-01".

**[n2] `measured._note` addendum** (nối sau addendum S138, giữ style pure-ASCII của khối `_note`): khai (a) +3 row đo TƯƠI sau seed, roster 14→17, cùng tiền-lệ S138; (b) 3 row = **SEED-STATE** nên `l1_hot ~1.5KB` + `l2_*=0` là ĐÚNG, không phải under-fill; (c) các row KHÁC vẫn snapshot S107/S138 và **đã trôi tiếp** — ghi thẳng số S141 đo được (cicd 22607 · inv-cb 26624 · reviewer 24024 · harvest 14899 · impl-be 19449 · impl-fe 15951 · test-spec 22140 · tooling 15884 · lead-view 4920 · lead-omission 6665) nhưng **KHÔNG vá lẻ** — chờ full re-sync @drift-audit 2026-08-01 đúng rule đầu file "never hand-edit measured_bytes"; (d) khai **KHÔNG cadence-key / KHÔNG block `harness_trio`** + lý-do (nhịp bộ-ba sống ở nghi-thức + persona; trộn với `h24_cadence` = 2 đồng-hồ lệch).

**Verify đã chạy (output THẬT):**
```
ConvertFrom-Json                       -> "JSON parse OK"
measured rows (trừ _note)              -> 17
harness-eval/refine/audit trong json   -> 1547/0/0/0 · 1616/0/0/0 · 1513/0/0/0
$j.harness_trio present?               -> False   (đúng: KHÔNG thêm block)
FRESH RE-RUN script rồi diff vs json   -> match=True ×3 · MISMATCH COUNT = 0 · script agents total = 17
```

🔴 **TỰ BẮT CHÍNH MÌNH — citation-trap gen-2 (`feedback_citation_trap_selfreference`):** sweep cuối lane phát-hiện **chính addendum vừa viết** sinh site MỚI `memory-budget.json:143 "roster 14"` (vì nó **MÔ-TẢ** việc sweep). Đây đúng lớp "doc định-nghĩa anti-pattern tất-yếu chứa mẫu đó". Vá bằng **use⟂mention**: `(roster 14->17)` → `(roster tang tu 14 len 17)` — **giữ NGUYÊN sự-thật chuyển-đổi**, chỉ bỏ token bị quét. Re-parse JSON sau sửa: OK, 17 row, 1547/1616/1513 nguyên vẹn. Bài học áp ngay: **sau khi vá xong phải grep 4 pattern trên CHÍNH DIFF của mình**, không chỉ trên repo trước-khi-sửa.

---

## Tự-verify (AC1 · AC2 · AC3 · AC4 · AC5 · AC13) — lệnh + output THẬT

**AC1 — 3 persona + 3 MEMORY.md non-empty** (A1/A2 vòng-1, chỉ VERIFY không sửa):
```
harness-eval   persona 6261B · model:opus 1 · effort:max 1 · Write/Edit trong tools = 0 · MEMORY.md 1547B
harness-refine persona 6012B · model:opus 1 · effort:max 1 · Write/Edit trong tools = 0 · MEMORY.md 1616B
harness-audit  persona 5135B · model:opus 1 · effort:max 1 · Write/Edit trong tools = 0 · MEMORY.md 1513B
```

**AC2 — TRIPLE 17/17/17** (đo 3 nguồn ĐỘC-LẬP + cross-check TÊN, không chỉ đếm):
```
(1) ls -1 .claude/agents/*.md | grep -v README | wc -l          -> 17
(2) VALID_ROLES parse từ hmw.js (node, regex khối hằng-số)      -> 17
(3) README enum dòng :234 tách theo '·', bỏ ngoặc/bold          -> 17
diff <ls-names sorted> <README-enum sorted>                      -> RỖNG (0 lệch)
diff <ls-names sorted> <VALID_ROLES sorted>                      -> RỖNG (0 lệch)
README.md CÒN NGUYÊN (không xoá để lách đếm — bẫy catastrophic-Goodhart R2-C1) -> YES
```

**AC3 — nghi-thức mới hiện diện:**
```
grep -c '^### 2.1.9 Bộ-ba đồng-kiểm memory' session-start.md -> 1  (heading :218)
grep -o 'squash-benign' session-start.md | wc -l             -> 2
grep -o 'FAIL-LOUD'     session-start.md | wc -l             -> 4  (GIỮ, không mất răng)
grep -c '^- \*\*(k) 🧪🧭🧮' session-end.md                   -> 1  (:115)
grep -o '(a)→(k)' session-end.md | wc -l                     -> 1 ; '(a)→(j)' còn -> 0
grep -o 'da349fc' session-end.md | wc -l                     -> 1  (dòng 111)
sed -n '110p;111p;112p' session-end.md → (vi) / annex / (g)   -> annex NẰM ĐÚNG trong §L.b(j)(vi)
grep -o 'H24-5 `counter-ancestor-classify`' session-start.md -> 1  (cite thêm SAU khi verify đĩa)
```

**AC4 — sweep:** xem bảng A6 ở trên. **File-set W-A = 0 residual** (lệnh grep in ra rỗng, exit 1). **4 file CÒN SỐNG nằm NGOÀI quyền lane** (STATUS · HANDOFF = em-main @closeout · WAL = sổ lead tự-tiêu · ACTIVE-MARKS = dấu đóng-băng no-retrofit) ⇒ AC4 **CHƯA đóng repo-wide**, khai thật.

**AC5 — budget 3 row:** fresh-run diff **MISMATCH COUNT = 0**; `_note` có addendum S141; **KHÔNG** `harness_trio` block; **KHÔNG** cadence-key.

**AC13 — git status:** thay-đổi thuộc lane W-A đúng **9 file-set + `sub-task-0.md`** (diffstat: budget 7 · agents/README 16 · fable-clone 8 · fable-real 8 · session-end 14 · session-start 30 · workflows/README 2 · engine 4 · vocab-alias 2 · diary 109 → **175+/25−**). Các file dirty KHÁC **KHÔNG phải của W-A**: (a) lane W-B disjoint = `check-email.md` · `send-email.md` · `error-ledger.md` · `session-model-se-draft.md` · `governance-detectors.ps1` · `sub-task-1.md`; (b) dirty TỪ TRƯỚC khi lane chạy (có trong `git status` lúc nhận task) = `hmw.js` · `.session-counter.json` · 3 persona untracked · `stamp_verify.py` · `scheduled_tasks.lock`. 🔸 `.claude/WAL.md` + 2 diary vòng-1 biến khỏi status vì **Stop-hook `wal-flush` auto-commit** (`b1d92b9 wal: flush 20260722T1104`) — HEAD dời giữa lane là bình-thường, không phải W-A ghi.
