[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
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:
@ -2,7 +2,12 @@
|
||||
|
||||
> **Tiering rule (S40):** giữ **2-3 session gần nhất**. Cũ hơn → `docs/changelog/sessions/`. Full brief history pre-S40 → `docs/_archive/HANDOFF-preS40-fullhistory.md`.
|
||||
|
||||
**Last updated:** 2026-07-22 (S141–S143 — **Wave adap đợt-9/10 ĐÓNG TRỌN (7 thư) + closeout OUTWARD đã push `2757e41`/`3f4310f` — governance-only: 0 prod-code/0 mig, test 528 giữ, bundle FROZEN. Roster 14→17.** S141 vòng-1 `wf_3e1ade40-704` CHẾT giữa chừng → reconcile-từ-ĐĨA + đóng orphan partial-honest 5/13; S142 vòng-2 CẮT-GỌT `wf_1e936b16-30c` 2/2 lane 0-garble land trio `harness-{eval,refine,audit}` + contract-v2 ①a + stamp-decode + annex phép-8 + sweep 13 site; **S143 `/tiep` closeout OUTWARD anh gật**: adap-report 7/7 · email hub `6c94873f72e0` selftest exit 0 · STAGE-2 0-pending cross-check 2 chiều · squash K=8 push 0-`wal:`-lọt (12==12) · vá skill-matrix 15→17 · **+vế-4 `pull-cach`** cho `nhip-no-probe` (fault-inject 7 ca 2 chiều). **Contract v2 chạy runtime LẦN ĐẦU** — và trong CÙNG phiên chạy **cả 2 nhánh lành**: `OK-reachable` (tick 16→17) rồi `squash-benign` (sau closeout). 🔴 **Nấc = `executed-file/verified-pending-restart` — trio CHƯA spawn lần nào.** **Vòng audit anh gật "làm hết": `reviewer` FAIL 1C/4M/4m/1nit + `lead-view` 3 FLAG + `lead-omission` 3 FLAG/3 INFORM → lead re-đo độc-lập từng cái, vá 9/9.** CRITICAL = **E-012/AS-16 `bằng-chứng-tự-huỷ-sau-squash`**: 7 report + email neo sha `wal:` chưa-push, squash phá đúng sha đó ⇒ re-anchor `2757e41` + **errata `e43484cef10f`** gửi hub. Kèm: "TRIPLE" chọn enum DỄ (2 site liệt-kê-TÊN lọt AC4 grep-theo-SỐ) · `TOTAL 46 "==baseline"` sai (ghi=45, live=47) · 4 site khai "NO Write/Edit" như cơ-chế chặn → sửa (nay có **nhân-chứng first-person**: `reviewer` frontmatter 0 Write/Edit mà **đã Write+Edit thật**; **9 vai** không phải 6). **3/3 sub garble #53** cả 3 resume, 0 mất dữ-liệu nhờ ghi-đĩa (sổ đếm ×20/S118 → **×23/S143**). `flag_classes` **10→11** (+`gap-incident-unrecorded` anh duyệt). Test **528 kế-thừa** (0 file `src/`·`fe-*`·`tests/` bị đụng cả 5 commit — verify bằng diff, KHÔNG khai từ trí-nhớ), bundle FROZEN. 5 commit: `2757e41`·`3f4310f`·`36cefcc`·`39cc060`·`c4903dd`.)
|
||||
**Last updated:** 2026-07-23 (**S146** — `/tiep` nối S145 → áp `spec-v2` 5 axis (A/C+E/D; B landed S145) → owner chốt **3 câu session-model** (scaffold idempotent · `closed.md` WIRE · V2 **auto**) + `session_ctx_kb=64` tường-minh. **LIVE-VERIFY hook 4-path PASS** (`da7ee8a`). **session-model chạy trọn vòng đầu tiên**: `pause-S146` → `resume-S146` → ORPHAN-L cân sổ. **H24 force-fire** (P=8): 2 vai + `h24-audit`, **cả 3 garble #53** — ghi-đĩa-sớm cứu được, ghi-muộn mất trắng. **7 FLAG** → vá hết + re-verify. Governance-only, 0 prod-code.)
|
||||
|
||||
**🆕 Carry MỚI S146 (6) — 🔴 gộp vào khối dưới ⇒ TỔNG 20, KHÔNG phải 14:** (15) `/snapshot` — lệnh **chụp-nhanh không-dừng** của hub floor (manifest `101e69d6` §1, lệnh thứ-3), SE **thiếu hẳn** `[carry:snapshot-cmd]` · (16) `_context` tầng **STOCK** + nén-thành-con-trỏ (SE mới có tầng *flow*) `[carry:context-stock]` — 🔸 đây là chỗ `session_ctx_kb=64` sẽ có **reader thật**, hết ghost-wire · (17) `/pause` **tự chạy 1 chụp-nhanh + nén** rồi mới dừng `[carry:pause-autosnap]` · (18) `/tiep` đọc **snapshot mới nhất** + phòng **cửa-sổ-sập** `[carry:tiep-window-crash]` · (19) **meld-forward** `.claude/sessions/` qua squash — **CHƯA ĐO** `[carry:meld-forward-unmeasured]` · (20) **bookend đủ 5/5 vòng?** — nay V1+V3 hai-đầu-thật · V2 auto-theo-nhịp · V4 on-signal · V5 liên-tục `[carry:bookend-5-5]`.
|
||||
> 🔴 **Vì sao phải nằm ở ĐÂY:** H24 `lead-omission-auditor` bắt @S146 — 6 mục này từng **tách đôi** giữa WAL `carry:` (5/6) và session-log (4/6), **không sổ nào đủ**; nguồn đủ chỉ ở `sessions/session-1/pause-S146-*.md` = **artifact theo-cửa-sổ, KHÔNG phải sổ backlog**. `/session-end §6.4` **reset WAL** ⇒ 2 mục sẽ **bốc hơi**. Và cả 6 **chưa có tag `[carry:*]`** nên detector H24-2 chỉ soi được 6/14 — nay đã gắn tag.
|
||||
|
||||
**Last updated (kỳ trước):** 2026-07-22 (S141–S143 — **Wave adap đợt-9/10 ĐÓNG TRỌN (7 thư) + closeout OUTWARD đã push `2757e41`/`3f4310f` — governance-only: 0 prod-code/0 mig, test 528 giữ, bundle FROZEN. Roster 14→17.** S141 vòng-1 `wf_3e1ade40-704` CHẾT giữa chừng → reconcile-từ-ĐĨA + đóng orphan partial-honest 5/13; S142 vòng-2 CẮT-GỌT `wf_1e936b16-30c` 2/2 lane 0-garble land trio `harness-{eval,refine,audit}` + contract-v2 ①a + stamp-decode + annex phép-8 + sweep 13 site; **S143 `/tiep` closeout OUTWARD anh gật**: adap-report 7/7 · email hub `6c94873f72e0` selftest exit 0 · STAGE-2 0-pending cross-check 2 chiều · squash K=8 push 0-`wal:`-lọt (12==12) · vá skill-matrix 15→17 · **+vế-4 `pull-cach`** cho `nhip-no-probe` (fault-inject 7 ca 2 chiều). **Contract v2 chạy runtime LẦN ĐẦU** — và trong CÙNG phiên chạy **cả 2 nhánh lành**: `OK-reachable` (tick 16→17) rồi `squash-benign` (sau closeout). 🔴 **Nấc = `executed-file/verified-pending-restart` — trio CHƯA spawn lần nào.** **Vòng audit anh gật "làm hết": `reviewer` FAIL 1C/4M/4m/1nit + `lead-view` 3 FLAG + `lead-omission` 3 FLAG/3 INFORM → lead re-đo độc-lập từng cái, vá 9/9.** CRITICAL = **E-012/AS-16 `bằng-chứng-tự-huỷ-sau-squash`**: 7 report + email neo sha `wal:` chưa-push, squash phá đúng sha đó ⇒ re-anchor `2757e41` + **errata `e43484cef10f`** gửi hub. Kèm: "TRIPLE" chọn enum DỄ (2 site liệt-kê-TÊN lọt AC4 grep-theo-SỐ) · `TOTAL 46 "==baseline"` sai (ghi=45, live=47) · 4 site khai "NO Write/Edit" như cơ-chế chặn → sửa (nay có **nhân-chứng first-person**: `reviewer` frontmatter 0 Write/Edit mà **đã Write+Edit thật**; **9 vai** không phải 6). **3/3 sub garble #53** cả 3 resume, 0 mất dữ-liệu nhờ ghi-đĩa (sổ đếm ×20/S118 → **×23/S143**). `flag_classes` **10→11** (+`gap-incident-unrecorded` anh duyệt). Test **528 kế-thừa** (0 file `src/`·`fe-*`·`tests/` bị đụng cả 5 commit — verify bằng diff, KHÔNG khai từ trí-nhớ), bundle FROZEN. 5 commit: `2757e41`·`3f4310f`·`36cefcc`·`39cc060`·`c4903dd`.)
|
||||
**Carry MỞ re-stamp (14):** (1) carry-age design-question `[carry:carry-age-vacuous]` — vacuous-GỐC đã chết @S140, anh xem đóng? (2) hook-vs-budget-cap — **S143 đo tươi: `investigator-codebase` 26.624B vượt soft-cap** (`l1_over_30kb=false`, chưa chạm trần auto-inject); probe đếm `tran-bo-nho 1 over-cap` `[carry:hook-vs-budget-cap]` (3) UAT S117 incognito `[carry:uat-s117]` (4) PE phân-quyền số-phiếu+user `[carry:pe-phanquyen]` (5) BVAAU `[carry:bvaau]` (6) quyết-định Bình/Lê `[carry:binh-le-decision]` (7) Trà/Bùi re-login `[carry:tra-bui-relogin]` (8) account trùng `[carry:account-trung]` (9) UAT freeze-NS S133 `[carry:uat-s133-budget-freeze]` (10) UAT lũy-kế tạm-tính S134 `[carry:uat-s134-luyke]` (11) 🆕 **tools-whitelist KHÔNG chặn ghi runtime** — 6 vai read-only bị append `Write/Edit`; cơ-chế CHƯA kiểm; đã báo hub §3(b), chờ hub xác nhận + anh quyết có hardening không `[carry:tools-whitelist-no-teeth]` (12) 🆕 **ngưỡng `pull_warn_days`** — vế-4 đang INFORM trần, em CỐ Ý không tự đặt số (quyền anh) `[carry:pull-warn-threshold]` (13) 🔁 **session-model adopt** — draft `docs/governance/session-model-se-draft.md`; (a) hub phát mẫu ✅ + (b) khuôn bộ-ba SUB ✅ **đã mở khoá trong wave này**, chỉ còn **(c) anh duyệt bảng VC-1/2/3**; CẤM wire trước (c) `[carry:session-model-adopt]` — 🔴 **carry này BỊ RƠI khỏi khối S143 bản đầu** (khai 13 trong khi đúng là 14; lead-omission-auditor bắt @S143 class `gap-carry-dropped`), nay trả về (14) chờ-HUB reply: `b9ef5ede` (session-model **5 câu**) + `6c94873f` (báo-nấc wave 9/10) + errata `[carry:hub-review-wave-1807]`. ✅ **ĐÓNG @S143 (1):** `[carry:dangling-head]` — hub APPROVE khuôn ①a (`58e28bae`), SE land contract v2 + chạy runtime 1 lần nhánh `OK-reachable`; 3 ca lịch-sử S127/S133/S139 reclassify đúng `squash-benign`.
|
||||
**🔴 NEXT anh (đánh số — trả lời bằng số):** (1) ⚑ **trio first-run** — cần anh **restart CLI** rồi gật, em chạy spawn-probe 3/3 TUẦN TỰ (đây là thứ duy nhất chặn nấc lên `verified-runtime`); (2) ⚑ ngưỡng `pull_warn_days` — đặt số hay giữ INFORM trần `[carry:pull-warn-threshold]`; (3) ⚑ tools-whitelist no-teeth — chờ hub xác nhận cơ-chế, anh có muốn em thử hardening (hook chặn sub-write path tracked) không `[carry:tools-whitelist-no-teeth]`; (4) UAT lũy-kế tạm-tính S134 `[carry:uat-s134-luyke]`; (5) UAT freeze-NS S133 `[carry:uat-s133-budget-freeze]`; (6) ⚑ D1 nháp-không-cộng-tiền — gật giữ hay đổi (1 predicate); (7) hook-vs-budget-cap — chốt hướng (S143: inv-cb 26.6K over-cap) `[carry:hook-vs-budget-cap]`; (8) session-model — duyệt bảng VC-1/2/3 `[carry:session-model-adopt]`; (9) close-sweep cụm 7-carry đồng-tuổi S117/S118; **⬇️ 3 mục dưới CHÌM từ `spec:68` suốt S141→S143 (0 hit trên cả 4 bề mặt owner — `gap-decision-sunk` @S143), nay kéo lên:** (10) ⚑ **ratify ranh `refine ⟂ lead-omission`** — 🔴 ranh này **đã wire** vào `harness-refine.md:22-30` TRƯỚC khi được anh/hub ratify; anh gật giữ hay sửa ranh; (11) ⚑ **5 câu session-model** (mới mang 1/5 lên bảng): `session_ctx_kb`=64? · map N↔L + folder-form (`sessions/session-<N>` hub vs `S<nn>` SE) · VC từng dòng · hook 3→4-path? · prereq unblock — 🔴 `session_ctx_kb` **0 hit** mọi bề mặt dù em khai "❌ treo"; (12) ⚑ **consent-form trio dài hạn** — mỗi phiên gật hay thành luật đứng (hub `58e28bae` Câu-3 đá về SE, câu hỏi còn nguyên cho anh).
|
||||
**NEXT em (phiên kế):** 🔴 **KHÔNG watch `broadcasts/inbox` nữa** — inbox chỉ có thư ĐÃ kéo nên nó mù với thư chưa kéo (đúng lỗi S143); thay bằng **đọc vế-4 `pull-cach` trong dòng-nợ** rồi `/check-email` khi số tăng bất thường. Trio first-run ngay sau anh restart+gật; **H24 deep tới hạn** (S143 đã chạy sớm 1 nhịp theo direction anh — xem kết-quả trong log phiên); monthly combined audit **2026-08-01** (kèm full re-sync measured-block); MFE GOODHART-WARN strikes 21→23 theo dõi; nếu anh đổi D1 → predicate `ComputePendingAsync` + test C3 flip + deploy.
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,41 @@
|
||||
# S146 — 2026-07-22 · Áp spec-v2 + 3 owner-decision session-model + closed.md/auto
|
||||
|
||||
> Vào bằng `/tiep` nối S145 (không `/session-start`). Governance/config-only — **0 file prod-code, 0 migration**.
|
||||
> Lead: Opus 4.8 · HMW-mode ON · 1 lần `/pause` giữa closeout rồi `/tiep` chạy tiếp.
|
||||
|
||||
## Arc đã đóng
|
||||
|
||||
**1. Relaunch-cắt-gọt workflow chết giữa chừng.** `wf_f9f24694-12b` (S145) chết ở `/pause`, chỉ axis B landed. `/tiep §4` → bỏ hẳn run cũ (cross-session resume KHÔNG hợp-lệ) → `wf_3d803740-41d` 3 worker DISJOINT-file, **3/3 DONE** (511k tok, ~20′). Harvest-hồi-tố axis B bằng **đo đĩa**, không tin return đã mất.
|
||||
|
||||
**2. 🎯 LIVE-VERIFY hook 4-path trong repo THẬT.** Commit `da7ee8a` nuốt `.claude/sessions/session-1/probe.md`. Worker CE chỉ verify được **cây tạm** và **khai thật** không quan-sát được repo-thật từ subagent (hook ở `Stop`, không phải `SubagentStop`) ⇒ lead làm nốt. Khai đúng phạm-vi = lý do mảnh này không thành claim rỗng.
|
||||
|
||||
**3. Owner chốt 3 câu session-model** (`"1 và 2 → giống hub. 3 → auto."`):
|
||||
- **(1) scaffold IDEMPOTENT** — gỡ mâu-thuẫn thật giữa `session-start:88` ("CHỈ /session-start") và `pause:25` ("chưa có thì tạo"). Gốc lỗi = **gộp 2 khái-niệm**: nay tách **cấp SỐ** (độc-quyền `/session-start`) ⟂ **tạo THƯ-MỤC** (idempotent).
|
||||
- **(2) `closed.md`** = `_end` chốt-kết hub → `session-end §6.3-bis`, FROZEN 4 trường, idempotent NO-OP, **NO-OP im-lặng nếu 0 thư-mục** (cấm sổ rỗng giả). Khoá nốt vòng ORPHAN-L.
|
||||
- **(3) V2 "auto"** — gỡ **cổng NGƯỜI** ở 3 chỗ, **GIỮ cổng NHỊP** `6/15/3`. Khai rõ vào doc: *"auto = bỏ HỎI, không phải bỏ ĐẾM"* ⇒ **chưa** phải bookend-hub.
|
||||
|
||||
**4. `session_ctx_kb = 64`** (owner lật từ "để trống"). Kèm `_owner_set` + **GIỮ caveat ghost-wire** (0 script đọc khoá). Có số ≠ có hành-vi.
|
||||
|
||||
**5. Cơ-chế session-model chạy THẬT lần đầu, end-to-end.** `session-1/pause-S146-*.md` (context-block đầu tiên) → `/tiep` → `resume-S146-*.md` → **ORPHAN-L cân sổ, im đúng**. Tín-hiệu **⑤ fire lần đầu và fire ĐÚNG** — không vacuous.
|
||||
|
||||
## 🔴 3 lỗi của LEAD trong phiên (ghi để không tái)
|
||||
|
||||
**(a) Phép quét cardinality sửa 4 LẦN trong 1 phiên:** quá rộng (nuốt câu đúng `session-end.md:162`) → quá hẹp (**lọt 4 ca thật**, reviewer F2 bắt, gồm chính F1) → rộng lại (kéo 3 miền khác) → chốt.
|
||||
🔴 Cả 4 đều vì **cố mã-hoá ý-định NGỮ-NGHĨA vào một regex khôn**. Nấc đúng = **lưới-soát-cho-người + allowlist CÓ TÊN + `use ⟂ mention` (🧊)**. Lần 4 = **citation-trap** (bộ dò bắt chính nốt-vá vì nốt vá trích giá-trị cũ); giới-hạn kèm: 🧊 lọc theo **DÒNG** ⇒ **mega-line cấm dùng 🧊**.
|
||||
|
||||
**(b) Trả lời SAI về `/snapshot`.** Lead nói *"không có, bẫy tên gọi"* — kết-luận từ đĩa SE mà **không mở manifest hub**. Thực tế `101e69d6 §1` liệt **3 lệnh**, lệnh thứ-3 = **chụp-nhanh không-dừng**, là **floor thật**. Đã đính-chính.
|
||||
|
||||
**(c) F1 residual có người chỉ tận nơi mà vẫn rơi.** Worker CE liệt đúng 2 dòng `hook-3-path` trong sub-file, gắn nhãn "cần → 4, worker-3 sở-hữu"; worker D không vá; lead cũng không bắt vì (a). Reviewer bắt.
|
||||
|
||||
## Số đo
|
||||
- detector **TOTAL 47** · counter **20** (tick @`/tiep`; `/pause` + `/tiep` sau đều **NO-OP đúng OR-guard** — chặn bẫy +2/chu-kỳ **2 lần** trong 1 phiên)
|
||||
- `NHIP-NO: kiem light 3/6 deep 3/15 ok | tran-bo-nho 1 over-cap | run-chua-gom 0 | pull-cach 0 ngay`
|
||||
- orphan run-folder **3 → 0** (retro-harvest 2 folder S144 + implement-synthesis S145)
|
||||
- `wf: hmw-implement-spec-v2-relaunch run=.claude/workflows/runs/2026-07-22-S145-apply-hub-answers runId=wf_3d803740-41d done=3/3 harvested=yes`
|
||||
|
||||
## Còn treo (carry)
|
||||
1. `/snapshot` — lệnh chụp-nhanh không-dừng (hub floor) — **chưa dựng**
|
||||
2. `_context` tầng **STOCK** + nén-thành-con-trỏ — SE mới có tầng *flow*
|
||||
3. Bookend đủ **5/5** vòng? — đo được: V1+V3 = 2 đầu thật · V2 auto-khi-tới-nhịp · V4 on-signal · V5 liên-tục
|
||||
4. **Meld-forward** `.claude/sessions/` qua squash — **CHƯA ĐO**
|
||||
5. 14 carry cũ ở `docs/HANDOFF.md`
|
||||
@ -84,6 +84,24 @@ Detect by **action-signature** (NOT "AI tự phán có vi phạm không"). Scan
|
||||
|
||||
> Format: `E-NNN | date | rule | what | 5-why root | fix (prod-bug = 2-fix: code + guard) | prevention | tags[TYPE/ACTOR/COMPONENT]`
|
||||
|
||||
### E-014 — AS-18 slot-index tái-dụng làm MẤT owner-decision không để lại vết (S146, H24 `lead-omission-auditor` bắt, lead verify bằng `git show`)
|
||||
- **rule (AS-18 NEW):** khối đánh số (`OWNER-DECISION [n]`, checklist, enum…) **CHỈ ĐƯỢC TĂNG index**. **CẤM tái-dụng số cũ cho nội-dung mới.** Đè slot = nội-dung cũ **biến mất im-lặng** — khác hẳn đổi giá-trị (còn thấy giá-trị cũ để grep).
|
||||
- **what:** owner @S146 nói *"còn lại xử lý hết xong rồi session-end nhé"*; lead ghi ĐÚNG vào `.claude/WAL.md:9` slot `[7]` = **uỷ-quyền commit+push** (`ad02483`, `9c68bae`). Sau đó lead thêm 3 quyết-định session-model và **tái-dụng slot `[7]`** ⇒ `e7d06f2` mất hẳn dòng cũ. Grep toàn repo = **0 hit**.
|
||||
- **hệ-quả THẬT (không phải lý-thuyết):** lead hỏi lại *"cho push chưa"* **3 lượt liền** — hỏi lại đúng thứ owner ĐÃ trả lời, và hỏi ngay dưới khối tự đặt tên **"ghi đè, KHÔNG hỏi lại"**. Lead làm **ngược** chính luật mình viết.
|
||||
- **5-why:** (1) lead thêm mục mới vào khối có sẵn → (2) chọn số kế-tiếp *theo cảm-giác* thay vì đọc số lớn nhất đang dùng → (3) `[7]` trông "trống" vì lead nhớ khối chỉ tới `[6]` → (4) WAL **ghi-đè toàn-file** nên không có diff-review từng dòng như commit thường → (5) **máy MÙ hoàn-toàn**: không detector nào biết `[7]` từng là thứ khác.
|
||||
- **fix:** khôi phục `[7]` (nguồn `git show ad02483:.claude/WAL.md:9`) + đẩy session-model xuống `[8]` + ghi luật **SLOT-INDEX CHỈ-TĂNG** ngay tiêu-đề khối.
|
||||
- **prevention/guard:** vai H24 soi **CÁI THIẾU** = catch-layer **DUY NHẤT** cho lớp này (H24 §2(1) *"máy MÙ gần như hoàn toàn"*). 🔴 Nhắc: WAL ghi-đè ⇒ **mọi mất-mát trong WAL đều im lặng** ⇒ đối-chứng phải là `git show <sha>:.claude/WAL.md`.
|
||||
- **tags:** [slot-reuse / lead / WAL.md · owner-decision · gap-owner-specifics · class_repeat 2→3 CHẠM jump]
|
||||
|
||||
### E-013 — AS-17 sự-cố KHÔNG vào sổ bền + phép trích-xuất hỏng đọc thành "sạch" (S146, cụm 2 lỗi cùng lớp *"vắng mặt trông giống ổn"*)
|
||||
- **rule (AS-17 NEW):** (a) sự-cố chỉ có vết trong **run-folder** = **CHƯA vào sổ**; phải đổ vào ≥1 **sổ bền** (error-ledger / STATUS / HANDOFF / auto-memory). (b) phép trích-xuất trả **RỖNG** phải phân-biệt *"không có gì"* ⟂ *"phép đo hỏng"* — **CẤM đọc rỗng thành sạch**.
|
||||
- **what (a):** garble `#53` THẬT trên `harness-audit` @S144 (`trio-synthesis.md:20-21`) + lead thu-hẹp tập đối-chứng mà im-lặng (*"đối chứng 4 mốc: 0 LỆCH"* trong khi khối liệt **5**, mốc-5 chính là mốc lệch) ⇒ **0 hit** ở cả 5 sổ bền; sổ đếm `feedback_agent_return_garble_recover.md` dừng ở `×25 qua S143`. **S146 thêm 3 garble nữa** (lead-view · lead-omission · h24-audit — **3/3 vai lane-H24**).
|
||||
- **what (b):** lead vá 6 site consent theo danh-sách H24 liệt, **vá 5 sót 1** (`h24-audit.md:25` — câu tự mâu-thuẫn *"KHÔNG consent-gate … khi OVERDUE + anh consent"*). **Cơ-chế tái-dựng được:** lệnh trích `grep -oE '.{50}consent.{80}'` đòi **đúng 50 ký-tự TRƯỚC** match; trên dòng đó `consent` ở ~offset 30 ⇒ **0 match ⇒ output RỖNG** ⇒ lead đọc thành *"dòng này không có gì"*. Đúng phải là `.{0,60}`.
|
||||
- **5-why (b):** (1) vá theo danh-sách người khác liệt → (2) không tự grep lại sau khi vá → (3) dùng cửa-sổ ngữ-cảnh **cố-định** thay vì **0..n** → (4) rỗng **trông y hệt** sạch (khác `grep -c` trả `0` — một con SỐ, nhìn là biết đang đếm) → (5) `h24-audit` bắt được vì nó **đọc dòng đó trong chính persona nạp vào mình** + đối-chứng đĩa = 2 nguồn.
|
||||
- **fix:** vá `:25`; re-grep toàn file = 0; ghi cụm sự-cố vào chính entry này.
|
||||
- **prevention/guard:** 🔴 **Luật: vá xong PHẢI tự grep lại bằng lệnh KHÁC lệnh đã dùng để tìm** (khác mẫu, khác cửa-sổ). Họ hàng đã có trong sổ: `grep -c` (dòng) vs `grep -o|wc -l` (occurrence) — nay thêm **cửa-sổ-ngữ-cảnh-cố-định**.
|
||||
- **tags:** [incident-unrecorded + extraction-silent-empty / lead / error-ledger · h24-audit.md:25 · #53 ×3 S146]
|
||||
|
||||
### E-012 — AS-16 bằng-chứng-tự-huỷ-sau-squash: 7 adap-report + 1 email hub neo vào sha `wal:` chưa-push, closeout-squash phá đúng sha đó (S143, reviewer-gate độc-lập bắt SAU khi thư đã gửi)
|
||||
- **rule (AS-16 NEW):** artifact OUTWARD phải cite **commit SẼ SỐNG sau squash**, và phải qua `git status --porcelain` **TRƯỚC** khi stamp. Vi-phạm nền: `/adap-report` §3 *"evidence: commit-sha · file path · byte/dòng (đo THẬT)"* — đo thật nhưng **neo vào con-trỏ sắp chết**; và `/send-email` 6c selftest-stamp chỉ kiểm **hash khớp thân-thư**, KHÔNG kiểm **thân-thư có còn đúng sự-thật** lúc phát.
|
||||
- **what:** (1) 7 adap-report cite `1a0fa59`/`a458102`/`96ab2679`/`c3708e9`/`b1d92b9` (đều `wal:`-commit local). Closeout §5.0 `reset --soft HEAD~8` gộp chúng vào `2757e41` ⇒ cả 5 thành **dangling**: `cat-file -t` = `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1** ⇒ hub clone repo về `git show 1a0fa59` = **object missing**. Nội-dung nguyên vẹn trong `2757e41` ⇒ **chết con-trỏ, không chết việc**. (2) Cùng gốc: report + email khai `is-ancestor 96ab2679 HEAD = exit 0 → OK-reachable` làm bằng-chứng "contract v2 chạy runtime" — squash **cùng phiên** lật nó thành `exit 1`/`SQUASH-BENIGN` ⇒ **phép đo tự huỷ trong chính phiên phát-biểu nó**. (3) Biến-thể thứ ba: email `:47` khai *"vế pull-age **chưa làm**, chờ owner"* — owner gật ngay sau đó, lead làm, `scripts/nhip-no-probe.ps1` sửa **sau** khi thư đã stamp ⇒ bản đã-niêm khai sai hiện-trạng, và **không sửa được** (sửa = vỡ hash).
|
||||
|
||||
@ -342,7 +342,7 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio
|
||||
| `/fable-real <vai> <đề-bài>` | **lệnh-A** single top-model | 1 vai anh gán chạy 1 lần top-model THẬT (deep pass; Fable up → single-Fable · outage → single-Opus-1M/run) |
|
||||
| `/fable-clone <vai> <đề-bài>` | **lệnh-B** ensemble tier-2 | N lane đa-lăng-kính CÙNG 1 vai (`hmw.js parallel`) + em-main refute+synthesize |
|
||||
|
||||
- **(i) Vai owner-gán per-invocation:** `<vai>` ∈ **roster** (`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · **`lead-view-auditor` · `lead-omission-auditor`** ← +S121 W2, H24 · **`harness-eval` · `harness-refine` · `harness-audit`** ← +S141, bộ-ba đồng-kiểm memory). 🔴 Danh-sách này là **BẢN SAO** — nguồn thật = `hmw.js` VALID_ROLES (khối hằng-số `VALID_ROLES`, tra bằng tên **KHÔNG bằng số dòng** — [n6] line-range cũ `:22-36` đã lệch khi enum dài thêm); lệch ⇒ **tin `hmw.js`**. Số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents (B1). Thiếu/sai vai → **em-main hỏi anh 1 dòng**, KHÔNG tự đoán. Hiệu-lực CHỈ lượt đó (không marker, không sticky-mode). ✅ **VALID_ROLES = ĐỦ roster:** 2 monitor H1/H2 bổ sung S110 anh-directed (10→12) → +2 monitor H24 S121 W2 (12→14) → **+3 trio-memory S141 (14→17)** — lệnh-B trọn roster. 🔴 Số canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, **KHÔNG chép số ở đây**. *(🧊 limitation cũ "2 monitor ∉ 10-vai → fail-soft default-subagent" + H6-design "monitor ngoài workflow" superseded điểm này; monitor vẫn INFORM-only, lane RETURN-only.)*
|
||||
- **(i) Vai owner-gán per-invocation:** `<vai>` ∈ **roster** (`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · **`lead-view-auditor` · `lead-omission-auditor`** ← +S121 W2, H24 · **`harness-eval` · `harness-refine` · `harness-audit`** ← +S141, bộ-ba đồng-kiểm memory · **`tooling-harvest-audit` · `h24-audit` · `sleep-audit`** ← +S145, round-KIỂM ×3 [tooling-harvest · soi-lead · nén-ngủ]). 🔴 Danh-sách này là **BẢN SAO** — nguồn thật = `hmw.js` VALID_ROLES (khối hằng-số `VALID_ROLES`, tra bằng tên **KHÔNG bằng số dòng** — [n6] line-range cũ `:22-36` đã lệch khi enum dài thêm); lệch ⇒ **tin `hmw.js`**. Số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents (B1). Thiếu/sai vai → **em-main hỏi anh 1 dòng**, KHÔNG tự đoán. Hiệu-lực CHỈ lượt đó (không marker, không sticky-mode). ✅ **VALID_ROLES = ĐỦ roster:** 2 monitor H1/H2 bổ sung S110 anh-directed (10→12) → +2 monitor H24 S121 W2 (12→14) → **+3 trio-memory S141 (14→17)** → **+3 round-KIỂM `tooling-harvest-audit`/`h24-audit`/`sleep-audit` S145 (17→20)** — lệnh-B trọn roster. 🔴 Số canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, **KHÔNG chép số ở đây**. *(🧊 limitation cũ "2 monitor ∉ 10-vai → fail-soft default-subagent" + H6-design "monitor ngoài workflow" superseded điểm này; monitor vẫn INFORM-only, lane RETURN-only.)*
|
||||
- **(ii) Spec-file pipeline (mỗi run engine-đắt PHẢI sinh):** `.claude/workflows/runs/<run-id>/spec-<tên-tính-năng>-<dd-mm-yyyy>.md` — 3-heading CỐ-ĐỊNH: **[1] Tính-năng/đề-bài** (1–3 câu) · **[2] Cách implement** (bước + quyết-định + ràng-buộc + đường-chết) · **[3] Checklist** (vai + deliverable + acceptance đo được). Luồng: engine **propose-only** → lead **verify** → **LEAD ghi** (single-writer) → worker **Opus MAX** thực-thi THEO spec bơm qua `args` (`hmw.js` KHÔNG đọc file spec).
|
||||
- **(iii) 4 ghi-chú trung-thực (🔴 phải hiện-diện — nấc owner-gated, KHÔNG code-enforced §X8):**
|
||||
- **(a)** owner-gated tầng LỆNH + kỷ-luật lead cho việc CHỌN/ELEVATE vai, **KHÔNG code-enforced** — đường code `tier:'fable'` vẫn tồn-tại, hmw.js KHÔNG ép vai-nào-được-elevate. *(REC-3 2026-07-13: hmw.js GIỜ code-enforce vai-INVALID — typo ∉ VALID_ROLES → STOP-HARD throw; đó là guard typo, KHÁC gate vai-elevation vẫn là discipline.)* Bảo-đảm elevation = MỌI đường truy về lượt owner-gõ (kỷ-luật), không phải guard chặn.
|
||||
@ -403,13 +403,23 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio
|
||||
> Adopt S111 (2026-07-12) từ broadcast `2026-07-11-Governance-harness-22-wal-session-continuity` (body-sha `3de0758a` verified; ≙ AI_INFRA CANONICAL §I4 + §H1). Giải: phiên chết giữa mạch việc (limit/crash/tắt-máy/đổi-acc/chết-giữa-workflow) → mất trí-nhớ chưa-ghi + đốt-lại token. **"WAL" ở đây = sổ-liên-tục-phiên** — KHÁC "WAL RUN-LEDGER hai-nhịp" đã retired H18-B (trùng chữ, khác cơ-chế; alias-map awareness).
|
||||
|
||||
- **N.1 Sổ WAL (🔴):** `.claude/WAL.md` **≤40 dòng, ghi-đè toàn-file KHÔNG append**; `chain:` mục `[x]/[!]/[ ]` **KÈM bằng-chứng lệnh** (không mô-tả suông) + `next:` đúng 1 mệnh-lệnh + `verify:` ≥1 lệnh CHẠY ĐƯỢC, chạy TRƯỚC next — **ground-truth thắng WAL** (lệch → sửa WAL cho khớp thực-tế rồi mới đi). **CẤM secret** (file được commit). Template rỗng → `session-end §6.4`.
|
||||
- **N.2 Hai tầng ghi (🔴):** tầng NỘI-DUNG = **lead single-writer** (D9-consistent), ghi lại sau MỖI subtask đổi trạng-thái (kể cả lúc phóng + thu workflow-run). Tầng PERSIST = **Stop-hook `.claude/hooks/wal-flush.ps1`** deterministic (PS1 — chọn path-independent vì PATH-order bash 2-context Windows ngược nhau, lead-verified S111): hook **ĐƯỢC làm đúng 2 việc** = `git add` per-path 3 path cố định {`.claude/WAL.md` · `.claude/agent-memory/` · `.claude/workflows/runs/`} + commit CAND-only message `wal: flush <ts>`; hook **KHÔNG-ĐƯỢC** = sinh/sửa nội-dung · push · block-stop · đụng path ngoài list · exit≠0 (fail-open MỌI nhánh). Per-path add + CAND chống bẫy all-or-nothing đa-pathspec (bài học test-proven nguồn).
|
||||
- **N.3 Trạng-thái hook = ✅ VERIFIED-RUNTIME S111 CÙNG PHIÊN (nâng từ STAGED-until-verified — chống ghost-wire S100 bằng bằng-chứng THẬT):** hooks-entry `.claude/settings.json` ghi S111 → Stop-hook **HOT-RELOAD + FIRE ngay giữa phiên** (KHÔNG cần restart): commit **`12071c5 "wal: flush 20260712T1105"`** chứa ĐÚNG 4 file thuộc 3 path cố định (WAL.md + diary invest + run.md + spec), CAND-commit chuẩn (settings.json/broadcasts/docs đứng NGOÀI — persist-only đúng thiết kế), 0 push. Giả-định honest-(c) nguồn "hook chỉ nạp lúc khởi-động phiên" → trên harness NÀY = hot-reload; ⚠️ **ENV-DEPENDENT** (data-point #2 sau skill-registry hot-reload S107/S111 — hub từng NGƯỢC kết quả, KHÔNG fleet-generalize; phiên MỚI vẫn re-check 1 lần trong pilot-checklist, không fire → thử schema phẳng). *(Nấc trước khi có bằng-chứng = STAGED-until-verified: CẤM claim "đang chạy" khi chưa thấy wal:-commit do hook sinh — nguyên tắc GIỮ cho mọi hook tương-lai.)*
|
||||
- **N.2 Hai tầng ghi (🔴):** tầng NỘI-DUNG = **lead single-writer** (D9-consistent), ghi lại sau MỖI subtask đổi trạng-thái (kể cả lúc phóng + thu workflow-run). Tầng PERSIST = **Stop-hook `.claude/hooks/wal-flush.ps1`** deterministic (PS1 — chọn path-independent vì PATH-order bash 2-context Windows ngược nhau, lead-verified S111): hook **ĐƯỢC làm đúng 2 việc** = `git add` per-path **4 path cố định** {`.claude/WAL.md` · `.claude/agent-memory/` · `.claude/workflows/runs/` · `.claude/sessions/`} + commit CAND-only message `wal: flush <ts>`; hook **KHÔNG-ĐƯỢC** = sinh/sửa nội-dung · push · block-stop · đụng path ngoài list · exit≠0 (fail-open MỌI nhánh). Per-path add + CAND chống bẫy all-or-nothing đa-pathspec (bài học test-proven nguồn). 🔄 **Cardinality 3→4 @S146** (thêm `.claude/sessions/` cho session-model per-pause context-map): con-số này là **LUẬT GỐC mà hook thi-hành** ⇒ mọi đổi cardinality phải **grep MỌI consumer cùng-commit** (hook `wal-flush.ps1` · Sàn-3 `/tiep §0` "điểm mù" · `.session-counter.json _why_this_path` "outside all …" · auto-memory H22) — sửa write-site mà sót read-site = vỡ chính floor recovery (lớp S87/S88). Bản-ghi LỊCH-SỬ (adap-report có ngày · diary vai · `WAL.md`) **KHÔNG rewrite** — chúng mô-tả trạng-thái lúc đó.
|
||||
- **N.3 Trạng-thái hook = ✅ VERIFIED-RUNTIME S111 CÙNG PHIÊN (nâng từ STAGED-until-verified — chống ghost-wire S100 bằng bằng-chứng THẬT):** hooks-entry `.claude/settings.json` ghi S111 → Stop-hook **HOT-RELOAD + FIRE ngay giữa phiên** (KHÔNG cần restart): commit **`12071c5 "wal: flush 20260712T1105"`** chứa ĐÚNG 4 file thuộc tập path cố định **lúc S111** (WAL.md + diary invest + run.md + spec — khi đó `.claude/sessions/` chưa tồn-tại; tập hiện-hành = N.2 bản 4-path @S146), CAND-commit chuẩn (settings.json/broadcasts/docs đứng NGOÀI — persist-only đúng thiết kế), 0 push. Giả-định honest-(c) nguồn "hook chỉ nạp lúc khởi-động phiên" → trên harness NÀY = hot-reload; ⚠️ **ENV-DEPENDENT** (data-point #2 sau skill-registry hot-reload S107/S111 — hub từng NGƯỢC kết quả, KHÔNG fleet-generalize; phiên MỚI vẫn re-check 1 lần trong pilot-checklist, không fire → thử schema phẳng). *(Nấc trước khi có bằng-chứng = STAGED-until-verified: CẤM claim "đang chạy" khi chưa thấy wal:-commit do hook sinh — nguyên tắc GIỮ cho mọi hook tương-lai.)*
|
||||
- **N.4 Một đường recovery (🔴):** `/pause` (chốt điểm dừng: flush-dirty → WAL-đúng-schema → commit đích-danh `wal: pause` TRƯỚC tuyên-bố an-toàn → DỪNG HẲN) + `/tiep` (đọc WAL → chạy TOÀN BỘ verify + `git status` + disk run-folder → lệch = tin ground-truth → thực-thi next; nhánh `wf:` = relaunch-cắt-gọt). **MỌI con-trỏ recovery trỏ về MỘT chỗ = `/tiep`** (kể cả anh gõ "làm tiếp" text thường); CẤM nạp lại transcript cũ. Delta session-cmd: `session-start BƯỚC 0.7` WAL-check (ngoại-lệ CHỜ duy-nhất, chỉ con-trỏ) · `session-end §5.0` squash `wal:`-trailing CHƯA-push (`origin/main..HEAD`, KHÔNG BAO GIỜ rewrite đã-push; squash-điểm = review-diff wal-paths, AS-10 backstop dời về đây không mất) · `§6.4` reset WAL = bước cuối.
|
||||
- **N.5 WAL-cho-workflow (🔴 sàn owner-nguồn):** run **≥3 task HOẶC ước >5 phút = BẮT BUỘC RUN-TRACE mode** (`args.run` — per-agent-file `sub-<role>-<i>.md`; chết giữa run còn vật-liệu trên đĩa); run.md +`## taskList snapshot` ghi TRƯỚC launch (spec đã on-disk per H21 — sàn {task-list · spec} đủ); dòng `wf:<mục-đích> run= runId= args= done=k/N harvested=` vào WAL NGAY SAU launch; **harvest-LIỀN** mỗi task xong (C4 per-turn ĐÃ CÓ — honest granularity: per-TURN ≠ per-TASK, `parallel()` trả cả batch cuối turn + Stop-hook cũng fire ở turn-boundary → chết GIỮA turn = returns mất, per-agent-file trên DISK là lớp cứu → `/tiep` đọc CẢ disk); `/tiep` nhánh wf: = **relaunch-ĐÃ-CẮT-GỌT** (grep run-id log-phiên = bằng-chứng đích-danh · harvest-hồi-tố partial-honest · relaunch CHỈ task còn lại · memory-pack **RE-DERIVE TƯƠI, CẤM snapshot**); resume-by-run-id = bonus **SAME-SESSION-ONLY** (CẤM claim cross-session). Trung-thực mất-mát tối-đa: agent song-song đang-chạy tại thời-điểm chết mất phần dở; run nhỏ ngoài diện WAL-hóa có thể mất cả run — rủi-ro chấp-nhận công-khai.
|
||||
- **N.6 Commit-convention exception:** commit `wal:` (hook-flush + `/pause` + WAL-reset) = **ngoại-lệ DUY-NHẤT** của format `[CLAUDE] <scope>` — máy sinh, KHÔNG Co-Authored-By, bị squash vào commit-chốt trước push (`rules.md §5.2` mirror).
|
||||
- **N.7 Honest (a)-(e) áp SE:** (a) **pilot CHƯA chạy đủ tại SE** — dựng + codify + **hook-FIRE-verified S111** (`12071c5`/`67be443`; script-RUN tay BỎ — bằng-chứng mạnh hơn thay thế + reviewer fault-inject 2-ca bịt nhánh 0-delta); kill-test / đổi-acc / squash-thật / pause-roundtrip-workflow = phiên mới + anh (HANDOFF pilot-checklist) · (b) SE **0 mark cấm-hook** (5 Active-High không đụng); engine CAVEAT "No-OS-hook" = MÔ-TẢ hiện-trạng đã honest-update ngoại-lệ đích-danh; E.3 chỉ cấm hook-làm-GATE — persist-only 0-content tương-thích; thứ-tự codify-trước-enable tôn trọng CÙNG-COMMIT S111 · (c) schema hooks nested = default, verify ở PHIÊN MỚI, không fire → thử flat · (d) resume-run-id cross-session CHƯA kiểm-chứng — đường chính = relaunch-cắt-gọt · (e) **repo SE TRONG Dropbox — 2 chiều:** risk `index.lock` khi cloud-sync đụng git (thấp-nhưng-có; hook fail-open tự-lành lượt sau) + bonus Dropbox sync cả `.git` → commit local CHƯA-push vẫn sống qua tắt-máy/đổi-máy → `/pause` không cần push vẫn durable.
|
||||
|
||||
- **N.8 Probe-tại-điểm-dừng — predicate 4-vế (🔴 FLOOR + 🟡 form) — LUẬT-HOME của C7 (hub-answer, adopt S146):** điểm dừng (`/pause` · `/tiep` · `session-start` · `session-end`) **KHÔNG chạy việc khác**, NHƯNG được phép gọi **probe** nếu script thoả **ĐỦ 4 vế** (thiếu 1 vế = KHÔNG phải probe, cấm gọi tại điểm dừng):
|
||||
- **(i) read-only** — chỉ ĐỌC (parse JSON/config · đo byte bằng `Get-Item` · liệt dir). 0 mutation, 0 network, 0 API-call.
|
||||
- **(ii) KHÔNG spawn con** — không Agent/Workflow/sub-vai, không `Start-Process`/job-nền/`Invoke-Expression`. Điểm dừng KHÔNG được đẻ việc mới (đó chính là cái C7 cấm).
|
||||
- **(iii) KHÔNG write** — không sinh/sửa/xoá file, không `git add|commit|push`, không đụng counter/memory/luật. Chạy 2 lần liên-tiếp phải cho cùng trạng-thái đĩa.
|
||||
- **(iv) lỗi → in `probe-loi (khong chan)` → ĐI TIẾP — 🔴 [LOAD-BEARING]:** MỌI nhánh `exit 0`; probe hỏng KHÔNG chặn, KHÔNG treo, KHÔNG làm `/pause` mất quyền tuyên-bố "an-toàn để thoát". Đây là vế biến probe từ *thêm-một-điểm-hỏng* thành *thêm-một-hiển-thị*.
|
||||
- **FLOOR (🔴 bất-biến — port-nguyên khi tailor, 3 tính-chất):** **read-only** · **non-blocking** (fail-open + no-hang + `exit 0` mọi nhánh) · **gỡ-được-không-hậu-quả** (xoá lời-gọi probe khỏi thân command ⇒ mất HIỂN-THỊ, KHÔNG mất state, KHÔNG đổi nhánh quyết-định nào — đây là **phép thử phân-biệt probe ⟂ gate**; nếu gỡ đi mà hành-vi đổi thì nó là gate, thuộc §E.3, không thuộc N.8).
|
||||
- **FORM (🟡 tailor được):** wording token in ra (`probe-loi (khong chan)` — ASCII-only theo gotcha #30) · số vế / chuỗi định-dạng dòng-nợ · vị-trí gọi trong thân command · **interpreter = em-main đọc dòng in** (KHÔNG phải OS-gate; exit-code không cưỡng-chế gì — nhất-quán CAVEAT No-OS-hook).
|
||||
- **Reword tập-cấm (🔴 KHÔNG phải cấm-tất):** luật "điểm dừng không chạy thứ khác" đọc đúng = **cấm ĐẮT / cấm side-effect** (spawn vai · audit-rerun · đo lại instrument · ghi memory/luật · push) — **CHO PHÉP probe read-only non-blocking theo N.8**. Command chỉ **TRỎ** `engine §N.8`, **CẤM chép predicate sang 2 nơi** (B1 derived-trỏ-canonical; predicate đổi 1 chỗ, consumer không drift).
|
||||
- **Trạng-thái đo S146 (fault-inject 2-chiều, `timeout 60` bọc để quan-sát no-hang):** `scripts/nhip-no-probe.ps1` = ✅ **thoả cả 4 vế** (lành → 1 dòng `NHIP-NO: …` đầy-đủ, exit 0 · `-RepoRoot` bậy → `probe-loi (khong chan)`, exit 0, không treo; catch tổng `:203-208`). `scripts/distill-shard-probe.ps1` = thoả (i)(ii)(iii) + no-hang, **(iv) mới NỬA**: nhánh có-xử (thiếu `memory-budget.json` `:23` · thiếu key `distill_trigger` `:27`) in token + `exit 0`, nhưng **không có try/catch tổng** với `$ErrorActionPreference='Stop'` `:17` ⇒ exception (vd `-RepoRoot` bậy tại `Resolve-Path` `:18`, hoặc JSON hỏng tại `ConvertFrom-Json` `:25`) thoát ra stderr + **exit 1**, KHÔNG in token ⇒ **FLOOR đủ (read-only · non-blocking-thực-tế · gỡ-được) / FORM thiếu**. Vá = bọc try/catch tổng → `probe-loi (khong chan)` + `exit 0` (thuộc chủ-file script, KHÔNG tự sửa trong lượt này).
|
||||
|
||||
**Honest nấc §N:** mechanized-THẬT = hook-script deterministic (persist) + template + acceptance grep; convention = lead ghi nội-dung WAL sau mỗi subtask (kỷ-luật, không công-cụ-ép) + squash/reset trong thân session-end do em-main kích. Dogfood S111 = tầng nội-dung (WAL-chain thật trong phiên adopt) + script-RUN tay; hook-FIRE + full-pilot = nấc kế.
|
||||
|
||||
---
|
||||
|
||||
@ -1,6 +1,11 @@
|
||||
# Session-model SE — bản nháp thiết kế (DRAFT v0, chưa wire)
|
||||
# Session-model SE — bản nháp thiết kế (DRAFT v0.1 — HẠ-TẦNG đã wire, NGHI-THỨC chưa chuyển)
|
||||
|
||||
> **Trạng thái: ĐỀ XUẤT — chưa wire bất kỳ cơ chế nào.** Sinh @S140 (2026-07-18) theo direction owner: *"đóng đủ 5 vòng → chạy theo cách mới session-model mà AI_INFRA đã làm rất tốt → owner tập trung 100% product, làm việc xuyên session"*. Nguồn khuôn: broadcast `9234a7aa` (session-logic tách session vật-lý — SE nấc `agreed`) + checklist năm vòng `f71c5b65`. Theo chỉ đạo đồng-bộ cross-project của owner (S139: *"mọi project một khuôn, anh + hub cùng audit, hub review trước khi thành chuẩn"*), bản này là **input cho hub review**, không phải chuẩn tự-phong.
|
||||
> 🔄 **CẬP-NHẬT TRẠNG-THÁI @S146 (2026-07-22) — câu "chưa wire bất kỳ cơ chế nào" của v0 KHÔNG còn đúng, sửa cho khớp đĩa:**
|
||||
> - ✅ **ĐÃ WIRE (hạ-tầng, an-toàn/additive):** hook path thứ-4 `.claude/sessions/` (`wal-flush.ps1:13`) · `/pause §2.6` ghi context-block cộng-dồn · `/tiep §2.6` đọc + ghi biên-nhận `resume-*` · Sàn-3 tín-hiệu MẠNH **⑤ + ORPHAN-L** · `/session-start` **BƯỚC 0.8** (form + regex + đo `.gitignore`).
|
||||
> - ⏳ **CHƯA — vẫn chờ anh duyệt bảng VC:** **0 nghi-thức** được chuyển sang per-L. Phase 1 READ · monitor re-report · H24 tick · detectors · closeout **VẪN per-cửa `S<nn>`**. 🧊 *(vế "`/session-end` chưa ghi `closed.md`" ĐÃ LỖI-THỜI — wire @S146 §6.3-bis; xem §4-bis. Việc `closed.md` được ghi **KHÔNG** đồng nghĩa nghi-thức đã chuyển per-L: nó chỉ **đóng sổ** phiên-logic, không đổi **đơn-vị** chạy nghi-thức.)*
|
||||
> - 🔴 **Đọc đúng:** hạ-tầng bật ≠ session-model bật. Cái đang chạy là **đường ống**, chưa phải **đổi đơn-vị nghi-thức**.
|
||||
>
|
||||
> **Trạng thái gốc (v0): ĐỀ XUẤT — chưa wire bất kỳ cơ chế nào.** Sinh @S140 (2026-07-18) theo direction owner: *"đóng đủ 5 vòng → chạy theo cách mới session-model mà AI_INFRA đã làm rất tốt → owner tập trung 100% product, làm việc xuyên session"*. Nguồn khuôn: broadcast `9234a7aa` (session-logic tách session vật-lý — SE nấc `agreed`) + checklist năm vòng `f71c5b65`. Theo chỉ đạo đồng-bộ cross-project của owner (S139: *"mọi project một khuôn, anh + hub cùng audit, hub review trước khi thành chuẩn"*), bản này là **input cho hub review**, không phải chuẩn tự-phong.
|
||||
|
||||
## 1. Đích đến (theo broadcast `9234a7aa` §2)
|
||||
|
||||
@ -10,7 +15,7 @@ Một **phiên-LOGIC** = khởi-động nặng MỘT lần (`/session-start` —
|
||||
|
||||
| Thành phần session-model | Cơ chế SE hiện hành | Trạng thái |
|
||||
|---|---|---|
|
||||
| Điểm dừng chủ-động | `/pause` + `.claude/WAL.md` (≤40 dòng, ghi-đè) + Stop-hook `wal-flush.ps1` persist 3-path | VERIFIED-RUNTIME S111, dùng dày từ S133 |
|
||||
| Điểm dừng chủ-động | `/pause` + `.claude/WAL.md` (≤40 dòng, ghi-đè) + Stop-hook `wal-flush.ps1` persist **4-path** (+`.claude/sessions/` @S146) | VERIFIED-RUNTIME S111; path thứ-4 verify 2-chiều trên cây tạm @S146 |
|
||||
| Nối lại từ đĩa | `/tiep` §0–§4 (Sàn-3 + ground-truth-thắng + relaunch-cắt-gọt) | chạy thật nhiều lần (S134/S137/S138…) |
|
||||
| Đếm nhịp không phụ thuộc cửa-sổ | counter content-addressed + OR-guard (head + session-label) | phép 7 PASS đo S137 |
|
||||
| Điều kiện nền 5 vòng | completeness-gate ĐẠT @S137 (5/5 vòng + 4/4 phép sàn); các khoản hở đang đóng @S140 | xem adap-report `f71c5b65` |
|
||||
@ -23,6 +28,9 @@ Một **phiên-LOGIC** = khởi-động nặng MỘT lần (`/session-start` —
|
||||
Luật hiện hành: *"mỗi conversation MỚI = một nhãn-phiên `S<nn>` MỚI, kể cả khi vào bằng `/tiep`"* — sinh ra để vá OR-guard NO-OP nhầm (phép-7 `+0`). Nếu đổi thẳng "S<nn> = phiên-logic giữ nhãn qua `/tiep`" thì session-clause của OR-guard khớp nhãn cũ → tick chết → đúng cái bẫy luật này vá.
|
||||
**Đề xuất v0 (ít rủi ro nhất): nhãn HAI TẦNG.** Giữ nguyên nhãn vật lý `S<nn>` per-conversation (mọi cơ chế tick/counter/H24/phép-đo GIỮ NGUYÊN đơn vị, zero regression) + **thêm** trường `logic: L<mm>` (mở tại `/session-start`, đóng tại `/session-end`, sống trong WAL + session-record). Phiên-logic = **tập các S<nn>** giữa hai đầu nặng. Cách đọc "phiên" trong nghi thức = đọc theo L khi nghi thức thuộc nhóm 2-đầu-nặng, theo S khi thuộc nhóm per-cửa.
|
||||
|
||||
🔴 **Siết @S146 (chống đẻ bộ đếm thứ hai):** `L<mm>` và thư-mục `.claude/sessions/session-<N>/` dùng **CÙNG MỘT con số** (`mm ≡ N`) — hai **cách viết** của một ID, **KHÔNG phải hai bộ đếm**. Hai counter cho một khái niệm = drift được bảo-đảm; đây là cùng class với `pause↔tiep` cân-sổ. ⇒ **`<N>` là con số duy-nhất**; `L<N>` chỉ là dạng viết trong WAL/nhãn.
|
||||
🟢 **Vì sao 2 tầng vẫn an-toàn cho tick:** OR-guard của counter khớp trên **`S<nn>`**, mà `S<nn>` **không đổi ngữ-nghĩa** ⇒ label-convention S135 (*"conversation mới = nhãn `S<nn>` mới, kể cả vào bằng `/tiep`"*) **còn nguyên hiệu-lực**, phép-7 không về `+0`. Nhãn `L<N>` **KHÔNG được** dùng ở bất-kỳ guard/counter nào.
|
||||
|
||||
### VC-2 — Nghi thức nào chạy per-CỬA, nghi thức nào per-PHIÊN-LOGIC
|
||||
Đề xuất phân loại (bảng để anh + hub duyệt từng dòng):
|
||||
|
||||
@ -40,7 +48,12 @@ Luật hiện hành: *"mỗi conversation MỚI = một nhãn-phiên `S<nn>` M
|
||||
|
||||
### VC-3 — WAL ghi-đè ≤40 dòng vs "tệp ngữ-cảnh cộng-dồn"
|
||||
Hub §2 mô tả điểm dừng ghi delta vào **"một tệp ngữ-cảnh cộng-dồn của phiên"**. WAL SE là sổ mạch-sống **ghi-đè** (giữ nhỏ có chủ đích — detector C5 cap 40 dòng). Hai vai KHÁC nhau, không nên nhập một.
|
||||
**Đề xuất v0:** GIỮ WAL nguyên vai (mạch-sống hiện tại, ghi-đè) + **thêm** `.claude/logic-sessions/L<mm>.md` (tệp cộng-dồn per-phiên-logic, append 1 khối mỗi `/pause`: quyết-định-đã-chốt trong cửa đó · delta-còn-sống · con-trỏ run/commit). `/tiep` đọc WAL (mạch) + tệp L (bối cảnh tích lũy) — vẫn KHÔNG nạp lại read-set nặng. `/session-end` đọc tệp L làm nguồn gom-bài-học rồi đóng nó (frozen).
|
||||
**Đề xuất v0 — ⚠️ ĐÃ SỬA @S146, form cũ `.claude/logic-sessions/L<mm>.md` là STALE:** GIỮ WAL nguyên vai (mạch-sống, ghi-đè, ≤40 dòng) + **thêm thư-mục cộng-dồn theo HUB-FORM** `.claude/sessions/session-<N>/` (**KHÔNG** phải một-tệp-per-phiên):
|
||||
- `/pause` **append MỘT FILE MỚI** mỗi cửa: `pause-S<nn>-<yyyyMMddTHHmm>.md`, **3 trường** = quyết-định-đã-chốt trong cửa đó · delta-còn-sống · con-trỏ run/commit. **CẤM ghi đè.** (wired: `pause.md §2.6`)
|
||||
- `/tiep` **đọc TẤT CẢ** `pause-*.md` theo thứ-tự (bối-cảnh tích-luỹ) rồi **ghi biên-nhận** `resume-S<nn>-<ts>.md` — vẫn KHÔNG nạp lại read-set nặng. (wired: `tiep.md §2.6`)
|
||||
- `/session-end` đọc cả tập làm nguồn gom-bài-học rồi **đóng** (`closed.md`, frozen). ✅ **ĐÃ WIRE @S146** — `session-end.md` **§6.3-bis** (owner chốt "giống hub"). 🧊 *(nấc cũ tới S145: "chân này CHƯA wire, VC-2 còn chờ anh")*
|
||||
- **Cân-sổ:** `#pause-*` phải có đối-ứng `#resume-*` (hoặc `closed.md`); lệch ⇒ **ORPHAN-L** kêu ở Sàn-3 (`tiep.md §0` ⑤). Đây chính là câu trả lời cho rủi-ro "L mồ-côi" nêu ở §6.
|
||||
- **Vì sao đổi form:** hub-form thắng theo K4 (§4 dưới) — **thư-mục-per-phiên** chịu được N khối `/pause` mà không phải sửa-file-cũ, và khớp path thứ-4 của hook (`.claude/sessions/`).
|
||||
|
||||
## 4. Điều kiện tiên quyết (mapping 5 vòng — vì sao phải đóng trước)
|
||||
|
||||
@ -50,10 +63,38 @@ Theo `9234a7aa` §4: nối phiên qua nhiều cửa-sổ = tin trạng-thái tr
|
||||
- **(b) khuôn bộ-ba SUB — ✅ ĐÃ VỀ 2026-07-18:** `58e28bae` khối B (`broadcasts/inbox/2026-07-18-ai_infra-to-se-reply-tong-bo-ba-harness-sub-4-khoan.md`) → SE đã adopt trio @S141.
|
||||
- **(c) anh duyệt bảng VC-1/2/3 — ⏳ CHỜ ANH.** Đây là **điều-kiện CUỐI**, và giờ là điều-kiện duy nhất còn đứng chắn.
|
||||
|
||||
🔴 **Ba khoản MỚI lộ ra sau khi (a)(b) về — CHỜ ANH DUYỆT CÙNG BẢNG VC** (không tự quyết, không wire):
|
||||
1. **K4 form-conflict:** hub quy-ước thư-mục phiên là `.claude/sessions/session-<N>/` (manifest §"một thư mục quy-ước chung"), còn draft này ở VC-3 đề `.claude/logic-sessions/L<mm>.md`. Hai form khác nhau về **cả tên lẫn hình** (thư-mục-per-phiên vs một-tệp-per-phiên) — phải chốt một trước khi có bất kỳ đường ghi nào.
|
||||
2. **`session_ctx_kb`:** manifest ghi `session_ctx_kb: 64` (đơn vị KB, đọc code nhân 1024). SE chưa có khoá này, cũng chưa đo xem 64 có hợp không — mượn số của hub mà chưa đo là đúng thứ K6.2 cấm.
|
||||
3. **meld-forward-gap (hook 3→4 path):** hub dựa vào "meld-forward khi gộp sổ" để lịch-sử phiên-logic không rớt lúc squash. Nhưng Stop-hook SE (`.claude/hooks/wal-flush.ps1`) quét **đúng 3 path** (`.claude/WAL.md`, `.claude/agent-memory/`, `.claude/workflows/runs/`) — thư-mục phiên sẽ là path **thứ 4** và hiện KHÔNG được quét ⇒ nếu bật mà quên nới, dấu-mốc phiên không vào sổ và meld-forward chẳng có gì để nhập-tiến. Đây là khoản sửa-hook, tức chạm cơ-chế → dứt khoát chờ anh.
|
||||
🔴 **Ba khoản MỚI lộ ra sau khi (a)(b) về — trạng-thái ĐO LẠI @S146** *(v0 ghi cả 3 là "chờ anh, không wire"; nay **2 đã xử**, 1 vẫn là **quyền anh** — sửa cho khớp đĩa thay vì để câu cũ nói sai)*:
|
||||
> **Vì sao 2 khoản được xử mà KHÔNG phá luật "chờ anh":** khoản 1 (form) = anh **đã** override @S144 ⇒ chỉ là **ghi lại quyết-định của anh**, không phải tự quyết. Khoản 3 (hook) = **hạ-tầng additive** anh giao trong lượt này, và nó **bắt buộc atomic** với Sàn-3 ⑤ (nới path mà để sàn mù = tệ hơn không nới). Khoản 2 (số) = **quyền anh, giữ nguyên KHÔNG đụng**.
|
||||
1. ✅ **K4 form-conflict — CHỐT @S146 theo HUB-FORM.** Hub quy-ước `.claude/sessions/session-<N>/` (manifest §"một thư mục quy-ước chung"); draft VC-3 cũ đề `.claude/logic-sessions/L<mm>.md` ⇒ **VC-3 đã sửa theo hub-form** (xem §3 VC-3). Căn-cứ: owner override @S144 + `spec-apply-hub-s145-v2` §C.4. Lý-lẽ kỹ-thuật: thư-mục-per-phiên chịu N khối `/pause` **không phải sửa file cũ**, và trùng đúng path thứ-4 của hook. **Regex `^session-\d+$`**, `<N>` ≡ `L<N>` (một con số).
|
||||
2. ✅ **`session_ctx_kb` = 64 — OWNER CHỐT TƯỜNG-MINH @S146** (`memory-budget.json → session_ctx_kb`, kèm `_session_ctx_kb_owner_set`). Manifest hub ghi `64` (KB, code đọc **nhân 1024**) — số lấy từ manifest, KHÔNG phải SE tự đoán.
|
||||
🔸 **Lịch-sử quyết-định (giữ cả 2 nấc, không xoá nấc 1):** (a) tới @S146 SE **cố ý ĐỂ TRỐNG** — lead đo và từ-chối tự đặt vì **K6.2** (mượn số chưa-đo) + **H18 ghost-wire** (defined-but-unread). (b) Lead surface đủ 2 lý-do phản-biện cho anh; **anh chốt "tường minh"** ⇒ quyết-định có concern trong tầm nhìn ⇒ thực-thi, không hỏi lại. **Số = quyền anh** — đúng như chính dòng này đã hẹn trước.
|
||||
🔴 **CAVEAT CÒN NGUYÊN GIÁ-TRỊ:** đặt số **KHÔNG** biến nó thành wire. Đo @S146 vẫn: **0 script đọc khoá** (hit duy-nhất trong `scripts/` là **comment** `nhip-no-probe.ps1:42`). Đối-chứng sống: `pull_warn_days` **có** reader thật (`nhip-no-probe.ps1:190`). ⇒ vẫn là **ghost-wire cho tới khi có reader**; ai wire sau phải **đọc khoá** thay vì hardcode 64. **CẤM claim "đã hiệu-lực".**
|
||||
3. ✅ **meld-forward-gap (hook 3→4 path) — ĐÃ ĐÓNG @S146.** `wal-flush.ps1:13` nay quét **4 path** (`.claude/WAL.md` · `.claude/agent-memory/` · `.claude/workflows/runs/` · **`.claude/sessions/`**). Verify **2 chiều trên cây tạm** (`CLAUDE_PROJECT_DIR` inject): body-4-path ⇒ commit `wal: flush` **nuốt** `sessions/session-1/probe.md`; body-3-path (control) ⇒ **KHÔNG nuốt**, file ở lại `?? .claude/sessions/`; decoy `docs/` im cả 2 chiều (hook không nới quá list). ⇒ dấu-mốc phiên **vào sổ được**, meld-forward có vật để nhập-tiến. 🔴 **Đi kèm bắt buộc:** nới path = đẻ điểm mù ⇒ đã đẻ kèm tín-hiệu MẠNH **⑤ + ORPHAN-L** ở `tiep.md §0` **trong cùng lần sửa**.
|
||||
|
||||
## 4-bis. 🔴 OWNER-DECISION @S146 (2026-07-22) — 3 câu chốt + 1 gap MỚI lộ
|
||||
|
||||
> Lead surface 3 câu; anh trả **"1 và 2 → giống hub. 3 → auto."** Ghi lại **nguyên trạng**, kèm cái lead **đo được từ manifest** chứ không suy.
|
||||
|
||||
| # | Câu | Anh chốt | Đã land @S146 |
|
||||
|---|---|---|---|
|
||||
| 1 | Ai được tạo `session-<N>/` | **giống hub** | `session-start` BƯỚC 0.8 + `pause §2.6`: **scaffold IDEMPOTENT** — ai gặp trước thì tạo, đã có thì dùng lại, **cấm đè**. 🔴 Tách đôi khái-niệm: **cấp SỐ** = độc-quyền `/session-start` ⟂ **tạo THƯ-MỤC** = idempotent. Mâu-thuẫn cũ (`session-start:88` "CHỈ" vs `pause:25` "tạo nếu chưa có") sinh ra **vì gộp 2 khái-niệm vào 1 câu**. |
|
||||
| 2 | Wire `closed.md` | **giống hub** | `session-end` **§6.3-bis** — `_end` chốt-kết, FROZEN, 4 trường, **idempotent NO-OP** nếu đã có, **NO-OP im-lặng** nếu 0 thư-mục (cấm tạo-rồi-đóng = sổ rỗng giả). Khoá nốt vòng **ORPHAN-L** ⇒ hết kêu oan ca *"pause rồi đóng thẳng"*. |
|
||||
| 3 | V2 bookend / counter | **auto** | Gỡ **cổng NGƯỜI** (consent) ở `session-end §L.b(j)(ii)` + `(vi)` force-fire + `session-start §2.1.8(e)`. 🔴 **GIỮ cổng NHỊP** (`h24_cadence` 6/15/3). |
|
||||
|
||||
🔴 **Ranh của "auto" — lead khai cách hiểu để anh sửa được bằng 1 chữ:** "auto" đọc là **bỏ hỏi**, KHÔNG phải **bỏ đếm**. ⇒ H24 chạy **tự-động KHI TỚI NHỊP**, không phải mỗi phiên. Đây **CHƯA** phải bookend-hub (hub **gỡ hẳn counter**, rà 2 đầu **mỗi** phiên). Muốn đúng bookend-hub = **quyết-định KHÁC**, chưa chốt.
|
||||
🔸 **Kết-nhiễm đã chặn:** 2 chỗ (`session-end §L.b(k)(i)` · `session-start §2.1.9(a)`) viện *"trio consent **cùng khuôn** sleep-check **+ H24**"* — H24 đổi thì câu đó **thành sai** ⇒ đã gỡ vế H24. **sleep-check + trio VẪN consent**; 3 cổng nay **không còn cùng khuôn**, cấm suy một ra ba.
|
||||
|
||||
### 🆕 Gap MỚI lộ khi đọc manifest (KHÔNG nằm trong 3 câu — chưa chốt, để carry)
|
||||
|
||||
Lead trước đó trả lời anh *"không có `/snapshot` — bẫy tên gọi"* ⇒ **SAI, đã đính-chính**: manifest `101e69d6` §1 liệt **3 lệnh**, lệnh thứ-3 = **"chụp-nhanh không-dừng"** (chốt giữa mạch, **không bookend, không stop**). Nó là **floor thật**. Lead kết-luận từ đĩa SE mà **không mở manifest**.
|
||||
|
||||
| Floor hub | SE @S146 |
|
||||
|---|---|
|
||||
| `_context` = **stock** (map bối cảnh nén) + **flow** (append mỗi lần dừng) | ⚠️ chỉ có **flow** (`pause-*`); **thiếu stock + nén-thành-con-trỏ** |
|
||||
| `_snapshot-k` + **lệnh chụp-nhanh không-dừng** | ❌ **thiếu hẳn** |
|
||||
| `/pause` **tự chạy 1 chụp-nhanh + NÉN context** rồi mới dừng | ❌ chưa |
|
||||
| `/tiep` đọc **chụp-nhanh mới nhất**; phòng **cửa-sổ-sập** (đọc snapshot có mốc mới hơn dòng cuối context-map) | ❌ chưa (chỉ đọc `pause-*`) |
|
||||
| **Meld-forward khi squash** | ❓ **CHƯA ĐO** — `reset --soft` giữ nội-dung ở INDEX nên *về lý* không mất, nhưng chưa có phép đo riêng cho `.claude/sessions/` |
|
||||
|
||||
## 5. Câu hỏi gửi hub (đánh số — sẽ đi trong email S140)
|
||||
|
||||
@ -61,12 +102,16 @@ Theo `9234a7aa` §4: nối phiên qua nhiều cửa-sổ = tin trạng-thái tr
|
||||
2. Nhãn: hub dùng **một tầng** (đổi hẳn đơn vị đếm sang phiên-logic) hay **hai tầng** (vật-lý + logic như đề xuất VC-1)? Nếu một tầng — hub giải bẫy OR-guard/label-reuse thế nào?
|
||||
3. Tệp ngữ-cảnh cộng-dồn của hub có cấu trúc chuẩn gì (per-pause block? field bắt buộc? cap kích thước? quan hệ với sổ mạch-sống kiểu WAL)?
|
||||
4. Van "kiểm giữa phiên khi phiên-logic quá dài" (ghi-chú trung-thực (ii) của checklist) — hub đã đặt được ngưỡng chưa?
|
||||
- 🔸 **Xử-lý phía SE @S146 = DEFER, có lý-do:** chỉ **hiển-thị dòng-nợ** ở mỗi điểm dừng (`nhip-no-probe`, đã có), **KHÔNG chạy lại audit giữa phiên-logic**. Lý-do: audit-rerun tại điểm dừng là việc **ĐẮT + có side-effect** ⇒ **phá predicate C7** (probe ở điểm dừng phải read-only · non-blocking · gỡ-được-không-hậu-quả — canonical [`harness-11-engine.md`](harness-11-engine.md) §N.8). ⇒ chờ ngưỡng của hub, KHÔNG tự chế van.
|
||||
|
||||
## 6. Không-biết + rủi ro (khai thật)
|
||||
|
||||
- Con số "rẻ đi ba-bốn lần" là ước lượng CỦA HUB theo cấu trúc chi phí, chưa đo trên SE — SE sẽ đo thật (token bootstrap/closeout per-L trước-sau) khi chạy thử, không mượn số.
|
||||
- Nối qua nhiều tài-khoản: nguyên lý OK (trạng thái trên đĩa) nhưng cả fleet **chưa chạy thật**; SE đã có kinh nghiệm gần (S138 `/tiep` đổi acc theo tiep.md:130) — vẫn cần lượt đo riêng.
|
||||
- Rủi ro chính của nhãn hai tầng: thêm 1 khái niệm = thêm chỗ drift (L không đóng khi phiên-logic chết giữa chừng → cần Sàn-3 mở rộng: tệp L mồ-côi = tín hiệu mạnh thứ 5?). Ghi nhận, chưa giải trong v0.
|
||||
- Rủi ro chính của nhãn hai tầng: thêm 1 khái niệm = thêm chỗ drift (L không đóng khi phiên-logic chết giữa chừng → cần Sàn-3 mở rộng: tệp L mồ-côi = tín hiệu mạnh thứ 5?). ~~Ghi nhận, chưa giải trong v0.~~
|
||||
- ✅ **GIẢI @S146 — đúng như câu hỏi tự đặt:** **tín-hiệu MẠNH thứ ⑤** + block **ORPHAN-L** đã vào `tiep.md §0` (DUAL: cửa git `wal:`-commit đụng `.claude/sessions/` ⟂ cửa đĩa cân-sổ `#pause` vs `#resume + closed`). Sàn-3 nay có **5** tín-hiệu MẠNH.
|
||||
- ✅ **Hở này ĐÃ ĐÓNG @S146** — `closed.md` wire ở `session-end.md §6.3-bis` ⇒ cân-sổ đủ 2 vế (`resume-*` **hoặc** `closed.md`). 🧊 *nấc cũ: "chân `closed.md` chưa wire (VC-2 chờ anh) ⇒ ca "pause rồi đóng thẳng không qua `/tiep`" sẽ **kêu oan**. Hướng hỏng = **về phía hỏi-lại**, không về phía im-lặng-bỏ-việc ⇒ chấp-nhận được tạm thời, **nhưng KHÔNG được đọc thành "đã kín"**.
|
||||
- 🔸 Rủi-ro "hai bộ đếm" đã bịt bằng ràng `mm ≡ N` (§3 VC-1).
|
||||
|
||||
---
|
||||
*(DRAFT v0 — em-main single-writer D9. Bước kế: hub reply + anh duyệt bảng VC → wire qua 1 lượt adap có reviewer-gate + fault-inject.)*
|
||||
|
||||
@ -48,7 +48,7 @@ Một session-log viết "two-tier" hồi S60 là **đúng sự thật lịch s
|
||||
|
||||
| Thuộc tính | Giá trị |
|
||||
|---|---|
|
||||
| **Canonical (hiện hành)** | `worker-tier-pin` — 17/17 sub-agent frontmatter `model: opus` + `effort: max` (worker-tier gán-cứng, KHÔNG theo lead); lead = frontier-class owner-choice per-session; Fable cho 1 vai CHỈ qua lượt lệnh `/fable-real`·`/fable-clone` hoặc per-task `tier:` — spawn-param THẮNG hard-pin (đo S126 2026-07-16, `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md`) |
|
||||
| **Canonical (hiện hành)** | `worker-tier-pin` — TOÀN-ROSTER sub-agent frontmatter `model: opus` + `effort: max` (worker-tier gán-cứng, KHÔNG theo lead); lead = frontier-class owner-choice per-session; Fable cho 1 vai CHỈ qua lượt lệnh `/fable-real`·`/fable-clone` hoặc per-task `tier:` — spawn-param THẮNG hard-pin (đo S126 2026-07-16, `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md`) |
|
||||
| **Alias (đã thay thế — đời 2)** | `all-inherit` — mọi sub-agent kế thừa model lead (chất-lượng > chi-phí; Harness-8, S66–S123) |
|
||||
| **Alias (đã thay thế — đời 1)** | `two-tier` — mô hình 2 tầng (lead promote-inherit vài agent / demote-pin số còn lại về Opus; Harness-4) |
|
||||
| **Đổi tên bởi** | Owner-decision **S124** (2026-07-15, adap `erratum-h8`) — thay all-inherit bằng worker-tier-pin. Trước đó: Harness-8 (S66, 2026-06-16) thay two-tier bằng all-inherit |
|
||||
|
||||
Reference in New Issue
Block a user