# sub-task-0 — D3: tạo 2 command file `/pause` + `/tiep` (Harness-22 WAL session-continuity)

**Role:** implementer (Write tool) · **Scope:** CHỈ 2 file MỚI + file này. Không đè gì.
**Nguồn FROZEN đã đọc:** `broadcasts/inbox/2026-07-11-Governance-harness-22-wal-session-continuity.md` (§4 dòng 101-120 + §6 dòng 130-140). KHÔNG tự đọc spec-file (nhận phần liên-quan qua prompt).
**Format mẫu:** `.claude/commands/send-email.md` dòng 1-4 (frontmatter `description:` + `argument-hint:`).

## Deliverables (2 file MỚI — đều `??` untracked, xác-nhận không đè)
| File | Dòng | Nội-dung |
|---|---|---|
| `.claude/commands/pause.md` | 47 | `/pause` — chốt điểm dừng chủ-động, 5 bước tuần-tự + bất-biến + con-trỏ `/tiep` |
| `.claude/commands/tiep.md`  | 42 | `/tiep` — recovery MỘT đường, 4 bước + nhánh `wf:` + khối CẤM |

> Cả 2 file tự-động đăng-ký thành slash-command (hệ báo skill `pause`/`tiep` xuất-hiện sau Write) → frontmatter hợp-lệ, well-formed.

## Port-fidelity map → broadcast (trung-thực, không bịa)

### pause.md ← §4 phần `/pause` (broadcast dòng 103-111)
- Bước 1 (dòng 15-17) ← BC 105: NGỪNG spawn; sắp-xong <~2' → chờ+harvest-liền; còn lâu → KHÔNG chờ, WAL `[!]` đủ trường, workflow = dòng `wf:` 5-trường (port nguyên `wf:<mục-đích> run= runId= args= done=k/N harvested=no`).
- Bước 2 (dòng 19-21) ← BC 106: flush dirty; ghi-chú-dở dài để run-folder/work-state, KHÔNG nhét vào WAL.
- Bước 3 (dòng 23-27) ← BC 107 + §2 (BC 34-37): chain kèm BẰNG-CHỨNG · `next:` 1 mệnh-lệnh · `verify:` lệnh chạy-được cho từng `[!]` · **ghi-đè toàn-file ≤40 dòng · CẤM secret**.
- Bước 4 (dòng 29-32) ← BC 108: commit ĐÍCH-DANH (WAL + path persist + file dở) msg `wal: pause` · **TUYỆT ĐỐI KHÔNG `git add -A`** · KHÔNG push [Dropbox `.git` cloud-sync = local durable].
- Bước 5 (dòng 34-42) ← BC 109: báo goal / mục `[!]` đầu / workflow bỏ lại / "an-toàn để thoát, đổi acc, tắt máy" → DỪNG HẲN.
- Bất-biến (dòng 45) ← BC 111: commit bước-4 TRƯỚC tuyên-bố bước-5.
- Con-trỏ (dòng 47) ← §7 mục 5 (BC 154): "Nối lại = `/tiep` (MỘT đường recovery duy-nhất)".

### tiep.md ← §4 phần `/tiep` (BC 113-120) + nhánh `wf:` §6 (BC 130-140)
- Bước 1 (dòng 14-15) ← BC 115: đọc WAL; không tồn-tại / chain toàn `[x]` → "không có mạch dở" **DỪNG SẠCH**.
- Bước 2 (dòng 17-20) ← BC 116 + SE-tailor N9: chạy TOÀN BỘ `verify:` **VÀ** đọc `git status` + disk run-folder (per-turn≠per-task: returns mất được nhưng per-agent-file trên đĩa còn) — đây là delta SE thêm theo prompt, so chain.
- Bước 3 (dòng 22-24) ← BC 117: LỆCH → TIN GROUND-TRUTH (sửa WAL, báo lệch, rồi mới chạy) · KHỚP → thực-thi từ `next:`, nối chain thứ-tự.
- Bước 4 (dòng 26-32) ← BC 118 + §6 (BC 137-138): mục `wf:` → recovery-workflow: đọc run-folder + `## taskList snapshot` trong run.md; grep run-id trong log-phiên (glob — grep ĐÍCH-DANH, KHÔNG nạp toàn transcript); harvest-hồi-tố partial-honest; **RELAUNCH đã-cắt-gọt chỉ task CÒN LẠI + memory-pack DẪN-XUẤT-LẠI TƯƠI (CẤM snapshot pack cũ)**; resume-by-run-id = bonus SAME-SESSION-ONLY, CẤM claim cross-session.
- Khối CẤM (dòng 38-40) ← BC 120: CẤM giả-định bước xong nếu `verify:` không chứng-minh · **CẤM nạp lại transcript cũ** (WAL+ground-truth đủ; thiếu → HỎI anh).
- Field `session:` (dòng 42) ← BC 120: khác phiên = BÌNH-THƯỜNG (use-case); chỉ cảnh-báo nếu `updated:` mới hơn lúc phiên hiện-tại bắt đầu (dấu phiên song-song).

## Dead-ends né được (checklist X)
- **X4** (rewrite commit đã-push): pause.md chỉ "KHÔNG push" + rationale Dropbox-durable. KHÔNG hề nhắc squash/reset/rewrite (đó là §5 delta = task khác). ✅
- **X8** (WAL append / >40 / secret): pause.md bước-3 ghi rõ "ghi-đè toàn-file (KHÔNG append), cứng ≤40 dòng, CẤM secret". ✅
- **X5** (claim hook 'đang chạy'): 2 file KHÔNG nhắc Stop-hook. Commit bước-4 là commit THỦ-CÔNG của lệnh `/pause`, độc-lập hook. ✅
- **X1/X7/X10:** không đụng hmw-mode/BƯỚC-0.5/ultra-*/hmw.js; file MỚI nên không renumber gì. ✅
- **Isolation:** git-status → chỉ `.claude/commands/pause.md` + `.claude/commands/tiep.md` là `??` do tôi tạo; các M/?? khác (session-*.md, .gitattributes, hooks/, settings.json, CLAUDE.md, rules.md…) = sibling D-task, KHÔNG do tôi. ✅

## Acceptance (row #3) — grep-count evidence
| Check | Kết-quả | Line |
|---|---|---|
| pause.md frontmatter `description:` | PASS | L2 |
| pause.md `wal: pause` ≥1 | PASS (3×) | L2, L29, L30 |
| pause.md `git add -A` ≥1 (câu CẤM) | PASS (1×) | L31 "TUYỆT ĐỐI KHÔNG `git add -A`" |
| pause.md trỏ `/tiep` | PASS (5×) | L47 con-trỏ cuối "Nối lại = `/tiep`" |
| tiep.md frontmatter `description:` | PASS | L2 |
| tiep.md `transcript` ≥1 (câu CẤM) | PASS (2×) | L40 "CẤM nạp lại transcript cũ" + L29 |
| tiep.md `ground-truth` ≥1 | PASS (3×) | L17, L40 (lowercase), L2 |
| tiep.md `wf:` ≥1 | PASS (3×) | L2, L26, L27 |
| tiep.md nhánh WAL-rỗng-dừng-sạch | PASS | L15 "chain toàn `[x]` → 'không có mạch dở' → DỪNG SẠCH" |
| tiep.md `git status` ≥1 | PASS (4×) | L19, L23, L40, L2 |

**Verdict: 10/10 acceptance PASS.** 2 file well-formed (auto-đăng-ký slash-command), port trung-thực, isolation sạch.
