Files
solution-erp/.claude/workflows/runs/2026-07-22-S142-adap-9-10-vong-2/sub-task-0.md
pqhuy1987 2757e418a1
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m43s
[CLAUDE] Docs: closeout OUTWARD wave adap đợt-9/10 + vá drift skill-matrix H24
Closeout 4 mục OUTWARD của wave S141-S142 (anh gật @S143):
- adap-report 7/7 thư, đủ 5 trường REPORT-FORMAT LOCK, evidence đo thật
- email hub báo-nấc (sha 6c94873f72e0, selftest_verify exit 0, log _index cùng lượt)
- STAGE-2: 7 thư -> inbox/ai_infra/, _index 0 pending, cross-check 7/7
- squash K=8 wal: -> commit chốt

Ngoài wave: agents/README skill-matrix thiếu 2 row H24 (drift S121) -> 15/17 thành 17/17.

Nấc cao nhất khai được = executed-file/verified-pending-restart (trio CHƯA spawn).
2 phát hiện khai thẳng theo G-015 (chi tiết trong report + email):
- whitelist `tools:` KHÔNG chặn ghi ở runtime: 6 vai read-only bị append Write+Edit
- pull-lag do "watch broadcasts/inbox" canh nhầm chỗ

TICK H24: counter 16->17 (S143), 3-điều-kiện OK-reachable, không fail-loud.
Detector TOTAL 46 == baseline 46, 0 flag mới.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 12:32:27 +07:00

159 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 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 1417" (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 "roster14" tại thời-điểm §Q3 **no-retrofit**, sửa = giả-mạo bản-ghi đã . 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 1417, cùng tiền-lệ S138; (b) 3 row = **SEED-STATE** nên `l1_hot ~1.5KB` + `l2_*=0` ĐÚNG, không phải under-fill; (c) các row KHÁC vẫn snapshot S107/S138 **đã 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"` ( **MÔ-TẢ** việc sweep). Đây đúng lớp "doc định-nghĩa anti-pattern tất-yếu chứa mẫu đó". 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` 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 ( 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 **Stop-hook `wal-flush` auto-commit** (`b1d92b9 wal: flush 20260722T1104`) HEAD dời giữa lane bình-thường, không phải W-A ghi.