Files
solution-erp/.claude/commands/pause.md
pqhuy1987 a3776eaac4 [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>
2026-08-07 21:25:50 +07:00

127 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: /pause — chốt điểm dừng chủ-động (Harness-22 WAL session-continuity). Ghi mạch việc dở vào .claude/WAL.md ≤40 dòng + commit `wal: pause` ĐÍCH-DANH rồi DỪNG HẲN — an-toàn để thoát / đổi acc / tắt máy. Nối lại DUY-NHẤT bằng /tiep.
argument-hint: (không tham số)
---
# /pause — chốt điểm dừng chủ-động (Harness-22 WAL session-continuity)
> **Mục-đích:** chốt trạng-thái làm-việc hiện-tại xuống đĩa một cách an-toàn, để có thể thoát / đổi tài-khoản / tắt máy mà KHÔNG mất trí-nhớ đã có và KHÔNG phải đốt lại token cho phần đã xong.
> Cặp với **`/tiep`** (đường recovery duy-nhất). 🔴 restart Claude Code sau khi tạo/sửa command `.md` (no hot-reload).
Thực-hiện **tuần-tự 5 bước** sau; trong lúc chạy **KHÔNG nhận việc mới**:
## 1. NGỪNG spawn mới — xử-lý task đang chạy
- KHÔNG spawn / phóng thêm bất-kỳ task hay workflow nào nữa.
- 🔴 **Carve-out DUY NHẤT (OWNER-VETO @S153 — mirror hub O-1(a)):** vai `ctx-curator` ở bước §2.6(C-bis)-2bis ĐƯỢC spawn trong `/pause` (vai-1 vòng Ctx hub-form 3-vai, anh chốt "Build đủ 3 vai như hub"). Ngoài nó ra, luật này nguyên vẹn.
- Với task đang chạy (background hoặc workflow):
- **Sắp-xong** (ước `< ~2 phút`) → **CHỜ** nhận kết-quả rồi **harvest-liền** (append phần trí-nhớ đã verify) trước khi chốt.
- **Còn lâu** → **KHÔNG chờ**. Ghi vào WAL một mục `[!]` **đủ trường**. Nếu là **workflow** → ghi một dòng `wf:` **năm-trường**: `wf:<mục-đích> run=<run-folder> runId=<id|pending> args=<snapshot> done=<k>/<N> harvested=no` (nhánh khôi-phục xem `/tiep`).
## 2. Flush trí-nhớ dirty xuống đĩa
- Đẩy mọi trí-nhớ đang dirty (chưa ghi) xuống đĩa (agent-memory / run-folder).
- Ghi-chú-dở **DÀI** (context, phân-tích giữa chừng) để ở **run-folder / work-state**, **KHÔNG** nhét chi-tiết dài vào WAL — WAL phải giữ tính "liếc một cái là biết".
### 2.5 🔴 C2 checklist artifact-vs-entry — ÉP SEED TRƯỚC KHI CHỐT (wire @S172, owner slot 69)
> **Vì sao cửa này tồn-tại — truy được CƠ-CHẾ, không phải đãng-trí (`lead-gap-auditor` FLAG-6 @S172, `ring2-audit` F-4 HELD tuyệt-đối):** cổng ép-seed C2 trước đây **CHỈ có ở `/session-end`**; `/pause.md` đo được **0 hit trên cả 5 token** (`C2` · `seed` · `MEMORY.md` · `on-behalf` · `diary`). Phiên nào **kết bằng `/pause`** thì phép đếm AB **không bao giờ chạy** ⇒ sót seed là **TẤT-YẾU CẤU-TRÚC**. Ca thật: S171 kết bằng `/pause`, `ctx-verifier` chạy 15:47 mà sổ dừng ở S168 — phát-hiện mãi tới S172, và đó là **lần thứ 5** của carry `tiep-3ter-seed-unwired`. Không wire cửa này thì **lần 6 đã hẹn giờ ở cửa `/pause` kế**.
> 🔗 **Luật đầy-đủ = canonical [`session-end.md`](session-end.md) §L.b(j)(ii-ter)3-bis.** 🔴 **B1 — mục này CHỈ ÁP, CẤM chép luật.**
**Đếm 2 cột, ngay trước khi ghi WAL:**
- **cột-A** = tập VAI có artifact sinh trong cửa-sổ này (`ls .claude/workflows/runs/<run của cửa-sổ>/sub-*.md` → rút tên vai; **cộng** mọi sub spawn lẻ không qua run-folder).
- **cột-B** = tập vai có **entry MỚI** trong `.claude/agent-memory/<vai>/MEMORY.md` mang nhãn phiên hiện-hành.
🔴 **`A B ≠ ∅` ⇒ SEED ON-BEHALF NGAY (lead single-writer, B3 VERIFY→APPEND), CẤM commit `wal: pause` khi hiệu còn phần-tử.**
- **11/23 vai bị luật CẤM tự-ghi** (INFORM-only, `tools:` không khai Write/Edit) ⇒ lead-seed là **ĐÚNG THIẾT-KẾ**, không phải chống-chế. Bệnh nằm ở **bước seed thiếu phép đếm ép** — KHÔNG sửa bằng cách "bắt vai tự ghi". *(🔴 `ring2-audit` F-6 @S172 làm chặt thêm: vai vẫn có `Bash` nên **ghi được về vật-lý**; nhưng khai read-only mà ghi = **residual-write vi-phạm khai-báo**, và backstop THẬT là git-diff commit-gate — nên đừng đọc thành "vai bất-khả-thi", cũng đừng cấp Write để làm đẹp chỉ-số.)*
- **Bằng-chứng cửa này cần thiết:** M9 (nghi-thức seed on-behalf) tồn-tại từ S149 mà **vẫn rớt 3 lần** (S153 · S158 · S162) vì chạy bằng **TRÍ-NHỚ**. Phép đếm 2 cột thay trí-nhớ bằng **luật soi-được** — cùng bài với `dry-run bắt lời-hứa-chưa-land`.
- Cửa này **KHÔNG chặn** `/pause` khi không đo được (lỗi script/glob) ⇒ in `C2-probe loi (khong chan)` + ghi 1 dòng `[!]` vào WAL rồi đi tiếp; **im-lặng bỏ qua thì KHÔNG được**.
## 2.6 Ghi context-block vào thư-mục phiên-LOGIC (S146 — lane CỘNG-DỒN, cặp với `/tiep §2.6`)
🔴 **FORM HUB (owner chốt @S148 "đối ứng đúng chính xác như hub") — TÁCH marker ⟂ narrative, KHÔNG gộp 1 file như form SE cũ:**
**(A) Marker `_pause-<i>.md`** — `<i>` = số TUẦN TỰ trong thư-mục (`max(_pause-*)+1`), **KHÔNG** nhãn `S<nn>`, **KHÔNG** timestamp trong tên. Đúng **5 trường, ~200B**, không thêm bớt:
```
ts: <ISO-8601 +07:00>
head-sha: <full sha, git rev-parse HEAD>
window-ordinal: <thứ mấy trong phiên-logic>
jsonl-hint: <project-dir>/<session-uuid>
account-label: none
```
**(B) Narrative → APPEND vào `_context-s-<N>.md`** (một file DUY NHẤT/phiên-logic, cộng dồn) — thêm đúng 1 entry `### PAUSE-<k> <ts>` dưới `FLOW-START`:
- 🔴 **Dòng đầu entry = `> anh: <tin-nhắn anh VERBATIM>`** — chép **nguyên văn**, CẤM paraphrase. Không có tin-nhắn ⇒ ghi `(THIẾU — lý do)`, **CẤM dựng lại từ trí nhớ**.
- Rồi 3 mục cũ: **(1) quyết-định đã CHỐT** · **(2) delta còn SỐNG** · **(3) con-trỏ**.
- 🔴 **FLOW append-only, entry cũ IMMUTABLE** — CẤM rewrite, CẤM tự-tóm (chống self-summary lossy). Vượt `session_ctx_kb` ⇒ distill **SECTION CŨ** thành pointer, KHÔNG sửa entry verbatim.
**(C) Máy-derive `§(c) STOCK-touched`** — `python scripts/session_ctx.py machine-block --session <N> --json` → điền bảng §(c) của `_context-s-<N>.md`. **KHÔNG điền tay** (template ràng "máy-derive @pause/snapshot").
🔸 **Khai giới-hạn:** `changed_files` = `git diff anchor..HEAD`**chỉ phần ĐÃ COMMIT**; việc còn dirty không hiện. Đừng đọc thành "toàn bộ việc đã làm".
**(C-bis) Refresh lớp MỀM `_mind-s-<N>.md`** *(adopt thư `0df10df4` @S153 — sàn khoản 2; đặt TRƯỚC (D) để secrets-sweep của auto-snap quét luôn block vừa chèn = lưới-2 sau máy-draft lưới-1; 🔴 nghi-thức ĂN từ phiên sau restart CLI — command no-hot-reload)*:
1. Soạn **NHÁP** block A-E (scratchpad): **A** gói-turn · **B** hướng-tiếp + nhánh-đã-loại · **C** kế-hoạch delta-suy-nghĩ (KHÔNG chép checklist) · **D** đang-thảo-luận + nhãn `{mới-nêu|đang-cãi|gần-chốt|treo-chờ-anh}` · **E** dòng-sống 1-dòng/spawn `{verdict + con-trỏ}`. Mục trống ghi `(trống — khai)`; việc ĐÃ-CHỐT = con-trỏ WAL/HANDOFF, **CẤM chép**.
2. `python scripts/session_ctx.py mind-check --session <N> --draft <file-nháp>`**TRƯỢT ⇒ sửa nháp, CẤM chèn** (rào quét dịch-trái).
2-bis. **Spawn `ctx-curator`** (vai-1 Ctx — carve-out §1, OWNER-VETO @S153 hub-form 3-vai; **máy TRƯỚC vai**): PIN {nháp · `_mind` · run-folder-đang-mở-hoặc-khai-0 · WAL} → nhận `CTX-CURATOR: DAT|SUA|SKIP-CO-KHAI` → điểm SỬA thì sửa nháp + chạy lại bước 2 → verdict 1-dòng ghi vào entry `PAUSE-<k>` mục (3) của `_context` (vết, không đẻ file). Núm-hạ-tần-suất = quyền anh (1 câu là hạ nhịp/tắt — máy-$0 vẫn lo).
3. Chèn **TOP** dưới `<!-- MIND-TOP -->`; số hiệu = **ĐẾM block TRƯỚC chèn** (block-0 chiếm số 0). 🔴 `_mind` mới-nhất-ở-**TRÊN** — **NGƯỢC chiều** `_context` FLOW (mới-nhất-ở-CUỐI), đừng chép khuôn bên kia.
4. `mind-check` full. Trần = khoá **`mind_ctx_kb`** (B1 — CẤM chép số vào đây); vượt ⇒ nén block CŨ NHẤT trừ block-0 + top; <3 block **TỪ-CHỐI nén + giương cờ**. File `_mind` chưa (ca vào giữa phiên-logic) tạo từ `session-mind-template.md` + khai trễ.
**Chi phí ĐO THẬT @S153 (T4 Measure-Command ×3 thay ước ban đầu 0.3-0.6s lệch 2.2-5.4×): +~0.12s máy (draft 61,3ms + full 55,4ms; file 34KB vẫn 63,8ms) + 1 Edit + ~1-3K tok soạn nháp + 🔄 1 spawn `ctx-curator` (OWNER-VETO @S153 hub-form 3-vai carve-out §1, floor ~100K tok/spawn, chi phí anh đã chấp nhận; núm hạ = 1 câu của anh).** 🧊 *Câu cũ "0 spawn — vai kiểm chỉ sống @2 bookend" = quyết (36)(b)+(38)(a) trước veto — hết hiệu lực vế spawn-@pause, vế máy-$0-mỗi-cửa GIỮ.*
**(D) AUTO-SNAPSHOT chạy `/snapshot` §2→§4 ngay trước bước 3** *(đóng `[carry:pause-autosnap]` #17, anh chốt @S148)*:
- **Đo trước khi wire, đúng câu hub bắt hỏi** (`goi-chot` §3 *"có làm điểm dừng đắt lên không"* phải hỏi TRƯỚC khi bàn giá-trị): `machine-block` **~140ms** · `secrets-sweep` **~64ms** (3 lượt, tb).
- 🔴 **Chi-phí RÒNG của auto-snap chỉ là ~64ms + 1 write**, KHÔNG phải 204ms: `machine-block` **vốn đã phải chạy** (C) cho §(c) STOCK-touched. `/pause` cũng vốn đã commit sẵn bước 4.
- 🔸 **Ranh giữ khai:** hub **KHÔNG** ràng 1 pause = 1 snapshot (đo đĩa hub: `session-102` pause=3/snap=5 · `session-107` pause=2/snap=1). SE chọn auto-snap-tại-pause **quyết-định SE**, không phải floor hub ai thấy đắt thì gỡ, đã số để cãi.
🧊 **Form SE cũ `pause-S<nn>-<ts>.md` (gộp marker+narrative) = LEGACY, CẤM viết mới.** Sàn-3 vẫn **nhận** (dual-accept, `tiep.md §0`) `session-1` còn dùng đúng luật retire: *gỡ nhánh legacy khi tập di-sản RỖNG, giữ khi CÒN người thụ-hưởng*.
- `<N>` = phiên-LOGIC **đang mở** xem [`session-start.md`](session-start.md) BƯỚC 0.8.
- 🔴 **Scaffold idempotent (owner chốt @S146 "giống hub"):** thư-mục chưa **TẠO**; đã **DÙNG LẠI, CẤM đè**. Chạy lại nhiều lần hại.
- 🔴 **NHƯNG `/pause` KHÔNG BAO GIỜ tự tăng `<N>`** cấp-số **độc-quyền `/session-start`** (BƯỚC 0.8, canonical; B1 mục này chỉ TRỎ). `/pause` chỉ tạo thư-mục cho số **đang mở**. Không số nào đang mở (vào thẳng bằng `/tiep` rồi `/pause`, chưa từng `/session-start`) dùng `max+1` **và ghi 1 dòng khai** trong khối: `N-cap-ngoai-session-start: <N> (ly-do: <...>)` để `<N>` không bao giờ xuất-hiện không ai biết đâu ra.
- 🔴 **ACCUMULATE — CẤM ghi đè, CẤM sửa khối cũ.** Mỗi `/pause` = **một file mới**. (Ghi đè = mất chính thứ lane này sinh ra để giữ.)
- **3 trường** (đúng khuôn VC-3 draft): **(1) quyết-định đã CHỐT trong cửa này** · **(2) delta còn SỐNG** (việc/nghi-vấn mang sang cửa sau) · **(3) con-trỏ** run-folder / commit / file.
- 🔴 **Ranh với WAL — KHÔNG nhập một:** WAL = **mạch-sống, ghi-đè, cứng ≤40 dòng** (liếc-một-cái-là-biết, bước 3 dưới). Context-map = **bối-cảnh tích-luỹ, không cap 40 dòng**. Ghi-chú-dở DÀI thuộc **về đây**, KHÔNG nhồi vào WAL.
- **CẤM secret** (thư-mục này sẽ được commit cùng kỷ-luật WAL bước 3).
- 🔸 Hook `wal-flush.ps1` đã phủ `.claude/sessions/` (path thứ-4, S146) khối này **tự vào `wal:` commit** turn-boundary. Vẫn **PHẢI add đích-danh** bước 4 (đừng dựa vào hook để chốt điểm dừng hook lưới, không phải nghi-thức).
## 2.7 Kéo thư cross-project (cửa RA 2/2 — owner chốt S148)
**DÒ 2 kênh** (`outbox/se` + `outbox/all` × 6 repo) **TRƯỚC** khi ghi WAL (bước 3), để `thu-moi: se=X all=Y` kịp vào `carry:`/context-map nếu .
🔴 **CHỈ list + so id. KHÔNG copy · KHÔNG hash · KHÔNG python** `/pause` **cửa dừng**, ràng-buộc BINDING của hub (`goi-chot` §3) cấm làm đắt lên. Kéo thật = việc của bookend.
> 🔗 **Luật nhịp đầy-đủ = canonical [`check-email.md`](check-email.md) §"Nhịp chạy — 4 CỬA PHIÊN".** 🔴 **B1 — CHỈ TRỎ + GỌI, CẤM chép luật.**
> 🔴 **KHÔNG chặn điểm dừng:** lỗi ⇒ `check-email loi (khong chan)` → đi tiếp bước 3. `/pause` tồn-tại để **dừng an-toàn**; một bước kéo thư hỏng **không được phép** giữ anh lại.
## 3. Cập-nhật `.claude/WAL.md` đúng schema
- **`chain:`** đầy-đủ mọi mục trạng-thái (`[x]` đã-xong · `[!]` đang-dở · `[ ]` chưa-làm), **KÈM BẰNG-CHỨNG** một lệnh / đường-dẫn / hash chứng-minh trạng-thái đó (KHÔNG mô-tả suông).
- **`next:`** đúng **một mệnh-lệnh cụ-thể**: làm tiếp theo.
- **`verify:`** **ít nhất một lệnh CHẠY ĐƯỢC cho từng mục `[!]`**, để `/tiep` chạy được đối-chứng.
- 🔴 WAL **ghi-đè toàn-file** (KHÔNG append), **cứng ≤ 40 dòng**. **CẤM secret** (WAL sẽ được commit): không key, không token, không credential.
## 3.5 TICK counter (H24 — TRƯỚC commit bước 4; Item 1(c) 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).
- 🔴 **TRƯỚC commit bước 4** delta counter được gộp vào commit `wal: pause` (file NGOÀI hook-4-path nên PHẢI add đích-danh bước 4).
## 4. Commit ĐÍCH-DANH — message `wal: pause`
- `git add` **đích-danh** đúng các path: **WAL + path persist** (agent-memory / run-folder / **`.claude/sessions/session-<N>/` context-block bước 2.6, S146**) **+ `.claude/governance/.session-counter.json`** (🔴 M-7: tick bước 3.5 nằm TRONG commit `wal: pause` file ngoài hook-4-path nên PHẢI add đích-danh; thiếu dòng này thì claim "tick nằm trong wal: pause" SAI) **+ file dở**, rồi `git commit -m "wal: pause"`.
- 🔴 **TUYỆT ĐỐI KHÔNG `git add -A`** chỉ add đúng path cần chốt, tránh nuốt file rác / secret ngoài ý-muốn.
- **KHÔNG push.** (Repo trong Dropbox thư-mục `.git` được cloud-sync, nên commit local vẫn **durable** qua tắt-máy / đổi-acc.)
## 5. Báo-cáo ngắn rồi DỪNG HẲN
Báo đúng sáu ý:
1. **goal** mạch việc đang dở .
2. **mục `[!]` đầu-tiên** bước dở gần nhất.
3. **workflow bỏ lại** (nếu ) dòng `wf:` đã ghi.
4. "**an-toàn để thoát, đổi acc, hoặc tắt máy**".
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.**
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.
---
🔒 **Bất-biến:** commit **bước 4 xảy ra TRƯỚC** tuyên-bố **bước 5** chết ngay sau khi tuyên-bố "an-toàn để thoát" cũng KHÔNG mất (điểm dừng đã nằm trên đĩa).
👉 **Nối lại = `/tiep`** (MỘT đường recovery duy-nhất kể cả khi user "làm tiếp" bằng text thường, KHÔNG tự recovery cách khác).