Files
solution-erp/.claude/workflows/runs/2026-07-17-S135-adap-khung-nhip-nam-vong/sub-task-0.md
2026-07-17 17:26:31 +07:00

76 lines
8.0 KiB
Markdown

# sub-task-0 — LANE-A (commands + contract) — S135 adap khung-nhịp-năm-vòng
> Worker: Opus 4.8 MAX. Spec CON-TRỎ: `spec-adap-khung-nhip-17-07-2026.md` (Read TRƯỚC khi làm — done).
> Scope 5 file LANE-A: `tiep.md` · `pause.md` · `session-end.md` · `session-start.md` · `.claude/governance/.session-counter.json`.
> Items thực-hiện: 1(a-e) · 2-wire (4 điểm) · 3 (force-fire vi) · 3-bis (memory-triple) · 6-phần-`:206` · 8-phần-INFORM-byte (M-10).
## VERDICT: DONE — AC-A(1)-(10) 10/10 PASS (tự chạy lệnh thật), JSON valid + ASCII-clean, isolation clean.
---
## Item 1 — Tick đa-điểm-vào (floor B1 §3.1)
### 1(a) OR-guard contract — `.session-counter.json` `_contract.tick`
- Sửa line 6: `if head == last_ticked_head **OR session == last_ticked_session** -> NO-OP; else counter+1 ...`
- Giải bẫy **+2/cycle**: Stop-hook dời HEAD giữa phiên ⇒ head-guard đơn để tick fire nhiều lần trong 1 phiên; session-clause pin **1 nhãn-phiên = đúng +1**. `/pause` commit dời HEAD nhưng cùng nhãn-phiên vẫn NO-OP.
- **ASCII-clean** (dùng `--`/`+2` không em-dash). Evidence: `_contract.tick` non-ASCII = ASCII-CLEAN; `grep -c "session == last_ticked_session"` = **1** (KHÔNG dùng chuỗi trần vacuous).
### 1(b) tiep.md §2.5 TICK (TICK TRƯỚC, dòng-nợ SAU)
- Chèn `## 2.5 TICK counter + dòng-nợ` sau §2, trước §3. Tick **theo contract** + **CON-TRỎ `session-start.md §2.1.8`, CẤM chép logic** (B1). ≤4 dòng. Nhãn `/tiep` = nhãn-phiên MỚI ⇒ tick fire ngay cửa vào, OVERDUE @9 hiện tại đây.
### 1(c) pause.md §3.5 TICK + add-list bước 4
- Chèn `## 3.5 TICK counter` TRƯỚC commit bước 4 (tick nằm TRONG `wal: pause`). CON-TRỎ §2.1.8, CẤM chép logic. ≤4 dòng.
- Bước 4 add-list mở rộng **thêm đích-danh `.claude/governance/.session-counter.json`** + lý-do (file ngoài hook-3-path; thiếu = claim "tick trong wal: pause" SAI) — M-7.
### 1(d) session-end (j)(v) tick-at-close + §5.1 add counter-file
- `§L.b(j)` thêm **(v) TICK-at-close** idempotent, CON-TRỎ §2.1.8, CẤM chép logic. Idempotent: cùng nhãn-phiên ⇒ NO-OP.
- `§5.1` thêm bullet: **add đích-danh `.session-counter.json` khi tick-at-close tạo delta** (bằng-chứng sống: tick S133 uncommitted qua 2 closeout) — M-7.
### 1(e) session-start §2.1.8 — đơn-vị + label-convention PIN + reconcile :192
- Pseudo-code (a) cập-nhật OR-guard (`HOẶC session == last_ticked_session`) — canonical narrative khớp contract counter.json.
- Rationale đổi "Vì sao OR-guard" giải-thích +2/cycle fix.
- **Label-convention PIN THÀNH LUẬT:** mỗi conversation mới = nhãn-phiên S<nn> MỚI, **kể cả `/tiep`** (`tiep.md:130`); CẤM reuse nhãn — thiếu thì OR-guard NO-OP nhầm cửa `/tiep` ⇒ phép-7 +0.
- **Reconcile gốc "đếm phiên-có-làm-HEAD-đổi"** với đơn-vị nhãn-phiên (`9234a7aa` session-logic caveat B1 §7) + ca hiếm giữ khai: nhãn-phiên mới không-commit cùng-HEAD vẫn NO-OP (+0).
## Item 2-wire — 4 điểm gọi `nhip-no-probe.ps1` (LANE-A wire; script LANE-B tạo)
- `pause.md` bước 5 ý-5 (Báo đúng **năm ý**) · `tiep.md` §2.5 (SAU tick — n-3) · `session-start §2.1.8(e)` (nâng dòng H24 → dòng-nợ 3-vế) · `session-end (j)(i)` (tương-tự).
- **MỌI lời gọi bọc "lỗi → `probe-loi (khong chan)` → đi tiếp"** — probe KHÔNG BAO GIỜ chặn điểm dừng. Command chỉ GỌI script.
- grep tên script = **4/4 file**, mỗi file đúng 1 call.
## Item 3 — Force-fire (vi) consent-gate (floor B1 §3.2)
- `§L.b(j)` thêm **(vi)**: đếm `P = git log ... | grep -c '^wal: pause'`, `<closeout-liền-trước>` = regex closeout **DÙNG CHUNG Item 4** `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)`.
- **so-sánh SỐ** `[ "$P" -ge 1 ]` (KHÔNG exit-code — §5.0 (a)). `P>=1` HOẶC nhãn `S<a>-S<b>` ⇒ OVERDUE(light) bất-kể counter → in dòng-nợ + INFORM-BẮT-BUỘC + đề-xuất spawn cặp H24.
- **DP-3 consent-gate GIỮ** (luật owner-era §L.b(j)(ii) + `session-start §2.1.8(e)` "KHÔNG auto-run"): force-fire = INFORM-bắt-buộc + đề-xuất mặc-định, anh gật mới chạy. Báo hub SELF-CHECK **ô3 = "PASS-với-carve-out (consent)"**.
## Item 3-bis — memory-triple (B2 vòng-3 → CHỨC-NĂNG)
- `§L.b(c)` thêm block **3 dòng `memory-triple:`** (đo → đề-xuất → kiểm) ghi vào session-log: `measure-agent-memory.ps1``memory-archive-gate.ps1 DRY``mfe-eval.ps1|reviewer`. 0 vai mới, 0 script mới. grep `memory-triple:` = **3**.
## Item 6-phần-`:206` — append Ratified (LANE-A thực-thi, nội-dung Item 6)
- `session-start` honest-caveat block (nay :207): **append additive** `✅ Ratified 2026-07-17: anh mark cổng reply e50a4bd0; canonical = memory-budget.json → h24_cadence._owner_ratified (B1 — wording sống ở đó, đừng chép)`. Giữ nguyên caveat "chưa ai được bán 'đã chứng minh hiệu-quả'".
## Item 8-phần-INFORM-byte (M-10) — 2 site RUNTIME
- `session-start §2.1.2` sleep-check + `session-end §L.b(c)` sleep-check: khi INFORM fire → in kèm **tổng byte `agent-memory/*/archive/<period>.md` CHƯA có `.gist.md`** (match PREFIX kỳ; đo TƯƠI `(Get-Item).Length` — CẤM `Get-Content`-đếm E-010; baseline 17-07 kỳ 2026-07 ≈183KB/5 file). Anh đặt ngưỡng sau, KHÔNG bịa số. Giữ INFORM 7-ngày (DP-5). Sleep-cmd chỉ đổi mô-tả (tránh ghost-wire H18) — phần đó LANE-C.
---
## AC-A checklist (tự chạy lệnh thật, số đo)
| AC | Yêu-cầu | Kết-quả |
|---|---|---|
| (1) | `grep -c -i tick` tiep/pause/session-end ≥1 (baseline 0/0/0) | **3 / 4 / 2** PASS |
| (2) | `grep -c "session == last_ticked_session"` = 1 (KHÔNG bare vacuous) | **1** PASS (bare=2 = context only) |
| (3) | 4 điểm gọi `nhip-no-probe.ps1` (grep = 4 file) | **4/4 file**, mỗi file 1 call PASS |
| (4) | KHÔNG chép logic tick — mỗi điểm ≤4 dòng + con-trỏ §2.1.8 | pointer 1/1/3; `counter += 1` copy = **0/0/0** (chỉ session-start canonical=1) PASS |
| (5) | session-end (vi) so-sánh SỐ (không exit-code) | `[ "$P" -ge 1 ]` + note §5.0(a) PASS |
| (6) | dòng-nợ KHÔNG chặn: mọi call bọc probe-lỗi-đi-tiếp | `probe-loi (khong chan)` = **4/4 file** PASS |
| (7) | `:206`-vùng có `Ratified 2026-07-17` + con-trỏ key canonical | present (nay :207) + `h24_cadence._owner_ratified`=1 PASS |
| (8) | `§L.b(c)` chứa mẫu 3 dòng `memory-triple:` | **3** PASS |
| (9) | 2 site INFORM có vế byte-chưa-gist | `Item 8/M-10` + `archive/<period>.md` + `183KB` = 1 mỗi site PASS |
| (10) | pause bước-4 + session-end §5.1 chứa `.session-counter.json` | pause=2 · session-end=3 PASS |
| extra | JSON valid + counter.json ASCII | `json.loads` OK; non-ASCII bytes = **0** PASS |
## Ghi-chú (transparent disclosure)
- **Em-dash cleanup:** counter.json line 20 (`last_audit._note`) có **2 em-dash U+2014 PRE-EXISTING** (committed HEAD từ S124, KHÔNG do tôi thêm). Đã ASCII-hoá `—``-` (meaning-preserving) trong CHÍNH file lane tôi để thoả hard-invariant "JSON counter giữ ASCII". Line-6 (Item 1a) tự-nó đã ASCII-clean.
- **Git mechanics:** Stop-hook `wal-flush` auto-commit 4 command-file edit của tôi vào `wal:` commits (0363495 `wal: pause`, a7bafd5 `wal: flush`) — nội-dung ĐÃ ở HEAD (verify: 4/4 file có `nhip-no-probe.ps1`=1). counter.json ở working-tree (` M`, `.claude/governance/` ngoài hook-3-path by design). Lead post-merge squash sẽ gộp `wal:` vào wave-commit. Counter đã live-tick 8→9/S135 (H24 tick ritual phiên này = M-7 delta thật).
- **Isolation:** git status dirty NGOÀI lane tôi = `fable-real.md` + `hmw.js` (LANE-C) + `nhip-no-probe.ps1` ?? (LANE-B) — do lane khác chạy song-song, tôi KHÔNG chạm. 0 MEMORY.md touched (M-2/B6). 0 store_memory/RAG-write.
- **Cross-lane refs (đọc-only, KHÔNG sửa):** wire trỏ `scripts/nhip-no-probe.ps1` (LANE-B) + Ratified trỏ `memory-budget.json` (LANE-C) — chỉ CON-TRỎ, không sửa file lane khác.