[CLAUDE] Docs: thi hanh tron plan adap dot-2 (P2/P3/P5/P7i + W4 + khoan 5/6)

Chu du an chot 6 cau @S181; so quyet-dinh o
runs/2026-08-07-S180-adap-upgrade-pack-phased/owner-decisions-07-08-2026-dot-2.md

- P2=PB-2 sua luat da ratify du 2 SITE (tiep.md §3-bis canonical + pause.md
  b6 chi TRO). Cau cam san-3 GIU NGUYEN, chi them ranh REQUEST ⟂ TASK.
- W4: docs/governance/so-yeu-cau-chu-du-an.md 3 khoi, ma YC/ST/PN vinh vien.
  Config: tiep_reload.sources 8->9 + owner_request_verbatim_char_cap.
  nhip-no-probe ve-5 "so-yc treo/nhac2+", fault-inject 5/5, phan biet
  chua-co-du-lieu ⟂ treo 0. Ky luat ghi-NGAY + A5 cam CLAUDE.md + rules.md §6.0.
- P5: ACTIVE-MARKS §LT3 luat tu-tri 3 bac + mark RC-...-07-08-2026-20-57-48.
- P7(i): docs/governance/expensive-runs-view.md derive-view 5 cot.
- P3=B: niem phong _sealed_P3B_S181 (forward-only). Phep thu A10 da co rang
  (fault-inject: class tu che => exit 2; class hop le => exit 0).
- Khoan 6: scripts/naming-baseline.json = NGUON, script chi doc.
  Fault-inject 6/6 hai chieu. 7/7 baseline xanh. 0 byte non-ASCII.
- Khoan 5: broadcasts/_index.md +cot "ap" cuoi hang, backfill 42/4/23 = 69.
- W3 acceptance 6/6 dong + va defect con-tro bang-19-cua (view-stale-status).

Con treo: P8/W4b, W5, P7 ve (ii), VK-5, P3 hoi-to hay forward-only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-08-07 21:25:50 +07:00
parent cca2bc1aa8
commit a3776eaac4
21 changed files with 444 additions and 95 deletions

View File

@ -13,13 +13,15 @@ chain:
- [x] **W3** GĐ-3 | `docs/governance/ritual-labels.md` + `scripts/tien-kiem-cua.ps1`, tiền-kiểm 5/19->9/19, 4 persona-B vá - [x] **W3** GĐ-3 | `docs/governance/ritual-labels.md` + `scripts/tien-kiem-cua.ps1`, tiền-kiểm 5/19->9/19, 4 persona-B vá
- [x] 3 nợ máy-bắt trả sạch | `run-chua-gom 0` + V-3 S180=0 + stray class-S54=0 (control-dương: 33 folder khác vẫn kêu) - [x] 3 nợ máy-bắt trả sạch | `run-chua-gom 0` + V-3 S180=0 + stray class-S54=0 (control-dương: 33 folder khác vẫn kêu)
- [x] C2 seed on-behalf 6 vai INFORM-only | `grep -c S180` = 1 mỗi vai, moji=0 - [x] C2 seed on-behalf 6 vai INFORM-only | `grep -c S180` = 1 mỗi vai, moji=0
- [ ] **W4** GĐ-4 — CHẶN: cần P2 thi hành (sửa luật ratify `tiep.md:181` TƯỜNG MINH CÓ VẾT) - [x] **P2 = PB-2 THI HÀNH đủ 2 SITE** @S181`tiep.md §3-bis` (ranh REQUEST⟂TASK + lý-lẽ + lineage, canonical) + `pause.md` bước 6 (B1 chỉ TRỎ). Câu cấm sàn-3 GIỮ NGUYÊN, chỉ thêm ranh đọc
- [ ] **W5** GĐ-5 (vá defect `spawn-model-audit`) — CHẶN: xếp sau W4 - [x] **W4 GĐ-4 XONG** | `docs/governance/so-yeu-cau-chu-du-an.md` 3 khối + mã YC/ST/PN vĩnh viễn (6 YC · 2 ST mồi · PN trống-có-khai) + phụ-lục "suy ra" · config: `tiep_reload.sources` 8→9 + khoá `owner_request_verbatim_char_cap` · máy dò vế-5 `so-yc treo/nhac2+` **fault-inject 5/5** (`chua-co-du-lieu``treo 0` PHÂN BIỆT) · kỷ luật ghi-NGAY/tra-trước-khi-hỏi + A5 cắm `CLAUDE.md` (+1109B) + `rules.md §6.0`, KHÔNG cắm vào commands
- [ ] **W5** GĐ-5 (vá defect `spawn-model-audit`) — xếp sau W4, nay MỞ
- [x] **đợt-2 owner chốt 5/6 câu @S181** | `owner-decisions-07-08-2026-dot-2.md` — P3=**B hub-ĐÓNG** · P5=**gật nguyên văn** · P7=**vế(i) gật, vế(ii) TREO** · P8=**"đội đầy đủ khi chạy OK"** (tần suất=quyền anh, KHÔNG tích nợ) · cột status=**b tách 2 cột** · baseline=**b tách file dữ-liệu** - [x] **đợt-2 owner chốt 5/6 câu @S181** | `owner-decisions-07-08-2026-dot-2.md` — P3=**B hub-ĐÓNG** · P5=**gật nguyên văn** · P7=**vế(i) gật, vế(ii) TREO** · P8=**"đội đầy đủ khi chạy OK"** (tần suất=quyền anh, KHÔNG tích nợ) · cột status=**b tách 2 cột** · baseline=**b tách file dữ-liệu**
- [x] **DRY-RUN W3 acceptance @S181 (phiên SAU restart — cửa sổ mà S180 không có)**: 5/6 ô PASS · lớp-B `PROBE-B: 12 class = 6 view + 6 gap` (đếm từ tệp) · lớp-C 6/6 cửa `tien-kiem` exit 0 · 4 vị-từ §2.1 chạy thật + control-âm 0 · bảng 19 cửa ĐỦ 19 dòng (5 ô CÓ = khớp 5/19 độc lập) - [x] **DRY-RUN W3 acceptance @S181 (phiên SAU restart — cửa sổ mà S180 không có)**: 5/6 ô PASS · lớp-B `PROBE-B: 12 class = 6 view + 6 gap` (đếm từ tệp) · lớp-C 6/6 cửa `tien-kiem` exit 0 · 4 vị-từ §2.1 chạy thật + control-âm 0 · bảng 19 cửa ĐỦ 19 dòng (5 ô CÓ = khớp 5/19 độc lập)
- [x] **W3 acceptance 6/6 ĐÓNG** — ô cuối (`/adap-apply` dry, anh chốt giữa lượt): thân lệnh nạp CÓ BƯỚC 0 + probe exit 0. Defect con-trỏ bảng-19-cửa (`view-stale-status`) ĐÃ VÁ 3 chỗ: `ritual-labels:138` + `:150` + `tracking:67` nay trỏ đúng `sub-w3-nghi-thuc.md §1.2` - [x] **W3 acceptance 6/6 ĐÓNG** — ô cuối (`/adap-apply` dry, anh chốt giữa lượt): thân lệnh nạp CÓ BƯỚC 0 + probe exit 0. Defect con-trỏ bảng-19-cửa (`view-stale-status`) ĐÃ VÁ 3 chỗ: `ritual-labels:138` + `:150` + `tracking:67` nay trỏ đúng `sub-w3-nghi-thuc.md §1.2`
- [x] **THI HÀNH 5/6 khoản đợt-2 @S181****P5** `ACTIVE-MARKS §LT3` + mark `RC-…-07-08-2026-20-57-48` (3 bậc, ranh = tính PHÁ HUỶ) · **khoản 6** `scripts/naming-baseline.json` NGUỒN + script chỉ đọc, **fault-inject 6/6 hai chiều**, 0 byte non-ASCII, exit 0, 7/7 baseline xanh · **P7(i)** `docs/governance/expensive-runs-view.md` derive-view 5 cột + khai 3 giới-hạn · **khoản 5** `_index` +cột `áp` cuối hàng, backfill **42 áp/4 chưa/23 n-a = 69**, 69/69 dòng 12-trường · **P3=B** niêm phong `_sealed_P3B_S181` (forward-only) - [x] **THI HÀNH 5/6 khoản đợt-2 @S181****P5** `ACTIVE-MARKS §LT3` + mark `RC-…-07-08-2026-20-57-48` (3 bậc, ranh = tính PHÁ HUỶ) · **khoản 6** `scripts/naming-baseline.json` NGUỒN + script chỉ đọc, **fault-inject 6/6 hai chiều**, 0 byte non-ASCII, exit 0, 7/7 baseline xanh · **P7(i)** `docs/governance/expensive-runs-view.md` derive-view 5 cột + khai 3 giới-hạn · **khoản 5** `_index` +cột `áp` cuối hàng, backfill **42 áp/4 chưa/23 n-a = 69**, 69/69 dòng 12-trường · **P3=B** niêm phong `_sealed_P3B_S181` (forward-only)
- [ ] 🔴 **P8 CHƯA LÀM** (khoản 6/6 còn lại) — wire khối chấm vào `session-start.md` + `session-end.md`, kèm tách 2 đại-lượng: *đủ khi chạy* = cổng máy ⟂ *tần suất* = quyền anh, **CẤM tích nợ** - [ ] 🔴 **P8 = W4b** (khoản 6/6) — wire khối chấm vào `session-start`+`session-end`; nay ĐỦ điều-kiện (W4 xong + P4 + P8 + P3). Rào bắt buộc: lượt đầu in `KHÔNG ĐO ĐƯỢC` (máy đọc nguồn thưa luôn cho 10/10) + tách *đủ-khi-chạy*=cổng-máy ⟂ *tần-suất*=quyền-anh **CẤM tích nợ**
- [ ] 🔸 acceptance W4 ô-1 KHAI THẲNG: `grep -c '^ST-'` = **0** vì sổ dạng BẢNG (`| \`ST-001\``); đếm đúng dạng = **2** (đạt về CHẤT). Regex acceptance giả-định layout phi-bảng — class `acceptance literal tự-lão-hoá`, KHÔNG bẻ bảng để chiều regex
- [ ] W3b (P1=PA-2, phân loại ~70 cờ) · W4b (P4+P8 ĐỦ — chờ W4 xong) · **W5b VẪN GATED: P7 vế(ii) chưa phán** · W6 - [ ] W3b (P1=PA-2, phân loại ~70 cờ) · W4b (P4+P8 ĐỦ — chờ W4 xong) · **W5b VẪN GATED: P7 vế(ii) chưa phán** · W6
next: thi hành P2 (2 SITE) -> W4 -> W5. Thư hub 08-07 ĐÃ đọc + đã tính vào quyết-định đợt-2. Việc rời chờ xếp: 6 khoản đã chốt (P3-đóng-tập + phép-thử-A10 · P5-vào-ACTIVE-MARKS · P7(i)-expensive-runs-view · P8-wire-2-cửa · _index-tách-2-cột · baseline-ra-file-dữ-liệu) next: thi hành P2 (2 SITE) -> W4 -> W5. Thư hub 08-07 ĐÃ đọc + đã tính vào quyết-định đợt-2. Việc rời chờ xếp: 6 khoản đã chốt (P3-đóng-tập + phép-thử-A10 · P5-vào-ACTIVE-MARKS · P7(i)-expensive-runs-view · P8-wire-2-cửa · _index-tách-2-cột · baseline-ra-file-dữ-liệu)

View File

@ -20,6 +20,7 @@
".claude/sessions/session-<N>/_mind-s-<N>.md :: tron (doc TU TREN XUONG)", ".claude/sessions/session-<N>/_mind-s-<N>.md :: tron (doc TU TREN XUONG)",
".claude/sessions/session-<N>/_context-s-<N>.md :: tron", ".claude/sessions/session-<N>/_context-s-<N>.md :: tron",
".claude/governance/ACTIVE-MARKS.md :: tron (bang marks dang hieu luc — +S168 slot 59)", ".claude/governance/ACTIVE-MARKS.md :: tron (bang marks dang hieu luc — +S168 slot 59)",
"docs/governance/so-yeu-cau-chu-du-an.md :: 3 khoi (KHONG phu luc) - so YEU-CAU cua chu du an, W4/S181. Khong nap = so chet (A3).",
"docs/gotchas.md :: 5 section ### N. MOI NHAT (KHONG ca file — +S168 slot 59)", "docs/gotchas.md :: 5 section ### N. MOI NHAT (KHONG ca file — +S168 slot 59)",
"docs/changelog/migration-todos.md :: header Active-work + section Phase hien hanh (KHONG ca file — +S168 slot 59)" "docs/changelog/migration-todos.md :: header Active-work + section Phase hien hanh (KHONG ca file — +S168 slot 59)"
] ]
@ -170,6 +171,10 @@
"deep_every": 15, "deep_every": 15,
"jump_on_class_repeat": 3 "jump_on_class_repeat": 3
}, },
"owner_request_verbatim_char_cap": {
"_note": "C4-01 (W4/S181). Tran ky tu cho cot 'loi nguyen van' cua docs/governance/so-yeu-cau-chu-du-an.md. Cat thi PHAI de dau ... va giu con-tro toi cho co ban day du. CAM tom tat thay vi cat: tom tat la DIEN GIAI, ma cot do ton tai chinh de KHONG dien giai (bay A1). Dien giai da co o rieng = cot thu 7 'doi hieu thanh gi'.",
"chars": 600
},
"lead_self_audit": { "lead_self_audit": {
"_note": "Harness-24 (S121, 2026-07-15, wave adap-6-broadcast W2) CLOSED enum of flag classes for the 2 monitor roles lead-stale-auditor + lead-gap-auditor. CLOSED = a monitor may NOT invent a class; an unclassifiable finding is reported verbatim + escalated to the owner to extend this list. Rationale (spec v2 M4): v1 required 'class in a CLOSED enum' but never listed the enum nor named the config key, so the enum lived only in one lane's head -- workers never see it, invent their own classes, and the statistics dilute. That is exactly what H24 §2(1) forbids. ORIGINAL SHAPE (S121): five view-* classes and five gap-* classes, mirroring the ten signals in H24 §2(1). S143 EXTENSION (2026-07-22, owner-approved): +1 class 'gap-incident-unrecorded' => now 5 view-* + 6 gap-*. Trigger that earned it: 3/3 subagents garbled (#53) in one session and the event left 0 trace on WAL/HANDOFF/STATUS/error-ledger while those surfaces were advertising '0-garble' (true, but about the PRIOR session); the running tally in .claude/auto-memory/feedback_agent_return_garble_recover.md had also been frozen at 'x20 through S118' for 8 session labels. lead-gap-auditor correctly REFUSED to invent the class and escalated verbatim per the CLOSED-enum rule above -- this entry is the owner extending the list, which is exactly the escape hatch that rule prescribes. Scope: an operational incident that happened and was verifiably not written to any durable ledger; NOT for a stale number (view-*) and NOT for a dropped carry (gap-carry-dropped).", "_note": "Harness-24 (S121, 2026-07-15, wave adap-6-broadcast W2) CLOSED enum of flag classes for the 2 monitor roles lead-stale-auditor + lead-gap-auditor. CLOSED = a monitor may NOT invent a class; an unclassifiable finding is reported verbatim + escalated to the owner to extend this list. Rationale (spec v2 M4): v1 required 'class in a CLOSED enum' but never listed the enum nor named the config key, so the enum lived only in one lane's head -- workers never see it, invent their own classes, and the statistics dilute. That is exactly what H24 §2(1) forbids. ORIGINAL SHAPE (S121): five view-* classes and five gap-* classes, mirroring the ten signals in H24 §2(1). S143 EXTENSION (2026-07-22, owner-approved): +1 class 'gap-incident-unrecorded' => now 5 view-* + 6 gap-*. Trigger that earned it: 3/3 subagents garbled (#53) in one session and the event left 0 trace on WAL/HANDOFF/STATUS/error-ledger while those surfaces were advertising '0-garble' (true, but about the PRIOR session); the running tally in .claude/auto-memory/feedback_agent_return_garble_recover.md had also been frozen at 'x20 through S118' for 8 session labels. lead-gap-auditor correctly REFUSED to invent the class and escalated verbatim per the CLOSED-enum rule above -- this entry is the owner extending the list, which is exactly the escape hatch that rule prescribes. Scope: an operational incident that happened and was verifiably not written to any durable ledger; NOT for a stale number (view-*) and NOT for a dropped carry (gap-carry-dropped).",
"_vocab_guard": "'view' / 'omission' chosen DELIBERATELY to avoid collisions: scripts/governance-detectors.ps1:15 already owns 'derived-staleness' (so no class may be named *-stale-role or vai-STALE), and the bare word 'GAP' is overloaded elsewhere (session-end.md 'build-gap vs floor-rot'; scripts/memory-selfimprove-audit.ps1 'CRITERIA+GAP'). A colliding name would make two different detectors answer to the same word.", "_vocab_guard": "'view' / 'omission' chosen DELIBERATELY to avoid collisions: scripts/governance-detectors.ps1:15 already owns 'derived-staleness' (so no class may be named *-stale-role or vai-STALE), and the bare word 'GAP' is overloaded elsewhere (session-end.md 'build-gap vs floor-rot'; scripts/memory-selfimprove-audit.ps1 'CRITERIA+GAP'). A colliding name would make two different detectors answer to the same word.",

View File

@ -5,7 +5,7 @@ metadata:
node_type: memory node_type: memory
type: feedback type: feedback
originSessionId: 67157d21-1ead-475d-9a50-cf7f07468583 originSessionId: 67157d21-1ead-475d-9a50-cf7f07468583
modified: 2026-08-01T09:10:41.088Z modified: 2026-08-07T06:04:25.682Z
--- ---
Sub-agent đôi khi trả về message CUỐI = text bước memory-curation của nó ("Still 18KB, let me trim...", "Memory updated, splice correct...") THAY VÌ verdict/findings của task (#53 return-channel garble). Nhưng WORK + agent-memory diary VẪN ĐÚNG (nó làm task xong, ghi diary chuẩn, chỉ return nhầm text bước cuối). **Recover: đọc `agent-memory/<role>/MEMORY.md` recent-entry lấy verdict thật — KHÔNG re-spawn** (tốn + có thể garble tiếp; hoặc em-main re-do solo cho task cần chắc). Instruction-fix spawn-prompt "🔴 message CUỐI PHẢI là verdict, KHÔNG phải memory-note" GIẢM garble nhưng KHÔNG 100%. Sub-agent đôi khi trả về message CUỐI = text bước memory-curation của nó ("Still 18KB, let me trim...", "Memory updated, splice correct...") THAY VÌ verdict/findings của task (#53 return-channel garble). Nhưng WORK + agent-memory diary VẪN ĐÚNG (nó làm task xong, ghi diary chuẩn, chỉ return nhầm text bước cuối). **Recover: đọc `agent-memory/<role>/MEMORY.md` recent-entry lấy verdict thật — KHÔNG re-spawn** (tốn + có thể garble tiếp; hoặc em-main re-do solo cho task cần chắc). Instruction-fix spawn-prompt "🔴 message CUỐI PHẢI là verdict, KHÔNG phải memory-note" GIẢM garble nhưng KHÔNG 100%.
@ -55,4 +55,11 @@ Sub-agent đôi khi trả về message CUỐI = text bước memory-curation c
🔴 **@S168 GHI SỰ-KIỆN L9 (2026-08-01 — L9 CÒN MỞ, tally CHỐT @closeout L9 theo đúng luật (c) + đếm CÁI-CHẮC):** nguồn per-window = `_context-s-9` PAUSE-2/3/4 + `_mind-s-9` MIND-4 §C/§E: **window-2 (S164)** sự-kiện đã xử tại chỗ: `ngược-#53` ev#4 (B1a att-1 **0-byte/207K tok**) · skeleton-472B (B2c1 att-1) · chết-ruột-188B (c2-l3) · garble fable-lane 3/9 + opus-lane 1/13 (nhãn PAUSE-2 — chốt phải đọc đĩa từng sub-file, đừng cộng nhãn) · **window-3 (S165)** PAUSE-3 ghi "~14 return-hỏng / 17 spawn — 0 mất công" (reviewer×3-resume-điền · cicd×3 · lane-K2×4 · lane-K3×4 gồm `engine-process-exit` ×2 CÙNG-task) — số "~" là ước cùng-phiên · **window-4 (S166)** nháp-8 (chết-limit giữa /pause-dở, 0 entry PAUSE ⇒ đếm khi chốt = đọc 15 artifact K4a/K4b/K5/K4c/F-1/H24-deep) · **window-5 (S167)** MIND-4 §C **derive-from-§E: 8 return-hỏng / 15 lượt (10 spawn + 5 resume), 0 mất công** — phác-đồ chọn-nhánh-theo-CÁI-THIẾU chạy tốt (resume-điền · lead-close-on-behalf · resume-Write-trước) · **window-6 (S168)** ctx-verifier CLEAN ×1, 0 garble. ⇒ TỔNG lũy-kế **GIỮ 72 cận-dưới qua S162** — L9 cộng @/session-end L9 bằng đọc-đĩa từng sub-file. Xác nhận lần 6: chống-#53 = thiết-kế ARTIFACT (0 B mất toàn L9 dù garble là nhịp-nền). 🔴 **@S168 GHI SỰ-KIỆN L9 (2026-08-01 — L9 CÒN MỞ, tally CHỐT @closeout L9 theo đúng luật (c) + đếm CÁI-CHẮC):** nguồn per-window = `_context-s-9` PAUSE-2/3/4 + `_mind-s-9` MIND-4 §C/§E: **window-2 (S164)** sự-kiện đã xử tại chỗ: `ngược-#53` ev#4 (B1a att-1 **0-byte/207K tok**) · skeleton-472B (B2c1 att-1) · chết-ruột-188B (c2-l3) · garble fable-lane 3/9 + opus-lane 1/13 (nhãn PAUSE-2 — chốt phải đọc đĩa từng sub-file, đừng cộng nhãn) · **window-3 (S165)** PAUSE-3 ghi "~14 return-hỏng / 17 spawn — 0 mất công" (reviewer×3-resume-điền · cicd×3 · lane-K2×4 · lane-K3×4 gồm `engine-process-exit` ×2 CÙNG-task) — số "~" là ước cùng-phiên · **window-4 (S166)** nháp-8 (chết-limit giữa /pause-dở, 0 entry PAUSE ⇒ đếm khi chốt = đọc 15 artifact K4a/K4b/K5/K4c/F-1/H24-deep) · **window-5 (S167)** MIND-4 §C **derive-from-§E: 8 return-hỏng / 15 lượt (10 spawn + 5 resume), 0 mất công** — phác-đồ chọn-nhánh-theo-CÁI-THIẾU chạy tốt (resume-điền · lead-close-on-behalf · resume-Write-trước) · **window-6 (S168)** ctx-verifier CLEAN ×1, 0 garble. ⇒ TỔNG lũy-kế **GIỮ 72 cận-dưới qua S162** — L9 cộng @/session-end L9 bằng đọc-đĩa từng sub-file. Xác nhận lần 6: chống-#53 = thiết-kế ARTIFACT (0 B mất toàn L9 dù garble là nhịp-nền).
**How to apply:** sub return text lạ (memory-curation/off-topic/câu-mở-đầu/narration-giữa-chừng) → ĐỪNG tin nó fail/vô-dụng; **đọc ĐĨA trước, rồi diary, rồi resume**. Task-cần-chắc (bug-reasoning) → em-main re-do solo (reliable). 🔴 **Với MỌI spawn reasoning-lane: ép ghi đĩa từng phần trong prompt** — không để giảm garble mà để **garble không tốn gì**. Liên [[feedback_agent_kill_recovery]] · [[feedback_workflow_fanout_reliability]] · [[feedback_return_terminates_agent]]. 🔴 **@S180 GHI SỰ-KIỆN (2026-08-07, L12 CÒN MỞ — tally CHỐT @closeout theo luật (c)):** bookend @open **6/6 vai nặng first-return garble** (`tooling-auditor` · `harvest-curator` · `lead-gap-auditor` · `lead-stale-auditor` · `ring1-audit` · `ring2-audit` — 100% reasoning-lane, khớp correlation S103). Chữ ký đồng nhất **chết đúng write-boundary** y S151: *"let me check the machine output…"* · *"Let me spot-check S169 the same way…"* · *"Let me check the two live threads…"* · *"Now let me read the source-of-truth surfaces."* · *"Now verifying H2's content-marker test…"* · *"Let me reproduce the detector's actual scoring."* Recover **path-2 resume-in-session**, sub-lẻ giữ form (S147 3/3 → S151 5/5 → nay tiếp), **0 B mất**.
🔴 **DATUM MỚI — nâng cấp bài "đọc câu garble, đừng vứt" (S158) lên một nấc:** S158 chỉ chứng garble **chứa** finding. @S180 lần đầu có ca garble **LẬT KẾT LUẬN LEAD VỪA PHÁT RA, và lead hành động NGAY trong cùng lượt, trước cả khi resume**: `lead-gap-auditor` chết giữa câu *"…the **4 unapplied 2026-08-04 letters**"* — lead vừa tuyên "kênh `all` = 0 thư cần áp" ở BƯỚC 0.9; đo lại lập tức (`ls adap-reports/ | grep -c 2026-08-04` = 0, 4 token = 0/0/0/0, control-dương `loi-do-luong` = 1) ⇒ **lead SAI, thư chưa áp**. Ca thứ hai cùng phiên: `harvest-curator` chết ở *"Content test confirms the S168 debt at the strongest level"* — cũng là finding load-bearing.
**Nâng cấp How-to-apply:** mẩu garble không chỉ *"thường là chỗ vai nghĩ sắc nhất"* — nó **có thể là bằng-chứng DUY NHẤT còn lại chống lại một kết luận sai của lead**. Đọc nó **TRƯỚC KHI** resume, và nếu nó mâu thuẫn với thứ lead vừa nói thì **đo ngay, đừng đợi vai trả lại**.
🔸 **Counter-datum củng cố S151/S152 (return-only + khuôn cứng sống tốt hơn):** 3 spawn-probe vai STYLE (`front/back/database-reviewer-style`) — lệnh trả **đúng 1 dòng cố định**, cấm gọi tool — **3/3 CLEAN**, ~2,3s mỗi con. Cùng phiên, cùng lead. Khác biệt duy nhất = **hình dạng return được định trước** vs return tự do sau khi làm việc dài.
**How to apply:** sub return text lạ (memory-curation/off-topic/câu-mở-đầu/narration-giữa-chừng) → ĐỪNG tin nó fail/vô-dụng; **ĐỌC MẨU GARBLE ĐÃ (nó có thể chứa finding lật kết luận của chính mình — S180), rồi đọc ĐĨA, rồi diary, rồi resume**. Task-cần-chắc (bug-reasoning) → em-main re-do solo (reliable). 🔴 **Với MỌI spawn reasoning-lane: ép ghi đĩa từng phần trong prompt** — không để giảm garble mà để **garble không tốn gì**. Liên [[feedback_agent_kill_recovery]] · [[feedback_workflow_fanout_reliability]] · [[feedback_return_terminates_agent]].

View File

@ -10,6 +10,17 @@ argument-hint: <id | all-pending>
**ID/topic:** $ARGUMENTS **ID/topic:** $ARGUMENTS
## BƯỚC 0 — TIỀN KIỂM ĐẦU CỬA (chỉ đọc, chi phí ~0, **KHÔNG chặn**)
🔴 Chạy **TRƯỚC** mọi việc khác của cửa này:
`powershell.exe -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1 -Cua adap-apply`
→ in **1 dòng** `TIEN-KIEM: cua=… cua-dong-gan-nhat=… moc-trong-tep=… phien=… | nguon n/2 | <ok|CỜ>`.
- 🔴 **KHÔNG CHẶN.** Lỗi bất kỳ ⇒ in `tien-kiem loi (khong chan)` rồi **ĐI TIẾP**. Máy **luôn `exit 0`** — cổng chặn bằng mã lỗi là wave **W3b**, chưa chốt; ai sửa máy này trả mã ≠0 là đã đổi lớp.
- 🔸 Cửa đóng gần nhất chọn bằng **dấu thời gian ghi TRONG tệp**, **không** tin `mtime` của hệ điều hành (hook `wal:` chạm tệp mỗi lượt; `git checkout` viết lại `mtime` hàng loạt).
- 🔸 Cờ `THIEU-TAP` nghĩa là **0/2 nguồn đọc được****KHÔNG được đọc thành "sạch"**. Cờ `NGUON-HONG` / `LECH-PHIEN`**INFORM**, không phải lệnh dừng.
- 🔸 Bước nào của cửa bị lệch thì gọi tên theo `docs/governance/ritual-labels.md` (4 nhãn + vòng hỏi ngược 5 cột), **đừng tự chế nhãn**.
## Flow (lead sister) ## Flow (lead sister)
1. **Đọc outbox AI_INFRA:** `D:\Dropbox\CONG_VIEC\AI_INFRA\broadcasts\outbox\all\*.md` *(Harness 3 §8 06-07: broadcast fan-out gom vào `outbox/all/`; base path configurable — AI_INFRA đổi path/web-migration thì sửa 1 dòng này)*. Fallback chi tiết canonical: `cross_project_search`. 1. **Đọc outbox AI_INFRA:** `D:\Dropbox\CONG_VIEC\AI_INFRA\broadcasts\outbox\all\*.md` *(Harness 3 §8 06-07: broadcast fan-out gom vào `outbox/all/`; base path configurable — AI_INFRA đổi path/web-migration thì sửa 1 dòng này)*. Fallback chi tiết canonical: `cross_project_search`.
2. **Filter — broadcast `targets` gồm project này (hoặc `all-fit`) VÀ chưa-applied:** 2. **Filter — broadcast `targets` gồm project này (hoặc `all-fit`) VÀ chưa-applied:**

View File

@ -10,6 +10,12 @@ argument-hint: <id | all-applied>
**ID/scope:** $ARGUMENTS **ID/scope:** $ARGUMENTS
## BƯỚC 0 — TIỀN KIỂM ĐẦU CỬA (chỉ đọc, chi phí ~0, **KHÔNG chặn**)
🔴 Chạy **TRƯỚC** mọi việc khác: `powershell.exe -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1 -Cua adap-report` → in **1 dòng** `TIEN-KIEM: …`.
🔴 **KHÔNG CHẶN** — lỗi ⇒ `tien-kiem loi (khong chan)` → đi tiếp; máy **luôn `exit 0`** (cổng chặn = W3b, chưa chốt).
🔸 Chọn cửa bằng **dấu thời gian TRONG tệp**, không tin `mtime`. `THIEU-TAP` = 0/2 nguồn đọc được, **cấm đọc thành "sạch"**. Nhãn bước lệch: `docs/governance/ritual-labels.md`.
## 📋 REPORT-FORMAT (LOCK — khớp `/adap-audit` reader) ## 📋 REPORT-FORMAT (LOCK — khớp `/adap-audit` reader)
Mỗi report `docs/governance/adap-reports/<id>.md` (1 file/broadcast) gồm đúng 5 trường: Mỗi report `docs/governance/adap-reports/<id>.md` (1 file/broadcast) gồm đúng 5 trường:
1. **id-broadcast**`<date>-<category>-<slug>` (khớp outbox AI_INFRA). 1. **id-broadcast**`<date>-<category>-<slug>` (khớp outbox AI_INFRA).

View File

@ -11,6 +11,12 @@ argument-hint: <proposal | flaw-id>
**Proposal:** $ARGUMENTS **Proposal:** $ARGUMENTS
## BƯỚC 0 — TIỀN KIỂM ĐẦU CỬA (chỉ đọc, chi phí ~0, **KHÔNG chặn**)
🔴 Chạy **TRƯỚC** mọi việc khác: `powershell.exe -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1 -Cua adap-request` → in **1 dòng** `TIEN-KIEM: …`.
🔴 **KHÔNG CHẶN** — lỗi ⇒ `tien-kiem loi (khong chan)` → đi tiếp; máy **luôn `exit 0`** (cổng chặn = W3b, chưa chốt).
🔸 Chọn cửa bằng **dấu thời gian TRONG tệp**, không tin `mtime`. `THIEU-TAP` = 0/2 nguồn đọc được, **cấm đọc thành "sạch"**. Nhãn bước lệch: `docs/governance/ritual-labels.md`.
## Flow (lead sister) ## Flow (lead sister)
1. **Gather đề-xuất:** `$ARGUMENTS` = 1 proposal (vd "FUNCTION-floor X làm khó project vì Y", "pattern Z tốt hơn cho RAG chunk", "broadcast `<id>` có flaw"). Nguồn: flaw gặp khi `/adap-apply`, gotcha dogfood repo mình, ý tưởng cải tiến. 1. **Gather đề-xuất:** `$ARGUMENTS` = 1 proposal (vd "FUNCTION-floor X làm khó project vì Y", "pattern Z tốt hơn cho RAG chunk", "broadcast `<id>` có flaw"). Nguồn: flaw gặp khi `/adap-apply`, gotcha dogfood repo mình, ý tưởng cải tiến.

View File

@ -40,6 +40,13 @@ Chỉ cắm 2 cửa `session-start`/`session-end` thì **đúng ca anh đang lo
🔒 **Bất-biến:** 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**, đúng câu hỏi hub đặt: *"có làm điểm dừng đắt lên không"***TRƯỚC** khi bàn giá-trị của bước đó. 🔒 **Bất-biến:** 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**, đúng câu hỏi hub đặt: *"có làm điểm dừng đắt lên không"***TRƯỚC** khi bàn giá-trị của bước đó.
## BƯỚC 0 — TIỀN KIỂM ĐẦU CỬA (chỉ đọc, chi phí ~0, **KHÔNG chặn**)
🔴 Chạy **TRƯỚC** DÒ/KÉO: `powershell.exe -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1 -Cua check-email` → in **1 dòng** `TIEN-KIEM: …`.
🔴 **KHÔNG CHẶN** — lỗi ⇒ `tien-kiem loi (khong chan)` → đi tiếp; máy **luôn `exit 0`** (cổng chặn = W3b, chưa chốt).
🔸 Chọn cửa đóng gần nhất bằng **dấu thời gian TRONG tệp**, không tin `mtime`. `THIEU-TAP` = 0/2 nguồn đọc được, **cấm đọc thành "sạch"**. Nhãn bước lệch: `docs/governance/ritual-labels.md`.
🔸 **Đã tuân bất-biến `:41` ngay trên:** wall-clock đo TRƯỚC khi cắm (S180 W3) — ròng **~194 ms**, rẻ hơn `nhip-no-probe.ps1` (**~281 ms**) vốn đã được chấp nhận ở `/pause`·`/tiep`. **KHÔNG cắm bước này vào `/pause`·`/tiep`** (hai cửa đó đã có probe; thêm nữa là làm điểm dừng đắt lên).
**Cách chạy ở mỗi cửa — `/check-email all`:** **Cách chạy ở mỗi cửa — `/check-email all`:**
- 🟢 **Không có thư mới ⇒ 1 dòng, im lặng đi tiếp.** KHÔNG báo-cáo dài, KHÔNG chờ anh. - 🟢 **Không có thư mới ⇒ 1 dòng, im lặng đi tiếp.** KHÔNG báo-cáo dài, KHÔNG chờ anh.
- 🔴 **FAIL-SOFT, CẤM chặn nghi-thức:** lỗi bất-kỳ (repo bên kia không có trên máy · path đổi · thiếu python) ⇒ in `check-email loi (khong chan)` rồi **ĐI TIẾP**. Cùng khuôn `nhip-no-probe.ps1`: một bước MỚI **không bao giờ được phép** làm hỏng nghi-thức đã chạy tốt. - 🔴 **FAIL-SOFT, CẤM chặn nghi-thức:** lỗi bất-kỳ (repo bên kia không có trên máy · path đổi · thiếu python) ⇒ in `check-email loi (khong chan)` rồi **ĐI TIẾP**. Cùng khuôn `nhip-no-probe.ps1`: một bước MỚI **không bao giờ được phép** làm hỏng nghi-thức đã chạy tốt.

View File

@ -113,6 +113,9 @@ Báo đúng sáu ý:
5. **dòng-nợ (Item 2 S135):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` in dòng-nợ 4-vế (nhịp-kiểm đọc post-tick bước 3.5). 🔴 **probe KHÔNG chặn điểm dừng**: lỗi in `probe-loi (khong chan)` đi tiếp, VẪN tuyên-bố "an-toàn để thoát". 5. **dòng-nợ (Item 2 S135):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` in dòng-nợ 4-vế (nhịp-kiểm đọc post-tick bước 3.5). 🔴 **probe KHÔNG chặn điểm dừng**: lỗi in `probe-loi (khong chan)` đi tiếp, VẪN tuyên-bố "an-toàn để thoát".
> 🔗 **Predicate C7 đầy-đủ (probe nào được phép chạy ở điểm dừng) = canonical [`harness-11-engine.md`](../../docs/governance/harness-11-engine.md) §N.8.** 🔴 **B1 — dòng này CHỈ TRỎ, CẤM chép predicate sang đây.** > 🔗 **Predicate C7 đầy-đủ (probe nào được phép chạy ở điểm dừng) = canonical [`harness-11-engine.md`](../../docs/governance/harness-11-engine.md) §N.8.** 🔴 **B1 — dòng này CHỈ TRỎ, CẤM chép predicate sang đây.**
6. **🧾 MASTER-CHECKLIST rút-gọn (S138):** derive từ WAL vừa ghi (bước 3) + HANDOFF in **Tầng-1** mỗi arc 1 dòng `{đóng · đang · chưa}` + **đếm 4-nhóm** (`xong` / `đang-dở` / `chờ-anh` / `chưa-làm`) + **liệt nhóm chờ-anh — 🔢 BẮT BUỘC ĐÁNH SỐ** (anh trả lời bằng số). 🔴 **Checklist = VIEW derive tươi — CẤM tạo file checklist nguồn-đôi (sàn-3).** 6. **🧾 MASTER-CHECKLIST rút-gọn (S138):** derive từ WAL vừa ghi (bước 3) + HANDOFF in **Tầng-1** mỗi arc 1 dòng `{đóng · đang · chưa}` + **đếm 4-nhóm** (`xong` / `đang-dở` / `chờ-anh` / `chưa-làm`) + **liệt nhóm chờ-anh — 🔢 BẮT BUỘC ĐÁNH SỐ** (anh trả lời bằng số). 🔴 **Checklist = VIEW derive tươi — CẤM tạo file checklist nguồn-đôi (sàn-3).**
> 🔧 **SỬA LUẬT ĐÃ RATIFY — P2 = PB-2, chủ dự án chốt @S180, thi hành @S181 (2026-08-07). SITE 2/2.**
> Câu cấm trên **GIỮ NGUYÊN**; ranh **REQUEST ⟂ TASK** + lý-lẽ đầy-đủ + lineage = canonical ở [`tiep.md` §3-bis](tiep.md) — **B1: chỉ TRỎ, CẤM chép sang đây** (chép 2 nơi = 2 nguồn sự-thật, đúng thứ chính câu cấm này chặn).
> Tóm đúng 1 dòng để đọc tại chỗ: **TASK** (việc tới đâu) = **CHỈ** `.claude/WAL.md` · **REQUEST** (anh đã yêu-cầu gì) = sổ yêu-cầu W4, **CẤM** mang cột trạng-thái-thi-công riêng, cần thì **TRỎ** về WAL.
Rồi **DỪNG HẲN**, KHÔNG nhận việc mới. Rồi **DỪNG HẲN**, KHÔNG nhận việc mới.

View File

@ -180,6 +180,20 @@ Tín-hiệu **YẾU NHẤT**, dùng cuối. 🔴 **`porcelain` rỗng KHÔNG ph
> - **vừa-xong** (mục vừa chuyển `[!]`→`[x]` khi reconcile) · **vẫn-treo** (`[!]` / `[ ]` còn lại) · **chờ-anh — 🔢 BẮT BUỘC ĐÁNH SỐ** (anh trả lời bằng số). > - **vừa-xong** (mục vừa chuyển `[!]`→`[x]` khi reconcile) · **vẫn-treo** (`[!]` / `[ ]` còn lại) · **chờ-anh — 🔢 BẮT BUỘC ĐÁNH SỐ** (anh trả lời bằng số).
> 🔴 **Checklist = VIEW derive tươi — CẤM tạo file checklist nguồn-đôi (sàn-3).** > 🔴 **Checklist = VIEW derive tươi — CẤM tạo file checklist nguồn-đôi (sàn-3).**
> >
> 🔧 **SỬA LUẬT ĐÃ RATIFY — P2 = PB-2, chủ dự án chốt @S180, thi hành @S181 (2026-08-07). SITE 1/2.**
> *(Site 2/2 = [`pause.md`](pause.md) bước 6, câu y hệt. Cả hai phải sửa cùng lượt — sửa một nửa thì `/tiep` mở mà `/pause` vẫn chặn.)*
>
> **Câu cấm ở trên GIỮ NGUYÊN, nhưng nay đọc theo ranh REQUEST ⟂ TASK:**
>
> | Lớp | Là gì | Nhà | Được phép có file riêng? |
> |---|---|---|---|
> | **TASK** | *việc đang ở đâu* — trạng-thái thi-công, `[ ]`/`[!]`/`[x]` | `.claude/WAL.md` (**nguồn duy-nhất**) | 🔴 **KHÔNG.** Chép trạng-thái task sang file khác = đúng thứ câu cấm chặn |
> | **REQUEST** | *anh đã yêu-cầu gì, và đã được đáp chưa* — lời của chủ dự án | sổ yêu-cầu (W4 dựng) | ✅ **CÓ.** Đây **không phải** bản thứ hai của WAL: WAL **không hề** lưu lời anh |
>
> **Vì sao ranh này hợp-lệ chứ không phải lách luật:** câu cấm sinh ra để chặn **hai nguồn cùng trả lời một câu hỏi** ("việc tới đâu?"). Sổ REQUEST trả lời **câu khác** ("anh đã yêu-cầu gì?") — câu mà WAL **chưa bao giờ** trả lời được, vì WAL ghi-đè ≤40 dòng và **cố ý không** giữ lời anh (lời anh sống ở `_context` FLOW, append-only). Hai câu khác nhau ⇒ hai nguồn ⇒ **không phải nguồn-đôi**.
> 🔴 **Ranh CỨNG, đừng nới:** sổ REQUEST **CẤM** mang cột trạng-thái-thi-công của riêng nó. Cần hiện "việc tới đâu" thì **TRỎ** về WAL, không chép. Nới chỗ này là tái sinh đúng nguồn-đôi vừa được loại trừ — và đó là **rủi ro số 1 của cả gói** (`wave-plan §R`).
> 🧊 *Lineage: câu cấm ký @S122 (mark `RC-pqhuy1987-15-07-2026-15-32-20`, điều-khoản sàn-3). Xung đột với "sổ = đường-ghi-chính ĐÃ KÝ" phát hiện @S180 lane C §B.5 — xung đột THẬT chỉ ở **một cột trạng-thái**. Anh chọn **PB-2** (tách 2 tầng) thay vì PB-1 (sổ giữ lời, trạng-thái = view). Sổ quyết-định: `owner-decisions-07-08-2026-dot-2.md` + PAUSE-1 của `_context-s-12.md`.*
>
> **§3-ter — 🧠 BẢN NẠP-LẠI lớp mềm ≤15 dòng** *(adopt `0df10df4` @S153 — sàn khoản 3 CÓ BẰNG-CHỨNG NỘI-DUNG; 🔴 ăn từ phiên sau restart CLI; 🔄 OWNER-VETO @S153: 4-khoản đối-chiếu + bản-nạp-lại nay do VAI-2 `ctx-verifier` sản xuất — hub-form 3-vai anh chốt)*: **spawn `ctx-verifier`** (máy `mind-check` full chạy TRƯỚC ở §2.6; PIN {`_mind` · `_context` · WAL-đã-reconcile-§3}) → vai trả 4-khoản đối-chiếu (**B vs `next:` — LỆCH ⇒ TIN SỔ MÁY + cờ** · C vs bản-đồ · D-đã-định-đoạt-chưa-đổi-nhãn · con-trỏ theo verdict máy) + **BẢN NẠP-LẠI ≤15 dòng** kết bằng dòng `LEAD-PHAI-NHAC-LAI: <tên-ý-D> · <E-verdict>`. Lead **PHẢI NHẮC LẠI** đúng các chi tiết đó trong báo-cáo đầu (chi tiết chỉ-biết-nếu-đã-đọc — "đã nạp" suông KHÔNG tính, metadata ts/hash KHÔNG tính); verdict 1-dòng của vai ghi vào biên-nhận (vết). Vai vắng/SKIP ⇒ lead tự chạy 4-khoản (fallback, khai rõ). **+ nạp NỀN RÚT-GỌN theo khoá `tiep_reload`** (`memory-budget.json` — B1: CẤM chép danh-sách tệp vào đây; ước ~40-60K tok input cache-được, quyết (37)(b) — nạp NỀN vẫn là việc LEAD, vai-2 chỉ lo lớp mềm). > **§3-ter — 🧠 BẢN NẠP-LẠI lớp mềm ≤15 dòng** *(adopt `0df10df4` @S153 — sàn khoản 3 CÓ BẰNG-CHỨNG NỘI-DUNG; 🔴 ăn từ phiên sau restart CLI; 🔄 OWNER-VETO @S153: 4-khoản đối-chiếu + bản-nạp-lại nay do VAI-2 `ctx-verifier` sản xuất — hub-form 3-vai anh chốt)*: **spawn `ctx-verifier`** (máy `mind-check` full chạy TRƯỚC ở §2.6; PIN {`_mind` · `_context` · WAL-đã-reconcile-§3}) → vai trả 4-khoản đối-chiếu (**B vs `next:` — LỆCH ⇒ TIN SỔ MÁY + cờ** · C vs bản-đồ · D-đã-định-đoạt-chưa-đổi-nhãn · con-trỏ theo verdict máy) + **BẢN NẠP-LẠI ≤15 dòng** kết bằng dòng `LEAD-PHAI-NHAC-LAI: <tên-ý-D> · <E-verdict>`. Lead **PHẢI NHẮC LẠI** đúng các chi tiết đó trong báo-cáo đầu (chi tiết chỉ-biết-nếu-đã-đọc — "đã nạp" suông KHÔNG tính, metadata ts/hash KHÔNG tính); verdict 1-dòng của vai ghi vào biên-nhận (vết). Vai vắng/SKIP ⇒ lead tự chạy 4-khoản (fallback, khai rõ). **+ nạp NỀN RÚT-GỌN theo khoá `tiep_reload`** (`memory-budget.json` — B1: CẤM chép danh-sách tệp vào đây; ước ~40-60K tok input cache-được, quyết (37)(b) — nạp NỀN vẫn là việc LEAD, vai-2 chỉ lo lớp mềm).
## 4. Mục `[!]` dạng `wf:` → nhánh recovery-workflow ## 4. Mục `[!]` dạng `wf:` → nhánh recovery-workflow

View File

@ -11,9 +11,9 @@
}, },
"_tick_invariant_note": "Tick invariant (hub dede7ec5 Delta-1, verbatim): moi LAN-CHOT +1; mot cap dung-noi tang DUNG +1, khong +2, khong +0. SE form = tick-at-entry-gate idempotent-per-label (hub Delta-2 recovery-gate +1 = permitted form) - NET +1/session-label EQUIV hub +1/cap on CLOSED pairs; an OPEN pair is transiently +0 until its entry gate fires (hub blessed, 9a35405b block-1 phep dung-noi). Guard song-con = label-convention (session-start 2.1.8: new conversation = new S\u003cnn\u003e label, NEVER reuse). history[] is append-unbounded BY DESIGN =\u003e absence of a marker = never-happened (safe semantics); IF a FIFO cap is ever added, eviction MUST be handled explicitly (absence-vi-bi-day != absence-vi-chua-xay-ra - log-BOUNDED design-note dede7ec5).", "_tick_invariant_note": "Tick invariant (hub dede7ec5 Delta-1, verbatim): moi LAN-CHOT +1; mot cap dung-noi tang DUNG +1, khong +2, khong +0. SE form = tick-at-entry-gate idempotent-per-label (hub Delta-2 recovery-gate +1 = permitted form) - NET +1/session-label EQUIV hub +1/cap on CLOSED pairs; an OPEN pair is transiently +0 until its entry gate fires (hub blessed, 9a35405b block-1 phep dung-noi). Guard song-con = label-convention (session-start 2.1.8: new conversation = new S\u003cnn\u003e label, NEVER reuse). history[] is append-unbounded BY DESIGN =\u003e absence of a marker = never-happened (safe semantics); IF a FIFO cap is ever added, eviction MUST be handled explicitly (absence-vi-bi-day != absence-vi-chua-xay-ra - log-BOUNDED design-note dede7ec5).",
"_seed_honesty": "Seeded UNTICKED on purpose. counter=0 and last_ticked_* = null mean \u0027no tick has ever happened\u0027, which is the truth at S121 - the ritual that performs the tick lands in W3. Seeding a fake first tick here would make the very first cadence reading a lie, and H24 exists to catch exactly that kind of invented number.", "_seed_honesty": "Seeded UNTICKED on purpose. counter=0 and last_ticked_* = null mean \u0027no tick has ever happened\u0027, which is the truth at S121 - the ritual that performs the tick lands in W3. Seeding a fake first tick here would make the very first cadence reading a lie, and H24 exists to catch exactly that kind of invented number.",
"counter": 54, "counter": 55,
"last_ticked_session": "S180", "last_ticked_session": "S181",
"last_ticked_head": "55894a04d0ee350df5ec0fa97626e8ca47580f0a", "last_ticked_head": "b8d22741c707d650af03eae09c61cc2ebcd97ff2",
"last_ticked_at": "2026-08-07", "last_ticked_at": "2026-08-07",
"last_audit": { "last_audit": {
"light_at_counter": 53, "light_at_counter": 53,
@ -276,6 +276,11 @@
"at": "2026-08-07", "at": "2026-08-07",
"session": "S180", "session": "S180",
"event": "squash-benign (session-counter-tick.ps1 M2, contract fail_loud_on_regress trigger-2 BENIGN branch): counter 53->54, session S179->S180, head b99c187->55894a0. last_ticked_head b99c187 object EXISTS (cat-file=commit) but NOT reachable (merge-base --is-ancestor exit!=0), counter not regressed => a closeout squash lifted the ticked wal:/session commit out of history (expected drift, not tamper). Trace appended, continue, no owner alarm. Written atomically (temp + Move-Item -Force)." "event": "squash-benign (session-counter-tick.ps1 M2, contract fail_loud_on_regress trigger-2 BENIGN branch): counter 53->54, session S179->S180, head b99c187->55894a0. last_ticked_head b99c187 object EXISTS (cat-file=commit) but NOT reachable (merge-base --is-ancestor exit!=0), counter not regressed => a closeout squash lifted the ticked wal:/session commit out of history (expected drift, not tamper). Trace appended, continue, no owner alarm. Written atomically (temp + Move-Item -Force)."
},
{
"at": "2026-08-07",
"session": "S181",
"event": "CLEAN tick (session-counter-tick.ps1 M2): counter 54->55, session S180->S181, head 55894a0->b8d2274. Classify-before-tick: no regression (n=181 >= stored n=180); last_ticked_head reachable (merge-base --is-ancestor exit 0). 4 fields updated, 1 history entry appended, written atomically (temp + Move-Item -Force)."
} }
] ]
} }

View File

@ -23,6 +23,7 @@
| `RC-pqhuy1987-15-07-2026-15-32-23` | `.claude/agents/lead-{view,omission}-auditor.md` + `hmw.js` VALID_ROLES + `memory-budget.json` (`h24_cadence`/`lead_self_audit`) + `.claude/governance/.session-counter.json` + `session-start §2.1.8` + `session-end §L.b(j)` + `docs/STATUS.md` (≙ AI_INFRA **H-24 lead-self-audit + H17 cadence**) | **H24 roster→14 + cadence + enum-ĐÓNG + counter + RE-STAMP.** **Sàn:** (1) **2 vai monitor MỚI** soi chính LEAD — `lead-view-auditor` (cái CÓ-nhưng-LỆCH) · `lead-omission-auditor` (cái BỊ THIẾU); **trục RIÊNG, CẤM gộp** H1 tooling-freshness / H2 harvest-integrity · (2) class-flag ∈ **enum ĐÓNG** `lead_self_audit.flag_classes` — vai **KHÔNG tự chế class**; không phân-loại được ⇒ báo **verbatim + escalate anh** · (3) nhịp ĐỌC từ `h24_cadence`, **CẤM hardcode** ở doc dẫn-xuất (detector **fail-loud** nếu key thiếu — **KHÔNG** giả-định default) · (4) counter **content-addressed neo HEAD-sha**, **CẤM blind-increment** (hook auto-commit mọi turn-boundary ⇒ `++` mù = nhịp vô-nghĩa); counter **LÙI****báo anh, CẤM silent-reset** · (5) 🔴 **roster đổi = 2 BỀ-MẶT ĐỘC-LẬP** (`agents/*.md`→registry ⟂ `VALID_ROLES``agentType`); vai MỚI cần **RESTART + spawn-probe THẬT**`ls`+grep = **CẦN, KHÔNG ĐỦ** · (6) **nghi-thức RE-STAMP carry mỗi phiên** (không re-stamp ⇒ streak≡1 ⇒ **0 fire vĩnh-viễn**) · (7) số roster/nhịp = **canonical-only** (`docs/STATUS.md`), doc dẫn-xuất **CẤM chép số** | **pain:** ① lead **ĐO tốt nhưng ĐẾM-VỀ-MÌNH thì sai** — wave này lead sai **6 lần**, 4 lần đúng trục đó (SHA bịa ghi TRƯỚC commit = **tái phạm bài-học 1 ngày trước**; "8 hit" thật 14; "tái-hiện chính xác dự-báo" trong khi đo **sai hướng**) · ② `gap-workstate-drop` bị bản-spec-trung-gian **BỎ** để làm tròn enum về 10 rồi tuyên *"khớp 5+5"* — mất đúng class bắt ca THẬT của SE (S118: 7-spawn → **0 run-folder**), enum ĐÓNG ⇒ mất vĩnh-viễn · ③ carry-age **vacuous CẤU-TRÚC**: 45 segment nhưng `carry-lines=1`**0 fire** | **volume:** mọi phiên (counter-tick §2.1.8 + §L.b(j)) × toàn roster × mọi carry trong HANDOFF | **quality:** **spawn-probe 14/14 RUNTIME** (0 error 0 garble; 2 vai mới lean nhất 26K < cap 60K) · **positive-control W4 khép, số cộng KHỚP** (5 FLAG0, TOTAL **50→45** tụt đúng 5, **0 flag mới**, đo bằng `comm`) · **TOTAL 50 khớp CHÍNH XÁC dự-báo W2** · acceptance `ls=14` **BỊ BÁC vì sai số-học** (glob bắt `README.md` ép xoá README = catastrophic-Goodhart) đổi sang bất-biến-trên-roster **14/14/14** · counter seed **UNTICKED trung-thực** | null (additive) | 🔖 **Active-High** (anh-confirm **S122** cùng lượt · **P4 report-before-stamp**) · 🔴 **CAVEAT BINDING — nấc bằng-chứng THẤP HƠN mark `…15-32-20`:** **2 vai CHƯA CHẠY lần nào** (spawn-probe chứng **spawn được**, KHÔNG chứng **soi được**) · **counter=0 CHƯA tick** · **nhịp 6/15/3 = điểm khởi-đầu owner cố-ý chọn, KHÔNG phải "đã chứng-minh hiệu-quả"** (hub: n=1 = mocc-0; **chỉnh lại sau chu-kỳ-2**) · probe phủ **Agent-tool registry** THÔI, đường `hmw.js→agentType` **CHƯA phủ** **mark này = LỆNH về CÁCH LÀM, chưa phải bằng-chứng về HIỆU-QUẢ** | | `RC-pqhuy1987-15-07-2026-15-32-23` | `.claude/agents/lead-{view,omission}-auditor.md` + `hmw.js` VALID_ROLES + `memory-budget.json` (`h24_cadence`/`lead_self_audit`) + `.claude/governance/.session-counter.json` + `session-start §2.1.8` + `session-end §L.b(j)` + `docs/STATUS.md` (≙ AI_INFRA **H-24 lead-self-audit + H17 cadence**) | **H24 roster→14 + cadence + enum-ĐÓNG + counter + RE-STAMP.** **Sàn:** (1) **2 vai monitor MỚI** soi chính LEAD — `lead-view-auditor` (cái CÓ-nhưng-LỆCH) · `lead-omission-auditor` (cái BỊ THIẾU); **trục RIÊNG, CẤM gộp** H1 tooling-freshness / H2 harvest-integrity · (2) class-flag ∈ **enum ĐÓNG** `lead_self_audit.flag_classes` — vai **KHÔNG tự chế class**; không phân-loại được ⇒ báo **verbatim + escalate anh** · (3) nhịp ĐỌC từ `h24_cadence`, **CẤM hardcode** ở doc dẫn-xuất (detector **fail-loud** nếu key thiếu — **KHÔNG** giả-định default) · (4) counter **content-addressed neo HEAD-sha**, **CẤM blind-increment** (hook auto-commit mọi turn-boundary ⇒ `++` mù = nhịp vô-nghĩa); counter **LÙI****báo anh, CẤM silent-reset** · (5) 🔴 **roster đổi = 2 BỀ-MẶT ĐỘC-LẬP** (`agents/*.md`→registry ⟂ `VALID_ROLES``agentType`); vai MỚI cần **RESTART + spawn-probe THẬT**`ls`+grep = **CẦN, KHÔNG ĐỦ** · (6) **nghi-thức RE-STAMP carry mỗi phiên** (không re-stamp ⇒ streak≡1 ⇒ **0 fire vĩnh-viễn**) · (7) số roster/nhịp = **canonical-only** (`docs/STATUS.md`), doc dẫn-xuất **CẤM chép số** | **pain:** ① lead **ĐO tốt nhưng ĐẾM-VỀ-MÌNH thì sai** — wave này lead sai **6 lần**, 4 lần đúng trục đó (SHA bịa ghi TRƯỚC commit = **tái phạm bài-học 1 ngày trước**; "8 hit" thật 14; "tái-hiện chính xác dự-báo" trong khi đo **sai hướng**) · ② `gap-workstate-drop` bị bản-spec-trung-gian **BỎ** để làm tròn enum về 10 rồi tuyên *"khớp 5+5"* — mất đúng class bắt ca THẬT của SE (S118: 7-spawn → **0 run-folder**), enum ĐÓNG ⇒ mất vĩnh-viễn · ③ carry-age **vacuous CẤU-TRÚC**: 45 segment nhưng `carry-lines=1`**0 fire** | **volume:** mọi phiên (counter-tick §2.1.8 + §L.b(j)) × toàn roster × mọi carry trong HANDOFF | **quality:** **spawn-probe 14/14 RUNTIME** (0 error 0 garble; 2 vai mới lean nhất 26K < cap 60K) · **positive-control W4 khép, số cộng KHỚP** (5 FLAG0, TOTAL **50→45** tụt đúng 5, **0 flag mới**, đo bằng `comm`) · **TOTAL 50 khớp CHÍNH XÁC dự-báo W2** · acceptance `ls=14` **BỊ BÁC vì sai số-học** (glob bắt `README.md` ép xoá README = catastrophic-Goodhart) đổi sang bất-biến-trên-roster **14/14/14** · counter seed **UNTICKED trung-thực** | null (additive) | 🔖 **Active-High** (anh-confirm **S122** cùng lượt · **P4 report-before-stamp**) · 🔴 **CAVEAT BINDING — nấc bằng-chứng THẤP HƠN mark `…15-32-20`:** **2 vai CHƯA CHẠY lần nào** (spawn-probe chứng **spawn được**, KHÔNG chứng **soi được**) · **counter=0 CHƯA tick** · **nhịp 6/15/3 = điểm khởi-đầu owner cố-ý chọn, KHÔNG phải "đã chứng-minh hiệu-quả"** (hub: n=1 = mocc-0; **chỉnh lại sau chu-kỳ-2**) · probe phủ **Agent-tool registry** THÔI, đường `hmw.js→agentType` **CHƯA phủ** **mark này = LỆNH về CÁCH LÀM, chưa phải bằng-chứng về HIỆU-QUẢ** |
| `RC-pqhuy1987-15-07-2026-17-23-10` | `.claude/commands/tiep.md §0` + `.claude/workflows/README.md` + `session-end §L.b(f)` + `scripts/governance-detectors.ps1` (`Test-Quoted` · H24-1 · **H24-3 mới**) + `session-start §0.7` (≙ AI_INFRA **H-24 / H-22 wal-defect-fix** nâng-cấp NGƯỢC, SE-originated) | **DUAL-ACCEPT + luật-retire-legacy + guard bẫy-tự-quy-chiếu + detector H24-3.** **Sàn:** (1) **orphan = DUAL-ACCEPT** (dạng-1 phẳng · dạng-2 C8) **dạng-3 RETIRED** · (2) 🔴 **LUẬT RETIRE LEGACY (mới, tổng-quát):** *gỡ nhánh legacy khi **tập di-sản RỖNG**; giữ khi **CÒN người thụ-hưởng**. Miễn-trừ C8 hết hiệu-lực đúng lúc hết di-sản để tha, không sớm hơn* · (3) **bẫy tự-quy-chiếu = CLASS, không phải ca lẻ** doc định-nghĩa anti-pattern **tất-yếu** chứa mẫu anti-pattern mọi matcher khớp-mẫu bắt chính ; discriminator = **enclosure (use ⟂ mention)**, KHÔNG phải hình-dạng (H24-2 dùng charset `<` được key thật không bao giờ ; H24-1/H24-3 **không thể** ví-dụ **byte-identical** với claim) helper **DUY-NHẤT** `Test-Quoted`, mọi matcher prose PHẢI gọi · (4) **H24-3 session-label lag** (MED): trong CÙNG file, `(S<N>` `**Last updated**` không được lùi sau MAX `(S<M>` heading **âm-giả CHỨNG-MINH-ĐƯỢC** của H24-1 ( so NGÀY, ngày `2026-07-15` = mới nhất 0 flag trong khi nhãn lùi **3 phiên**) · (5) 🔴 **CẤM "resolve" flag title-stale bằng đổi HÌNH-DẠNG anchor** đó **rời tập-đo**, không phải sửa | **pain:** **dạng-3 = cửa mở cạnh biển cấm** doc CẤM viết mới máy VẪN NHẬN cấm-bằng-**trí-nhớ**; đo: tập di-sản = **0** (6/6 folder từng dựa nay đều flat sau `22ea8c5`) · **bẫy tự-quy-chiếu LÂY QUA TRÍCH-DẪN, 3 đời THẬT trong 1 wave**: `permission-matrix:16` (defect thật) `lead-view-auditor:45` (trích làm ví-dụ) `adap-report…h24…:78` (trích **khi đang GIẢI-THÍCH chính FP đó**) · **âm-giả `STATUS:6` tái-phát LẦN 4** (S116/S117/S118/S123) 3 lần trước bằng **bump số** quay lại · 🔴 **Goodhart đo được (ngoài diff):** W4/S122 "" `permission-matrix:16` bằng **đổi FORMAT anchor** khớp **0 pattern** **H24-1 mất chính positive-control nó được dựng quanh**, flag-count **GIẢM** trông y hệt thành công *"5 FLAG→0"* của W4 phần đạt nhờ **một file thoát khỏi thước** | **volume:** MỌI phiên (`§0.7` + close-gate) × **26 run-folder** × mọi matcher prose trong `governance-detectors.ps1` (3 detector cùng lớp, **chỉ 1 có guard** trước S123) | **quality:** **fault-inject 4 bộ, 24/24** backtick-guard **5/5** (2 anti-Goodhart: quoted-rồi-bare **cùng dòng**FLAG anchor thật · backtick **CHẴN**FLAG) · H24-3 **6/6** (anti-Goodhart: **MAX không đứng đầu/cuối**lấy đúng MAX; 2 bản cài sai "lấy đầu"/"lấy cuối" đều PASS trên repo thật đó MAX tình cờ đứng đầu) · DUAL-ACCEPT **7/7** (ca chốt `## Synthesis`-no-flat: **S122 IM → S123 FLAG** = hiệu-lực retire) · **2 trục reviewer chỉ ra CHƯA HỀ THỬ, thử lại 6/6** (quoted-labelIM · 2-số-cùng-dòngMAX cả 2 chiều · heading trích `` `(S999)` ``→bỏ qua) · **`comm` before/after: 46→45 = 2 dương-giả +1 dương-THẬT**, 0 flag ngoài dự-kiến · repo thật **0 orphan/26** sau retire · **reviewer bác 3 lập-luận của lead và bác ĐÚNG** (xem caveat) | `RC-pqhuy1987-15-07-2026-15-32-20` (**partial** — điều-khoản (2) TRI-ACCEPT→DUAL-ACCEPT; **4 điều-khoản còn lại GIỮ NGUYÊN SỐNG**: Sàn-3 canonical @`tiep.md §0` · nhận≠cho-phép · push-guard 1-LƯỢT · EOL-inform) | 🔖 **Active-High** (anh-confirm **S123** · **P4 report-before-stamp**: reviewer `PASS_WITH_FIXES` → lead vá 6 finding → present → anh chốt *"đồng ý"* → stamp) · 🔴 **CAVEAT — 3 lập-luận của lead ĐÃ BỊ BÁC, ghi để không tái-sinh:** (a) *"retire HOÀN-THÀNH mark cũ"* = **NGUỴ-BIỆN** (điều-khoản (2) **cố ý tách** lưới-rộng ⟂ luật-hẹp; retire **thu lưới bằng luật** = biến nhận **=** cho-phép = **NGƯỢC** điều-khoản) — retire vẫn đúng, **nhưng vì hết di-sản**, không phải vì "hoàn-thành" · (b) *"H24-3 MED vì 0 proxy"* = **SAI** (`$labelN` = hit-regex-ĐẦU = **proxy** cho "label của CHÍNH file", vỡ đúng lúc file trích; MED đứng nhờ `Test-Quoted` **loại** failure-mode đó, KHÔNG phải nhờ proxy chưa từng có) · (c) *"5/5 separation"* = **4/4** (lead **chép số của sub** không kiểm ca-5 trên đĩa) | | `RC-pqhuy1987-15-07-2026-17-23-10` | `.claude/commands/tiep.md §0` + `.claude/workflows/README.md` + `session-end §L.b(f)` + `scripts/governance-detectors.ps1` (`Test-Quoted` · H24-1 · **H24-3 mới**) + `session-start §0.7` (≙ AI_INFRA **H-24 / H-22 wal-defect-fix** nâng-cấp NGƯỢC, SE-originated) | **DUAL-ACCEPT + luật-retire-legacy + guard bẫy-tự-quy-chiếu + detector H24-3.** **Sàn:** (1) **orphan = DUAL-ACCEPT** (dạng-1 phẳng · dạng-2 C8) **dạng-3 RETIRED** · (2) 🔴 **LUẬT RETIRE LEGACY (mới, tổng-quát):** *gỡ nhánh legacy khi **tập di-sản RỖNG**; giữ khi **CÒN người thụ-hưởng**. Miễn-trừ C8 hết hiệu-lực đúng lúc hết di-sản để tha, không sớm hơn* · (3) **bẫy tự-quy-chiếu = CLASS, không phải ca lẻ** doc định-nghĩa anti-pattern **tất-yếu** chứa mẫu anti-pattern mọi matcher khớp-mẫu bắt chính ; discriminator = **enclosure (use ⟂ mention)**, KHÔNG phải hình-dạng (H24-2 dùng charset `<` được key thật không bao giờ ; H24-1/H24-3 **không thể** ví-dụ **byte-identical** với claim) helper **DUY-NHẤT** `Test-Quoted`, mọi matcher prose PHẢI gọi · (4) **H24-3 session-label lag** (MED): trong CÙNG file, `(S<N>` `**Last updated**` không được lùi sau MAX `(S<M>` heading **âm-giả CHỨNG-MINH-ĐƯỢC** của H24-1 ( so NGÀY, ngày `2026-07-15` = mới nhất 0 flag trong khi nhãn lùi **3 phiên**) · (5) 🔴 **CẤM "resolve" flag title-stale bằng đổi HÌNH-DẠNG anchor** đó **rời tập-đo**, không phải sửa | **pain:** **dạng-3 = cửa mở cạnh biển cấm** doc CẤM viết mới máy VẪN NHẬN cấm-bằng-**trí-nhớ**; đo: tập di-sản = **0** (6/6 folder từng dựa nay đều flat sau `22ea8c5`) · **bẫy tự-quy-chiếu LÂY QUA TRÍCH-DẪN, 3 đời THẬT trong 1 wave**: `permission-matrix:16` (defect thật) `lead-view-auditor:45` (trích làm ví-dụ) `adap-report…h24…:78` (trích **khi đang GIẢI-THÍCH chính FP đó**) · **âm-giả `STATUS:6` tái-phát LẦN 4** (S116/S117/S118/S123) 3 lần trước bằng **bump số** quay lại · 🔴 **Goodhart đo được (ngoài diff):** W4/S122 "" `permission-matrix:16` bằng **đổi FORMAT anchor** khớp **0 pattern** **H24-1 mất chính positive-control nó được dựng quanh**, flag-count **GIẢM** trông y hệt thành công *"5 FLAG→0"* của W4 phần đạt nhờ **một file thoát khỏi thước** | **volume:** MỌI phiên (`§0.7` + close-gate) × **26 run-folder** × mọi matcher prose trong `governance-detectors.ps1` (3 detector cùng lớp, **chỉ 1 có guard** trước S123) | **quality:** **fault-inject 4 bộ, 24/24** backtick-guard **5/5** (2 anti-Goodhart: quoted-rồi-bare **cùng dòng**FLAG anchor thật · backtick **CHẴN**FLAG) · H24-3 **6/6** (anti-Goodhart: **MAX không đứng đầu/cuối**lấy đúng MAX; 2 bản cài sai "lấy đầu"/"lấy cuối" đều PASS trên repo thật đó MAX tình cờ đứng đầu) · DUAL-ACCEPT **7/7** (ca chốt `## Synthesis`-no-flat: **S122 IM → S123 FLAG** = hiệu-lực retire) · **2 trục reviewer chỉ ra CHƯA HỀ THỬ, thử lại 6/6** (quoted-labelIM · 2-số-cùng-dòngMAX cả 2 chiều · heading trích `` `(S999)` ``→bỏ qua) · **`comm` before/after: 46→45 = 2 dương-giả +1 dương-THẬT**, 0 flag ngoài dự-kiến · repo thật **0 orphan/26** sau retire · **reviewer bác 3 lập-luận của lead và bác ĐÚNG** (xem caveat) | `RC-pqhuy1987-15-07-2026-15-32-20` (**partial** — điều-khoản (2) TRI-ACCEPT→DUAL-ACCEPT; **4 điều-khoản còn lại GIỮ NGUYÊN SỐNG**: Sàn-3 canonical @`tiep.md §0` · nhận≠cho-phép · push-guard 1-LƯỢT · EOL-inform) | 🔖 **Active-High** (anh-confirm **S123** · **P4 report-before-stamp**: reviewer `PASS_WITH_FIXES` → lead vá 6 finding → present → anh chốt *"đồng ý"* → stamp) · 🔴 **CAVEAT — 3 lập-luận của lead ĐÃ BỊ BÁC, ghi để không tái-sinh:** (a) *"retire HOÀN-THÀNH mark cũ"* = **NGUỴ-BIỆN** (điều-khoản (2) **cố ý tách** lưới-rộng ⟂ luật-hẹp; retire **thu lưới bằng luật** = biến nhận **=** cho-phép = **NGƯỢC** điều-khoản) — retire vẫn đúng, **nhưng vì hết di-sản**, không phải vì "hoàn-thành" · (b) *"H24-3 MED vì 0 proxy"* = **SAI** (`$labelN` = hit-regex-ĐẦU = **proxy** cho "label của CHÍNH file", vỡ đúng lúc file trích; MED đứng nhờ `Test-Quoted` **loại** failure-mode đó, KHÔNG phải nhờ proxy chưa từng có) · (c) *"5/5 separation"* = **4/4** (lead **chép số của sub** không kiểm ca-5 trên đĩa) |
| `RC-pqhuy1987-07-08-2026-20-57-48` | **`ACTIVE-MARKS.md §LT3`** (nhà NGUỒN, cuối tệp này) + `ritual-labels.md §6` khoản (vi) + `ST-002` của sổ W4 — **2 nơi sau TRỎ, cấm chép** | **Luật tự-trị 3 bậc** (P5 gói adap 7-GĐ): **rõ → tự vá** · **mơ hồ → chọn nhánh an toàn + khai** · **mơ hồ + phá huỷ → DỪNG, hỏi anh**. Ranh bậc-2 ⟂ bậc-3 = **tính PHÁ HUỶ** (đảo ngược được hay không), **KHÔNG** phải độ khó | **pain:** `ST-002` của W4 định TRỎ về `ACTIVE-MARKS` cho luật 3 bậc, nhưng lane C đo **0 hit** — trỏ vào chỗ rỗng; và AI không có ranh thành văn giữa *tự vá* ⟂ *phải hỏi* ⇒ hoặc hỏi thừa, hoặc tự quyết thứ phá huỷ · **volume:** mọi lượt AI ra quyết-định trong kho × các wave còn lại của gói 7-GĐ + `ST-002` sổ W4 · **quality:** tiêu-chí khách-quan soi được (đảo-ngược-được?) thay cho cảm-tính "việc này khó hay dễ" | null (additive) | 🔖 **Active-High** (anh-confirm **S181** *"P5 → nguyên văn"* · P4 report-before-stamp: lead trình đủ 6 câu kèm nguồn → anh chốt từng số → stamp) |
> 🔄 **CHÚ-THÍCH S149 (2026-07-24) cho mark `RC-pqhuy1987-15-07-2026-15-32-23` — BẢN KÝ GIỮ NGUYÊN, KHÔNG SỬA MỘT CHỮ (P4/P8).** > 🔄 **CHÚ-THÍCH S149 (2026-07-24) cho mark `RC-pqhuy1987-15-07-2026-15-32-23` — BẢN KÝ GIỮ NGUYÊN, KHÔNG SỬA MỘT CHỮ (P4/P8).**
> §-target của mark ghi `.claude/agents/lead-{view,omission}-auditor.md`. **@S149 anh ratify rename 5 vai đồng-bộ sister** ("OK đồng ý"): `lead-view-auditor`→`lead-stale-auditor` · `lead-omission-auditor`→`lead-gap-auditor` · `h24-audit`→`ring2-audit` · `tooling-harvest-audit`→`ring1-audit` · `sleep-audit`→`ring4-audit`. **Cùng vai, cùng contract, chỉ đổi TÊN** — mọi điều-khoản mark áp nguyên sang tên mới (đúng khuôn chú-thích S122 "∈ roster hiện-hành": mark trỏ VAI, không trỏ chuỗi tên). Enum class `view-*`/`gap-*` GIỮ NGUYÊN lượt này (không map 1:1 với hub 12-class; tally đang arm JUMP dải 3-4 — đổi key giữa chuỗi = gãy tally; số phận theo spec hội-tụ bookend). > §-target của mark ghi `.claude/agents/lead-{view,omission}-auditor.md`. **@S149 anh ratify rename 5 vai đồng-bộ sister** ("OK đồng ý"): `lead-view-auditor`→`lead-stale-auditor` · `lead-omission-auditor`→`lead-gap-auditor` · `h24-audit`→`ring2-audit` · `tooling-harvest-audit`→`ring1-audit` · `sleep-audit`→`ring4-audit`. **Cùng vai, cùng contract, chỉ đổi TÊN** — mọi điều-khoản mark áp nguyên sang tên mới (đúng khuôn chú-thích S122 "∈ roster hiện-hành": mark trỏ VAI, không trỏ chuỗi tên). Enum class `view-*`/`gap-*` GIỮ NGUYÊN lượt này (không map 1:1 với hub 12-class; tally đang arm JUMP dải 3-4 — đổi key giữa chuỗi = gãy tally; số phận theo spec hội-tụ bookend).
@ -52,6 +53,21 @@ _(trống)_
## 🟡 MEDIUM (neo chưa-rõ; follow nhưng skippable — tóm-tắt @session) ## 🟡 MEDIUM (neo chưa-rõ; follow nhưng skippable — tóm-tắt @session)
_(trống)_ _(trống)_
## §LT3 — LUẬT TỰ-TRỊ 3 BẬC (🔴 NHÀ NGUỒN canonical — P5, anh gật "nguyên văn" @S181 2026-08-07)
> 🔴 **ĐÂY LÀ NGUỒN DUY-NHẤT của luật 3 bậc.** Mọi nơi khác (`ST-002` của sổ W4, `ritual-labels.md §6` khoản (vi), doc dẫn-xuất) **TRỎ về đây, CẤM chép nội dung** — chống nguồn-đôi `C3-07` ⟂ `ST-002` (lane C §F.2 lỗ-1).
> 🧊 Trước @S181, `ACTIVE-MARKS` là **uỷ-quyền-per-quyết-định**, KHÔNG phải luật 3 bậc (lane C §F.1 đo **0 hit**, control dương 19). Khối này đóng đúng lỗ đó.
| Bậc | Tình huống | AI làm gì |
|---|---|---|
| **1 — RÕ** | Đặc tả/luật nói rõ, không có chỗ đọc hai nghĩa | **TỰ VÁ**, không hỏi. Khai ở báo-cáo lượt |
| **2 — MƠ HỒ** | Đọc được ≥2 nghĩa, nhưng hành-động **không phá huỷ** | **CHỌN NHÁNH AN TOÀN**, đi tiếp, **KHAI RÕ đã chọn nhánh nào và vì sao** |
| **3 — MƠ HỒ + PHÁ HUỶ** | Vừa đọc được ≥2 nghĩa, vừa có thể mất dữ-liệu / đổi luật đã ratify / tác-động ra ngoài | 🔴 **DỪNG, HỎI ANH.** Cấm tự chọn |
**Ranh bậc-2 ⟂ bậc-3 = tính PHÁ HUỶ, không phải độ khó.** Việc khó mà đảo ngược được ⇒ bậc-2. Việc dễ mà mất dữ-liệu ⇒ bậc-3.
🔸 **MỘT ĐỀ-XUẤT CÒN TREO, CHƯA THUỘC LUẬT NÀY** (lead nêu @S181, anh **chưa** phán — xem `owner-decisions-07-08-2026-dot-2.md` ghi-chú (d)): thư hub `2026-08-07-Governance-nghi-thuc-hai-dau-nhip-thua-va-luu-nguyen-van.md` đề nghị một câu cụ-thể cho **bậc-2** — *không phân biệt được **dời-có-chủ-ý** với **rơi-im-lặng** thì khai **"không đủ dữ liệu"**, **CẤM mặc định về nhãn miễn tội***. Anh gật "nguyên văn" là gật **3 bậc ở bảng trên**; câu này **CHƯA được ghép**, để đây làm con-trỏ chứ không phải luật đang hiệu-lực.
## 📦 SUPERSEDED / DISABLED (ẨN khỏi session display — giữ audit-trail, KHÔNG xóa) ## 📦 SUPERSEDED / DISABLED (ẨN khỏi session display — giữ audit-trail, KHÔNG xóa)
| ID (RC-signature) | §-target SE (≙ AI_INFRA) | What | objective-criteria (pain · volume · quality) | supersedes | Status | | ID (RC-signature) | §-target SE (≙ AI_INFRA) | What | objective-criteria (pain · volume · quality) | supersedes | Status |

View File

@ -144,6 +144,15 @@ Quy tắc:
| [`.claude/skills/`](.claude/skills/README.md) | 6 skill: contract-workflow, form-engine, permission-matrix, dependency-audit-erp, ef-core-migration, iis-deploy-runbook | | [`.claude/skills/`](.claude/skills/README.md) | 6 skill: contract-workflow, form-engine, permission-matrix, dependency-audit-erp, ef-core-migration, iis-deploy-runbook |
| [`docs/guides/vps-setup.md`](docs/guides/vps-setup.md) | ⭐ Master runbook deploy VPS shared với VIETREPORT | | [`docs/guides/vps-setup.md`](docs/guides/vps-setup.md) | ⭐ Master runbook deploy VPS shared với VIETREPORT |
## 📒 Sổ yêu-cầu chủ dự án — GHI NGAY · TRA TRƯỚC KHI HỎI
Sổ: [`docs/governance/so-yeu-cau-chu-du-an.md`](docs/governance/so-yeu-cau-chu-du-an.md) (3 khối · mã `YC-`/`ST-`/`PN-` **vĩnh viễn, cấm tái dụng**).
- **GHI NGAY:** anh nói ra một yêu-cầu / sở-thích → ghi **nguyên văn** vào sổ **trong chính lượt đó**, không đợi cuối phiên. Diễn giải để **cột thứ 7** (*đội hiểu thành gì*), **tách hẳn** khỏi cột nguyên văn.
- **TRA TRƯỚC KHI HỎI:** trước khi hỏi lại anh bất-kỳ điều gì → **tra sổ trước**. 🔴 **Định nghĩa A5:** hỏi lại mà **không viện dẫn thông tin mới** = **vi phạm**; hỏi lại **kèm nguồn mới** = kỷ luật đúng.
- **Đóng = lật trạng thái, KHÔNG xoá dòng.** Số lần nhắc chỉ tăng.
- 🔴 **Sổ = REQUEST ⟂ WAL = TASK.** Sổ **CẤM** có cột trạng-thái-thi-công; muốn biết việc tới đâu thì **TRỎ** về WAL. Luật + lineage canonical → [`.claude/commands/tiep.md` §3-bis](.claude/commands/tiep.md).
## ⚠️ Kết thúc session ## ⚠️ Kết thúc session
1. Update `docs/STATUS.md` (`In Progress``Recently Done`) 1. Update `docs/STATUS.md` (`In Progress``Recently Done`)

View File

@ -10,82 +10,92 @@
> **infra-CC row (§N3):** message `<id>-cc` (`cc-of:<to>`) = bản-2 se gửi `ai_infra` giám sát infra-comms sister↔sister. Ghi rõ `cc-of` vào cell `from → to` — vd OUTBOUND `se → ai_infra (cc-of:vipix)` · INBOUND `vipix → ai_infra (cc-of:se)`. Cùng status/verify như message thường (whole-file + body-hash đối chứng). > **infra-CC row (§N3):** message `<id>-cc` (`cc-of:<to>`) = bản-2 se gửi `ai_infra` giám sát infra-comms sister↔sister. Ghi rõ `cc-of` vào cell `from → to` — vd OUTBOUND `se → ai_infra (cc-of:vipix)` · INBOUND `vipix → ai_infra (cc-of:se)`. Cùng status/verify như message thường (whole-file + body-hash đối chứng).
## 📥 INBOUND (nhận — qua `/check-email <from>`) ## 📥 INBOUND (nhận — qua `/check-email <from>`)
> status: **pending** (ở `inbox/` root, chưa xử lý) → **processed** (đã MOVE vào `inbox/<from>/`). > 🔴 **HAI TRẠNG-THÁI, HAI CỘT — owner chốt phương án (b) "tách hẳn 2 cột" @S181 (2026-08-07), câu 5 gói adap 7-GĐ.**
>
> | Cột | Nghĩa | Nguồn sự-thật |
> |---|---|---|
> | `status` | **VỊ TRÍ TỆP.** `pending` = còn ở `inbox/` gốc · `processed` = **đã MOVE** vào `inbox/<from>/` | hệ thống tệp |
> | `áp` | **ĐÃ ÁP NỘI-DUNG CHƯA.** `áp` = có `docs/governance/adap-reports/<id>.md` · `chưa` = không có · `n-a` = kênh `se` (thư đích danh: đọc/trả lời, không có nghĩa "áp") | sự tồn-tại của tệp report |
>
> **Vì sao phải tách:** trước @S181 một cột `status` gánh **hai nghĩa**. Sau khi P6 mở INBOUND cho kênh `all`, thư kéo bằng `/adap-apply` là *"đã áp"* chứ không chỉ *"đã move"* — mà cả hai đều hiện ra là `processed`. Hệ quả đo được: @S181 grep `_index` tìm `loi-do-luong-phan-1` trả **0 hit**, và 0 hit đó **không phân biệt được** *"chưa kéo"* với *"đã kéo và đã áp tại chỗ"* ⇒ sổ không đọc được. Backfill @S181: **42 áp · 4 chưa · 23 n-a = 69 dòng**.
>
> 🔸 **Cột `áp` đặt ở CUỐI hàng**, theo đúng kỷ luật đã ghi ngay dưới đây — dòng cũ vẫn là **tiền tố nguyên vẹn** của dòng mới.
> ⚠️ **Cột `áp` KHÔNG phủ hết sự thật:** nó chỉ đo *"có tệp report không"*. Thư đã áp mà **chưa từng có dòng trong sổ này** thì cột này không thấy được — đúng ca 2 thư `loi-do-luong` @S179. Muốn phủ nốt thì phải đối chiếu ngược `adap-reports/` (103 tệp) với sổ (46 dòng `all`), là việc khác.
> 🔴 **Hai cột `kênh` + `ghi-chú` đặt ở CUỐI hàng, cố ý.** Đặt cuối thì mỗi dòng cũ chỉ được **nối thêm**, phần chữ cũ vẫn là **tiền tố nguyên vẹn** của dòng mới — kiểm lại được bằng máy, không phải tin lời hứa "tôi không sửa gì". Backfill @S180 lấy từ trường `to:` của chính tệp trên đĩa: **23 dòng `se` · 22 dòng `all`**, 0 dòng mồ côi. > 🔴 **Hai cột `kênh` + `ghi-chú` đặt ở CUỐI hàng, cố ý.** Đặt cuối thì mỗi dòng cũ chỉ được **nối thêm**, phần chữ cũ vẫn là **tiền tố nguyên vẹn** của dòng mới — kiểm lại được bằng máy, không phải tin lời hứa "tôi không sửa gì". Backfill @S180 lấy từ trường `to:` của chính tệp trên đĩa: **23 dòng `se` · 22 dòng `all`**, 0 dòng mồ côi.
| received | id | from → to | status | folder | sha256(12) | verify | kênh | ghi-chú | | received | id | from → to | status | folder | sha256(12) | verify | kênh | ghi-chú | áp |
|---|---|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|---|---|---|
| 2026-06-09 | 2026-06-09-namgroup-to-se-ui-design-conventions | namgroup → se | processed | namgroup | 0140b81fb8a6 | ✓ | se | | | 2026-06-09 | 2026-06-09-namgroup-to-se-ui-design-conventions | namgroup → se | processed | namgroup | 0140b81fb8a6 | ✓ | se | | n-a |
| 2026-06-11 | 2026-06-11-ai_infra-to-se-ui-ux-design-guide | ai_infra → se | processed | ai_infra | d353ee460dba | ✓ | se | | | 2026-06-11 | 2026-06-11-ai_infra-to-se-ui-ux-design-guide | ai_infra → se | processed | ai_infra | d353ee460dba | ✓ | se | | n-a |
| 2026-06-18 | 2026-06-18-ai_infra-to-se-harness-11-available | ai_infra → se | processed | ai_infra | b2a2fc1cf399 | ✓ | se | | | 2026-06-18 | 2026-06-18-ai_infra-to-se-harness-11-available | ai_infra → se | processed | ai_infra | b2a2fc1cf399 | ✓ | se | | n-a |
| 2026-06-20 | 2026-06-19-ai_infra-to-se-harness-all-notify | ai_infra → se | processed | ai_infra | 50ec0b925157 | ✓ | se | | | 2026-06-20 | 2026-06-19-ai_infra-to-se-harness-all-notify | ai_infra → se | processed | ai_infra | 50ec0b925157 | ✓ | se | | n-a |
| 2026-06-20 | 2026-06-20-ai_infra-to-se-harness-14-adopt-notify | ai_infra → se | processed | ai_infra | 37ae1b19595a | ✓ | se | | | 2026-06-20 | 2026-06-20-ai_infra-to-se-harness-14-adopt-notify | ai_infra → se | processed | ai_infra | 37ae1b19595a | ✓ | se | | n-a |
| 2026-06-21 | 2026-06-20-ai_infra-to-se-harness-15-v2-notify | ai_infra → se | processed | ai_infra | 2e6097817e2d | ✓ | se | | | 2026-06-21 | 2026-06-20-ai_infra-to-se-harness-15-v2-notify | ai_infra → se | processed | ai_infra | 2e6097817e2d | ✓ | se | | n-a |
| 2026-07-03 | 2026-07-03-ai_infra-to-se-batch13-ack-stamp-and-answers | ai_infra → se | processed | ai_infra | 72aaeeeed215 | ✓ | se | | | 2026-07-03 | 2026-07-03-ai_infra-to-se-batch13-ack-stamp-and-answers | ai_infra → se | processed | ai_infra | 72aaeeeed215 | ✓ | se | | n-a |
| 2026-07-06 | 2026-07-04-Governance-notify-harness-full-recheck | ai_infra → se | processed | ai_infra | 78dc1d82 | ✓ | se | | | 2026-07-06 | 2026-07-04-Governance-notify-harness-full-recheck | ai_infra → se | processed | ai_infra | 78dc1d82 | ✓ | se | | n-a |
| 2026-07-06 | 2026-07-04-ai_infra-to-se-consolidation-notify | ai_infra → se | processed | ai_infra | ad58db9b924a | ✓ | se | | | 2026-07-06 | 2026-07-04-ai_infra-to-se-consolidation-notify | ai_infra → se | processed | ai_infra | ad58db9b924a | ✓ | se | | n-a |
| 2026-07-06 | 2026-07-04-ai_infra-to-se-notify-auto-hygiene | ai_infra → se | processed | ai_infra | 7499be2e(no-stamp·wf✓) | ✓ | se | | | 2026-07-06 | 2026-07-04-ai_infra-to-se-notify-auto-hygiene | ai_infra → se | processed | ai_infra | 7499be2e(no-stamp·wf✓) | ✓ | se | | n-a |
| 2026-07-11 | 2026-07-11-ai_infra-to-se-notify-model-tier-v3 | ai_infra → se | processed | ai_infra | a979743596e3 | ✓ | se | | | 2026-07-11 | 2026-07-11-ai_infra-to-se-notify-model-tier-v3 | ai_infra → se | processed | ai_infra | a979743596e3 | ✓ | se | | n-a |
| 2026-07-11 | 2026-07-11-ai_infra-to-se-triage-reply-s1-s6 | ai_infra → se | processed | ai_infra | 281a67958835 | ✓ | se | | | 2026-07-11 | 2026-07-11-ai_infra-to-se-triage-reply-s1-s6 | ai_infra → se | processed | ai_infra | 281a67958835 | ✓ | se | | n-a |
| 2026-07-11 | 2026-07-10-Governance-harness-21-spec-file-invocation | ai_infra → se | processed | ai_infra | 19cc954b1ee9 | ✓ | all | | | 2026-07-11 | 2026-07-10-Governance-harness-21-spec-file-invocation | ai_infra → se | processed | ai_infra | 19cc954b1ee9 | ✓ | all | | áp |
| 2026-07-11 | 2026-07-11-Governance-model-tier-v3-lead-owner-choice | ai_infra → se | processed | ai_infra | 1b3aa9091173 | ✓ | all | | | 2026-07-11 | 2026-07-11-Governance-model-tier-v3-lead-owner-choice | ai_infra → se | processed | ai_infra | 1b3aa9091173 | ✓ | all | | áp |
| 2026-07-12 | 2026-07-11-ai_infra-to-se-notify-harness-22-wal | ai_infra → se | processed | ai_infra | c64a7ac2a1bb | ✓ | se | | | 2026-07-12 | 2026-07-11-ai_infra-to-se-notify-harness-22-wal | ai_infra → se | processed | ai_infra | c64a7ac2a1bb | ✓ | se | | n-a |
| 2026-07-12 | 2026-07-11-Governance-harness-22-wal-session-continuity | ai_infra → se | processed | ai_infra | 3de0758a6377 | ✓ | all | | | 2026-07-12 | 2026-07-11-Governance-harness-22-wal-session-continuity | ai_infra → se | processed | ai_infra | 3de0758a6377 | ✓ | all | | áp |
| 2026-07-13 | 2026-07-13-ai_infra-to-se-approve-h22-h21mtv3-and-presence-notify | ai_infra → se | processed | ai_infra | 6c32df89b60a | ✓ | se | | | 2026-07-13 | 2026-07-13-ai_infra-to-se-approve-h22-h21mtv3-and-presence-notify | ai_infra → se | processed | ai_infra | 6c32df89b60a | ✓ | se | | n-a |
| 2026-07-15 | 2026-07-15-ai_infra-to-se-reply-wave-s122 | ai_infra → se | processed | ai_infra | 7fca0deb97ff | ✓ | se | | | 2026-07-15 | 2026-07-15-ai_infra-to-se-reply-wave-s122 | ai_infra → se | processed | ai_infra | 7fca0deb97ff | ✓ | se | | n-a |
| 2026-07-16 | 2026-07-16-ai_infra-to-se-huong-dan-adap-4-ban-moi | ai_infra → se | processed | ai_infra | 181a6d195468 | ✓ | se | | | 2026-07-16 | 2026-07-16-ai_infra-to-se-huong-dan-adap-4-ban-moi | ai_infra → se | processed | ai_infra | 181a6d195468 | ✓ | se | | n-a |
| 2026-07-16 | 2026-07-15-Governance-h17-cadence-update-bookend | ai_infra → se | processed | ai_infra | 85bf89ca7d3e | ✓ | all | | | 2026-07-16 | 2026-07-15-Governance-h17-cadence-update-bookend | ai_infra → se | processed | ai_infra | 85bf89ca7d3e | ✓ | all | | áp |
| 2026-07-16 | 2026-07-16-Governance-tang-luu-tru-so-cai-va-bai-hoc-instrument-dong-cung | ai_infra → se | processed | ai_infra | 291550ffa295 | ✓ | all | | | 2026-07-16 | 2026-07-16-Governance-tang-luu-tru-so-cai-va-bai-hoc-instrument-dong-cung | ai_infra → se | processed | ai_infra | 291550ffa295 | ✓ | all | | áp |
| 2026-07-16 | 2026-07-16-Governance-vong-tu-bao-tri-thu-nam-san-su-that-nhan-da-do | ai_infra → se | processed | ai_infra | 190c11ba2bc0 | ✓ | all | | | 2026-07-16 | 2026-07-16-Governance-vong-tu-bao-tri-thu-nam-san-su-that-nhan-da-do | ai_infra → se | processed | ai_infra | 190c11ba2bc0 | ✓ | all | | áp |
| 2026-07-16 | 2026-07-16-Governance-session-logic-tach-session-vat-ly-huong-van-hanh-moi | ai_infra → se | processed | ai_infra | 9234a7aa1009 | ✓ | all | | | 2026-07-16 | 2026-07-16-Governance-session-logic-tach-session-vat-ly-huong-van-hanh-moi | ai_infra → se | processed | ai_infra | 9234a7aa1009 | ✓ | all | | áp |
| 2026-07-16 | 2026-07-16-Governance-owner-chot-contextual-retrieval-false-fleet-wide | ai_infra → se | processed | ai_infra | f5ce27780af8 | ✓ | all | | | 2026-07-16 | 2026-07-16-Governance-owner-chot-contextual-retrieval-false-fleet-wide | ai_infra → se | processed | ai_infra | f5ce27780af8 | ✓ | all | | áp |
| 2026-07-16 | 2026-07-16-Governance-erratum-eol-metric-hai-chieu-va-bon-lo-moi | ai_infra → se | processed | ai_infra | eb12b9b8c2e9 | ✓ | all | | | 2026-07-16 | 2026-07-16-Governance-erratum-eol-metric-hai-chieu-va-bon-lo-moi | ai_infra → se | processed | ai_infra | eb12b9b8c2e9 | ✓ | all | | áp |
| 2026-07-16 | 2026-07-16-Governance-tong-hop-loi-da-bat-va-sua-bay-lop-sau-phep-thu | ai_infra → se | processed | ai_infra | 0db707e4381d | ✓ | all | | | 2026-07-16 | 2026-07-16-Governance-tong-hop-loi-da-bat-va-sua-bay-lop-sau-phep-thu | ai_infra → se | processed | ai_infra | 0db707e4381d | ✓ | all | | áp |
| 2026-07-17 | 2026-07-16-ai_infra-to-se-reply-adap-dot-16-07 | ai_infra → se | processed | ai_infra | e50a4bd0109d | ✓ | se | | | 2026-07-17 | 2026-07-16-ai_infra-to-se-reply-adap-dot-16-07 | ai_infra → se | processed | ai_infra | e50a4bd0109d | ✓ | se | | n-a |
| 2026-07-17 | 2026-07-17-ai_infra-to-se-reply-h24-cadence-3-gap | ai_infra → se | processed | ai_infra | 0b581ae79815 | ✓ | se | | | 2026-07-17 | 2026-07-17-ai_infra-to-se-reply-h24-cadence-3-gap | ai_infra → se | processed | ai_infra | 0b581ae79815 | ✓ | se | | n-a |
| 2026-07-17 | 2026-07-16-Governance-loi-phong-workflow-chet-non-json-args | ai_infra → se | processed | ai_infra | 6c2eb2b19bae | ✓ | all | | | 2026-07-17 | 2026-07-16-Governance-loi-phong-workflow-chet-non-json-args | ai_infra → se | processed | ai_infra | 6c2eb2b19bae | ✓ | all | | áp |
| 2026-07-17 | 2026-07-16-Governance-notify-hai-ban-moi-va-kenh-hoi-dap-hub | ai_infra → se | processed | ai_infra | dacfcb11a690 | ✓ | all | | | 2026-07-17 | 2026-07-16-Governance-notify-hai-ban-moi-va-kenh-hoi-dap-hub | ai_infra → se | processed | ai_infra | dacfcb11a690 | ✓ | all | | áp |
| 2026-07-17 | 2026-07-16-Governance-vong-bon-da-dong-giac-ngu-nen-tri-nho | ai_infra → se | processed | ai_infra | 89e4d818b8be | ✓ | all | | | 2026-07-17 | 2026-07-16-Governance-vong-bon-da-dong-giac-ngu-nen-tri-nho | ai_infra → se | processed | ai_infra | 89e4d818b8be | ✓ | all | | áp |
| 2026-07-17 | 2026-07-17-Governance-checklist-nam-vong-va-kiem-audit-xuyen-session | ai_infra → se | processed | ai_infra | f71c5b653185 | ✓ | all | | | 2026-07-17 | 2026-07-17-Governance-checklist-nam-vong-va-kiem-audit-xuyen-session | ai_infra → se | processed | ai_infra | f71c5b653185 | ✓ | all | | áp |
| 2026-07-17 | 2026-07-17-Governance-khung-nhip-nam-vong-do-rai-lam-don | ai_infra → se | processed | ai_infra | 3daf5ee48f47 | ✓ | all | | | 2026-07-17 | 2026-07-17-Governance-khung-nhip-nam-vong-do-rai-lam-don | ai_infra → se | processed | ai_infra | 3daf5ee48f47 | ✓ | all | | áp |
| 2026-07-17 | 2026-07-17-Governance-dinh-chinh-kep-nhan-grounded-va-filter-office | ai_infra → se | processed | ai_infra | 624c378d6ee1 | ✓ | all | | | 2026-07-17 | 2026-07-17-Governance-dinh-chinh-kep-nhan-grounded-va-filter-office | ai_infra → se | processed | ai_infra | 624c378d6ee1 | ✓ | all | | áp |
| 2026-07-17 | 2026-07-17-Governance-master-checklist-hai-tang-moi-cua-phien | ai_infra → se | processed | ai_infra | cadd24aed2e4 | ✓ | all | | | 2026-07-17 | 2026-07-17-Governance-master-checklist-hai-tang-moi-cua-phien | ai_infra → se | processed | ai_infra | cadd24aed2e4 | ✓ | all | | áp |
| 2026-07-17 | 2026-07-17-Governance-nam-quyet-owner-mot-ngay-lam-viec-ky | ai_infra → se | processed | ai_infra | 123d8272bbf5 | ✓ | all | | | 2026-07-17 | 2026-07-17-Governance-nam-quyet-owner-mot-ngay-lam-viec-ky | ai_infra → se | processed | ai_infra | 123d8272bbf5 | ✓ | all | | áp |
| 2026-07-20 | 2026-07-17-ai_infra-to-se-reply-adap-wave-carveout-dp2 | ai_infra → se | processed | ai_infra | 9a35405b6433 | ✓ | se | | | 2026-07-20 | 2026-07-17-ai_infra-to-se-reply-adap-wave-carveout-dp2 | ai_infra → se | processed | ai_infra | 9a35405b6433 | ✓ | se | | n-a |
| 2026-07-20 | 2026-07-18-ai_infra-to-se-nudge-pull-dot-9-10 | ai_infra → se | processed | ai_infra | 9cd1a486af96 | ✓ | se | | | 2026-07-20 | 2026-07-18-ai_infra-to-se-nudge-pull-dot-9-10 | ai_infra → se | processed | ai_infra | 9cd1a486af96 | ✓ | se | | n-a |
| 2026-07-20 | 2026-07-18-ai_infra-to-se-reply-tong-bo-ba-harness-sub-4-khoan | ai_infra → se | processed | ai_infra | 58e28baedf05 | ✓ | se | | | 2026-07-20 | 2026-07-18-ai_infra-to-se-reply-tong-bo-ba-harness-sub-4-khoan | ai_infra → se | processed | ai_infra | 58e28baedf05 | ✓ | se | | n-a |
| 2026-07-20 | 2026-07-17-Governance-chuan-hoa-stamp-decode | ai_infra → se | processed | ai_infra | 6239dd403792 | ✓ | all | | | 2026-07-20 | 2026-07-17-Governance-chuan-hoa-stamp-decode | ai_infra → se | processed | ai_infra | 6239dd403792 | ✓ | all | | áp |
| 2026-07-20 | 2026-07-17-Governance-khung-nhip-dinh-chinh-wording-tick-annex-phep-8 | ai_infra → se | processed | ai_infra | dede7ec56ccc | ✓ | all | | | 2026-07-20 | 2026-07-17-Governance-khung-nhip-dinh-chinh-wording-tick-annex-phep-8 | ai_infra → se | processed | ai_infra | dede7ec56ccc | ✓ | all | | áp |
| 2026-07-20 | 2026-07-17-Governance-session-model-phien-logic-manifest | ai_infra → se | processed | ai_infra | 101e69d61675 | ✓ | all | | | 2026-07-20 | 2026-07-17-Governance-session-model-phien-logic-manifest | ai_infra → se | processed | ai_infra | 101e69d61675 | ✓ | all | | áp |
| 2026-07-20 | 2026-07-18-Governance-model-tier-h23-precedence-tested-update | ai_infra → se | processed | ai_infra | d68de5e7b72d | ✓ | all | | | 2026-07-20 | 2026-07-18-Governance-model-tier-h23-precedence-tested-update | ai_infra → se | processed | ai_infra | d68de5e7b72d | ✓ | all | | áp |
| 2026-07-22 | 2026-07-22-ai_infra-to-se-reply-adap11-c7-bulk-shards | ai_infra → se | processed | ai_infra | 01f567a379d4 | ✓ | se | | | 2026-07-22 | 2026-07-22-ai_infra-to-se-reply-adap11-c7-bulk-shards | ai_infra → se | processed | ai_infra | 01f567a379d4 | ✓ | se | | n-a |
| 2026-07-22 | 2026-07-22-ai_infra-to-se-reply-session-model-dung-ban-da-duyet | ai_infra → se | processed | ai_infra | 8378a68b6f7e | ✓ | se | | | 2026-07-22 | 2026-07-22-ai_infra-to-se-reply-session-model-dung-ban-da-duyet | ai_infra → se | processed | ai_infra | 8378a68b6f7e | ✓ | se | | n-a |
| 2026-07-24 | 2026-07-18-Governance-spawn-label-panel-audit-khung | ai_infra → se | processed | ai_infra | 6cbded684636 | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-18-Governance-spawn-label-panel-audit-khung | ai_infra → se | processed | ai_infra | 6cbded684636 | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-19-Agent-ensemble-cost-lens-khan-hiem-va-routing | ai_infra → se | processed | ai_infra | 0a03b2c83fb9 | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-19-Agent-ensemble-cost-lens-khan-hiem-va-routing | ai_infra → se | processed | ai_infra | 0a03b2c83fb9 | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-19-Agent-ensemble-depth-axis-deepen-on-contested | ai_infra → se | processed | ai_infra | f05eba5b8e8c | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-19-Agent-ensemble-depth-axis-deepen-on-contested | ai_infra → se | processed | ai_infra | f05eba5b8e8c | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-19-Agent-ensemble-depth-cost-update-so-do-thuc | ai_infra → se | processed | ai_infra | 294be326cb5b | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-19-Agent-ensemble-depth-cost-update-so-do-thuc | ai_infra → se | processed | ai_infra | 294be326cb5b | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-19-Governance-goi-chot-owner-nam-khoan | ai_infra → se | processed | ai_infra | c580c56682a5 | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-19-Governance-goi-chot-owner-nam-khoan | ai_infra → se | processed | ai_infra | c580c56682a5 | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-19-Governance-harness-dong-du-vong-audit-va-eval-use-side | ai_infra → se | processed | ai_infra | c034a916eb92 | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-19-Governance-harness-dong-du-vong-audit-va-eval-use-side | ai_infra → se | processed | ai_infra | c034a916eb92 | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-19-Governance-hub-tu-danh-gia-3-goc-va-chuyen-pha | ai_infra → se | processed | ai_infra | cea290cead80 | ✓ | all | bù dòng @S180 (P6) | | 2026-07-24 | 2026-07-19-Governance-hub-tu-danh-gia-3-goc-va-chuyen-pha | ai_infra → se | processed | ai_infra | cea290cead80 | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-07-24 | 2026-07-20-Governance-3-khoan-title-tier-posture-home-distill-params | ai_infra → se | processed | ai_infra | 9353c5c8ba51 | ✓ | all | bù dòng @S180 (P6) · `to: all` (không phải `all-fit`) | | 2026-07-24 | 2026-07-20-Governance-3-khoan-title-tier-posture-home-distill-params | ai_infra → se | processed | ai_infra | 9353c5c8ba51 | ✓ | all | bù dòng @S180 (P6) · `to: all` (không phải `all-fit`) | áp |
| 2026-07-24 | 2026-07-20-Governance-auto-toan-vong-distill-2-tang | ai_infra → se | processed | ai_infra | b9e84fc24475 | ✓ | all | bù dòng @S180 (P6) · 🔴 THIẾU trường `to:` — mọi phép phân loại theo `to:` sẽ bỏ rơi thư này trong im lặng | | 2026-07-24 | 2026-07-20-Governance-auto-toan-vong-distill-2-tang | ai_infra → se | processed | ai_infra | b9e84fc24475 | ✓ | all | bù dòng @S180 (P6) · 🔴 THIẾU trường `to:` — mọi phép phân loại theo `to:` sẽ bỏ rơi thư này trong im lặng | áp |
| 2026-07-24 | 2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval | ai_infra → se | processed | ai_infra | c04d39dbc8f5 | ✓ | all | bù dòng @S180 (P6) · 🔴 THIẾU trường `to:` — mọi phép phân loại theo `to:` sẽ bỏ rơi thư này trong im lặng | | 2026-07-24 | 2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval | ai_infra → se | processed | ai_infra | c04d39dbc8f5 | ✓ | all | bù dòng @S180 (P6) · 🔴 THIẾU trường `to:` — mọi phép phân loại theo `to:` sẽ bỏ rơi thư này trong im lặng | áp |
| 2026-07-26 | 2026-07-25-Governance-model-default-opus-5-max | ai_infra → se | processed | ai_infra | 9c9090073a0f | ✓ | all | bù dòng @S180 (P6) · 🔴 THIẾU trường `to:` — mọi phép phân loại theo `to:` sẽ bỏ rơi thư này trong im lặng | | 2026-07-26 | 2026-07-25-Governance-model-default-opus-5-max | ai_infra → se | processed | ai_infra | 9c9090073a0f | ✓ | all | bù dòng @S180 (P6) · 🔴 THIẾU trường `to:` — mọi phép phân loại theo `to:` sẽ bỏ rơi thư này trong im lặng | áp |
| 2026-07-26 | 2026-07-25-Governance-pause-tiep-upgrade-vong-ctx | ai_infra → se | processed | ai_infra | 0df10df4ac95 | ✓ | all | bù dòng @S180 (P6) | | 2026-07-26 | 2026-07-25-Governance-pause-tiep-upgrade-vong-ctx | ai_infra → se | processed | ai_infra | 0df10df4ac95 | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-08-05 | 2026-07-28-Governance-day-wake-probe-first-resume | ai_infra → se | processed | ai_infra | ef05b7da8d5e | ✓ | all | bù dòng @S180 (P6) | | 2026-08-05 | 2026-07-28-Governance-day-wake-probe-first-resume | ai_infra → se | processed | ai_infra | ef05b7da8d5e | ✓ | all | bù dòng @S180 (P6) | áp |
| 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-khuon-fit-map-report-checklist | ai_infra → se | processed | ai_infra | 98e31fad1ff4 | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | | 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-khuon-fit-map-report-checklist | ai_infra → se | processed | ai_infra | 98e31fad1ff4 | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | chưa |
| 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-luat-cham-diem | ai_infra → se | processed | ai_infra | c24699f0251a | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | | 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-luat-cham-diem | ai_infra → se | processed | ai_infra | c24699f0251a | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | chưa |
| 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-phu-luc-spec-pitfall | ai_infra → se | processed | ai_infra | 49287ce7ced4 | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | | 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-phu-luc-spec-pitfall | ai_infra → se | processed | ai_infra | 49287ce7ced4 | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | chưa |
| 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-thu-chinh | ai_infra → se | processed | ai_infra | 43db2cf09baa | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | | 2026-08-05 | 2026-08-04-Governance-upgrade-pack-phased-thu-chinh | ai_infra → se | processed | ai_infra | 43db2cf09baa | ✓ | all | bù dòng @S180 (P6) · frontmatter `status: DRAFT` + `reviewer_gate: PENDING` — dấu trạng thái lệch nội dung, hash sạch nên KHÔNG phải tamper · GĐ-0 đang xử lý, chưa áp | chưa |
| 2026-07-16 | 2026-07-13-Governance-adap-update-harness-22-wal-push-guard | ai_infra → se | processed | ai_infra | dd4b0176fa3a | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-13-Governance-adap-update-harness-22-wal-push-guard | ai_infra → se | processed | ai_infra | dd4b0176fa3a | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
| 2026-07-16 | 2026-07-13-Governance-adap-update-presence-not-age-reinject | ai_infra → se | processed | ai_infra | ab6c387ee5fb | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-13-Governance-adap-update-presence-not-age-reinject | ai_infra → se | processed | ai_infra | ab6c387ee5fb | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
| 2026-07-16 | 2026-07-13-Governance-harness-22-wal-defect-fix | ai_infra → se | processed | ai_infra | 76919abc2ff9 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-13-Governance-harness-22-wal-defect-fix | ai_infra → se | processed | ai_infra | 76919abc2ff9 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
| 2026-07-16 | 2026-07-13-Governance-harness-23-explicit-model-at-spawn | ai_infra → se | processed | ai_infra | 7c0ec06700af | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-13-Governance-harness-23-explicit-model-at-spawn | ai_infra → se | processed | ai_infra | 7c0ec06700af | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
| 2026-07-16 | 2026-07-14-Governance-harness-24-lead-self-audit-h17-cadence | ai_infra → se | processed | ai_infra | 7400d951bebd | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-14-Governance-harness-24-lead-self-audit-h17-cadence | ai_infra → se | processed | ai_infra | 7400d951bebd | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
| 2026-07-16 | 2026-07-14-Governance-owner-sign-3-marks-h21-mtv3-h22 | ai_infra → se | processed | ai_infra | ae119b953218 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-14-Governance-owner-sign-3-marks-h21-mtv3-h22 | ai_infra → se | processed | ai_infra | ae119b953218 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
| 2026-07-16 | 2026-07-15-Governance-eol-crlf-agent-registry-defect-notice | ai_infra → se | processed | ai_infra | 1c039f336b28 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | | 2026-07-16 | 2026-07-15-Governance-eol-crlf-agent-registry-defect-notice | ai_infra → se | processed | ai_infra | 1c039f336b28 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
## 📤 OUTBOUND (gửi — qua `/send-email <to>`) ## 📤 OUTBOUND (gửi — qua `/send-email <to>`)
| sent (ISO) | id | from → to | folder | sha256(12) | | sent (ISO) | id | from → to | folder | sha256(12) |

View File

@ -64,7 +64,7 @@ Cột "Thuộc GĐ" lấy đúng nhãn giai đoạn mà hub gắn trong Phần C
Ghi ra thành danh sách có tên thay vì im lặng, theo đúng khoản A14. Danh sách này không rỗng. Ghi ra thành danh sách có tên thay vì im lặng, theo đúng khoản A14. Danh sách này không rỗng.
- **A2 — chỗ cắm kỷ luật ghi ngay.** Chưa ai đo SE có cắm luật ghi-ngay vào bề mặt tự động nạp mỗi lượt hay không. Lệnh: `grep -n "ghi ngay\|ghi NGAY" CLAUDE.md .claude/auto-memory/MEMORY.md`, kèm control dương bằng một cụm chắc chắn có trong hai tệp đó. - **A2 — chỗ cắm kỷ luật ghi ngay.** Chưa ai đo SE có cắm luật ghi-ngay vào bề mặt tự động nạp mỗi lượt hay không. Lệnh: `grep -n "ghi ngay\|ghi NGAY" CLAUDE.md .claude/auto-memory/MEMORY.md`, kèm control dương bằng một cụm chắc chắn có trong hai tệp đó.
- **A4 — tập cửa dừng thật.** Đã đo được 6 cửa gọi máy dò nhịp và 4 trên 19 cửa có tiền kiểm, nhưng chưa ai liệt đủ tập cửa dừng thật rồi đối chiếu từng cửa. Lệnh: dựng bảng 19 cửa ở wave W3 rồi soi từng dòng. - **A4 — tập cửa dừng thật.** **ĐÃ DỰNG @W3, xong 2026-08-07.** Bảng 19 cửa liệt **từng dòng** sống ở [`runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-w3-nghi-thuc.md` **§1.2**](../../.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-w3-nghi-thuc.md) — 19 dòng đánh số, **0 cửa còn treo**. Số đo tại đó: **5/19** có tiền-kiểm TRƯỚC W3 (không phải 4/19 như bản trước ghi — chênh vì `snapshot` được đóng từ 🟡 sang CÓ), **9/19** sau W3. 🧊 *Câu cũ ở dòng này là mệnh-lệnh "dựng bảng 19 cửa ở wave W3" — giữ vết: nó sống nguyên 1 wave sau khi bảng đã dựng xong, và không trỏ tới đâu (dry-run @S181 bắt, class `view-stale-status`).*
- **A8 — tỉ lệ phủ sóng.** Bao nhiêu tin của chủ dự án đã được bắt vào nguồn đếm, trên tổng số tin thật. Chưa có vật tương đương ở SE nên chưa xác định được mẫu số. Chừng nào chưa có tỉ lệ này thì khối chấm điểm **phải in "KHÔNG ĐO ĐƯỢC"** và cấm in điểm. - **A8 — tỉ lệ phủ sóng.** Bao nhiêu tin của chủ dự án đã được bắt vào nguồn đếm, trên tổng số tin thật. Chưa có vật tương đương ở SE nên chưa xác định được mẫu số. Chừng nào chưa có tỉ lệ này thì khối chấm điểm **phải in "KHÔNG ĐO ĐƯỢC"** và cấm in điểm.
- **A16 — ba script mồ côi và bảng hợp nhất.** Đã có kết luận từng script, nhưng bảng bốn ô cho từng cưỡng chế thì chưa dựng. - **A16 — ba script mồ côi và bảng hợp nhất.** Đã có kết luận từng script, nhưng bảng bốn ô cho từng cưỡng chế thì chưa dựng.
- **Điều kiện vào giai đoạn 6, vế đếm.** Bốn khoản của giai đoạn 6 còn ở trạng thái chưa đo: bài kiểm ghim tên hay ghim số; tỉ lệ phiên đi đường Workflow so với đường Agent; hai vế còn lại của điều kiện vào danh sách; và tần suất của triệu chứng TC-07, mà SE **không tồn tại dụng cụ** để đếm. - **Điều kiện vào giai đoạn 6, vế đếm.** Bốn khoản của giai đoạn 6 còn ở trạng thái chưa đo: bài kiểm ghim tên hay ghim số; tỉ lệ phiên đi đường Workflow so với đường Agent; hai vế còn lại của điều kiện vào danh sách; và tần suất của triệu chứng TC-07, mà SE **không tồn tại dụng cụ** để đếm.

View File

@ -0,0 +1,61 @@
# Sổ khung-nhìn LƯỢT CHẠY ĐẮT — `expensive-runs-view.md`
> 🔴 **ĐÂY LÀ VIEW, KHÔNG PHẢI NGUỒN. REGENERATE-ONLY — CẤM SỬA TAY.**
> Sửa tay một dòng ở đây là **đẻ nguồn thứ hai** cho thứ đã có nguồn — đúng thứ sàn-3 cấm. Muốn đổi nội dung thì đổi **vật chứng gốc** (run-folder / nhật-ký vai / WAL) rồi dựng lại bảng.
>
> **Vị trí này do chủ dự án chốt** — câu **P7 vế (i)**, anh gật *"1 → gật luôn"* @S181 (2026-08-07). Sổ ghi quyết-định: [`owner-decisions-07-08-2026-dot-2.md`](../../.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/owner-decisions-07-08-2026-dot-2.md).
---
## Vì sao là VIEW chứ không phải sổ chép tay
Lane D (`sub-n3-lane-d-gd56.md` §4a) đo được: **dữ liệu đã nằm sẵn trên đĩa ở 3 nơi**, không cần ai chép lại —
| Nguồn | Chứa gì | Đo được |
|---|---|---|
| `.claude/workflows/runs/<id>/` | run.md + sub-file + synthesis | **88** thư mục lượt |
| `.claude/agent-memory/**` dấu `[engine:` | engine nào chạy cho vai nào | **8** tệp mang dấu |
| `.claude/WAL.md` | dòng `wf:` + chain của mạch đang chạy | 1 sổ |
⇒ Một sổ chép tay sẽ **lệch** khỏi 3 nguồn này ngay lượt đầu ai đó quên ghi. View thì không lệch được — nó **là** ba nguồn đó, đọc lại.
## Lệnh dựng lại (chạy rồi thay phần bảng bên dưới)
```bash
# (1) dau [engine: — engine nao chay cho vai nao
grep -rho '\[engine:[^]]*\]' .claude/agent-memory/ | sort | uniq -c | sort -rn
# (2) run-folder co luot dat
grep -rl 'fable-real\|fable-clone' .claude/workflows/runs/*/run.md | sed 's#.*/runs/##;s#/run.md##'
# (3) mau so — tong run-folder (LUON in canh moi con so, hop dong may W1 muc 3)
ls -d .claude/workflows/runs/*/ | wc -l
```
---
## Bảng — 5 cột (khuôn chốt ở P7)
**Mẫu số: 8 run-folder có dấu lượt đắt / 88 run-folder tổng.**
| Thời điểm | Loại | Đề bài | Con trỏ vật chứng | Kết luận |
|---|---|---|---|---|
| 2026-08-07 (S180) | `/fable-real` `investigator-codebase` | N1 — dựng fit-map gói adap 7-GĐ | `runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-invest-fitmap-S180.md` | **PHỦ ĐỦ 7GĐ / 12TC / 9LỖI** |
| 2026-08-07 (S180) | `/fable-real` `reviewer` | N2 — review fit-map | `…/sub-review-n2-S180.md` | **PASS_WITH_FIXES 0C/5M/6m**, claim-không-đứng = 0 |
| 2026-08-07 (S180) | `/fable-clone` `reviewer` ×6 lane | N3 — 6 lăng-kính AF | `…/sub-n3-lane-{a…f}-*.md` | 6 lane trả đủ; lane F bắt slot (68) đóng-hụt |
| 2026-08-07 (S180) | `/fable-real` `reviewer` | N4 — kế hoạch wave | `…/wave-plan-S180.md` | **7 wave + 3 sub gated, 0 loại** |
| 2026-08-06 (S176) | lượt đắt | đổi style 3 vai | `runs/2026-08-06-S176-doi-style-3-vai/` | → 3 vai `*-reviewer-style` |
| 2026-08-05 (S175) | lượt đắt | cột ngân sách dự án | `runs/2026-08-05-S175-duan-budget-column/` | — |
| 2026-08-05 (S174) | lượt đắt | audit style KHKK | `runs/2026-08-05-S174-khkk-style-audit/` | — |
| 2026-08-04 (S171) | lượt đắt | KHKK UI mirror PE | `runs/2026-08-04-S171-khkk-ui-mirror-pe/` | — |
| 2026-07-31 (S164) | lượt đắt | 4GĐ KHKK fan-out | `runs/2026-07-31-S164-4gd-khkk-fanout/` | — |
| 2026-07-29 (S160) | lượt đắt | KHKK dry-run plan | `runs/2026-07-29-S160-khkk-dryrun-plan/` | — |
| 2026-07-28 (S158) | lượt đắt | day-wake probe | `runs/2026-07-28-S158-day-wake-probe-first/` | — |
| S108 · S110 · S111 · S117 | `/fable-real` single | (đề bài ở nhật-ký vai) | dấu `[engine: fable-real-single · Fable-S1xx]` trong `.claude/agent-memory/**` | — |
| S112 · S113 | `/fable-clone` ensemble | (đề bài ở nhật-ký vai) | dấu `[engine: fable-clone-ensemble · Opus-S11x]` | — |
## 🔴 Khai thẳng cái view này CHƯA làm được
- **Cột *kết luận* rỗng ở 9/13 dòng.** Dấu `[engine:` ghi **engine + vai**, không ghi **verdict**; verdict nằm rải trong `run.md`/synthesis mỗi thư mục. Kéo verdict tự động = phải parse văn xuôi tự do ⇒ **chưa cơ-khí-hoá được**, và điền tay thì vi phạm chính luật regenerate-only ở đầu tệp. Ô rỗng ở đây nghĩa là **chưa trích được**, KHÔNG phải *"lượt đó không có kết luận"*.
- **Cột *thời điểm* lấy từ tên thư mục**, không phải mốc trong tệp. Tên thư mục do người đặt ⇒ sai tên là sai cột. (Cùng bẫy mà `tien-kiem-cua.ps1` né bằng cách đọc dấu-thời-gian-trong-tệp.)
- **Vế-6 của P7 chưa cắm:** *thiếu-tệp-ở-lượt-đắt = mức nghiêm trọng CAO NHẤT* nối vào máy điểm danh W2 (`artifact-integrity.ps1`) — khoản đó thuộc **W5b**, mà W5b còn **gated bởi P7 vế (ii)** (truyền-nguyên-văn lane dispatch) chưa được phán.

View File

@ -135,7 +135,7 @@ Hub `phu-luc:194`: *tiền kiểm chi phí bằng không, chạy ở **đầu m
- **Máy:** `scripts/tien-kiem-cua.ps1` — chỉ đọc, **luôn exit 0**, in một dòng `TIEN-KIEM:`. Lỗi bất kỳ ⇒ in `tien-kiem loi (khong chan)` rồi đi tiếp. - **Máy:** `scripts/tien-kiem-cua.ps1` — chỉ đọc, **luôn exit 0**, in một dòng `TIEN-KIEM:`. Lỗi bất kỳ ⇒ in `tien-kiem loi (khong chan)` rồi đi tiếp.
- **Vì sao không tin `mtime`:** hook `wal:` chạm tệp ở biên mỗi lượt; `git checkout` viết lại `mtime` hàng loạt. `mtime` trả lời *"tệp bị chạm lúc nào"*, không trả lời *"cửa đóng lúc nào"*. Dấu thời gian **trong** tệp thì không bị hai thứ đó làm trôi. - **Vì sao không tin `mtime`:** hook `wal:` chạm tệp ở biên mỗi lượt; `git checkout` viết lại `mtime` hàng loạt. `mtime` trả lời *"tệp bị chạm lúc nào"*, không trả lời *"cửa đóng lúc nào"*. Dấu thời gian **trong** tệp thì không bị hai thứ đó làm trôi.
- **Nguồn dấu thời gian trong tệp** (đọc, không ghi): `.claude/WAL.md` dòng `updated:` · `.claude/governance/.session-counter.json` khoá `last_ticked_at` + `last_ticked_session` + `last_ticked_head`. - **Nguồn dấu thời gian trong tệp** (đọc, không ghi): `.claude/WAL.md` dòng `updated:` · `.claude/governance/.session-counter.json` khoá `last_ticked_at` + `last_ticked_session` + `last_ticked_head`.
- **Độ phủ + trần chi phí:** xem `docs/governance/adap-upgrade-pack-tracking.md` và bản ghi lượt W3. **Số cửa và số phủ KHÔNG chép ở đây** (B1) — đo lại bằng `ls -1 .claude/commands/*.md | wc -l`. - **Độ phủ + trần chi phí:** 🔴 **BẢNG 19 CỬA LIỆT TỪNG DÒNG SỐNG Ở** [`.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-w3-nghi-thuc.md` **§1.2**](../../.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-w3-nghi-thuc.md) (19 dòng đánh số, 0 cửa treo). `adap-upgrade-pack-tracking.md` chỉ ghi **lệnh dựng** bảng, KHÔNG chứa bảng — đi theo nó là lạc. **Số cửa và số phủ KHÔNG chép ở đây** (B1) — đo lại bằng `ls -1 .claude/commands/*.md | wc -l`.
🔴 **`C3-08` — trần chi phí cho cửa hay dùng: `KHÔNG ĐO ĐƯỢC`.** Kho này có doctrine *"đo BYTE, CẤM quy token"* (S158) nên không in được số token cho một cửa. Adopt ở dạng **hướng dẫn + nghĩa vụ khai**: ai thêm bước vào `/pause` · `/tiep` phải **đo wall-clock trước** (luật đã có sẵn: `.claude/commands/check-email.md:41`) và **khai con số đo được**. Đây là **khai báo, không phải thuốc** — đúng chữ hub `:185`: *"Không có dụng cụ đo thì khai KHÔNG ĐO ĐƯỢC, đừng in số bịa."* 🔴 **`C3-08` — trần chi phí cho cửa hay dùng: `KHÔNG ĐO ĐƯỢC`.** Kho này có doctrine *"đo BYTE, CẤM quy token"* (S158) nên không in được số token cho một cửa. Adopt ở dạng **hướng dẫn + nghĩa vụ khai**: ai thêm bước vào `/pause` · `/tiep` phải **đo wall-clock trước** (luật đã có sẵn: `.claude/commands/check-email.md:41`) và **khai con số đo được**. Đây là **khai báo, không phải thuốc** — đúng chữ hub `:185`: *"Không có dụng cụ đo thì khai KHÔNG ĐO ĐƯỢC, đừng in số bịa."*
@ -147,4 +147,4 @@ Hub `phu-luc:194`: *tiền kiểm chi phí bằng không, chạy ở **đầu m
|---|---| |---|---|
| `C3-04` cổng chặn bằng mã lỗi | wave **W3b**, chờ owner chốt (P1). Mọi máy W3 giữ **exit 0 / INFORM** | | `C3-04` cổng chặn bằng mã lỗi | wave **W3b**, chờ owner chốt (P1). Mọi máy W3 giữ **exit 0 / INFORM** |
| khoản (v) thang mã thoát 4 trạng thái | hình dạng đổi theo phương án P1 ⇒ làm trước là làm lại (lane C §E.3) | | khoản (v) thang mã thoát 4 trạng thái | hình dạng đổi theo phương án P1 ⇒ làm trước là làm lại (lane C §E.3) |
| khoản (vi) luật tự trị ba bậc | cần owner gật nội dung (P5); đích **NGUỒN** dự kiến `.claude/governance/ACTIVE-MARKS.md`, các nơi khác **TRỎ** về, cấm chép (chống nguồn-đôi `C3-07``ST-002`) | | ~~khoản (vi) luật tự trị ba bậc~~ | ✅ **HẾT ngoài-phạm-vi @S181** — anh gật P5 *"nguyên văn"*. Nhà NGUỒN = [`.claude/governance/ACTIVE-MARKS.md` **§LT3**](../../.claude/governance/ACTIVE-MARKS.md) (mark `RC-pqhuy1987-07-08-2026-20-57-48`). Văn bản này + `ST-002` của W4 **TRỎ** về đó, **cấm chép** (chống nguồn-đôi `C3-07``ST-002`) |

View File

@ -0,0 +1,67 @@
# Sổ yêu-cầu chủ dự án — 3 khối (GĐ-4, wave W4)
> **Dựng @S181 · 2026-08-07.** Điều-kiện-vào đã đủ: W3 thi công xong + chủ dự án chốt **P2 = PB-2** (tách REQUEST ⟂ TASK).
> Sổ quyết-định: [`owner-decisions-07-08-2026-dot-2.md`](../../.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/owner-decisions-07-08-2026-dot-2.md).
## 🔴 Ranh sống-còn: sổ này là REQUEST, KHÔNG phải TASK
| | REQUEST (sổ này) | TASK (`.claude/WAL.md`) |
|---|---|---|
| Trả lời câu | *"anh đã yêu-cầu gì, đã được đáp chưa?"* | *"việc đang tới đâu?"* |
| Nguồn | **sổ này** | **WAL — nguồn duy-nhất** |
| Cột trạng-thái | `mở`/`đóng` của **YÊU-CẦU** | `[ ]`/`[!]`/`[x]` của **VIỆC** |
🔴 **Sổ này CẤM mang cột trạng-thái-thi-công của riêng nó.** Muốn biết việc tới đâu thì đi theo cột *con trỏ* về WAL. Luật + lý-lẽ đầy-đủ = canonical ở [`.claude/commands/tiep.md` §3-bis](../../.claude/commands/tiep.md) — **B1: CẤM chép sang đây.**
## 🔴 Chống bẫy A1 — cột *lời nguyên văn* chỉ nhận chữ anh gõ TỪ 2026-08-07
Dữ-liệu cũ (WAL · HANDOFF · auto-memory · migration-todos) **KHÔNG** được đổ vào 3 khối dưới — chúng là **nhãn do đội đặt**, không phải lời anh. Chúng sống ở **PHỤ LỤC** cuối tệp, mang nhãn *"suy ra, không phải nguyên văn"*.
- **Mã `YC-`/`ST-`/`PN-` là VĨNH VIỄN, cấm tái dụng.** Đóng = **lật trạng thái**, KHÔNG xoá dòng. *(SE từng làm ngược: `HANDOFF:10-17` đánh số 1..7 tái dụng mỗi phiên, đã trả giá bằng 3 lượt hỏi lại.)*
- **Trần ký tự cột nguyên văn** = khoá `owner_request_verbatim_char_cap` trong `.claude/agent-memory/memory-budget.json`**B1: trỏ khoá, CẤM chép số vào đây.**
---
## Khối 1 — `việc-được-giao`
| mã | lời nguyên văn | thời điểm · phiên | trạng thái | số lần đã nhắc | con trỏ | 🔴 đội hiểu thành gì |
|---|---|---|---|---|---|---|
| `YC-001` | "Nói rõ các vấn đề trên nhé" | 2026-08-07 · S181 | đóng | 1 | báo-cáo lượt S181 | Giải thích 6 câu chờ-anh bằng nguồn thật, không phỏng theo trí nhớ — kèm khuyến nghị từng câu |
| `YC-002` | "OK cứ làm dry-run luôn" | 2026-08-07 · S181 | đóng | 1 | `WAL` chain "DRY-RUN W3 acceptance" | *(lead hiểu SAI lượt đầu: tưởng dry-run các ô acceptance W3. Anh đính chính ở `YC-004`.)* |
| `YC-003` | "gõ /adap-apply (dry) -> OK chốt cái này cho W3" | 2026-08-07 · S181 | đóng | 1 | `WAL` chain "W3 acceptance 6/6 ĐÓNG" | Gõ lệnh thật để xác nhận thân lệnh nạp có BƯỚC 0, **không** áp thư nào |
| `YC-004` | "làm tiếp đi nhé, nãy tao nói dry-run tức chạy hết cái plan adapt ở turn trước chứ ko phải dry-run cái này" | 2026-08-07 · S181 | đóng | **2** | `WAL` chain "THI HÀNH 5/6 khoản đợt-2" | Đính chính `YC-002`: "dry-run" = **thi hành trọn plan adapt**, không phải chạy thử |
| `YC-005` | "làm xong thì chậy hết cái plan adapt nhé" | 2026-08-07 · S181 | đóng | **3** | cùng trên | Nhắc lại `YC-004` — cùng nội dung, lần thứ 3 |
| `YC-006` | "làm cho hết đi nhé" | 2026-08-07 · S181 | mở | **4** | `WAL` `next:` | Chạy nốt phần còn lại: P8 · P2 · W4 |
> 🔴 **`YC-004/005/006` = MỘT yêu-cầu bị nhắc 4 lần.** Đây là dữ-liệu **TC-01** (đếm-lần-nhắc) sinh ra để bắt — và nó tự tố-giác ngay dòng đầu tiên của sổ: lead hiểu sai ở `YC-002` nên anh phải nói lại 3 lần nữa. **Ghi lại chứ không làm đẹp.**
## Khối 2 — `sở-thích-thường-trực`
| mã | lời nguyên văn | phạm vi được làm thẳng | 🔴 lằn ranh đỏ vẫn PHẢI hỏi | lý do anh đã lường trước | thời điểm · trạng thái |
|---|---|---|---|---|---|
| `ST-001` | *(mục mồi — chưa có lời nguyên văn; liệt kê dưới là lằn-ranh do đội dựng theo A6, chờ anh xác nhận hoặc sửa)* | — | **LIỆT KÊ 7 LOẠI, CẤM dùng tính từ:** (1) đổi lược-đồ dữ-liệu · (2) xoá dữ-liệu · (3) hành-động hướng-ra-ngoài · (4) việc không-lùi-được · (5) việc dính tiền · (6) đổi cơ-chế governance · (7) đổi số-nhịp / ngân-sách | — | 2026-08-07 · **mở (chờ anh)** |
| `ST-002` | *(mục mồi)* — tự-trị khi anh vắng mặt | theo **bậc 1** của luật 3 bậc | theo **bậc 3** của luật 3 bậc | — | 2026-08-07 · mở |
> `ST-002` **TRỎ** về nhà NGUỒN: [`ACTIVE-MARKS.md` **§LT3**](../../.claude/governance/ACTIVE-MARKS.md) (mark `RC-pqhuy1987-07-08-2026-20-57-48`). 🔴 **CẤM chép nội dung luật xuống đây** — đó đúng là nguồn-đôi `C3-07` ⟂ `ST-002` mà lane C §F.2 chỉ ra.
>
> ⚠️ **`ST-001` khai thẳng nấc:** 7 loại trên **chưa phải lời anh**. Chúng là lằn-ranh đội dựng theo khuôn A6 để mục mồi có nội dung soi được. Cột *lời nguyên văn* **để trống có khai** đúng luật chống-bẫy-A1, thay vì bịa một câu rồi gán cho anh.
## Khối 3 — `lời-phàn-nàn`
**TRỐNG TUYỆT ĐỐI.** Đo @S180: **0 hit** trên toàn kho (control dương cùng phép, chuỗi *"điểm dừng"* = 5 tệp ⇒ lệnh chạy được, rỗng là rỗng thật).
🔴 Ô trống này **KHÔNG** đọc thành *"anh chưa từng phàn nàn"* — nó chỉ nghĩa là **chưa ai từng ghi**. Có `PN-001` thì đánh số từ 1.
---
## PHỤ LỤC — 🔴 SUY RA, KHÔNG PHẢI NGUYÊN VĂN
> Mọi thứ dưới đây là **nhãn do đội đặt**, KHÔNG phải chữ anh gõ. **CẤM nâng lên 3 khối trên.** Lý do: 61 tiêu đề `auto-memory` là nhãn-đội — đổ vào sổ là 61 mục trượt đối chiếu ngay lượt đầu (F-04 + lane C §C.5).
**Bảng `HANDOFF:10-17` — CHƯA nhập, có lý do.** Ngoại-lệ VK-5 (cho phép nhập bảng này vào khối chính) là **vế con của P2 mà anh chưa phán riêng**: anh chốt *"P2 = b"* cho trục REQUEST ⟂ TASK, không nói về VK-5. Theo **bậc 2** của luật 3 bậc vừa ban (*mơ hồ, không phá huỷ → chọn nhánh an toàn + khai*), lead chọn **KHÔNG nhập** và ghi ở đây. Anh gật VK-5 thì nhập sau, một lượt là xong.
| Nguồn suy ra | Ở đâu | Vì sao chưa nâng lên |
|---|---|---|
| bảng chờ-anh `HANDOFF:10-17` | `docs/HANDOFF.md` | VK-5 chưa được phán (xem trên) |
| 5 câu chờ-anh gói adap | `WAL` + `_context-s-12.md` PAUSE-1 | đã được đáp @S181 — thuộc `owner-decisions`, không phải yêu-cầu mở |
| 61 tiêu đề `auto-memory` | `.claude/auto-memory/` | nhãn-đội, không phải lời anh |

View File

@ -239,6 +239,19 @@ Co-Authored-By: Claude Opus 4.8 (1M) <noreply@anthropic.com> # <lead model hi
## 6. Docs ## 6. Docs
### 6.0 Sổ yêu-cầu chủ dự án — ghi NGAY, tra TRƯỚC KHI HỎI (W4/S181)
> Chỗ cắm thứ 2 theo A3 (chỗ thứ 1 = `CLAUDE.md`). 🔴 **CẤM cắm luật này vào `.claude/commands/`** — hub A2 / `phu-luc:252`: lệnh là nơi thi-hành, không phải nơi giữ luật.
Sổ: [`docs/governance/so-yeu-cau-chu-du-an.md`](governance/so-yeu-cau-chu-du-an.md) — 3 khối `việc-được-giao` · `sở-thích-thường-trực` · `lời-phàn-nàn`.
1. **Ghi NGAY trong lượt anh nói.** Cột *lời nguyên văn* = đúng chữ anh gõ, cắt theo trần `owner_request_verbatim_char_cap` (`memory-budget.json` — B1, đừng chép số). Cắt thì để `...` + con trỏ tới chỗ đủ; **CẤM tóm tắt thay cho cắt** (tóm tắt là diễn giải, mà cột đó tồn tại chính để **không** diễn giải).
2. **Diễn giải có ô riêng** — cột thứ 7 *đội hiểu thành gì*. Trộn 2 cột = mất đúng thứ sổ sinh ra để giữ.
3. **Tra sổ TRƯỚC KHI hỏi lại anh.** 🔴 **A5:** hỏi lại **không viện dẫn thông tin mới** = **vi phạm**; hỏi lại **kèm nguồn mới** = kỷ luật đúng.
4. **Mã `YC-`/`ST-`/`PN-` vĩnh viễn, cấm tái dụng.** Đóng = **lật trạng thái**, không xoá dòng. *(SE từng đánh số 1..7 tái dụng mỗi phiên ở `HANDOFF:10-17` và trả giá bằng 3 lượt hỏi lại.)*
5. 🔴 **Sổ = REQUEST ⟂ WAL = TASK.** Sổ **CẤM** mang cột trạng-thái-thi-công riêng; cần "việc tới đâu" thì **TRỎ** về `.claude/WAL.md`. Luật + lineage canonical → [`.claude/commands/tiep.md` §3-bis](../.claude/commands/tiep.md).
6. **Máy dò:** `scripts/nhip-no-probe.ps1` in vế `so-yc treo <n> / nhac2+ <m>`. 🔴 `chua-co-du-lieu` (sổ vắng/rỗng) ⟂ `treo 0` (đã đo, bằng 0) là **hai chuỗi khác nhau** — gộp lại là đèn-xanh-giả.
### 6.1 Khi nào viết session log ### 6.1 Khi nào viết session log
- Session có commit thay đổi code → PHẢI tạo `docs/changelog/sessions/YYYY-MM-DD-HHMM-{topic}.md` - Session có commit thay đổi code → PHẢI tạo `docs/changelog/sessions/YYYY-MM-DD-HHMM-{topic}.md`

View File

@ -0,0 +1,19 @@
{
"_what": "NGUON DUY-NHAT cua 7 baseline ky-vong cho scripts/naming-scan.ps1. Owner chot phuong an (b) tach-file-du-lieu @S181 2026-08-07 (cau 6 goi adap 7-GD).",
"_rang_buoc": "🔴 File nay la NGUON. naming-scan.ps1 chi DOC. CAM chep so nguoc vao script — chep nguoc = de nguon-doi, dung thu phuong an (b) sinh ra de chan.",
"_y_nghia_so": "So ky-vong = MAU SO cho guard A2 (naming-scan.ps1:99). Tap vang mat => phep do khong ton tai, mau so = 0/<ky-vong>. Vi vay khoa THIEU o day KHONG duoc phep am tham thanh 0 — may in co LOUD roi bo qua nhom do.",
"_khong_phai_su_that": "Day la KY-VONG, khong phai su-that. Lech => tripwire VANG (ngoai bo dem LECH), y nghia la 'chuan hoac kho da doi, doc lai naming-standard.md'. KHONG phai loi.",
"_do_lai": "powershell -ExecutionPolicy Bypass -File scripts/naming-scan.ps1 => doc dong 'mau so: N' cua tung nhom.",
"_updated": "2026-08-07",
"_updated_boi": "S181 (phien-LOGIC 12) - do tuoi sau khi land W3 + P5/P7i + W4 (so yeu-cau).",
"_lich_su_thoi": "S180 va :174 tu 54 -> 55; do lai @S181 cung ngay da la 56. 3/7 khoa thoi trong ~1 ngay. Do la ly do khoa nay co _updated: doc so ma khong biet no cu bao lau thi khong danh gia duoc.",
"sets": {
"vai": 27,
"nhat-ky-vai": 26,
"lenh": 19,
"kich-ban": 57,
"moc-phien": 93,
"so-governance": 19,
"hook": 1
}
}

View File

@ -59,6 +59,40 @@ $script:Pep8 = 0
$script:MissingSets = 0 $script:MissingSets = 0
$script:LechList = @() $script:LechList = @()
# ---------- baseline ky-vong ----------
# NGUON DUY-NHAT = scripts/naming-baseline.json (chu du an chot phuong an (b) @S181, cau 6).
# (a) Script nay chi DOC. CAM chep so nguoc vao day -- chep nguoc = de nguon-doi,
# dung thu ma phuong an (b) sinh ra de chan.
# (b) Nap tu $PSScriptRoot, KHONG phai $RepoRoot: fault-inject chay -RepoRoot <cay-tam>
# nhung baseline la thuoc tinh cua CHUAN, khong phai cua cay dang quet.
# (c) Thieu khoa / hong tep => IN LOUD roi tra $null. CAM tra 0: so 0 se lam mau so
# cua guard A2 (:99) thanh "0/0", va "0/0" doc thanh SACH. Do dung la bay
# "vang mat trong giong on" ma guard A2 duoc dung len de chan.
$script:BaselinePath = Join-Path $PSScriptRoot 'naming-baseline.json'
$script:Baseline = $null
$script:BaselineUpdated = '(khong ro)'
if (Test-Path -LiteralPath $script:BaselinePath) {
try {
$bj = Get-Content -LiteralPath $script:BaselinePath -Raw | ConvertFrom-Json
$script:Baseline = $bj.sets
if ($bj._updated) { $script:BaselineUpdated = [string]$bj._updated }
} catch {
Write-Host ("FLAG BASELINE-HONG: doc duoc '{0}' nhung khong parse duoc JSON: {1}" -f $script:BaselinePath, $_.Exception.Message) -ForegroundColor Red
}
} else {
Write-Host ("FLAG BASELINE-VANG: khong thay '{0}'. Moi nhom se chay KHONG co ky-vong." -f $script:BaselinePath) -ForegroundColor Red
}
function Get-Baseline([string]$Label) {
if ($null -eq $script:Baseline) { return $null }
$p = $script:Baseline.PSObject.Properties[$Label]
if ($null -eq $p) {
Write-Host (" FLAG BASELINE-THIEU-KHOA: '{0}' khong co trong naming-baseline.json" -f $Label) -ForegroundColor Red
return $null
}
return [int]$p.Value
}
function Write-Head([string]$t) { Write-Host ''; Write-Host $t -ForegroundColor Cyan } function Write-Head([string]$t) { Write-Host ''; Write-Host $t -ForegroundColor Cyan }
function Add-Verdict { function Add-Verdict {
@ -84,19 +118,31 @@ function Scan-Set {
# 'Item' = ca tep LAN thu muc. Bat buoc cho scripts/ va docs/governance/ vi # 'Item' = ca tep LAN thu muc. Bat buoc cho scripts/ va docs/governance/ vi
# tap 231 dem theo don vi "muc" o hai nhom do (bay don-vi: tep != muc). # tap 231 dem theo don vi "muc" o hai nhom do (bay don-vi: tep != muc).
[ValidateSet('File', 'Dir', 'Item')][string]$Kind, [ValidateSet('File', 'Dir', 'Item')][string]$Kind,
[int]$Expect, # -1 = khong truyen tay => tra cuu tu naming-baseline.json theo $Label.
# KHONG dat mac dinh 0: xem ghi chu (c) o khoi nap baseline.
[int]$Expect = -1,
[scriptblock]$Rule, [scriptblock]$Rule,
[string]$Filter = '*', [string]$Filter = '*',
[switch]$Recurse [switch]$Recurse
) )
if ($Expect -lt 0) {
$b = Get-Baseline $Label
if ($null -ne $b) { $Expect = $b }
}
$hasExpect = ($Expect -ge 0)
$full = Join-Path $RepoRoot $RelPath $full = Join-Path $RepoRoot $RelPath
Write-Head ("--- NHOM: {0} [{1}]" -f $Label, $RelPath) Write-Head ("--- NHOM: {0} [{1}]" -f $Label, $RelPath)
if (-not (Test-Path -LiteralPath $full)) { if (-not (Test-Path -LiteralPath $full)) {
$script:MissingSets++ $script:MissingSets++
Write-Host (" FLAG THIEU-TAP: khong tim thay '{0}'." -f $RelPath) -ForegroundColor Red Write-Host (" FLAG THIEU-TAP: khong tim thay '{0}'." -f $RelPath) -ForegroundColor Red
if ($hasExpect) {
Write-Host (" Day KHONG phai [skip]. Tap vang mat => phep do khong ton tai, mau so = 0/{0} ky vong." -f $Expect) -ForegroundColor Red Write-Host (" Day KHONG phai [skip]. Tap vang mat => phep do khong ton tai, mau so = 0/{0} ky vong." -f $Expect) -ForegroundColor Red
} else {
Write-Host " Day KHONG phai [skip]. Tap vang mat => phep do khong ton tai, va KHONG CO ky-vong lam mau so (baseline thieu) => CAM doc thanh sach." -ForegroundColor Red
}
Write-Host " Nguyen nhan thuong gap: thu muc vua bi doi ten => moi may neo vao no cung mu theo." Write-Host " Nguyen nhan thuong gap: thu muc vua bi doi ten => moi may neo vao no cung mu theo."
return return
} }
@ -127,8 +173,10 @@ function Scan-Set {
} }
Write-Host (" mau so: {0} {1}" -f $n, $unit) -NoNewline Write-Host (" mau so: {0} {1}" -f $n, $unit) -NoNewline
if ($n -ne $Expect) { if (-not $hasExpect) {
Write-Host (" [!] lech ky vong {0} - chuan hoac kho da doi, doc lai naming-standard.md" -f $Expect) -ForegroundColor Yellow Write-Host " [!] KHONG CO ky-vong cho nhom nay trong naming-baseline.json" -ForegroundColor Red
} elseif ($n -ne $Expect) {
Write-Host (" [!] lech ky vong {0} (do ngay {1}) - chuan hoac kho da doi, doc lai naming-standard.md" -f $Expect, $script:BaselineUpdated) -ForegroundColor Yellow
} else { Write-Host '' } } else { Write-Host '' }
Write-Host (" OK {0}/{1} | LECH {2}/{1} | MIEN-theo-luat {3}/{1}" -f $lo, $n, $lk, $lm) Write-Host (" OK {0}/{1} | LECH {2}/{1} | MIEN-theo-luat {3}/{1}" -f $lo, $n, $lk, $lm)
@ -148,7 +196,7 @@ Write-Host "Chuan : docs/governance/naming-standard.md"
Write-Host "Tap do : 231 ten vat-bo-may, 0 mien tru VUNG (khong quet 1.545 tep .md - bay-4)." Write-Host "Tap do : 231 ten vat-bo-may, 0 mien tru VUNG (khong quet 1.545 tep .md - bay-4)."
# 1/7 - vai # 1/7 - vai
Scan-Set -Label 'vai' -RelPath '.claude/agents' -Kind File -Expect 27 -Filter '*.md' -Rule { Scan-Set -Label 'vai' -RelPath '.claude/agents' -Kind File -Filter '*.md' -Rule {
param($f) param($f)
if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') } if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') }
if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') } if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') }
@ -156,14 +204,14 @@ Scan-Set -Label 'vai' -RelPath '.claude/agents' -Kind File -Expect 27 -Filter '*
} }
# 2/7 - thu muc nhat ky vai # 2/7 - thu muc nhat ky vai
Scan-Set -Label 'nhat-ky-vai' -RelPath '.claude/agent-memory' -Kind Dir -Expect 26 -Rule { Scan-Set -Label 'nhat-ky-vai' -RelPath '.claude/agent-memory' -Kind Dir -Rule {
param($d) param($d)
if ($d.Name -cmatch $RX_KEBAB) { return @('OK', '') } if ($d.Name -cmatch $RX_KEBAB) { return @('OK', '') }
return @('LECH', 'thu muc nhat ky phai trung ten vai (kebab thuan)') return @('LECH', 'thu muc nhat ky phai trung ten vai (kebab thuan)')
} }
# 3/7 - lenh # 3/7 - lenh
Scan-Set -Label 'lenh' -RelPath '.claude/commands' -Kind File -Expect 19 -Rule { Scan-Set -Label 'lenh' -RelPath '.claude/commands' -Kind File -Rule {
param($f) param($f)
if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') } if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') }
if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') } if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') }
@ -171,7 +219,7 @@ Scan-Set -Label 'lenh' -RelPath '.claude/commands' -Kind File -Expect 19 -Rule {
} }
# 4/7 - kich ban (2 quy uoc ngon ngu, luat L4). Don vi = MUC (co ca thu muc con). # 4/7 - kich ban (2 quy uoc ngon ngu, luat L4). Don vi = MUC (co ca thu muc con).
Scan-Set -Label 'kich-ban' -RelPath 'scripts' -Kind Item -Expect 55 -Rule { Scan-Set -Label 'kich-ban' -RelPath 'scripts' -Kind Item -Rule {
param($f) param($f)
if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') } if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') }
if ($f.Name -eq '__pycache__') { return @('MIEN', 'vat sinh tu dong (luat L4)') } if ($f.Name -eq '__pycache__') { return @('MIEN', 'vat sinh tu dong (luat L4)') }
@ -189,7 +237,7 @@ Scan-Set -Label 'kich-ban' -RelPath 'scripts' -Kind Item -Expect 55 -Rule {
} }
# 5/7 - tep moc phien. BUOC -Recurse: tep nam trong session-<N>/, khong nam o goc. # 5/7 - tep moc phien. BUOC -Recurse: tep nam trong session-<N>/, khong nam o goc.
Scan-Set -Label 'moc-phien' -RelPath '.claude/sessions' -Kind File -Expect 90 -Recurse -Rule { Scan-Set -Label 'moc-phien' -RelPath '.claude/sessions' -Kind File -Recurse -Rule {
param($f) param($f)
if ($f.Name -cmatch $RX_SESSFAM) { return @('OK', '') } if ($f.Name -cmatch $RX_SESSFAM) { return @('OK', '') }
if ($f.Name -cmatch '^pause-') { if ($f.Name -cmatch '^pause-') {
@ -202,7 +250,7 @@ Scan-Set -Label 'moc-phien' -RelPath '.claude/sessions' -Kind File -Expect 90 -R
} }
# 6/7 - so. Don vi = MUC (co ca thu muc con adap-reports/ adap-requests/). # 6/7 - so. Don vi = MUC (co ca thu muc con adap-reports/ adap-requests/).
Scan-Set -Label 'so-governance' -RelPath 'docs/governance' -Kind Item -Expect 16 -Rule { Scan-Set -Label 'so-governance' -RelPath 'docs/governance' -Kind Item -Rule {
param($f) param($f)
if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') } if ($f.Name -eq 'README.md') { return @('MIEN', 'quy uoc pho quat (luat L4)') }
if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') } if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') }
@ -210,7 +258,7 @@ Scan-Set -Label 'so-governance' -RelPath 'docs/governance' -Kind Item -Expect 16
} }
# 7/7 - hook # 7/7 - hook
Scan-Set -Label 'hook' -RelPath '.claude/hooks' -Kind File -Expect 1 -Rule { Scan-Set -Label 'hook' -RelPath '.claude/hooks' -Kind File -Rule {
param($f) param($f)
if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') } if ($f.BaseName -cmatch $RX_KEBAB) { return @('OK', '') }
return @('LECH', 'hook phai kebab') return @('LECH', 'hook phai kebab')

View File

@ -220,7 +220,47 @@ try {
$pullSeg = 'pull-cach n-a' $pullSeg = 'pull-cach n-a'
} }
Write-Host ("NHIP-NO: kiem {0} | {1} | {2} | {3}" -f $kiemSeg, $tranSeg, $runSeg, $pullSeg) # -----------------------------------------------------------------------
# (5) SO YEU-CAU CHU DU AN (C4-06 / W4, S181) - hai ve: dang-treo + nhac-tu-lan-2.
#
# (!) PHAN BIET HAI THU KHAC NHAU, in HAI CHUOI KHAC NHAU:
# 'chua-co-du-lieu' = so vang / khong doc duoc / 0 dong YC -> phep do KHONG TON TAI
# 'treo 0 / nhac2+ 0' = da doc duoc n dong, dem ra bang 0 -> phep do CO, ket qua 0
# Gop hai cai nay lam mot chinh la 'den xanh gia' ma hub goi ten (A4).
# (!) Dong khong tach duoc cot thi DEM RIENG va IN RA, khong bo im lang
# (loi cam 4c 'liet-khong-co' / '[skip] im lang').
# (!) Cot trang thai mang chu co DAU ('mo' co dau moc). File nay BAT BUOC pure-ASCII
# (gotcha #30) nen dung CODE-POINT, khong go chu co dau vao day.
$ycSeg = 'so-yc chua-co-du-lieu'
try {
$ycPath = Join-Path $RepoRoot 'docs/governance/so-yeu-cau-chu-du-an.md'
if (Test-Path -LiteralPath $ycPath) {
# -Encoding UTF8 BAT BUOC: PS 5.1 mac dinh doc theo codepage ANSI, so do
# chu co dau trong cot trang thai bi bien dang TRUOC khi so sanh => dem ra 0
# trong khi so co dong MO that. Da xay ra that o lan cam dau tien (S181).
$ycLines = Get-Content -LiteralPath $ycPath -Encoding UTF8
$OPEN = 'm' + [char]0x1EDF # "mo" voi dau moc = trang thai MO cua yeu-cau
$tot = 0; $treo = 0; $nhac2 = 0; $bad = 0
foreach ($L in $ycLines) {
if ($L -notmatch '^\|\s*`YC-\d+`') { continue }
$tot++
$c = $L -split '\|'
if ($c.Count -lt 8) { $bad++; continue }
if ($c[4].Trim() -eq $OPEN) { $treo++ }
$m = [regex]::Match($c[5], '\d+')
if ($m.Success -and [int]$m.Value -ge 2) { $nhac2++ }
}
if ($tot -gt 0) {
$ycSeg = ("so-yc treo {0} / nhac2+ {1}" -f $treo, $nhac2)
if ($bad -gt 0) { $ycSeg += (" / {0} dong KHONG TACH DUOC COT" -f $bad) }
}
}
}
catch {
$ycSeg = 'so-yc chua-co-du-lieu'
}
Write-Host ("NHIP-NO: kiem {0} | {1} | {2} | {3} | {4}" -f $kiemSeg, $tranSeg, $runSeg, $pullSeg, $ycSeg)
} }
catch { catch {
# A probe NEVER blocks a stop point. Any failure prints one generic line. # A probe NEVER blocks a stop point. Any failure prints one generic line.