274 lines
32 KiB
Markdown
274 lines
32 KiB
Markdown
# sub-w3-nghi-thuc — W3 / GĐ-3 phần TỰ-CHẠY: nghi thức hai đầu (4 nhãn · vòng hỏi ngược · tiền-kiểm đầu cửa · gói-B persona)
|
||
|
||
- **Vai:** implementer-backend (lane W3) · **Phiên:** S180 · **Ngày:** 2026-08-07
|
||
- **Model tự khai:** claude-opus-5 (effort max)
|
||
- **Ghi đĩa liên tục** (chống #53): mỗi mục xong append ngay, KHÔNG chờ cuối lượt.
|
||
- **Input ghim (đọc thật, không suy diễn):**
|
||
- `.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-c-gd34.md` §E.1 (`:385-398`) · §E.2 (`:400-406`) · §E.5 (`:421-440`) · §F bảng 10 khoản (`:444-463`)
|
||
- `…/wave-plan-S180.md` W3 (`:76-90`) — 7 trường đủ
|
||
- `…/sub-w1a-mayd-octen.md` §4 R1/R2 (`:458-462`) — 14 đoạn máy, 11 vỡ-câm
|
||
- `docs/governance/naming-standard.md` (W1-b vừa ký) · `…/sub-w2-luoi-ghi-dia.md` (W2 vừa xong)
|
||
- `broadcasts/inbox/ai_infra/2026-08-04-…-phu-luc-spec-pitfall.md` §GĐ-3
|
||
- **PHẠM VI:** CHỈ phần tự-chạy. **W3b (cổng chặn bằng mã lỗi) KHÔNG thuộc wave này** — chờ owner P1 (đã chốt PA-2 về hướng, nhưng phân loại ~70 cờ là wave riêng). 🔴 **Mọi thứ đụng trong lượt này giữ exit 0 / INFORM.**
|
||
|
||
---
|
||
|
||
## §0 — Trạng thái ghi đĩa (cập nhật liên tục)
|
||
|
||
| Mục | Trạng thái | Ghi ở § |
|
||
|---|---|---|
|
||
| Phép đo nền (wall-clock + bảng 19 cửa + persona) | ✅ XONG | §1 |
|
||
| (1) 4 nhãn suy-giảm | ✅ KÝ 4/4 — nhưng **cưỡng chế 1 đủ / 2 nửa / 1 CHƯA CÓ MÁY** | §2 |
|
||
| (2) Vòng hỏi ngược 5 cột | ✅ CÓ — khuôn + luật đóng 3 điều kiện + 1 hàng sinh bằng máy | §3 |
|
||
| (3) Tiền-kiểm đầu cửa | ✅ **5/19 → 9/19** + máy mới + fault-inject 5/5 | §4 |
|
||
| (4) Gói-B persona | ✅ 4 tệp / 5 sửa — 4 phép đo sau-restart **BÀN GIAO lead** | §5 |
|
||
| Hệ quả lên máy sống + CHƯA ĐO / CẦN LEAD | ✅ 6 mục | §6 |
|
||
|
||
**Vật đã hạ cánh:** `docs/governance/ritual-labels.md` (mới) · `scripts/tien-kiem-cua.ps1` (mới) · `.claude/commands/{adap-apply,adap-report,adap-request,check-email}.md` · `.claude/agents/{lead-stale-auditor,ring2-audit,back-end-reviewer-style,database-reviewer-style}.md`.
|
||
|
||
---
|
||
|
||
## §1 — PHÉP ĐO NỀN (chạy TRƯỚC khi gõ một dòng nào)
|
||
|
||
### 1.1 — Wall-clock: trần chi phí cho tiền-kiểm (hub `phu-luc:194` đòi "chi phí bằng không")
|
||
|
||
Lệnh: `Measure-Command`, n=5, lấy min/trung-vị/max. Máy này, 2026-08-07.
|
||
|
||
| Phép đo | n | min | **trung vị** | max |
|
||
|---|---|---|---|---|
|
||
| **CONTROL** — chỉ khởi động `powershell -NoProfile`, không chạy gì | 5 | 143 ms | **156 ms** | 260 ms |
|
||
| `scripts/nhip-no-probe.ps1` — **đang chạy ở `/pause` + `/tiep`**, tức chi phí ĐÃ ĐƯỢC CHẤP NHẬN | 5 | 419 ms | **423 ms** | 452 ms |
|
||
|
||
⇒ **Phần việc RÒNG của probe đang sống = 423 − 156 = ~267 ms.** Đây là **trần tham chiếu**: một tiền-kiểm mới muốn cắm vào cửa dừng phải **rẻ hơn con số đã được chấp nhận này**, không phải rẻ hơn một ngưỡng tôi tự đặt.
|
||
|
||
🔴 **Luật đã thành văn trên đĩa, không phải tôi bịa:** `.claude/commands/check-email.md:41` — *"việc NẶNG chỉ sống ở bookend. Ai thêm bước vào đường `/pause`·`/tiep` sau này **phải đo wall-clock trước**"*. Lượt này tuân: đo trước, và **KHÔNG thêm bước nào vào `/pause` · `/tiep`** (cả hai đã có probe rồi — xem §1.2).
|
||
|
||
🔸 **Khai giới hạn của thước:** đo trên máy này, đĩa nóng, không đo lần-chạy-nguội. Con số dùng để **so tương đối** (mới ⟂ đã-chấp-nhận), không dùng làm SLA tuyệt đối.
|
||
|
||
### 1.2 — Bảng 19 cửa × tiền-kiểm, TỪNG DÒNG (A4 cấm ghi gộp) — 3 cửa treo của lane C: ĐÓNG
|
||
|
||
**Thước 1 (CONTROL — dựng lại đúng phép đo lane C `§E.5`):** `grep -c "nhip-no-probe\|Sàn-3\|san-3\|tiền kiểm\|probe"`.
|
||
**Thước 2 (SẮC HƠN — vị từ *lời gọi thật*):** `grep -cE '\-File +scripts/[^ ]+\.ps1|node +scripts/|python +scripts/'` — tách **gọi** ⟂ **nhắc tên** (đúng ranh *use ⟂ mention* của W1-b/W2).
|
||
|
||
| # | Cửa | T1 (lane C) | T2 lời-gọi | `nhip-no-probe` gọi thật? | Kết luận |
|
||
|---|---|---|---|---|---|
|
||
| 1 | `session-start.md` | 19 | 9 | ✅ `:269` | ✅ **CÓ** |
|
||
| 2 | `session-end.md` | 12 | 7 | ✅ `:118` | ✅ **CÓ** |
|
||
| 3 | `tiep.md` | 10 | 2 | ✅ `:154` | ✅ **CÓ** |
|
||
| 4 | `pause.md` | 4 | 3 | ✅ `:113` | ✅ **CÓ** |
|
||
| 5 | `snapshot.md` | 1 | 4 | ✅ `:69` | ✅ **CÓ** — 🔴 lane C để **🟡 CHƯA ĐO**, nay ĐÓNG = **CÓ** |
|
||
| 6 | `check-email.md` | 2 | 2 (`stamp_verify.py`) | ❌ `:45`+`:48` = **NHẮC TÊN**, 0 lời gọi | ❌ **KHÔNG** — lane C 🟡 ĐÓNG = KHÔNG |
|
||
| 7 | `sleep-recovery-memory-l2.md` | 2 | 0 | ❌ 0 hit tên | ❌ **KHÔNG** — lane C 🟡 ĐÓNG = KHÔNG |
|
||
| 8 | `send-email.md` | 0 | 1 (`stamp_verify.py`) | ❌ | ❌ **KHÔNG** |
|
||
| 9 | `adap-apply.md` | 0 | 0 | ❌ | ❌ **KHÔNG** 🔴 ca `LỚP-2` |
|
||
| 10 | `adap-report.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 11 | `adap-request.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 12 | `fable-real.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 13 | `fable-clone.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 14 | `ultra-on.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 15 | `ultra-off.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 16 | `user-mark-active.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 17 | `user-mark-active-high.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 18 | `user-mark-medium.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
| 19 | `user-mark-disable.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
|
||
|
||
**⇒ Trạng thái TRƯỚC lượt này: 5/19 có tiền-kiểm** (không phải 4/19 như lane C ghi — chênh vì `snapshot` được đóng từ 🟡 sang CÓ). **14/19 không có. 0 cửa còn treo.**
|
||
|
||
🔴 **BÁC MỘT SỐ CỦA LANE F — `check-email` bị đếm nhầm là cửa gọi probe.** `sub-n3-lane-f-maytay.md:49` và `:253` ghi *"`nhip-no-probe.ps1` — check-email, pause, session-end, session-start, snapshot, tiep (**6 cửa**)"*. Đo lại: `check-email.md` chứa chuỗi `nhip-no-probe.ps1` **2 lần** nhưng **cả 2 đều là NHẮC TÊN** — `:45` mượn nó làm *khuôn fail-soft*, `:48` bàn về *đổi vai của vế-4 `pull-cach`*. **0 lời gọi.** ⇒ tập đúng là **5 cửa**, không phải 6. Đây đúng lớp lỗi *use ⟂ mention* mà W1-b/W2 đã dựng vị từ để tách — lane F dùng thước cũ nên dính.
|
||
|
||
🔸 **Khai giới hạn của thước 2:** nó đo *có dòng lệnh gọi script trong tệp lệnh*, **không** đo *lời gọi đó có được thi hành mỗi lượt không* (tệp lệnh là prompt, người thi hành là model). Vẫn là *sự hiện diện + khuôn dạng, không đo CHẤT* — đúng ranh hub `phu-luc:208`.
|
||
|
||
### 1.3 — Phép đo persona (gói-B) trước khi sửa
|
||
|
||
| Persona | Phép đo | Kết quả | Control-dương |
|
||
|---|---|---|---|
|
||
| `lead-stale-auditor.md` | `grep -cE "run-folder|runs/"` | **0** | `FLAG`=**4** · `governance-detectors`=**2** ⇒ thước đọc được tệp, **0 là THẬT** |
|
||
| `lead-stale-auditor.md` | số class `view-*` liệt trong tệp | **5** (`view-residual-asym`·`stale-count`·`stale-header`·`stale-role-desc`·`stale-status`) + câu *"5 class dưới"* `:41` | enum đĩa = **12** |
|
||
| `ring2-audit.md:4` | chuỗi *"5 class `view-*`"* | **có** (kèm *"6 class `gap-*`"* — vế này ĐÚNG) | — |
|
||
| `back-end-reviewer-style.md:4` | chuỗi `.NET 10` | **có** | `front-end-reviewer-style.md:4` đã de-number @S179 (SỬA-6b) ⇒ khuôn có sẵn |
|
||
| `database-reviewer-style.md:4` | chuỗi `EF Core 10` | **có** | như trên |
|
||
|
||
**Nguồn số enum (đọc đĩa, không tin doc):** `.claude/agent-memory/memory-budget.json` → `lead_self_audit.flag_classes` = **12 phần tử = 6 `view-*` + 6 `gap-*`**. Phần tử thứ 6 của nhánh view là **`view-claim-broader-than-sample`** (mở @S172 theo escalate của `ring2-audit`).
|
||
|
||
🔴 **PHÁT HIỆN NGOÀI DANH SÁCH ĐỀ BÀI — nặng hơn ca `ring2`:** đề bài chỉ giao sửa `ring2-audit.md:4`. Nhưng `lead-stale-auditor.md` — **chính vai PHẢI DÙNG enum đó** — cũng chỉ liệt **5/6** class `view-*`, thiếu đúng `view-claim-broader-than-sample`. Đây là **ghost-enum tái phát**: đúng lớp lỗi `F-B HIGH` mà `tooling-auditor` đã ghi @S143 (*"enum mở 10→11 nhưng commit KHÔNG đụng `lead-gap-auditor.md` — vai bị luật CẤM tự chế class ⇒ lần tới gặp ca sẽ escalate lại đúng thứ vừa được duyệt"*). Lần này vật thể là nhánh `view-*` và vai là `lead-stale-auditor`. Sửa `ring2` mà bỏ `lead-stale-auditor` = vá cái GƯƠNG, để nguyên cái MÁY.
|
||
|
||
---
|
||
|
||
## §2 — (1) BỐN NHÃN — đã ký `docs/governance/ritual-labels.md`, và CHỨNG vị từ chạy THẬT
|
||
|
||
**Vật đã hạ cánh:** `docs/governance/ritual-labels.md` (kebab thường, đúng `naming-standard.md:170` luật vật MỚI).
|
||
|
||
### 2.1 — Bốn vị từ, chạy thật, kèm control-dương
|
||
|
||
`$M` = vật mốc · `$V` = **vật chứng của LƯỢT** (không phải đặc tả) · `$B` = mã bước.
|
||
|
||
| Vị từ | Lệnh | Ca thật đã chạy | Kết quả | Control-dương |
|
||
|---|---|---|---|---|
|
||
| (1) vật mốc | `test -e "$M" && echo 1 \|\| echo 0` | `docs/governance/rename-ledger.md` | **0** = VẮNG | `test -e naming-standard.md` → **1** ⇒ thước đọc được đĩa |
|
||
| (2) dòng khai | `grep -c -- "$B" "$V"` | `$B=rename-ledger` trong `sub-w1b-chuan-ten.md` | **0** = KHÔNG KHAI | cùng tệp, `grep -c naming-standard` → **6** ⇒ thước đọc được tệp |
|
||
| (3) con trỏ `file:line` | `grep -E -c -- "$B.*[^ ]+\.(md\|ps1\|py\|js\|json):[0-9]+" "$V"` | như trên | **0** | cùng tệp, bỏ neo `$B` → **39** ⇒ thước bắt được khuôn con trỏ |
|
||
| (4) điều kiện chạy lại | *lệnh do đặc tả nêu* | `naming-standard.md` **không nêu** điều kiện chạy-lại-được cho bước "lập sổ đổi tên" | **không-xác-định** | — |
|
||
|
||
⇒ Tra bảng quyết định `ritual-labels.md §2.1`: (1)=0 · (2)=0 ⇒ **nhãn `quên`**. **Hàng đầu tiên của vòng hỏi ngược, sinh bằng máy, không bằng cảm giác.**
|
||
|
||
🔴 **Ca này là một phát hiện thật, không phải ví dụ dựng:** `naming-standard.md:10` tuyên *"Sổ đổi tên: `docs/governance/rename-ledger.md` — chỉ-thêm-không-xoá"* và `:278` tuyên *"Sáu ô còn lại: xem `rename-ledger.md`"* — **tệp không tồn tại**, và **vật chứng lượt W1-b không có dòng khai nào**. Đúng lớp *lời-hứa-chưa-land* (`feedback_dryrun_finds_promised_but_unlanded`). **Tôi KHÔNG sửa `naming-standard.md`** (nằm trong danh sách cấm) — nộp thành 1 hàng cho lead.
|
||
|
||
### 2.2 — 🔴 NHÃN NÀO **CHƯA CÓ MÁY** (luật nấc W1-a: sạch đúng tới độ sâu máy KIỂM, không sâu hơn một nấc)
|
||
|
||
| Nhãn | Máy chấm được tới đâu | Nấc |
|
||
|---|---|---|
|
||
| **quên** | **TRỌN** — `(1)=0 ∧ (2)=0`, cả hai vị từ đều cơ khí | ✅ **CÓ MÁY ĐỦ** |
|
||
| **tự ý bỏ** | máy chỉ chấm được nhánh `(2)≥1 ∧ (3)=0`. Nhánh `(4)=sai` **CHƯA CÓ MÁY** — không máy nào chạy lại điều kiện cho phép | 🟡 **NỬA** |
|
||
| **suy giảm hợp lệ** | máy chấm được *có khai + có con trỏ*; **không** chấm được *con trỏ trỏ đúng chỗ cho phép hay không* | 🟡 **NỬA** |
|
||
| **bị chặn** | ❌ **CHƯA CÓ MÁY.** Phân biệt *"con trỏ tới đặc tả"* ⟂ *"con trỏ tới nỗ lực gỡ"* là phán-xét ngữ nghĩa, `(3)` cho **cùng một số** ở cả hai | ❌ **CHƯA CÓ MÁY** |
|
||
|
||
**⇒ Nói thẳng: 1/4 nhãn có máy đủ · 2/4 nửa · 1/4 chưa có máy.** Bốn nhãn **đã thành văn 4/4**, nhưng **cưỡng chế bằng máy thì KHÔNG phải 4/4**. Ghi đúng nấc này vào `ritual-labels.md §2.2` chứ không để nó trông như đã cưỡng chế — đó chính là **LỚP-9** (cưỡng chế được tuyên mà chưa có máy) mà cả gói này tồn tại để chữa.
|
||
|
||
🔴 **Máy anh em để đối chứng (lead chỉ, đã dùng):** `scripts/artifact-integrity.ps1` (W2) đang chạy thật. Nó chấm **vật chứng có đủ ruột không**; bốn nhãn ở đây chấm **bước có chạy không**. Hai trục khác nhau, **không** gộp số.
|
||
|
||
### 2.3 — 🔴 BÁC MỘT VẾ TRONG KHUNG ĐỀ BÀI (vế này nếu nhận sẽ làm thủng chính bộ nhãn)
|
||
|
||
Đề bài khung 4 nhãn là *"làm đủ ⟂ làm thiếu CÓ KHAI ⟂ bỏ qua CÓ KHAI ⟂ bỏ qua KHÔNG khai — **chỉ nhãn cuối mới là lỗi**"*.
|
||
|
||
**Đo lại chữ hub** (`phu-luc:189`, nguyên văn): *tự ý bỏ* = *"bỏ mà không khai, **hoặc** khai là 'bỏ êm' trong khi điều kiện cho phép bỏ **đánh giá lại trên đĩa là sai**"*.
|
||
|
||
⇒ Hub **có tính** một ca **CÓ KHAI** là lỗi nặng. Nếu áp khung *"chỉ bỏ-qua-KHÔNG-khai mới là lỗi"* thì **viết một dòng khai là tự tha được**, và bộ nhãn thành đồ trang trí. Hai khung cũng **không cùng phân hoạch**: *làm đủ* của đề bài = **TRỌN**, mà TRỌN **không sinh hàng nào** nên nó không phải một trong 4 nhãn.
|
||
|
||
**Xử:** ký theo **chữ hub**, ghi rõ ở `ritual-labels.md §2.2(a)(b)`: (a) khai không tự miễn trừ · (b) `(4)=không-xác-định` ⇒ rơi về nhãn **NẶNG**, không rơi về nhãn vô tội — vì nếu chỗ mù mặc định về vô tội thì cách rẻ nhất để sạch là **viết đặc tả mơ hồ**.
|
||
|
||
---
|
||
|
||
## §3 — (2) VÒNG HỎI NGƯỢC 5 CỘT — đã ký `ritual-labels.md §3`
|
||
|
||
Khuôn nguyên chữ hub, 5 cá»™t **không đổi tên**: *bước thiếu hoặc lệch · đặc tả nói gì · bằng chứng trên đĩa · nhãn nà o · câu há»i Ä‘Ãch danh*.
|
||
|
||
**Luáºt đóng — ba Ä‘iá»u kiện, thiếu má»™t là CHƯA ÄÓNG** (`ritual-labels.md §3.2`):
|
||
1. **0 ô trống** — kể cả cá»™t *nhãn*: không phân loại được ⇒ ghi `chưa-phân-loại` **kèm lý do**; ô trống Ä‘á»c thà nh *đã xét và sạch*.
|
||
2. Má»—i hà ng có **má»™t định Ä‘oạt** cá»§a ngưá»i Ä‘iá»u phối, thuá»™c đúng 3 giá trị: `chạy-bổ-sung` · `khai-suy-giảm` · `khai-không-thể-nữa`.
|
||
3. Bảng **luôn kèm MẪU Sá»** *N hà ng / M bước được soi*; `M` = số bước **tháºt sá»± được duyệt**, không phải số bước tồn tại.
|
||
|
||
🔴 **§3.3 CẤM thay bảng bằng má»™t con số tổng** — neo thẳng ca S119 (*"vá 19 finding"* khi tháºt **23**) + con trá» `feedback_meta_count_selfcoverage_blindspot`. Ghi rõ đây là **há»™i tụ độc láºp**: luáºt đóng cá»§a hub và bà i há»c S119 là cùng má»™t kết luáºn tìm ra ở hai nÆ¡i, để lần sau không ai tưởng là luáºt ngoại nháºp.
|
||
|
||
🔴 **§3.4 `C3-02` thà nh văn:** vai kiểm **CHỈ Äá»I CHIẾU**, nguồn = **chÃnh tệp lệnh cá»§a cá»a**; đặc tả tá»± chá»i ⇒ nhãn `đặc-tả-xung-đột` + **cả hai** con trá» + trả ngưá»i Ä‘iá»u phối; **CẤM tá»± phán**. Ghi rõ: `đặc-tả-xung-đột` ở đây là **giá trị cá»™t Nhãn**, KHÔNG phải mã thoát (thang mã thoát = W3b).
|
||
|
||
**Ai sinh bảng:** `lead-gap-auditor` (hà ng *thiếu*) + `lead-stale-auditor` (hà ng *lệch*) — cặp **Ä‘ang spawn vô-Ä‘iá»u-kiện ở CẢ HAI đầu phiên**. **0 vai má»›i** (đúng lane C §E.1; vai má»›i thuá»™c P4/W4b).
|
||
|
||
**Hà ng mẫu đã sinh BẰNG MÃY** (§2.1): `bước "láºp sổ đổi tên" | naming-standard.md:10 + :278 | (1)=0 (2)=0, control 1/6 | quên | "Sổ nà y land ở wave nà o, hay gỡ hai con trá»?"` — **1 hà ng / 1 bước được soi**.
|
||
|
||
---
|
||
|
||
## §4 — (3) TIỀN-KIỂM ÄẦU CỬA: 5/19 → **9/19**
|
||
|
||
### 4.1 — Máy mới `scripts/tien-kiem-cua.ps1`
|
||
|
||
- **Chỉ Ä‘á»c · LUÔN `exit 0` · INFORM.** Fail-soft y khuôn `nhip-no-probe`: lá»—i ⇒ `tien-kiem loi (khong chan)`.
|
||
- Thi hà nh đúng chữ hub `phu-luc:194`: chá»n **cá»a đóng gần nhất** bằng **dấu thá»i gian ghi TRONG tệp** — `.claude/WAL.md` dòng `updated:` (cá»a `/pause`·`/snapshot`) + `.claude/governance/.session-counter.json` khoá `last_ticked_at`/`last_ticked_session` (cá»a `/session-*`). **KHÔNG dùng `mtime`** (hook `wal:` chạm tệp má»—i lượt; `git checkout` viết lại `mtime` hà ng loạt).
|
||
- **Pure-ASCII: 0 byte >127.** 🔴 Control-dương cho chÃnh thước ASCII: `ritual-labels.md` = **4.250** byte >127 ⇒ thước **có bắt được**, số 0 kia không phải thước há»ng. *(Bà i W2: control-âm-sai = há»ng THƯỚC.)*
|
||
- CỠin ra: `THIEU-TAP` (0/2 nguồn) · `NGUON-HONG:<tên>` · `LECH-PHIEN:<a>/<b>` · `ok`.
|
||
|
||
### 4.2 — Fault-inject **BA chiá»u: 5/5 PASS** (harness `scratchpad/fi-tienkiem.ps1`, cây tạm, KHÔNG chạm repo thật)
|
||
|
||
| Chiều | Ca | Kỳ vọng | Thực tế | |
|
||
|---|---|---|---|---|
|
||
| **B** | cấy ÄÚNG, 2 nguồn lành | IM = `ok`, 0 dương-giả | `nguon 2/2 \| ok` | ✅ |
|
||
| **A-1** | cấy HỎNG nguồn WAL | `NGUON-HONG:Wal` | `nguon 1/2 \| NGUON-HONG:Wal` | ✅ |
|
||
| **A-2** | cấy HỎNG nguồn counter | `NGUON-HONG:Counter` | `nguon 1/2 \| NGUON-HONG:Counter` | ✅ |
|
||
| **A-3** | 2 nguồn lệch phiên | `LECH-PHIEN` | `nguon 2/2 \| LECH-PHIEN:S177/S180` | ✅ |
|
||
| **A2** | **MẤT CẢ TẬP** (xoá cả 2) | cá» `THIEU-TAP` **RIÊNG**, CẤM in `ok` | `THIEU-TAP - 0/2 nguon moc doc duoc \| KHONG ket luan duoc gi` | ✅ |
|
||
|
||
`exit 0` ở **5/5** (ràng buộc cứng trong harness: `exit != 0` ⇒ FAIL). Harness in **control-harness** (`WAL=True/False counter=True/False`) mỗi ca ⇒ chứng cây tạm thật sự có/không có tệp như ý định.
|
||
|
||
🔴 **Lượt fault-inject ÄẦU chết vì HARNESS, không vì script:** viết harness inline qua `bash` ⇒ bash nuốt `$`/backtick cá»§a chuá»—i PowerShell ⇒ tệp WAL "là nh" **không bao giỠđược ghi đúng** ⇒ chiá»u B in `NGUON-HONG:Wal` **trông y hệt script há»ng**. Dá»±ng lại harness thà nh `.ps1` độc láºp ⇒ 5/5. Äúng bà i S139: *harness cần cùng ká»· luáºt như production*. Nếu tin lượt đầu thì đã Ä‘i sá»a má»™t script **không há»ng**.
|
||
|
||
### 4.3 — Wall-clock ÄO ÄƯỢC (bắt buộc TRƯỚC khi cắm — luật `check-email.md:41`)
|
||
|
||
| | trung vị (n=5) | **ròng** (trừ khởi động) |
|
||
|---|---|---|
|
||
| CONTROL `powershell -NoProfile` khởi động không | 196 ms | — |
|
||
| **`tien-kiem-cua.ps1` (MỚI)** | 390 ms | **~194 ms** |
|
||
| `nhip-no-probe.ps1` (đã được chấp nhận ở `/pause`·`/tiep`) | 477 ms | ~281 ms |
|
||
|
||
⇒ Máy má»›i **rẻ hÆ¡n cái đã được chấp nháºn**. 🔸 Khai thẳng: phần lá»›n 194 ms là đá»c + `ConvertFrom-Json` trên sổ đếm ~45 KB; **không** phải "bằng không" theo nghÄ©a Ä‘en. Äo trên máy nà y, đĩa nóng ⇒ dùng để **so tương đối**, không phải SLA tuyệt đối.
|
||
|
||
🔴 **KHÔNG cắm và o `/pause` · `/tiep`.** Hai cá»a đó **đã có** probe; thêm bước nữa = là m Ä‘iểm dừng đắt lên, trái floor `goi-chot §3` và trái bất-biến `check-email.md:41`. Äây là **quyết định có Ä‘o rồi má»›i nói không**, không phải bá» sót.
|
||
|
||
### 4.4 — Äộ phủ sau lượt (mẫu số **19**)
|
||
|
||
| | n/19 | Cửa |
|
||
|---|---|---|
|
||
| Trước | **5** | `session-start` · `session-end` · `tiep` · `pause` · `snapshot` |
|
||
| Cắm mới | **+4** | `adap-apply` 🔴 *(ca LỚP-2: chính cửa áp gói này)* · `adap-report` · `adap-request` · `check-email` |
|
||
| **Sau** | **9** | còn thiếu **10**: `send-email` · `sleep-recovery-memory-l2` · `fable-real` · `fable-clone` · `ultra-on` · `ultra-off` · `user-mark-active` · `user-mark-active-high` · `user-mark-medium` · `user-mark-disable` |
|
||
|
||
**Control-dương cho phép đếm:** `grep -c tien-kiem-cua .claude/commands/ultra-on.md` = **0** ⇒ con số 9 không do mẫu khớp tràn lan.
|
||
|
||
🔸 **Vì sao dừng ở 9, không cắm nốt 10:** 6 cá»a (`fable-*`, `ultra-*`, `user-mark-*`) là **cá»a má»™t-dòng, không có Ä‘iểm dừng nà o để soi** — cắm và o là **nghi thức trang trÃ**, và má»—i lá»i gá»i thừa là má»™t cÆ¡ há»™i alarm-fatigue. `send-email` + `sleep-recovery-memory-l2` **đáng cắm**, xin lead má»™t dòng đồng ý vì chúng không nằm trong danh sách ưu tiên cá»§a đỠbà i.
|
||
|
||
---
|
||
|
||
## §5 — (4) GÓI-B PERSONA (chỉ ăn từ RESTART kế) — 4 tệp / 5 sửa
|
||
|
||
| # | Tệp | Sá»a | Äo TRƯỚC | Äo SAU (trên đĩa) |
|
||
|---|---|---|---|---|
|
||
| 1 | `lead-stale-auditor.md` | +mục **Táºp-Ä‘o BẮT BUỘC gồm thư mục lượt chạy**: cách soi rẻ (so khối trạng-thái `run.md` ⟂ dòng `END`/bảng kết từng `sub-*.md` cùng run-folder) · **PIN Ä‘Ãch danh, cấm `glob-latest`** · ranh: run-folder phiên Äà ÄÓNG = record đóng-băng, đừng flag · không lấn `artifact-integrity.ps1` | `run-folder\|runs/` = **0** (control-dương cùng tệp: `FLAG`=4, `governance-detectors`=2) | **6** |
|
||
| 2 | `lead-stale-auditor.md` | heading **BỎ Sá»** + trá» khoá `lead_self_audit.flag_classes`; **+1 dòng bảng** `view-claim-broader-than-sample` | liệt **5** class `view-*`; enum đĩa = **12 = 6+6** | liệt **6**; `[0-9]+ class` còn 2 hit **Ä‘á»u hợp lệ** (*"gắn 1 class"* · *"1 class lặp N lần"*) |
|
||
| 3 | `ring2-audit.md:4` | **BỎ Sá» cả hai vế**, trá» khoá. **KHÔNG sá»a 5→6** (luáºt B1) | `5 class` = **1** | `5 class` = **0** · `[0-9]+ class` = **0** (control `class` = 7 ⇒ thước sống) |
|
||
| 4 | `back-end-reviewer-style.md:4` | bỠdigit, trỠ`SolutionErp.Domain.csproj` → `TargetFramework` | `.NET 10` = **1** | **0** (control `.NET` = 2 ⇒ thước sống) |
|
||
| 5 | `database-reviewer-style.md:4` | bỠdigit, trỠ`SolutionErp.Infrastructure.csproj` → `PackageReference …EntityFrameworkCore*` | `EF Core 10` = **1** | **0** (control `EF Core` = 1 ⇒ thước sống) |
|
||
|
||
Khuôn de-number lấy **nguyên** từ `front-end-reviewer-style.md:4` (SỬA-6b @S179) — **không tự chế khuôn mới**.
|
||
|
||
🔴 **PHÃT HIỆN NGOÀI DANH SÃCH ÄỀ BÀI (sá»a #2):** đỠbà i chỉ giao `ring2-audit.md:4`. Nhưng `lead-stale-auditor` — **chÃnh vai PHẢI DÙNG enum** — cÅ©ng chỉ liệt **5/6** class `view-*`, thiếu đúng `view-claim-broader-than-sample`. Äây là **ghost-enum tái phát**, đúng lá»›p `F-B HIGH` mà `tooling-auditor` ghi @S143: vai bị luáºt *"CẤM tá»± chế class"* trói ⇒ lần tá»›i gặp ca **suy-luáºn-vượt-mẫu** sẽ **escalate lại đúng thứ vừa được duyệt**. Sá»a `ring2` mà bá» `lead-stale-auditor` = **vá cái GÆ¯Æ NG, để nguyên cái MÃY**.
|
||
|
||
🔴 **Tá»° BẮT CITATION-TRAP — vòng 1 THỦNG:** ghi chú vá cá»§a tôi trong `lead-stale-auditor.md` **trÃch nguyên văn** cụm số cÅ© ⇒ `grep "5 class"` **vẫn = 1** trên chÃnh bản đã sá»a đúng. Vòng 2 diá»…n-giải-không-trÃch ⇒ **0**. Äúng bà i W1-b: *lá»i-giải-thÃch nằm TRONG táºp Ä‘o*. Äã grep lại bằng **lệnh KHÃC** (`[0-9]+ class` thay chuá»—i cố định) để không tá»± tha.
|
||
|
||
### 5.1 — 🔴 PHÉP ÄO CHỈ XANH **SAU RESTART** (tôi KHÔNG restart được — bà n giao lead)
|
||
|
||
Sá»a `.claude/agents/*.md` là **hot-reload ENV-DEP**: đĩa đổi ngay, **hà nh vi vai chỉ đổi sau restart CLI**. Äo trên đĩa (bảng trên) **KHÔNG chứng được vai đã ăn**. Bốn phép sau, má»—i cái **chỉ xanh sau restart**:
|
||
|
||
| # | Phép đo | Xanh = |
|
||
|---|---|---|
|
||
| 1 | spawn `lead-stale-auditor`, há»i *"liệt táºp-Ä‘o bắt buá»™c cá»§a mà y"* | câu trả lá»i **có chứa** `runs/` hoặc `run-folder` |
|
||
| 2 | spawn `lead-stale-auditor`, há»i *"nhánh `view-*` gồm class nà o"* | liệt **đủ 6**, có `view-claim-broader-than-sample`, và **Ä‘á»c khoá** chứ không Ä‘á»c số trần |
|
||
| 3 | spawn `ring2-audit`, há»i *"má»—i nhánh có bao nhiêu class"* | trả lá»i **trá» khoá `lead_self_audit.flag_classes`**, KHÔNG Ä‘á»c số trần |
|
||
| 4 | spawn `back-end-reviewer-style` + `database-reviewer-style`, há»i *"version .NET / EF Core"* | trả lá»i **trá» `.csproj`**, KHÔNG Ä‘á»c số từ persona |
|
||
|
||
🔴 Không chạy 4 phép nà y thì *"chưa ăn"* trông **y hệt** *"há»ng"*, và cả hai trông **y hệt** *"đã xong"*.
|
||
|
||
---
|
||
|
||
## §6 — HỆ QUẢ ÄO ÄÆ¯á»¢C LÊN MÃY ÄANG Sá»NG + CHƯA ÄO / CẦN LEAD
|
||
|
||
### 6.1 — Tripwire `-Expect` cá»§a `naming-scan.ps1` Äà KÊU vì tôi (đúng thiết kế, KHÔNG phải há»ng)
|
||
|
||
Chạy `naming-scan.ps1` read-only sau khi land:
|
||
|
||
```
|
||
mau so: 56 muc (tep + thu muc) [!] lech ky vong 55 - chuan hoac kho da doi, doc lai naming-standard.md
|
||
OK 54/56 | LECH 1/56 | MIEN-theo-luat 1/56
|
||
```
|
||
|
||
- Nguyên nhân: `scripts/tien-kiem-cua.ps1` là **mục thứ 56** của nhóm `scripts/`; lead vừa vá `-Expect` **54→55**, giỠthà nh **55→56**.
|
||
- 🔴 **`-Expect` kêu VÀNG, KHÔNG đội thà nh `LECH`** — `LECH` giữ nguyên 1/56 (`master-import-data.generated.md`), và **cả 2 tệp má»›i cá»§a tôi Ä‘á»u KHÔNG lệch chuẩn**. Äúng như lead mô tả: `-Expect` là **tripwire có chá»§ Ä‘Ãch**, cho `THIEU-TAP` má»™t **mẫu số** — **không** phải lá»›p lá»—i drift. Tôi **không lặp nhãn "LỚP-5"** mà W2 gán nhầm.
|
||
- **Tôi KHÔNG sửa `naming-scan.ps1`** (nằm trong danh sách cấm). **Xin lead bump `-Expect` 55→56.**
|
||
- Toàn kho: `LECH 8/236` — **+2 tệp mới của tôi không thêm dòng lệch nào**. Exit 0.
|
||
|
||
### 6.2 — CHƯA ÄO / CẦN LEAD
|
||
|
||
1. 🔴 **4 phép đo sau-restart (§5.1)** — tôi không restart được. **Không chạy = gói-B chưa nghiệm thu**, dù đĩa đã đúng.
|
||
2. 🔴 **`-Expect` 55→56** trong `naming-scan.ps1` — tệp cấm, lead vá.
|
||
3. 🔴 **Hà ng vòng-há»i-ngược đầu tiên chỠđịnh Ä‘oạt:** `docs/governance/rename-ledger.md` **không tồn tại** trong khi `naming-standard.md:10` + `:278` trá» tá»›i nó, và váºt chứng W1-b **0 dòng khai** ⇒ nhãn **`quên`**. `naming-standard.md` là **tệp cấm** ⇒ tôi không đụng. Ba lá»±a chá»n: `chạy-bổ-sung` (láºp sổ) / `khai-suy-giảm` / `khai-không-thể-nữa` (gỡ 2 con trá»).
|
||
4. 🟡 **`lead-gap-auditor.md:42` neo số trần cho nhánh `gap-*`** — hôm nay **ÄÚNG** (6 gap-*), nên **KHÔNG sá»a** (bà i S143: *biết chá»— KHÔNG sá»a*). Nhưng nó là **neo cùng loại** vá»›i 2 cái vừa gỡ ⇒ ứng viên de-number đợt sau. Ngoà i scope W3.
|
||
5. 🟡 **Cắm nốt `send-email` + `sleep-recovery-memory-l2`** (§4.4) — cần lead gáºt, không có trong danh sách ưu tiên đỠbà i.
|
||
6. â›” **KHÔNG là m, đúng phạm vi:** thang mã thoát 4 trạng thái (`C3-04` + khoản (v)) = **W3b**, chá» P1. Luáºt tá»±-trị 3 báºc (`C3-07`/khoản (vi)) = chá» **P5** owner gáºt ná»™i dung. Trần chi phà `C3-08` chỉ **khai `KHÔNG ÄO ÄÆ¯á»¢C`** + nghÄ©a vụ khai, **không phải thuốc**.
|
||
|
||
### 6.3 — Bất-biến giữ được
|
||
|
||
- **Mã thoát: 0 lái.** Máy má»›i `exit 0` ở 5/5 fault-inject; 4 tệp lệnh sá»a Ä‘á»u ghi rõ *"KHÔNG chặn · máy luôn exit 0 · cổng chặn = W3b"*.
|
||
- **14 Ä‘oạn máy (11 vỡ-câm): 0 vỡ.** Chúng Ä‘á»c **TÊN** (`sub-*` · `session-<N>` · tên vai · `agent-memory/`). Lượt nà y **0 đổi tên, 0 xoá tên**; 2 tệp má»›i Ä‘á»u là tên MỚI đúng chuẩn (`naming-scan` xác nhận 0 dòng lệch mới). Bất-biến ngầm `agents/<role>.md`.BaseName ≡ `agent-memory/<role>/` **không bị chạm** — tôi chỉ sửa RUỘT 4 persona, **0 rename**.
|
||
- **Tệp cấm: 0 chạm.** `STATUS.md` · `HANDOFF.md` · `CLAUDE.md` · `broadcasts/_index.md` · `naming-standard.md` · `naming-scan.ps1` · `artifact-integrity.ps1` · `adap-upgrade-pack-*.md`.
|
||
|
||
---
|
||
|
||
**END sub-w3-nghi-thuc — 4 nhãn Kà 4/4 nhưng CƯỠNG CHẾ 1 đủ / 2 ná»a / 1 CHƯA CÓ MÃY · vòng há»i ngược 5 cá»™t CÓ (khuôn + luáºt đóng 3 Ä‘iá»u kiện + 1 hà ng sinh bằng máy) · tiá»n-kiểm 5/19 → 9/19 (wall-clock ròng 194 ms < 281 ms đã-chấp-nháºn) · persona-B 4 tệp/5 sá»a, 4 phép Ä‘o sau-restart BÀN GIAO · fault-inject 5/5 ba chiá»u · 2 chá»— bác đỠbà i/lane (khung 4-nhãn "chỉ nhãn cuối là lá»—i" ⟂ chữ hub · lane F đếm `check-email` là cá»a gá»i probe trong khi nó chỉ NHẮC TÊN) · 1 số cá»§a lane C sá»a (4/19 → 5/19, `snapshot` đóng từ CHƯA-ÄO sang CÓ).**
|