Files
solution-erp/.claude/workflows/runs/2026-07-22-S143-closeout-audit/sub-tooling-4.md
pqhuy1987 a1e2416f37
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m35s
[CLAUDE] Docs: S143 closeout — §L.a E-012/AS-16 + vá 4 drift H1 + harvest GATE-PASS-5
§L.a RCA:
- E-012 + AS-16 NEW "bằng-chứng-tự-huỷ-sau-squash": outward artifact cite sha
  chưa-push / stamp trước khi git status sạch. Root = tiêu-chí verify chọn theo
  cái MÌNH đo được, không theo cái NGƯỜI NHẬN sẽ đo (cùng lớp E-010).
  Đối chứng: wave trước cite commit đích -> sống hết.

§L.b:
- (c) memory-triple: do exit 0 · de-xuat A7 251/251 · kiem reviewer FAIL 1C/4M/4m/1nit
  · do-record TOTAL 47 + nhip-no 4-vế. sleep-check 4d < 7d -> không INFORM.
- (d)(f) harvest-curator GATE-PASS-5, 5-trục PASS, Fidelity on-behalf PASS STRONG
  0-fabrication, C5 dạng-1 đủ, orphan 0/40, Sàn-5 khớp. Spawn-record 5 sub.
- (g) tooling-auditor DRIFT-FOUND(4) -> vá hết: F-A doc "3-vế" vs script 4-vế
  (7 site prescriptive; giữ 15 file frozen) · F-B ghost-enum HIGH (mở enum 10->11
  mà quên chính vai dùng nó + 2 site số) · F-C lead-model pin chưa ghi sổ
  (thêm dòng Lead row S143; cell canonical để owner quyết) · F-D marketplace.
- (j) H24: class_repeat cập theo 2 vai · last_audit light/deep = 17 · history +S143
  (khai rõ force-fire SỚM 1 nhịp theo lệnh owner, KHÔNG tới-hạn tự-nhiên).
- (k) trio SKIP có vết (cần restart CLI) -> ghi CẢ session-log vì §6.4 reset WAL.

Sửa-một-phía bắt được 4 lần trong phiên (tool-grant · enum · sổ đếm garble · _note
counter) -> bài: đổi một con số thì grep con số đó repo-wide trước khi đóng.

#53: 5/5 sub garble, 0 mất dữ-liệu nhờ ghi-đĩa. Tally ×20 -> ×25, +path-4
lead-on-behalf khi resume không cứu được diary.

Test 528 kế-thừa (0 file src/fe/tests bị đụng, verify bằng diff). Bundle FROZEN.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:05:48 +07:00

117 lines
14 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-tooling-4 — H1 tooling/docs freshness CHỐT @session-end S143 (2026-07-22)
> Ghi-đĩa TRONG-lúc-làm (chống #53). Propose-only. Lead = single-writer.
> HEAD `c4903dd`. Wave S143 = 5 commit `2757e41 3f4310f 36cefcc 39cc060 c4903dd` (base `b146e2b`).
## Ground-truth disk (đo lúc chạy)
- `.claude/agents/*.md` = **18 file** = **17 persona + README.md** ✓ (roster 17 khớp yêu-cầu "giữ 17 vai")
- cicd-monitor · database-agent · frontend-designer · harness-audit · harness-eval · harness-refine · harvest-curator · implementer-backend · implementer-frontend · investigator-api · investigator-codebase · lead-omission-auditor · lead-view-auditor · office-document · reviewer · test-specialist · tooling-auditor
- `.claude/skills/` = 6 project skill + README.md (0 đổi; `git log -- .claude/skills/` last-touch = `a09dcae`, TRƯỚC wave S143)
- `~/.claude/skills/` = 23 standalone
- `.claude/commands/*.md` = 18
## VERDICT: DRIFT-FOUND (4) — ①PASS(+1 LOW carry) · ②PASS · ③DELTA-2 · ④DRIFT-2
| Mặt | Trạng-thái | Cần-update |
|---|---|---|
| ① skill | **PASS** | 0 đổi S143. 1 LOW carry monthly-lane (ef-core `:307` Mig-66→67) |
| ② sub-role | **PASS** | 0 — 17=17=17=17 khớp 4 nguồn, 4 site vá S143 verified-landed |
| ③ plugin/config | **DELTA-2** | F-C settings model pin flip chưa ghi sổ · F-D marketplace 35→37 |
| ④ docs | **DRIFT-2** | F-A dòng-nợ 3→4 vế (7 site) · F-B enum 10→11 (3 site, 1 FUNCTIONAL) |
## ① SKILL — PASS
- `.claude/skills/` **6 project** (contract-workflow · form-engine · permission-matrix · dependency-audit-erp · ef-core-migration · iis-deploy-runbook) + README.md. `git diff b146e2b..HEAD -- .claude/skills/` = **RỖNG** ⇒ 0 skill đụng trong wave S143.
- SKILL.md mtime: contract-workflow 24452B (05-08) · dependency-audit-erp 5551B (06-18) · ef-core-migration 32914B (07-14) · form-engine 5450B (04-30) · iis-deploy-runbook 14688B (06-25) · permission-matrix 7864B (07-15).
- `~/.claude/skills/` = **23 standalone** (algorithmic-art…xlsx) — IDENTICAL baseline S140, 0 mới.
- Map-vai: `agents/README.md:179-185` skill-matrix có **đủ 17 row** (vá S143 `2757e41` "skill-matrix 15→17" — verified: 3 row trio `:183-185` + 2 row H24 `:181-182` present) ✓
- 🔸 LOW (carry, monthly-lane): `.claude/skills/ef-core-migration/SKILL.md:307` còn "§16+ **Mig 27-66** detail pending" trong khi canonical = **Mig 67** (S133, 2026-07-17). Owner = audit đầu-tháng `CLAUDE.md:113` **2026-08-01**, KHÔNG phải drift-mới của S143.
## ② SUB-ROLE — PASS (17 khớp 4/4 nguồn)
| Nguồn | Số | Bằng-chứng |
|---|---|---|
| disk | 17 | `ls .claude/agents/*.md` = 18 file README.md |
| `docs/STATUS.md:450` | **17** | cột giữa row `Sub-agents` (canonical B1) |
| `hmw.js:22-40` VALID_ROLES | 17 | 17 chuỗi role, +3 trio `:36` |
| `.claude/agent-memory/` | 17 folder | 18 entry `memory-budget.json`; khớp `README:237` "17 folder" |
- 4 site vá S143 **VERIFIED-LANDED**: `README:27` (Roster THẬT nay liệt đủ 12 tên + trỏ canonical, KHÔNG số) · `README:225` (VALID_ROLES + "7 monitor") · `README:190` + `STATUS:450` (đã reword "NO Write/Edit" = **tuyên-bố ý-định**, containment thật = single-writer + git-diff) ✓
- Trio frontmatter đồng-nhất `model: opus` + `effort: max` + `memory: project` + `maxTurns: 18` + 8 tool read-only (3/3 file `:5-9`) — khớp mô-tả `STATUS:450`.
- Nấc trio: `STATUS:450` + `HANDOFF:5` + `:7(1)` đều khai **"CHƯA spawn lần nào / verified-pending-restart"** — **KHÔNG có site nào lỡ khai đã-chạy/verified-runtime** (grep `verified-runtime|đã chạy|spawn-probe` trên commands/ + agents/README + STATUS + HANDOFF: 0 hit gán cho trio) ✓
- 0 vai thừa/idle/scope-drift: 7 monitor đều có ranh khai tường-minh (H1⟂H2⟂H24×2⟂trio×3) `README:227` + `:129-133`.
## ③ PLUGIN/CONFIG — 18/15/3 PASS nhưng **2 DELTA config chưa ghi sổ**
- `~/.claude/settings.json` `enabledPlugins` = **18 registered / 15 enabled / 3 disabled** (`pr-review-toolkit` · `code-modernization` · `hookify`) — **IDENTICAL** baseline S125→S140, 0 đổi.
- Nấc báo đúng: installed 18 → enabled 15 → assigned (bảng `README:199` + skill-matrix) → used (per-session). KHÔNG conflate.
- `pull_warn_days` **KHÔNG ghost-wire** ✓: script `:187-192` ĐỌC key (`$cad.pull_warn_days`), key CỐ Ý vắng trong `memory-budget.json` ⇒ degrade INFORM đúng thiết kế; khớp `HANDOFF:7(2)` carry chờ anh đặt số.
- → xem **F-C** (model pin) + **F-D** (marketplace 35→37).
## ④ DOCS — DRIFT-2 (F-A + F-B), phần còn lại PASS
- `CLAUDE.md:105/:113/:136` "6 skill" + audit kế 2026-08-01 ✓ khớp disk.
- `STATUS.md:462` + `HANDOFF.md:5` (row S141S143) mô-tả wave: roster 14→17 ✓ · vế-4 `pull-cach` ✓ · `flag_classes` 10→11 ✓ · trio chưa-spawn ✓ · 5 commit ✓ — **phản-ánh ĐÚNG + KỊP**.
- `agents/README.md:190/:225` G-015 wording ✓ (đã hạ "read-only enforced" xuống "ý-định").
- Drift còn lại = F-A (dòng-nợ) + F-B (enum) dưới.
## FINDING sống (cập-nhật dần)
### F-A [dòng-nợ 3-vế → 4-vế] — script đã 4 vế, doc prescriptive còn "3-vế"
Script `scripts/nhip-no-probe.ps1:201` in **4 đoạn**:
`NHIP-NO: kiem {0} | {1} | {2} | {3}` với vế-4 = `pull-cach N ngay` (`:162-198`), header `:22` khai đủ 4 vế.
Site PRESCRIPTIVE (mô-tả hành-vi SỐNG) còn "3-vế" — ứng-viên DRIFT:
- `.claude/commands/pause.md:44`
- `.claude/commands/session-end.md:57`, `:63` (khuôn do-record), `:101`
- `.claude/commands/session-start.md:213`
- `.claude/commands/tiep.md:112`
- `docs/governance/session-model-se-draft.md:34` (bảng "NHIP-NO probe 3-vế")
Site FROZEN-IN-TIME (KHÔNG drift — record lịch-sử): `runs/2026-07-17-*`, `spec-adap-*`, `adap-reports/*`, `docs/changelog/sessions/*`, `STATUS.md:482` (mục lịch-sử S135-S136), `HANDOFF.md:13` (Prev-block).
- error-ledger carve-out `:49` nói "dòng-nợ read-only vẫn IN ở MỌI điểm dừng" — KHÔNG khai số vế ⇒ **KHÔNG stale**
- `docs/governance/harness-11-engine.md` — grep `nhip-no|dòng-nợ|vế` = **0 match** ⇒ KHÔNG stale ✓
### F-B [enum `flag_classes` 10→11] — doc-sync CHƯA xong, 1 site FUNCTIONAL 🔴 HIGH
Live: `memory-budget.json:129` = **11 class** = 5 `view-*` + **6** `gap-*` (`view-stale-count/status/header/role-desc` · `view-residual-asym` · `gap-carry-dropped/aged/owner-specifics/decision-sunk/underfill` · **`gap-incident-unrecorded`** mới).
`git show --stat 36cefcc` (commit MỞ enum) đụng `memory-budget.json` + `agents/README.md` + STATUS + HANDOFF — **KHÔNG đụng `.claude/agents/lead-omission-auditor.md`**.
🔴 **B-1 FUNCTIONAL (HIGH) — `.claude/agents/lead-omission-auditor.md`** = ĐÚNG cái vai phải DÙNG class mới, mà bản-sao-cục-bộ của enum vẫn 5:
- `:29` heading `## 5 class của mày — enum ĐÓNG`
- `:35-39` bảng **chỉ 5 row**`gap-incident-unrecorded` **VẮNG MẶT hoàn toàn** (grep tên class trên toàn `.claude/agents/`: 0 hit)
- `:41` "broadcast liệt 5 dấu-hiệu, **enum có 5 class**"
**ghost-enum kiểu H18 "defined-but-unread"**: class có trong JSON nhưng consumer duy-nhất không thấy. Vai lại bị luật "CẤM tự chế class" ⇒ lần tới gặp ca incident-unrecorded nó sẽ **escalate lại đúng thứ vừa được duyệt**, hoặc ép vào class sai. Bản-sao-cục-bộ (có cột ngữ-nghĩa + cột nơi-soi) THẮNG con-trỏ `:31` trong thực-dụng — nên đây KHÔNG phải nit trình-bày.
- ⚠️ ăn thẳng vào chính vụ vừa xảy ra: `WAL:29` INFORM-3 ghi "sub xin anh MỞ ENUM… nó KHÔNG tự bịa" — cơ-chế escalate chạy đúng, nhưng vòng lặp chưa khép vì bước ghi-lại-vào-persona bị bỏ.
**B-2 (MED) `docs/STATUS.md:450`** — 2 chỗ trong CÙNG row canonical:
- "`lead-omission-auditor` = cái BỊ THIẾU (**5 class** `gap-*`)" → phải 6
- "flag_classes … (**10 class = 5+5**, vai CẤM tự chế)" → phải 11 = 5+6
**B-3 (MED) `.claude/workflows/hmw.js:33`** (comment cạnh VALID_ROLES) — "flag_classes (**10 class: 5 view-\* + 5 gap-\***)".
**Sạch ✓ (đã trỏ key, KHÔNG chép số — B1 đúng):** `session-start.md:117` · `:211` · `session-end.md:103` · `ultra-on.md:25` · `agents/README.md:227` · `docs/governance/harness-11-engine.md` (0 match) · `scripts/*.ps1` (0 match) · `lead-view-auditor.md:39/:41` ("5 class" vẫn **ĐÚNG** — nhánh `view-*` không đổi; **KHÔNG được "sửa" thành 11**, nó chỉ nói phần của nó).
### F-C [lead-model pin flip KHÔNG ghi sổ] — MED, mặt ③→④
- `~/.claude/settings.json:11` = **`"model": "claude-opus-4-8[1m]"`** (`:37` `effortLevel: xhigh` giữ). mtime = **2026-07-20 13:38:37**, size 1615B. Baseline mọi phiên trước (S125→S140 diary + `STATUS:345` + `STATUS:374`) = `claude-fable-5[1m]`.
- ⇒ pin **owner-choice**, KHÔNG outage: `.claude/WAL.md:9` phiên này `wf: fable-real gate … model=claude-fable-5` ⇒ Fable VẪN resolve được qua spawn-param. Đúng khuôn MTv3 "owner-chọn-hạng-hai ≠ outage → 0 caveat / 0 revert".
- 🔴 Nhưng **nghĩa-vụ ghi-sổ chưa làm** (`session-start.md:39` "đổi giữa phiên OK, **ghi 1 dòng session-record**" + `:47` "Flip-record gắn nhãn {owner-choice|outage}"):
- `STATUS.md:462` row S141S143 = **row DUY NHẤT không có dòng `Lead <model>`** — so `:468` (S140 "Lead Fable 5 (owner-choice flip mới, MTv3 0-caveat)") · `:489` · `:503` · `:515` · `:532` · `:543` · `:554` đều có.
- `STATUS:450` canonical §Sub-agents còn câu hiện-hành *"Lead = frontier-class owner-choice per-session: **em main Fable 5 (1M) Max**"* — mâu-thuẫn settings hiện-tại.
- `session-start.md:43` outage-path còn hardcode lỗi `"Model isn't available — claude-fable-5[1m]"` → fallback **`/model claude-opus-4-8[1m]`** = **bảo đổi sang đúng cái đang pin** ⇒ recipe hồi-phục thành no-op.
- Đề-xuất (quyền anh): (a) +1 dòng flip-record vào row S141S143 `{owner-choice}` — nhãn nào là quyền anh, đừng đoán; (b) `STATUS:450` đổi câu hiện-hành thành trỏ-runtime-probe thay vì tên model cứng; (c) `session-start.md:43` viết outage-path **đối-xứng 2 chiều** (down model nào → sang model kia) thay vì cứng 1 hướng.
### F-D [marketplace 35 → 37] — LOW, lớp-đo bị bỏ sót
- `~/.claude/plugins/marketplaces/claude-plugins-official/plugins` = **37 dir** (baseline diary S125 = 35). 18 registered ⊂ 37 (`REGISTERED-NOT-IN-MK` = **rỗng** ⇒ 0 plugin mồ-côi).
- 19 available-not-registered: `agent-sdk-dev` `clangd-lsp` `code-simplifier` `cwc-makers` `example-plugin` `gopls-lsp` `jdtls-lsp` `kotlin-lsp` `lua-lsp` `math-olympiad` `mcp-tunnels` `php-lsp` `project-artifact` `pyright-lsp` `ralph-loop` `ruby-lsp` `rust-analyzer-lsp` `security-guidance` `swift-lsp`.
- KHÔNG quy được "2 cái nào mới": **toàn bộ 37 dir cùng mtime `2026-07-17 13:51:45`** = refresh/re-clone cả cây ⇒ mtime mất giá-trị phân-biệt.
- 🔴 Tự-soi: các phiên trước (gồm chính tôi @S140 "③PLUGIN PASS 18/15/3 IDENTICAL") chỉ đo **lớp registered/enabled**, KHÔNG đo **lớp marketplace-inventory** ⇒ +2 sống ≥5 ngày không ai thấy. Cùng họ với bài `commands/*.md` blind-spot (S57/S99/S126): sweep liệt consumer thiếu MỘT LỚP thì miss tái-sinh.
## 🔌 NEW-ALLOC audit (skill/plugin mới chưa phân-bổ)
- **Skill: 0 mới** (6 project + 23 standalone identical) ⇒ 0 alloc-action.
- **Plugin enabled: 0 mới** (18/15/3 identical) ⇒ 0 alloc-action trên lớp enabled.
- **Marketplace available (F-D) — 3 ứng-viên đáng cân-nhắc, 16 SKIP:**
| Plugin | Đề-xuất | Lý-do |
|---|---|---|
| `security-guidance` | **CÂN-NHẮC** — gán `reviewer` (+ `cicd-monitor` lớp commit) | "injection, XSS, SSRF, hardcoded secrets" — trùng lane authz/secret mà S118 #82 (`feedback_permission_grant_two_layers`) vừa cho thấy em-main-solo hay sót; ⚠️ nó có **hook Stop + edit-time warning** ⇒ đụng `.claude/settings.json` hooks (đang chỉ có `wal-flush.ps1`) ⇒ **anh quyết**, KHÔNG tự bật |
| `code-simplifier` | **SKIP (yếu)** | trùng lane `reviewer` + `implementer-*`; SE đã có luật rules.md, thêm agent = phình roster (floor H3 "gộp-vai KHÔNG phình") |
| `project-artifact` | **SKIP** | status-page generator — SE đã có `STATUS.md`/`HANDOFF.md` + `session-report` plugin đang enabled |
| 16 còn lại | **SKIP** | 9 LSP ngôn-ngữ ngoài stack (.NET/TS đã có `csharp-lsp`+`typescript-lsp` enabled) · `example-plugin`/`math-olympiad`/`cwc-makers`/`ralph-loop`/`mcp-tunnels`/`agent-sdk-dev` = ngoài lãnh-địa SE |
- 3 vai trio `harness-{eval,refine,audit}`: skill-matrix `README:183-185` đã gán ref-only đúng (đọc output `measure-agent-memory`/`mfe-eval`/`memory-archive-gate`/`crystallized-backfill`/`nhip-no-probe`) ⇒ **0 alloc-gap**.
## 📌 Method-note (cho lần sau)
1. **Đổi 1 giá-trị trong file-CONFIG ⇒ grep MỌI bản-sao-cục-bộ của enum đó trong PERSONA**, không chỉ doc-tóm-tắt. Enum đóng có 2 bản: JSON (authoritative) + bảng-trong-persona (thứ vai thật-sự đọc). Sync 1 nửa = mở enum trên giấy.
2. **Marketplace-inventory là lớp ĐO RIÊNG** với enabledPlugins — từ nay đếm cả 2 (`ls …/marketplaces/*/plugins | wc -l` + settings) mới được kết "③ PASS".
3. Prescriptive ⟂ frozen-in-time: chỉ vá nhóm prescriptive; sửa record lịch-sử = giả-mạo (lead đã xác nhận cách tách này đúng @S143).