[CLAUDE] Docs: S146 closeout — session-model 3 owner-decision + hook 4-path + H24 auto
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m25s

Ap spec-apply-hub-s145-v2 (5 axis, governance-only: 0 prod-code, 0 migration).
Workflow S145 chet giua chung -> /tiep §4 relaunch-cat-gon wf_3d803740-41d 3/3 DONE.

Owner-decision @S146:
- session_ctx_kb = 64 TUONG-MINH (giu nguyen caveat ghost-wire: 0 reader)
- session-model: scaffold IDEMPOTENT (tach cap-SO vs tao-THU-MUC) · closed.md WIRE
  (session-end §6.3-bis) · V2 AUTO (go cong NGUOI, GIU cong NHIP 6/15/3)

Landed: C7 §N.8 predicate 4-ve · hook wal-flush.ps1 4 path (+.claude/sessions/)
· San-3 tin-hieu ⑤ + ORPHAN-L · D2 KIEM end-only · §L.c completeness-gate co RANG.
LIVE-VERIFY hook 4-path PASS repo THAT (da7ee8a). Session-model chay TRON VONG dau
tien: pause-S146 -> resume-S146 -> ORPHAN-L can so.

H24 force-fire (P=8 pause >= 1, luat auto moi): 2 vai + h24-audit -> 7 FLAG, va het:
- sweep-consent sot 6 site (h24-audit.md:4 = frontmatter description)
- closed.md wired-but-declared-unwired (ghost-wire CHIEU NGUOC)
- owner-decision [7] BI GHI DE do tai-dung slot-index -> mat uy-quyen push
3/3 vai lane-H24 garble #53: ghi-dia-SOM cuu tron, ghi-MUON mat trang.

So: orphan run-folder 3->0 · carry 14->20 (co tag [carry:*]) · +E-013 +E-014
error-ledger · +memory feedback_absence_looks_like_clean · .gitignore +lock file.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-07-23 00:16:37 +07:00
parent a1e2416f37
commit 8b6df0a396
86 changed files with 5683 additions and 113 deletions

View File

@ -18,13 +18,15 @@ Thực-hiện **tuần-tự**: §0 (sàn) → §1 → §2 → §3 → §4.
>
> **Vì sao sàn này tồn-tại:** WAL trống **KHÔNG** hàm ý sạch. Suy thẳng *"chain rỗng ⇒ không có mạch dở ⇒ dừng"* là **BUG**, và nó **đã từng sống ngay trong chính file này** (`tiep.md:15` cũ) + `session-start.md:51` — lead mắc thật, không phải giả-định.
### Vì sao WAL trống không đủ: hook có **3 điểm mù**
### Vì sao WAL trống không đủ: hook có **4 điểm mù**
`.claude/hooks/wal-flush.ps1:7` tự-commit **3 path** ở turn-boundary: `.claude/WAL.md` · `.claude/agent-memory/` · `.claude/workflows/runs/`.
⇒ Hai tín-hiệu trực-giác nhất — **"cây bẩn"** và **"có commit chưa đẩy"** — đều **MÙ đúng 3 vùng đó**: hook vừa dọn sạch cây, vừa biến việc-dở thành `wal:` commit trông như nhiễu.
`.claude/hooks/wal-flush.ps1:13` tự-commit **4 path** ở turn-boundary: `.claude/WAL.md` · `.claude/agent-memory/` · `.claude/workflows/runs/` · `.claude/sessions/`.
⇒ Hai tín-hiệu trực-giác nhất — **"cây bẩn"** và **"có commit chưa đẩy"** — đều **MÙ đúng 4 vùng đó**: hook vừa dọn sạch cây, vừa biến việc-dở thành `wal:` commit trông như nhiễu.
⇒ Nên phải soi bằng **tín-hiệu hook KHÔNG chạm tới được**.
### 🔴 BẬC MẠNH — thấy **1 trong 4** ⇒ **HỎI LẠI ANH**, KHÔNG tự kết-luận sạch
> 🔴 **Path thứ-4 `.claude/sessions/` thêm @S146** (cùng gói session-model, hook 4-path). **Nới hook = ĐẺ THÊM một điểm mù** ⇒ bắt buộc đẻ kèm tín-hiệu **⑤** dưới đây trong **CÙNG một lần sửa** — nới path mà quên sàn = tái mở đúng bug "sổ trống ≠ sạch" mà Sàn-3 sinh ra để chặn. Luật gốc hook (danh-sách path) = canonical [`harness-11-engine.md`](../../docs/governance/harness-11-engine.md) **PHẦN N (N.2)**, mục này KHÔNG chép luật, chỉ khai **hệ-quả lên khả-năng phát-hiện**.
### 🔴 BẬC MẠNH — thấy **1 trong 5** ⇒ **HỎI LẠI ANH**, KHÔNG tự kết-luận sạch
| # | Tín-hiệu | Vì sao đáng tin | Lệnh |
|---|---|---|---|
@ -32,6 +34,7 @@ Thực-hiện **tuần-tự**: §0 (sàn) → §1 → §2 → §3 → §4.
| **②** | `origin/main..HEAD` có commit **KHÔNG** phải `wal:` | hook **không bao giờ sinh** loại commit này ⇒ có = người làm thật ⇒ không mù | `git log --format='%s' origin/main..HEAD \| grep -qv '^wal:'` |
| **③** | `closing:` treo trong WAL | = Sàn-2 sentinel (xem §0.b) | `grep -q '^closing:' .claude/WAL.md` |
| **④** | `wal:`-commit **chưa đẩy** có đụng `.claude/workflows/runs/` | 🔴 **thu-hồi một phần điểm mù**: dù `WAL.md` bị **xoá trắng**, **commit của chính hook vẫn tố-giác** rằng một run đã được dựng | `git log --name-only --format='%s' origin/main..HEAD \| grep -q 'workflows/runs/'` |
| **⑤** | `wal:`-commit **chưa đẩy** có đụng `.claude/sessions/` | 🔴 **MIRROR ④ cho path thứ-4 (S146)**: `/pause` ghi **context-map cộng-dồn** vào `sessions/session-<N>/` ⇒ hook nuốt nó thành `wal:` commit trông như nhiễu. Không có ⑤ thì phiên chết **còn nguyên context-map** mà sàn vẫn báo "sạch" = **tái mở đúng bug** Sàn-3 sinh ra để chặn. Đây cũng là **cửa vào orphan-L** (xem block ⑤ dưới) | `git log --name-only --format='%s' origin/main..HEAD \| grep -q '.claude/sessions/'` |
#### ① DUAL-ACCEPT — 2 dạng bản-ghi-kết-quả TÍNH LÀ ĐÓNG *(dạng-3 RETIRED @S123 — xem dưới)*
@ -72,10 +75,37 @@ done
> 2. **Dual-accept = lưới PHÁT-HIỆN cho bản CŨ, KHÔNG phải giấy phép VIẾT bản MỚI.** Đúng khuôn C8 đã dùng sẵn (*tha di-sản, cấm viết mới kiểu cũ*). 🔴 **Run MỚI BẮT BUỘC ghi dạng-1** (`<stage>-synthesis.md` phẳng) — `workflows/README.md:17` thiết-kế **tên file mang nghĩa** (RAW `sub-` ⟂ VERIFIED `-synthesis.md`); dạng-3 phá đúng thiết-kế đó. Đo @S122: cùng ngày 07-12, `h22-wal-adopt` ghi dạng-1 còn `S112-*` ghi dạng-3 ⇒ **thói-quen không nhất-quán, KHÔNG phải migration**.
> ✅ **@S123 khoảng-cách doc-vs-máy này ĐÃ ĐÓNG:** trước đây doc *cấm* dạng-3 mà detector *nhận* ⇒ cấm bằng trí-nhớ. Nay **gỡ nhánh dạng-3** ⇒ luật và máy nói **cùng một câu**. Di-sản không kêu oan (6 folder cũ đều đã có flat), mà tái-sinh thì **máy bắt được ngay**.
### 🟡 BẬC TRUNG-BÌNHnhiều file bẩn **NGOÀI** 3 path hook persist
#### ⑤ ORPHAN-Lphiên-LOGIC mồ-côi *(S146 — đẻ CÙNG hook 4-path, KHÔNG tách)*
> **Là gì:** một **phiên-LOGIC** (`.claude/sessions/session-<N>/` — form hub, xem [`session-model-se-draft.md`](../../docs/governance/session-model-se-draft.md)) đã **mở + đã tích context-map** nhưng **chưa được nối lại và chưa đóng** ⇒ cửa-sổ vật-lý chết giữa phiên-logic. Cùng **class** với orphan run-folder ①: *vật trên đĩa tố-giác việc dở*, khác vật.
**DUAL — 2 cửa ĐỘC-LẬP, kêu 1 cửa là đủ để NÊU:**
```bash
# (a) cửa GIT = đúng tín-hiệu ⑤ bảng trên — bắt được CẢ KHI thư-mục đã bị dọn khỏi cây làm việc
git log --name-only --format='%s' origin/main..HEAD | grep -q '.claude/sessions/'
# (b) cửa ĐĨA — git-independent, miễn-nhiễm hook (mirror ①: đọc đĩa, KHÔNG đọc git)
# Cân-bằng-sổ: mỗi `pause-*` phải có ĐÚNG một đối-ứng (`resume-*` do /tiep ghi, hoặc closed.md do đóng-L).
for d in .claude/sessions/session-*/; do
[ -d "$d" ] || continue
p=$(ls "$d"pause-*.md 2>/dev/null | wc -l); [ "$p" -eq 0 ] && continue
r=$(ls "$d"resume-*.md 2>/dev/null | wc -l)
c=0; [ -f "$d/closed.md" ] && c=1
[ "$p" -gt $((r + c)) ] && echo "ORPHAN-L: $d (pause=$p resume=$r closed=$c)"
done
```
-**Đối-ứng `resume-*` CÓ người ghi thật**`/tiep` §2.6 dưới (cùng file này) ⇒ vòng `pause ↔ tiep` **tự đóng**, không phải cơ-chế treo.
-**`closed.md` ĐÃ WIRE @S146** (owner chốt *"giống hub"*`_end` chốt-kết của manifest `101e69d6`): nghi-thức ghi nằm ở [`session-end.md`](session-end.md) **§6.3-bis** (FROZEN · 4 trường · idempotent NO-OP · NO-OP im-lặng nếu 0 thư-mục). ⇒ **cân-sổ nay ĐỦ CẢ HAI vế**: `pause` đối-ứng bằng `resume-*` (`/tiep §2.6`) **hoặc** `closed.md` (đóng-L) ⇒ ca *"pause rồi đóng thẳng không qua `/tiep`"* **hết kêu oan**.
🧊 *Nấc cũ (tới S145): "`closed.md` CHƯA wire — VC-2 còn chờ anh duyệt", kèm hệ-quả "chỉ ca pause-rồi-đóng-thẳng mới thiếu đối-ứng". **Cả hai nay SAI** — giữ 1 dòng làm vết.*
🔴 **Bài học lấy từ chính chỗ này (H24 `lead-view-auditor` bắt @S146):** MÁY ở ngay trên (`:89` `:94` `:95`) **đã đọc `closed.md` thật** từ lúc block này ra đời, mà **PROSE vẫn khai "chưa wire"** ⇒ đây là **lật-ngược của ghost-wire**: **wired-but-declared-unwired** — và nó nằm đúng dưới nhãn *"chống ghost-wire H18"*. ⇒ **Ghost-wire soi được 2 CHIỀU**: khai-có-mà-không-chạy **và** chạy-thật-mà-khai-chưa.
- 🟢 **Hướng hỏng = AN-TOÀN:** quên ghi `resume-*` ⇒ sổ lệch ⇒ **KÊU ⇒ HỎI LẠI ANH**. Sai về phía *hỏi thừa*, không về phía *im lặng bỏ việc* — đúng thiên-hướng của Sàn-3.
### 🟡 BẬC TRUNG-BÌNH — nhiều file bẩn **NGOÀI** 4 path hook persist
🔴 **PHẢI loại nhiễu EOL TRƯỚC khi đếm** — repo có ~188 file dính EOL-only diff; không loại thì bậc này **LUÔN KÊU** ⇒ tự vô-hiệu-hoá.
Bẩn ngoài 3 path + không phải EOL-only ⇒ **NÊU**, hỏi lại nếu nhiều.
Bẩn ngoài 4 path + không phải EOL-only ⇒ **NÊU**, hỏi lại nếu nhiều.
### ⚪ BẬC YẾU — bẩn thô (`git status --porcelain` khác rỗng)
@ -84,13 +114,14 @@ Tín-hiệu **YẾU NHẤT**, dùng cuối. 🔴 **`porcelain` rỗng KHÔNG ph
### Kết-luận sàn
- Bậc MẠNH thấy **≥1** ⇒ **HỎI LẠI ANH** (nêu rõ tín-hiệu nào, đường-dẫn nào). **CẤM tự kết-luận "sạch".**
- **Cả 4 tín-hiệu MẠNH đều im** + WAL chain rỗng/toàn `[x]`*mới* được báo "**không có mạch dở**" và **DỪNG SẠCH**.
- **Cả 5 tín-hiệu MẠNH đều im** + WAL chain rỗng/toàn `[x]`*mới* được báo "**không có mạch dở**" và **DỪNG SẠCH**.
> 🔴 **Số tín-hiệu = 5 kể từ S146** (⑤ đẻ cùng hook path thứ-4). **Luật bất-biến khi nới hook về sau: mỗi path mới thêm vào `wal-flush.ps1` ⇒ mỗi tín-hiệu MẠNH mới ở đây, CÙNG một lần sửa.** Nới path mà không đẻ tín-hiệu = **đẻ điểm mù không người canh**; đó là toàn bộ lý do Sàn-3 tồn-tại.
## 0.b Sàn-2 — đọc sentinel `closing:` (self-heal)
- `session-end` ghi `closing: S<nn> @<ts>` vào WAL ở **BƯỚC 0** (trước mọi flush); xoá ở **`§6.4`**.
-**Thấy `closing:` treo = phiên trước bị cắt GIỮA lúc đóng sổ** (không phải đóng xong).
- **Self-heal:** `closing:` treo **NHƯNG** cả 4 tín-hiệu MẠNH khác đều im + ground-truth sạch ⇒ **dọn dấu 1 lần, đi tiếp** (không bắt anh xử tay).
- **Self-heal:** `closing:` treo **NHƯNG** **cả 4 tín-hiệu MẠNH CÒN LẠI** đều im (= 5 trừ chính ③ `closing:`; số cập-nhật @S146 cùng tín-hiệu ⑤) + ground-truth sạch ⇒ **dọn dấu 1 lần, đi tiếp** (không bắt anh xử tay).
- `closing:` treo **VÀ** có tín-hiệu MẠNH khác ⇒ **HỎI LẠI**.
---
@ -99,7 +130,7 @@ Tín-hiệu **YẾU NHẤT**, dùng cuối. 🔴 **`porcelain` rỗng KHÔNG ph
- Đọc file `.claude/WAL.md`.
- **Chain rỗng / toàn `[x]` / file không tồn-tại ⇒ 🔴 CHƯA ĐƯỢC KẾT-LUẬN GÌ.** Bắt buộc chạy **§0 bậc MẠNH** trước:
- Có tín-hiệu MẠNH ⇒ **HỎI LẠI ANH** (sổ trống nhưng đĩa nói còn việc — đúng ca sàn này sinh ra để bắt).
- 4/4 tín-hiệu MẠNH im ⇒ báo "**không có mạch dở**" và **DỪNG SẠCH**. KHÔNG bịa việc.
- **5/5** tín-hiệu MẠNH im ⇒ báo "**không có mạch dở**" và **DỪNG SẠCH**. KHÔNG bịa việc.
- *(🧊 Bản trước S122 suy thẳng "chain rỗng ⇒ dừng sạch" — **đó là bug**, chính là thứ Sàn-3 vá.)*
## 2. Đối-chứng ground-truth
@ -110,6 +141,14 @@ Tín-hiệu **YẾU NHẤT**, dùng cuối. 🔴 **`porcelain` rỗng KHÔNG ph
## 2.5 TICK counter + dòng-nợ (H24 — TICK TRƯỚC, dòng-nợ SAU; Item 1(b)+2 S135)
- **TICK** `.claude/governance/.session-counter.json` **theo contract** (idempotent — NO-OP nếu cùng nhãn-phiên/cùng HEAD) — 🔴 **CON-TRỎ `session-start.md §2.1.8`, CẤM chép logic tick** (B1 canonical). Nhãn `/tiep` = **nhãn-phiên MỚI** (label-convention §2.1.8) ⇒ tick fire NGAY cửa vào, OVERDUE @9 hiện tại đây thay vì đợi cuối phiên.
- **Dòng-nợ (SAU tick — n-3):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` in dòng-nợ 4-vế (vế-1 nhịp-kiểm đọc post-tick). 🔴 **probe KHÔNG chặn điểm dừng**: lỗi → in `probe-loi (khong chan)` → đi tiếp.
> 🔗 **Predicate C7 đầy-đủ (probe đượ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** (chép 2 nơi = 2 nguồn sự-thật, đúng thứ B1 sinh ra để chặn).
## 2.6 Đọc context-map phiên-LOGIC + ghi biên-nhận `resume-*` (S146 — cặp với `/pause` bước 2.6)
- **Đọc:** nếu có `.claude/sessions/session-<N>/` → đọc **TẤT CẢ** `pause-*.md` theo thứ-tự thời-gian = **bối-cảnh cộng-dồn** của phiên-logic (quyết-định đã chốt · delta còn sống · con-trỏ run/commit). 🔴 **Đây là lane CỘNG-DỒN, khác WAL** — WAL là sổ **mạch-sống ghi-đè ≤40 dòng** (liếc-một-cái-là-biết); context-map là **tích-luỹ, không ghi đè**. Đọc context-map **KHÔNG** thay việc chạy `verify:` — ground-truth vẫn thắng (§3).
- **Ghi biên-nhận — 🔴 THỰC-HIỆN SAU §3** (đọc ở đây, ghi sau khi reconcile xong; **bắt buộc**): tạo `.claude/sessions/session-<N>/resume-S<nn>-<yyyyMMddTHHmm>.md`**1 khối ngắn**: nối từ `pause-*` nào · lệch gì so `chain:` (nếu có) · `next:` đang thực-thi.
- 🔴 **Vì sao bắt buộc:** biên-nhận này là **đối-ứng cân-sổ** của tín-hiệu **ORPHAN-L ⑤** (§0). Thiếu nó ⇒ sổ lệch ⇒ lần sau **KÊU** ⇒ hỏi lại anh. Hỏng về phía *hỏi thừa* = an-toàn; nhưng ghi đủ thì sàn mới **im đúng**.
- 🔸 `session-<N>` **KHÔNG mở mới ở `/tiep`**`/tiep` **nối** phiên-logic đang mở. Mở `<N>` mới = việc của `/session-start` (xem `session-start.md` BƯỚC 0.8).
## 3. Ground-truth thắng WAL
- **LỆCH** (kết-quả `verify:` / `git status` mâu-thuẫn `chain:`) → **TIN GROUND-TRUTH**: sửa WAL cho khớp thực-tế, **báo chỗ lệch** cho user, RỒI MỚI chạy tiếp. KHÔNG mù-quáng chạy theo chain sai.