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

17 KiB
Raw Blame History

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âuKHÔ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 §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-touchedpython 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..HEADchỉ 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ÊNNGƯỢ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 có (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 là quyết-định SE, không phải floor hub — ai thấy đắt thì gỡ, đã có 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 nó (dual-accept, tiep.md §0) vì 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 BƯỚC 0.8.
    • 🔴 Scaffold idempotent (owner chốt @S146 "giống hub"): thư-mục chưa có ⇒ TẠO; đã có ⇒ DÙNG LẠI, CẤM đè. Chạy lại nhiều lần vô hại.
    • 🔴 NHƯNG /pause KHÔNG BAO GIỜ tự tăng <N> — cấp-số là độ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 có 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 mà không ai biết nó ở đâ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ứ mà 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à 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 có. 🔴 CHỈ list + so id. KHÔNG copy · KHÔNG hash · KHÔNG python/pausecửa dừng, ràng-buộc BINDING của hub (goi-chot §3) cấm làm nó đắt lên. Kéo thật = việc của bookend.

🔗 Luật nhịp đầy-đủ = canonical 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 là 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 gì tiếp theo.
  • verify:ít nhất một lệnh CHẠY ĐƯỢC cho từng mục [!], để /tiep chạy được và đố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ở là gì.
  2. mục [!] đầu-tiên — bước dở gần nhất.
  3. workflow bỏ lại (nếu có) — 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 §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-bisB1: 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 gì (đ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 gõ "làm tiếp" bằng text thường, KHÔNG tự recovery cách khác).