wal: flush 20260730T1608

This commit is contained in:
pqhuy1987
2026-07-30 16:08:53 +07:00
parent 6ba5cfe747
commit 77b1ad8964
6 changed files with 343 additions and 0 deletions

View File

@ -0,0 +1,57 @@
# _context-s-9 — SESSION-MODEL narrative durable
<!-- SCAFFOLD-META: sID=9 | ts-moc=2026-07-30T15:14:22+07:00 | nguon-ts=git log -1 --format=%cI @ HEAD 6ba5cfe | generator=scripts/session-scaffold.ps1 -->
> **sID (LOGIC-session) = 9.** 1 phiên-logic (bootstrap → work → sweep) trải nhiều window vật-lý nối bằng `/pause`+`/tiep`. Window = 0-ID governance; **sID = đơn-vị LOGIC**. Folder pin: `.claude/sessions/session-9/`.
> ts-mốc khởi-tạo = **2026-07-30T15:14:22+07:00** (nguồn: `git log -1 --format=%cI @ HEAD 6ba5cfe`) — mốc git-committer, KHÔNG phải wall-clock tuỳ-tiện.
>
> 🔴 **CẤM rewrite / tự-tóm block FLOW** (chống self-summary lossy). FLOW = append-only @`/pause`-only; vượt cap `session_ctx_kb` → distill SECTION CŨ thành pointer/gist, TUYỆT ĐỐI KHÔNG sửa entry verbatim đã ghi.
---
## (a) STOCK-map — reference-not-copy
> Bảng pointer tới nguồn durable. **KHÔNG copy nội-dung** (chống drift). Điền @bootstrap; row session-specific append dưới các row stable.
| Tên | Path | 1-dòng |
|---|---|---|
| WAL | `.claude/WAL.md` | mạch-việc-dở máy-state (H-22) — nối bằng `/tiep` |
| AI-context | `CLAUDE.md` | AI agent context SOLUTION_ERP (scope + quick-rules) |
| Trạng-thái | `docs/STATUS.md` | canonical mọi con-số (mig · bảng · test · roster) |
| Bàn-giao | `docs/HANDOFF.md` | brief 5 phút + bảng số chờ-anh + carry |
| Sổ đếm H24 | `.claude/governance/.session-counter.json` | counter + nhịp lead-self-audit |
| Thư cross-project | `broadcasts/_index.md` | INBOUND directed (`outbox/se`) — fan-out `outbox/all` KHÔNG vào đây |
| _(session-specific)_ | _(path)_ | _(1-dòng — append @bootstrap phiên này)_ |
---
## (b) FLOW — append-only @pause-only
> 🔴 **CẤM rewrite FLOW.** Mỗi `/pause` APPEND đúng 1 entry theo SCHEMA dưới (đặt DƯỚI dòng `FLOW-START`). Entry cũ = immutable. FLOW = SOURCE durable của "đang-đến-đâu"; bảng-đầu-việc = VIEW derive từ đây (single-source).
<!-- ENTRY-SCHEMA (guidance, KHONG phai entry that — /pause command dien; parser real-entry match `^### PAUSE-\d+`, placeholder `<k>` khong false-match):
### PAUSE-<k> <ts ISO-8601>
> anh: <tin-nhan anh VERBATIM — copy nguyen-van, KHONG paraphrase>
**(1) quyet-dinh da CHOT** / **(2) delta con SONG** / **(3) con-tro**
```json
{ "machine_block": "python scripts/session_ctx.py machine-block --session <N> --json" }
```
-->
<!-- FLOW-START — entries append bên dưới dòng này, mới nhất ở CUỐI -->
_(chưa có PAUSE — entry đầu append @`/pause` đầu tiên của phiên)_
---
## (c) STOCK-touched — máy-derive
> Bảng file-đã-đụng trong phiên, **máy-derive** từ `git diff --name-only <anchor>..HEAD` @pause/snapshot. KHÔNG điền tay.
| File | Δ | Ghi-chú |
|---|---|---|
| _(máy-derive @pause/snapshot)_ | | |

View File

@ -0,0 +1,58 @@
# run — S163 bookend @open (phiên-LOGIC L9, cửa-sổ đầu)
- **ngày:** 2026-07-30
- **nhãn phiên:** S163 · **phiên-LOGIC:** L9 (`.claude/sessions/session-9/`)
- **HEAD vào phiên:** `6ba5cfe` (wal: flush 20260730T1514)
- **lead:** Opus 5 MAX (default @S149) · **HMW-mode:** ON
## Bối cảnh vào phiên (đo tươi, không chép)
- **Sàn-3 KÊU** ở tín-hiệu ① — 3 orphan run-folder, sổ WAL trống. 4 tín-hiệu MẠNH còn lại (②③④⑤) + ORPHAN-L đều IM.
- `2026-07-29-S159-bookend-open/` (11 file ~231 KB)
- `2026-07-29-S159-tong-quan-pipeline-menu/` (13 file)
- `2026-07-29-S160-khkk-dryrun-plan/` (20 file)
- Chẩn đoán lead: **dạng-4** (kết quả nằm trong `run.md`, thiếu `*-synthesis.md` phẳng) — nợ nghi-thức retro-harvest đã khai `[carry:orphan-retro-harvest-s159]` @`HANDOFF.md:35`, KHÔNG phải mạch việc sản phẩm dở.
- **Owner chốt (AskUserQuestion): "Bootstrap tiếp, bỏ mạch"** ⇒ 3 folder giữ nguyên dạng nợ carry, không xử trong phiên này.
- **L8 đã đóng trọn:** `session-8/_end` — 3 `_pause` / 3 `_tiep` / 3 `_snapshot` / mind-blocks=6 / h24-tick counter=36.
- **Scaffold L9:** `session-scaffold.ps1 -New``session-9` (max was 8), ts-mốc `2026-07-30T15:14:22+07:00`.
## Mirror C1 — bề-mặt-đo ĐÓNG BĂNG trong cửa sổ này
Từ script đo đầu tiên tới verdict cuối: KHÔNG ghi `agent-memory/` · `.session-counter.json` (đã tick TRƯỚC khi đo) · `ACTIVE-MARKS` · `STATUS` · `HANDOFF` · `gotchas` · `error-ledger` · `migration-todos` · `agents/*.md`. Ngoại lệ: `.claude/WAL.md` + `.mfe-state.json`.
## Máy đã chạy TRƯỚC vai (số nguyên văn)
| script | kết quả |
|---|---|
| `session-counter-tick.ps1 -Session S163` | clean: S162 → S163, counter **36 → 37** (HEAD 6ba5cfe), atomic write |
| `nhip-no-probe.ps1` | `kiem light 1/6 deep 12/15 ok \| tran-bo-nho 0 over-cap l2idx 0 over \| run-chua-gom 3 \| pull-cach 8 ngay` |
| `distill-shard-probe.ps1` | `pending=15 \| nguong=15 => IM` (biên `-gt` strict — 15 không > 15) |
| `governance-detectors.ps1` | **TOTAL 44** + **6 INFORM** (tách, không gộp). HIGH duy nhất = `docs/STATUS.md` canonical-itself-stale (Gotchas ghi 84, `gotchas.md` max anchor **85**) |
| `crystallized-backfill.ps1` | hotload 6 nguồn = **657.229 B** · tok RANGE [164.307..219.076] · cap 380.000 · **measured_headroom 160.924 tok** · target owner 210.000 ⇒ headroom binds |
| `memory-selfimprove-audit.ps1` | CRITERIA A1 A2 A3 B1 B2 HCV · **GAP: HCV:MED** (run-folder này 4 sub-md / 0 synthesis — đúng hiện trạng đang chạy, không phải lỗi) |
| `list_projects` (RAG) | service **UP** · `solution_erp` chunk **2449** (khớp canonical) · `last_indexed_at` **2026-05-29** = STALE ~2 tháng; sibling VIPIX re-index **2026-07-30 15:23** cùng ngày |
## Vòng đã chạy
### V1+V2 — 4 vai spawn song song (bookend @open, hình-B vô-điều-kiện)
| vai | file | trạng thái |
|---|---|---|
| `tooling-auditor` (H1) | `sub-tooling-auditor-open-S163.md` | ⏳ |
| `harvest-curator` (H2) | `sub-harvest-curator-open-S163.md` | ⏳ |
| `lead-stale-auditor` (H24) | `sub-lead-stale-open-S163.md` | ⏳ |
| `lead-gap-auditor` (H24) | `sub-lead-gap-open-S163.md` | ⏳ |
Mỗi vai được ép **ghi-đĩa-TRONG-lúc-làm** + `END <slug> — VERDICT=… — TOTAL=…` (chống #53 bằng thiết-kế ARTIFACT, không bằng prompt).
## Stages
- [x] BƯỚC 00.7 — echo body · HMW-ON · Sàn-3 (KÊU ① ×3) · owner chốt bỏ mạch
- [x] BƯỚC 0.8 — scaffold `session-9` bằng máy
- [x] BƯỚC 0.9 — dò 2 kênh thư: `inbox/se` + `inbox/all` **0 file** ⇒ không kéo, đi tiếp
- [x] Phase 1 READ — CLAUDE.md · STATUS (CURRENT) · HANDOFF · WAL · tiep.md §0
- [x] Phase 2 AUDIT — 7 script + RAG + ACTIVE-MARKS
- [ ] Phase 2 — 4 vai monitor trả verdict
- [ ] Phase 2.6 — `dotnet test` (đang chạy nền)
- [ ] Phase 3 — REPORT + MASTER-CHECKLIST
- [ ] Phase 3.5 — `_mind-s-9.md` block-0 + `mind-check` + `ctx-audit` @open

View File

@ -0,0 +1,76 @@
# sub-harvest-curator-open-S163 — H2 harvest-integrity 5-truc @open (phien-LOGIC L9)
> **INFORM-only / propose-only.** Em main = single-writer. File nay ghi TRONG LUC LAM (chong #53).
> Started: 2026-07-30 16:04 (local). HEAD tai luc bat dau = `6ba5cfe` (wal: flush 20260730T1514).
> Prev-baseline: `.claude/workflows/runs/2026-07-30-S162-bookend-close/sub-harvest-curator-close-S162.md` (13.833 B).
## 0. Ke-hoach do (ghi truoc khi do, de doi chieu voi ket qua)
- A. Universe run-folder + orphan (folder-scan, khong dung ledger — ledger RETIRED H18-B S100)
- B. 3 orphan PIN: do NOI DUNG da harvest chua (khong do ten file) — bai S122 32% duong-gia
- C. Coverage: vai da spawn (S162 + S163-open) vs diary co delta moi
- D. F-01 no goc: vai "chay that ma 0 tu-ghi" (ctx-verifier 3 phien lead-seed)
- E. S162 GATE-FAIL 4 finding: con treo may mon
- F. Corruption census (U+FFFD byte-mode) — baseline S162 = 24 hit / 12 file
- G. Placement: `find .claude -type d -empty` + stray `.claude` lac cho (git MU thu-muc rong)
- H. Completeness 4-field + Fidelity-flag
---
## A. UNIVERSE + ORPHAN (folder-scan; ledger RETIRED H18-B S100)
**Lệnh (tái-lập được):**
```
find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | wc -l -> 76
for d in */; do [ -f "$d/run.md" ] || echo "$d"; done -> 4
for d in */; do [ -f "$d/run.md" ] && { found=0; for f in "$d"*-synthesis.md "$d"harvest/*-synthesis.md; do
[ -f "$f" ] && [ -s "$f" ] && found=1; done; [ $found -eq 0 ] && echo "ORPHAN: $d"; }; done
```
- Universe **76 dir** (S162 do 75; Δ+1 = `2026-07-30-S163-bookend-open` = folder DANG MO cua chinh phien nay).
- Khong co `run.md`: **4** = 3 by-design cu (`S117-pe-approve-minmax-range`, `S117-pe-luyke-finalize` spec-only; `S144-bootstrap` co `bootstrap-synthesis.md`) **+1 = `S163-bookend-open` (IN-PROGRESS, chua sinh `run.md`)** -> KHONG orphan, nhung ghi nhan (anti-pattern #3: vang-mat khong doc thanh on).
- **Orphan THAT = 3 / 72** -- khop 100% brief PIN, khong hon khong kem:
`2026-07-29-S159-bookend-open` · `2026-07-29-S159-tong-quan-pipeline-menu` · `2026-07-29-S160-khkk-dryrun-plan`.
- Δ vs S162: **0** (khong sinh orphan moi; `S162-bookend-close` da co `close-synthesis.md` 7.409 B -> DA DONG).
---
## B. 🔴 3 ORPHAN PIN — DO NOI DUNG, KHONG DO TEN FILE (bai S122: 32% duong-gia)
**Thuoc 2 lop** (mot lop se sai theo huong nguoc nhau nen phai dung ca hai):
- **Lop A (per-FILE pointer):** `grep -r -F -l "<basename>" .claude/agent-memory/` -> pointer nam o so vai NAO (owner-check).
- **Lop B (folder-name pointer):** `grep -r -F -l "<foldername>" .claude/agent-memory/`.
### B1. `2026-07-29-S159-bookend-open` (11 file, 235.969 B) -> 🟢 **NOI DUNG DA HARVEST 10/10**
| sub-file | so vai giu pointer | owner-check |
|---|---|---|
| `harness-audit-return.md` | `harness-audit/MEMORY.md` | ✅ dung nha |
| `harness-eval-return.md` | `harness-eval/MEMORY.md` + `harness-refine/MEMORY.md` | ✅ (cross-ref hop le) |
| `harness-refine-return.md` | `harness-refine/MEMORY.md` + `lead-gap-auditor/archive/2026-07{,.gist}.md` | ✅ |
| `sub-ctx-audit-open-S159.md` | `ctx-audit/MEMORY.md` | ✅ |
| `sub-harvest-curator-open-S159.md` | `harvest-curator/MEMORY.md` | ✅ |
| `sub-lead-gap-open-S159.md` | `lead-gap-auditor/MEMORY.md` | ✅ |
| `sub-lead-stale-open-S159.md` | `lead-stale-auditor/MEMORY.md` | ✅ |
| `sub-ring1-audit-open-S159.md` | `ring1-audit/MEMORY.md` | ✅ |
| `sub-ring2-audit-open-S159.md` | `ring2-audit/MEMORY.md` | ✅ |
| `sub-tooling-auditor-open-S159.md` | `tooling-auditor/MEMORY.md` | ✅ |
**10/10 sub-file co Evidence-pointer trong dung so cua vai so-huu.** Thu con THIEU **chi la lop cuon (`*-synthesis.md`)**, KHONG phai lop harvest.
🔴 **Phan loai lai: day la SYNTHESIS-orphan, KHONG phai HARVEST-orphan.** Neu goi chung mot ten se uoc-luong sai chi-phi phien sau (tuong phai doc 236 KB de gom; that ra chi phai cuon lai).
### B2. `2026-07-29-S159-tong-quan-pipeline-menu` (13 file) -> 🟡 **9/10 harvest, 1 LOTS**
| sub-file | so vai giu pointer |
|---|---|
| `cicd-verify-1a47a61.md` | `cicd-monitor/archive/2026-07.md` ✅ |
| `cicd-verify-2a72695.md` | `cicd-monitor/archive/2026-07.md` ✅ |
| `cicd-verify-ea962b1.md` | `cicd-monitor/archive/2026-07.md` ✅ |
| `cicd-verify-b5799fc.md` | `cicd-monitor/MEMORY.md` (L1, qua dinh-chinh S162) 🟡 |
| `cicd-verify-a2bbcb9.md` | `cicd-monitor/MEMORY.md` (L1, qua dinh-chinh S162) 🟡 |
| `sub-frontend-designer-tongquan.md` | `frontend-designer/MEMORY.md` ✅ |
| `sub-frontend-designer-dot4.md` | `frontend-designer/MEMORY.md` ✅ |
| `sub-reviewer-diff-dot4.md` | `reviewer/archive/2026-07.md` ✅ |
| `sub-reviewer-diff-dot5.md` | `reviewer/archive/2026-07.md` ✅ |
| `sub-reviewer-diff-tongquan.md` (16.761 B) | **0 hit toan bo `.claude/agent-memory/`** 🔴 |
🔴 **F-01 (S163) MED — `sub-reviewer-diff-tongquan.md` = luot DUY NHAT trong 3 folder khong duoc bat ky so nao tro toi.**
2 anh-em cung lop (`-dot4`, `-dot5`) deu co pointer trong `reviewer/archive/2026-07.md` ⇒ khong phai "reviewer khong bao gio ghi pointer", ma **lech dung 1 file** (dong lop bat-doi-xung m#-S150). Can doi chieu noi dung truoc khi ket "mat": co the noi dung da gop vao entry chung ma khong dan ten file.

View File

@ -0,0 +1,21 @@
# sub-lead-gap-open-S163 — H24 §2(1) vai-GAP · bookend @open · phiên-LOGIC L9
> **Trục:** soi CÁI KHÔNG CÓ (⟂ `lead-stale-auditor` soi cái CÓ-nhưng-LỆCH).
> **Chống #53:** file này ghi TRONG LÚC LÀM, append từng FLAG. Nếu return garble ⇒ ruột vẫn còn ở đây.
> **Enum ĐÓNG** (`memory-budget.json` → `lead_self_audit.flag_classes`, 11 phần tử; 6 gap-* thuộc vai này):
> `gap-carry-dropped` · `gap-carry-aged` · `gap-owner-specifics` · `gap-decision-sunk` · `gap-underfill` · `gap-incident-unrecorded`
> **Nhịp:** `h24_cadence` → `light_every`=6 (stats-only) · `deep_every`=15 (còn cổng) · `jump_on_class_repeat`=3. M (carry-age) = `light_every` = 6.
## 0. Trạng-thái chạy
- [x] Đọc `memory-budget.json` — enum xác nhận 11 class, 6 gap-*.
- [ ] Dựng tập KỲ-VỌNG (commitment sources)
- [ ] Nhóm A — carry re-stamp (CA NẶNG NHẤT, streak 8)
- [ ] Nhóm B — việc rớt khỏi work-state
- [ ] Nhóm C — BLOCKER (54) người duyệt 3 trạm
- [ ] Nhóm D — owner specifics
- [ ] Nhóm E — quyết-định treo chìm (chỉ sống ở WAL/_mind)
- [ ] Nhóm F — memory under-fill + 6 vai không baseline
- [ ] Nhóm G — orphan run-folder S159/S160 (owner CỐ Ý hoãn — chỉ soi nhãn carry)
---

View File

@ -0,0 +1,61 @@
# sub-lead-stale-open-S163 — H24 §2(1) vai-STALE — bookend @open S163 (phiên-LOGIC L9)
> 🔴 ANTI-#53: file này ghi TRONG LÚC LÀM, append từng FLAG. Nếu file KHÔNG kết bằng dòng `END lead-stale-open-S163 …` thì lượt chạy CHẾT GIỮA CHỪNG ⇒ mọi con số bên dưới là **SÀN, KHÔNG phải TỔNG**, và coverage đọc theo bảng tick.
> Bản phiên trước: `.claude/workflows/runs/2026-07-30-S162-bookend-close/sub-lead-stale-close-S162.md` (16 FLAG = SÀN).
> Nền máy (KHÔNG chạy lại): governance-detectors TOTAL 44 + 6 INFORM. HIGH duy nhất = `docs/STATUS.md` canonical-itself-stale (Gotchas 84 vs disk max 85).
## Tập-đo — 8 nhóm bề-mặt (tick khi xong)
| # | Nhóm | Trạng thái |
|---|---|---|
| G1 | `docs/STATUS.md` (canonical + mega-line :6) | ⬜ |
| G2 | `docs/HANDOFF.md` (mega-line :5 + slot list) | ⬜ |
| G3 | `CLAUDE.md` root + `docs/CLAUDE.md` | ⬜ |
| G4 | `.claude/agents/*.md` + `agents/README.md` (GỒM persona của chính tao — điểm mù tự-quy-chiếu S153 M-1) | ⬜ |
| G5 | `.claude/commands/*.md` (session-start / session-end / tiep / pause) | ⬜ |
| G6 | `.claude/skills/*/SKILL.md` | ⬜ |
| G7 | `.claude/governance/` (ACTIVE-MARKS, .session-counter) + `docs/governance/harness-11-engine.md` | ⬜ |
| G8 | `.claude/sessions/session-8` + `session-9` (GỒM `_context-s-*` trong `tiep_reload.sources`) | ⬜ |
Class ∈ enum ĐÓNG `lead_self_audit.flag_classes`: view-stale-count · view-stale-status · view-stale-header · view-stale-role-desc · view-residual-asym.
---
## FLAG-1 — `view-residual-asym` — HIGH
**view:** `.claude/agents/README.md:243` — dòng "2 vai H24 = trục RIÊNG" kết bằng mệnh-đề: nhịp `h24_cadence`, cặp chạy **theo NHỊP** *không phải mỗi phiên*, trỏ `session-start §2.1.8` · `session-end §L.b(j)`.
**source (4 site, 2 file LỆNH — nơi THẬT SỰ điều-khiển spawn):**
- `.claude/commands/session-start.md:170` — "Nhịp: **cặp light = VÔ-ĐIỀU-KIỆN mỗi bookend** (hình B) · **deep = theo `h24_cadence.deep_every`**. *(vá FLAG-1 @S159)*"
- `.claude/commands/session-start.md:244` + `:269` — "Cặp light chạy VÔ-ĐIỀU-KIỆN ở MỖI bookend … KHÔNG cổng nhịp, KHÔNG consent"
- `.claude/commands/session-end.md:46-47` + `:112` + `:114` — "VÔ-ĐIỀU-KIỆN mỗi bookend §L.b(j)(ii); chỉ `deep` theo nhịp — vá FLAG-1 @S159"
**Lệch:** view nói cặp H24 chạy *theo nhịp, KHÔNG mỗi phiên*; source (chính 2 file mà view đang TRỎ TỚI) nói *vô-điều-kiện mỗi bookend, chỉ deep còn cổng*.
🔴 **Đây là ĐỢT SỬA-MỘT-PHÍA THỨ BA của cùng một claim, không phải flag mới:**
- @S153**lớp persona + STATUS** (ring2 M-1 bắt persona `lead-stale-auditor.md` còn dạy câu sai).
- @S159**lớp LỆNH — 6 site / 2 file** (FLAG-1 HIGH của chính tao; hai file trên còn mang dấu `*(vá FLAG-1 @S159)*`).
- **`agents/README.md` chưa ai chạm** ⇒ claim phủ-định sống sót qua CẢ HAI đợt vá, tới nay ≈ 14 nhãn phiên tính từ hình-B @S149.
**Vì sao HIGH (không phải doc-noise):** `.claude/agents/README.md` nằm trong `memory-budget.json → crystallized_backfill.hotload_sources` (dòng 122) = **auto hot-load mỗi phiên của lead**. Hại đúng cơ-chế S153: lead đọc đúng chữ → tự tính "light chưa tới hạn ⇒ chưa tới lượt cặp H24" **ngay tại bookend**.
**resolve:** `agents/README.md:243` nói cùng một điều với `session-start.md:170` (light vô-điều-kiện / chỉ deep theo `deep_every`) — hoặc BỎ hẳn mệnh-đề nhịp và trỏ B1 sang file LỆNH, đừng chép lại luật.
---
## FLAG-2 — `view-stale-role-desc` — HIGH
**view:** `.claude/agents/README.md:242` — dòng tự xưng **"VALID_ROLES (whitelist `hmw.js` — ĐỦ roster …)"** rồi liệt kê **20 tên**; cùng dòng: **"Cả 10 monitor đều INFORM-only"**.
**source:**
- Đĩa: `.claude/agents/*.md` = **24 file README = 23 vai** (khớp `memory-budget.json:28` `_roster_note_S153` "roster này = 23").
- `.claude/workflows/hmw.js:41-42` — VALID_ROLES **CÓ** `ctx-audit`, `ctx-curator`, `ctx-verifier`.
- `docs/STATUS.md:476` canonical `| Sub-agents | **23** |`.
**Lệch:** enumeration thiếu đúng **bộ-ba `ctx-curator` / `ctx-verifier` / `ctx-audit`** (+S153) ⇒ 20/23. Kéo theo con-số monitor: `hmw.js:236` xếp cả 3 vai ctx vào lane read-only INFORM ⇒ **13 monitor**, không phải 10.
🔴 **TÁI PHÁT NGUYÊN VĂN — đã là FLAG-11 của chính tao @S162, chưa vá:** dòng bài học `agents/README.md:28` ("**Acceptance cho lần sau: ĐẾM PHẦN TỬ trong mọi enumeration rồi so canonical, đừng so hình-dạng chuỗi**", rút từ S143) nằm **cách chỗ vi phạm 214 dòng trong CÙNG FILE**. Grep-theo-SỐ mù ở đây **có chủ đích**: dòng :242 cố ý KHÔNG chứa con số roster (đúng luật B1) ⇒ chỉ đếm phần-tử mới bắt được.
**resolve:** thêm 3 tên `ctx-*` vào enumeration :242 + sửa "10 monitor" → 13 (hoặc bỏ số theo đúng luật B1 của chính dòng đó), rồi `ls .claude/agents/*.md | wc -l` đối chiếu.
---

View File

@ -0,0 +1,70 @@
# sub-tooling-auditor — @open S163 (phiên-LOGIC L9) — H1 tooling-freshness 4-mặt
> Vai: tooling-auditor (H1). INFORM-only, propose-only. Ghi-đĩa-trong-lúc-làm (chống #53).
> Ngày: 2026-07-30. Run-folder PIN: `.claude/workflows/runs/2026-07-30-S163-bookend-open/`
> So-sánh-với PIN: `.claude/workflows/runs/2026-07-30-S162-bookend-close/sub-tooling-auditor-close-S162.md`
> Canonical PIN: `docs/STATUS.md` (Mig 69 · 96 bảng · 590 test · roster 23 · menu 55 · policy 220)
> Nền đã đo sẵn (KHÔNG chạy lại): governance-detectors TOTAL 44 flag (+6 INFORM), 1 HIGH = STATUS gotcha 84 vs disk 85.
---
## M-0 — Đo mặt ② trước (roster) vì HANDOFF NEXT-em #5 nêu nghi vấn đích danh
**Đếm PHẦN-TỬ trên đĩa** (`ls .claude/agents/`, loại `README.md`):
23 file persona:
cicd-monitor · ctx-audit · ctx-curator · ctx-verifier · database-agent · frontend-designer ·
harness-audit · harness-eval · harness-refine · harvest-curator · implementer-backend ·
implementer-frontend · investigator-api · investigator-codebase · lead-gap-auditor ·
lead-stale-auditor · office-document · reviewer · ring1-audit · ring2-audit · ring4-audit ·
test-specialist · tooling-auditor
=> **ĐĨA = 23**. Khớp canonical `docs/STATUS.md` roster 23 (pending verify line).
(chi tiết đối-chiếu 5 bề-mặt: mục kế)
---
## ② ROSTER — 5 bề-mặt đo, 1 DRIFT THẬT (xác nhận HANDOFF NEXT-em #5)
| # | Bề-mặt | Cách đo | Kết quả |
|---|---|---|---|
| 1 | `.claude/agents/*.md` (đĩa) | `ls` loại README, ĐẾM PHẦN-TỬ | **23** ✅ |
| 2 | `.claude/agent-memory/*/` | `ls -d` | **23** ✅ (1 dir/vai, tên khớp 23/23) |
| 3 | `hmw.js` `VALID_ROLES` | `awk '/const VALID_ROLES/,/^\]/'` (anchor `^\]` — bài S153 bẫy `]` trong comment) | **23** ✅ |
| 4 | `docs/STATUS.md:476` row Sub-agents | đọc cột giữa | **23** ✅ |
| 5 | `docs/STATUS.md:6` CURRENT chip | đọc | **roster 23** ✅ |
| 6 | `.claude/agents/README.md:27` "Roster THẬT" (enumeration TÊN) | ĐẾM PHẦN-TỬ: 7 core + 16 tên | **23** ✅ |
### 🔴 F-1 (MED) — `.claude/agents/README.md:242` enumeration VALID_ROLES lệch 3 vai + số monitor sai
- **Đo:** dòng `:242` tự xưng *"VALID_ROLES (whitelist `hmw.js` — **ĐỦ roster**)"* rồi liệt kê **20 tên**.
Đếm phần-tử: investigator-codebase · investigator-api · implementer-backend · implementer-frontend ·
test-specialist · reviewer · cicd-monitor · frontend-designer · database-agent · office-document ·
tooling-auditor · harvest-curator · lead-stale-auditor · lead-gap-auditor · harness-eval ·
harness-refine · harness-audit · ring1-audit · ring2-audit · ring4-audit = **20**.
- **THIẾU bộ-ba `ctx-audit` · `ctx-curator` · `ctx-verifier`** — 3 vai NÀY CÓ THẬT trong `hmw.js` (đo ở trên, 23 phần-tử; block comment `+S153 ctx soft-memory 0df10df4`).
- **Vế-2 cùng dòng:** *"Cả **10** monitor đều INFORM-only, lane RETURN-only"*. Đếm monitor trên ĐĨA = tooling-auditor · harvest-curator · lead-stale · lead-gap · harness-eval/refine/audit · ring1/2/4 (**10**) **+ ctx-audit/ctx-curator/ctx-verifier (3)** = **13**. Cả 3 ctx-* đều `Read-only INFORM-only` ở frontmatter `description` (`ctx-audit.md:4` · `ctx-curator.md:4` · `ctx-verifier.md:4`) ⇒ **số đúng = 13**.
- **Nguồn drift:** S153 đổi `hmw.js` 20→23 (`STATUS:476` ghi rõ *"hmw VALID_ROLES 20→**23**"*) nhưng **BẢN SAO README của cùng hằng số KHÔNG đổi**. Sibling `:27` ("Roster THẬT") ĐÃ được vá cùng S153 ⇒ đây là **sửa-1-quên-1 giữa 2 enumeration TRONG CÙNG FILE**.
- **Mức nghiêm-trọng: MED, không HIGH** — `hmw.js` (thứ CÓ RĂNG) ĐÚNG; drift chỉ ở doc. Nhưng README chính là nơi `:244` dạy luật *"đổi roster = đổi 2 BỀ-MẶT ĐỘC-LẬP"* ⇒ tài-liệu-dạy-luật vi-phạm chính luật nó dạy.
- **Tái-phát class:** `:28` ghi **bài S143** đích danh về dòng này (khi đó là `:225`): *"enumeration TÊN cũng lão-hoá… ĐẾM PHẦN TỬ trong mọi enumeration rồi so canonical"*. Đúng dòng đó, đúng class đó, **lặp lại sau 20 phiên** (S143 → S163). Grep-theo-SỐ vẫn 0-hit vì list không chứa số → chỉ đếm-phần-tử mới bắt.
- **Đề-xuất (propose-only, em main quyết):** thêm 3 tên vào `:242` + đổi `10 monitor``13`. LƯU Ý B1: `:242` CỐ Ý không chép TỔNG số vai (trỏ STATUS) — giữ nguyên thiết-kế đó, chỉ vá enumeration + số monitor (số monitor là phân-nhóm, không phải tổng roster).
- **Sống sót qua:** bookend S159 @open + S162 @close (2 lượt H1) — cả 2 báo "roster khớp 5 bề-mặt" nhưng **tập-đo không có `README:242`**. Đây là bài phạm-vi-tập-đo (Anti-pattern #2 của chính vai này).
**② VERDICT: PASS_WITH_FLAGS — hằng-số có-răng (`hmw.js`) khớp đĩa 23/23; 1 bản-sao-doc lệch (F-1).**
---
## ④ DOCS (phần 1) — F-2 XÁC NHẬN + NÂNG MỨC: CLAUDE.md thiếu Mig 68/69 **và thiếu CẢ MỘT MODULE**
**Đo đĩa trước:** `ls Persistence/Migrations/*.cs` (loại Designer + ModelSnapshot) = **69** file ⇒ khớp canonical `STATUS:6` Mig **69** ✅.
Hai mig cuối: `20260727033522_AddPeAllowApproverDelete` (=Mig 68, S155) · `20260729122015_AddContractSigningPlans` (=Mig 69, S161).
### 🔴 F-2 (HIGH) — `CLAUDE.md` bỏ sót Mig 68 + 69; module **ContractSigningPlans** KHÔNG có row nào trong bảng Modules
- **`CLAUDE.md:62`** ("Lịch sử mig gần đây") — chuỗi mới nhất là *"+S133 Mig 67 `AddPeApprovedBudgetSnapshot`"*. `grep -n "Mig 68\|Mig 69" CLAUDE.md`**0 hit toàn file**. Xác nhận nghi-vấn của lead.
- **`CLAUDE.md:69`** (row PurchaseEvaluation) — cột Migration = `12,13,15,49,50,52-61,65-67`. Mig 68 (`AddPeAllowApproverDelete`, 1 `AddColumn` + 1 `DropColumn` trên PE, `:13`/`:24`) là mig **của chính module PE** ⇒ dải đúng phải là **`65-68`**.
- 🔴 **NẶNG HƠN nghi-vấn ban đầu — ca chưa ai nêu:** Mig 69 tạo **7 `CreateTable`** (`grep -c CreateTable` = 7) cho **module MỚI hoàn toàn**: `src/Backend/SolutionErp.Domain/ContractSigningPlans/` (8 entity: `ContractSigningPlan` · `...Approval` · `...Attachment` · `...Changelog` · `...DossierItem` · `...LevelOpinion` · `...Line` · `...Phase`). Bảng "Modules" `CLAUDE.md:66-76` liệt 8 row (Contract · PE · ~~Budget~~ · Master · Identity · Forms · Notifications · Tests) — **KHÔNG có row ContractSigningPlans**. Đây không phải lệch con-số mà là **thiếu hẳn một thực-thể trên bản-đồ**.
- **Vì sao đáng HIGH:** `CLAUDE.md` = project-instruction **auto-inject vào MỌI phiên và MỌI sub-agent**. Một module 7 bảng vô-hình ở lớp context mặc-định ⇒ vai nào tra bản-đồ module sẽ kết luận sai (đây chính là bề mặt nuôi ca *"đọc doc thay vì đo đĩa"*).
- **Cùng LỚP với F-1** (đúng yêu-cầu "tìm tiếp ca cùng lớp"): cả hai đều là **enumeration lão-hoá** — dải mig `65-67`, danh-sách module, danh-sách VALID_ROLES đều là **liệt-kê**, và luật B1 *"KHÔNG copy số"* **không bảo vệ được liệt-kê** (liệt-kê không phải "số"). Ghi chú `:62` tự khai *"KHÔNG copy số ở đây để tránh drift"* rồi **ngay sau đó chép một chuỗi lịch-sử mig** — mà chuỗi đó mới là thứ lão-hoá.
- **Đề-xuất (propose-only):** (a) thêm row `ContractSigningPlans | Domain/ContractSigningPlans/ | 69 | ...` vào bảng Modules; (b) PE row `65-67``65-68`; (c) `:62` nối 2 mục Mig 68/69 **hoặc** — bền hơn — cắt đuôi lịch-sử mig ở `:62` và trỏ hẳn `docs/changelog/`, vì đoạn narrative này đã dài + tự-lão-hoá mỗi mig (KHÔNG phải Goodhart: nội-dung được CHUYỂN chỗ chứ không bị xoá — quyết định là của em main/anh).