Files
solution-erp/.claude/commands/pause.md
pqhuy1987 11db5efdf8
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m39s
[CLAUDE] Docs: S153 closeout — adopt TRỌN Ctx soft-memory + OWNER-VETO 3-vai + RENAME hub-form (squash 22 wal:)
Pipeline anh lệnh: /check-email + /adap-apply -> /fable-real invest (spec 9-task/24-checklist)
-> hmw Opus-5-MAX 2 đợt + lead-solo T6-T8 -> checklist verify.

Thư ① 9c909007 (model-default Opus 5 MAX): TRỌN — filing 2-tuyến + probe-sau-restart
2-nguồn claude-opus-5[1m] + thư hub d432f5eab5cd + caveat (e) đóng.

Thư ② 0df10df4 (pause-tiep Ctx soft-memory, sàn 7-khoản): EXECUTED
- máy mind-check: scripts/session_ctx.py +542 dòng (7 phép + 2 phụ, 4 mức, draft/closed/--root/--session PIN, exit 0/1/3)
- template .claude/templates/session-mind-template.md + wire 4 lệnh (pause C-bis+2bis+§1-carve-out, tiep §2.6+§3-ter, session-start Phase 3.5, session-end §L.b(l)+6.3-bis)
- memory-budget: mind_ctx_kb=32 + tiep_reload + ĐÓNG ghost-wire session_ctx_kb (H18 class-2 sống S146->S153)
- fault-inject 18/18 + 2 fix hậu-T4 (FI 6/6): GAP-#9 closed-mode E-0-con-trỏ CỜ->TRƯỢT (chặn gradient
  thưởng xoá-con-trỏ-trung-thực, họ bẫy F-1 của chính thư hub) · secrets-sweep +--root parity
- số ĐO THẬT pause +117ms thay ước lệch 2.2-5.4x

OWNER 2 quyết trong-phiên:
- (38) VETO: 1-vai -> hub-form 3-vai (ctx-curator @pause + carve-out pause §1 · ctx-verifier @tiep · ctx-audit @2-bookend)
- RENAME theo chuẩn hub/sisters để audit chéo: ctx-pause-check->ctx-curator, ctx-reload->ctx-verifier
  (đo đĩa 3 nhà; hub≠sister => SE theo HUB-form, tiền lệ S149). Roster 20->23, VALID_ROLES 23.
  Gap còn lại: ring5-audit (V5 truth-floor) hub CÓ, SE+VIPIX chưa -> slot (41).

Bookend 2 đầu (12 spawn) + trio auto 1 vòng:
- @open: H1 7f · H2 4f · H24 5+3 FLAG · ring1 28Đ/4T · ring2 8/8Đ + M-1 MISS thật · trio eval-MIXED-14/refine-3A-7B-4N/audit-25Đ-3T (re-chạy 7 instrument, 24 số byte-exact)
- @close: H1 6f · H2 8f (baseline S154 = 16/10, tự sửa bản ~23/11) · H24 4+2 FLAG · ring1 47Đ/5T/1KC/53 · ring2 6/6Đ + 21 phép phụ
- lead xử 11 mục: 9 FLAG H24 + 3 RESIDUAL ring2 + F-r2 (plugin 3 hard-site) + M-1 cả 2 persona + M9 14 sổ diary + F-3/F-5/F-6 + nit Sàn-5 + BÁC F-4 (fan-out không vào _index)

#53 x14-cận-dưới, 0 mất dữ liệu (WRITE-lane derive-from-body · Agent-resume · SendMessage-resume x6).
Datum: trio return-only hết miễn nhiễm (3/3 CLEAN -> 1/3). 4-A suýt xảy ra thật (bản committed của 2 file H24 là bản cắt 24%/48%).
completeness-gate: 5 vòng đủ · phép ĐẠT 4 / TRƯỢT 0 / vacuous 0.
State: Mig 67 · 89 bảng · 532 test · gotcha 83 · Sub-agents 23 · counter 27 · bundle FROZEN · governance-only 0 prod-code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 16:10:54 +07:00

109 lines
14 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.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).**
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).