[CLAUDE] Skill: YC-021 tron — ring5-audit verified-runtime + day-wake 4-floor (/day + day-probe fault-inject 4/4) + bang-tham-quyen-DRAFT + thu hub re-stamp; REVIEW 8-MAJ va het truoc commit

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-08-10 03:51:22 +07:00
parent 87e979ff02
commit 6bf768da94
18 changed files with 530 additions and 8 deletions

View File

@ -10,7 +10,7 @@ chain:
[x] pause-2 nghi thức: PAUSE-2 land trước chèn (curator #1) + MIND-2 (curator SUA-6 → sửa cả 6) + marker + snapshot
[x] acceptance MẮT-ANH: "Tạm OK" @YC-019(1) — YC-013/016 lật đóng
[x] acceptance ĐỘNG local @S185: A2-răng 2-tầng PASS (ô mờ hiện STATE THẬT DB=1, control-âm NV cùng cấp) + T8-động PASS (PUT-đổi-thật → 1 row changelog đúng shape; 3 echo-PUT = control-âm 0-row) + bonus guard-409 cờ-KẾT-THÚC sống runtime + revert sạch — verify: addendum `runs/2026-08-08-S182-khkk-awf-mirror-ncc/implement-synthesis.md`
[ ] 🆕 YC-021 còn thi công (W-3 ĐÃ ghi 500ms + goi-chot 4.3 PASS @S185): **W-2** build `ring5-audit` persona + wire 2-bookend · **W-4** kê NHÁP bảng thẩm-quyền owner-SỐ/owner-LUẬT + soạn 2 đề-xuất-ngược hub (trình anh duyệt bản kê) · **W-1** day-wake: 3 chạm canonical (tiep.md §0⑤(b) r-set · CLAUDE.md câu DUY-NHẤT · check-email 4→5 cửa) + thi công `/day` + dogfood + report hub — kèm workflow REVIEW riêng (Harness-9)
[x] YC-021 TRỌN @S185 (4W + REVIEW): **W-2** ring5-audit land + wire-4-chỗ + **spawn-probe ALIVE fail-closed = verified-runtime CÙNG PHIÊN** (data-point hot-reload-file-MỚI ×2) · **W-1** day-wake 4/4 floor (`day-probe.ps1` fault-inject 4/4 · `/day` listed-in-session · 3-chạm + 2-guard F2) · **W-3** 500ms → goi-chot 4.3 PASS · **W-4** bảng-DRAFT (3 dòng owner-SỐ vá theo reviewer) + thư hub `0cbaccaafa73` re-stamp-OK + _index · REVIEW gói `PASS_WITH_FIXES 8MAJ/6m` → 8/8 MAJOR vá trước commit — verify: python scripts/stamp_verify.py broadcasts/outbox/ai_infra/2026-08-10-*.md (=OK) · CHỜ-ANH: gật bảng-DRAFT (3 dòng đã sửa: 380K/48/soft-cap-nhà-thật)
[x] bookend @close ONE-SHOT @S185 (YC-018 lượt đầu): 9 vai + 5 máy MỘT MẠCH — harvest 698KB→17-khối/11-sổ+7-tệp+7-lane · trio 40Đ/4T-183-số · H24-deep 16-FLAG trả-nợ-19/15 (tally máy @59) · ring2 16Đ/0T · ring1 30Đ/3T · tooling PWF-6 · ctx-audit 8-FLAG + MIND-3 (mind-check 11/11) · vá-sau-verdict: STATUS-668 + HANDOFF-12-slug-khôi-phục + sổ-YC-lật + A1/A2/A3 + (k-ter)-máy-3 · probe-sau: deep 0/15 ok, over-cap 5→3 — verify: test -s .claude/workflows/runs/2026-08-09-S185-bookend-close/bookend-close-synthesis.md
[ ] governance-vá + đóng sổ: CÒN gom nợ harvest 576.255B/18-lượt (uỷ-quyền slot 71) + STATUS/HANDOFF closeout + YC-013 lật đóng sau mắt-anh — ✅ @S185: orphan S182 ĐÓNG (`implement-synthesis.md` + 7/7 ô + 2-thước-im) · 3 site tự-quy-chiếu VÁ+verify (session-start:161-162 trỏ-enum thay chép-class · detectors.ps1 pre-marker-segment → 29 slug vào lưới EXIT=0 · HANDOFF:58 dòng-bổ-sung giữ ảnh-chụp)
[x] YC-017 ĐÓNG @S185: P1-P4 trọn — wf_5d16a842-28e 7/7 lane (16D+3P-đúng-luật+1S-khai; +C-7 lead tự vá rơi ⇒ 21/21 disposition) + verify-lead 3/3 + synthesis land — verify: test -s .claude/workflows/runs/2026-08-09-S185-email-adap-pipeline/implement-synthesis.md · tồn: C-1-đợi-rider-jump(nợ-chưa-có-chủ F-L2-2) · C-6-quyết-nén-ring2 · 4W+5-SKIP-owner (trình anh cuối lượt)

View File

@ -214,6 +214,7 @@
| ring1-audit (monitor round-KIỂM, S145) | ref-only — ĐỌC output H1 `tooling-auditor` + H2 `harvest-curator` (KHÔNG chạy lại đo) + tự đếm `.claude/agents/*.md`/run-folder đối-chứng; no-self-exempt ≠ H1/H2; KHÔNG dùng domain skill |
| ring2-audit (monitor round-KIỂM, S145) | ref-only — ĐỌC output `lead-stale-auditor` + `lead-gap-auditor` FLAG (KHÔNG re-soi-lead) + `flag_classes` enum ĐÓNG + `class_repeat`; no-self-exempt ≠ 2 vai H24; KHÔNG dùng domain skill |
| ring4-audit (monitor round-KIỂM, S145) | ref-only — ĐỌC output `/sleep-recovery-memory-l2` `.gist.md` + Fidelity verdict; tự đo byte gốc vs gist; no-self-exempt độc-lập lượt nén; KHÔNG dùng domain skill |
| ring5-audit (monitor round-KIỂM vòng-6, S185 slot-41) | ref-only — ĐỌC output `tien-kiem-cua.ps1` + bảng-nhãn `ritual-labels.md` (4 nhãn + vòng hỏi ngược 5 cột); chạy lại VỊ-TỪ từng nhãn bằng lệnh KHÁC; quyền ĐỀ-NGHỊ-XOÁ-ÁN (nhãn nhầm lớp — kèm vị-từ, lead quyết); thách-CLEAN khi 0-nhãn; PIN fail-closed; KHÔNG dùng domain skill *(verified-pending-restart @S185)* |
| ctx-audit (vai-3 vòng Ctx, S153) | ref-only — SOI-CHUỖI `_mind` @2-bookend: bất-biến |block|∈{p,p+1} đếm-ĐĨA + mồi-ngầm + kiểm-vết vai-1/2 (hồi-tố = fallback); ĐỌC output `mind-check` KHÔNG re-implement; PIN fail-closed, `_mind` vắng ⇒ NO-OP-có-khai; KHÔNG soi lead-surface (turf H24), KHÔNG kiểm vòng-đo khác (turf ring); KHÔNG dùng domain skill |
| ctx-curator (vai-1 vòng Ctx, S153 OWNER-VETO) | ref-only — KIỂM bản NHÁP block @mỗi-`/pause` (5 khoản ngữ-nghĩa, SAU `mind-check --draft`); trả CHỈ văn bản `DAT\|SUA\|SKIP-CO-KHAI` ≤12 dòng; carve-out duy nhất `pause.md §1`; KHÔNG lấn @tiep/2-đầu; KHÔNG dùng domain skill |
| score-counter (tầng-2 luật chấm điểm, W4b S181) | ref-only — đọc `docs/governance/so-yeu-cau-chu-du-an.md` TỰ ĐẾM mục nhắc ≥2 (đơn-vị MỤC không LẦN); CẤM xem điểm tầng-1 trước khi đếm xong; sổ thưa ⇒ `KHÔNG ĐO ĐƯỢC`; luật canonical `harness-11-engine PHẦN P` — trỏ; KHÔNG dùng domain skill *(+2 row @S185 — tooling F-1: matrix 26/28 hở từ S182)* |

View File

@ -0,0 +1,24 @@
---
name: ring5-audit
description: Read-only INFORM-only KIỂM vòng-ĐO nghi-thức cửa phiên (vòng-6) cho SOLUTION_ERP — slot (41), owner chốt @S185 YC-021/W-2 ("đồng ý thêm 1 nghi thức ko vấn đề"), khuôn thư hub 08-08 Phần-1 vòng-6 ("một vai kiểm — có quyền đề nghị XOÁ ÁN khi nhãn bị gán nhầm lớp"). Là vai-KIỂM ĐỘC-LẬP của vòng nghi-thức: ĐỌC OUTPUT của máy điểm-danh `scripts/tien-kiem-cua.ps1` (1 dòng TIEN-KIEM per-cửa) + BẢNG NHÃN nghi-thức mà lead/vai đã gán theo `docs/governance/ritual-labels.md` (4 nhãn Ý-ĐỊNH: quên · tự ý bỏ · suy giảm hợp lệ · bị chặn — mỗi nhãn 1 vị-từ đĩa §2.1) + vòng-hỏi-ngược 5-cột (§3), KHÔNG re-chạy việc đo. TRẢ verdict per-nhãn ĐẠT/TRƯỢT/XOÁ-ÁN-ĐỀ-NGHỊ + falsify ≥2 (tự chạy lại VỊ-TỪ của nhãn nặng nhất — vật-mốc/dòng-khai/điều-kiện-chạy-lại — bằng lệnh KHÁC) + TỰ tái-dựng ≥1 số (đếm hàng bảng-nhãn vs đĩa · hoặc đếm dòng TIEN-KIEM trong vật chứng lượt). 🔴 QUYỀN ĐẶC THÙ (khác 3 ring kia): ĐỀ NGHỊ XOÁ ÁN khi nhãn gán NHẦM LỚP — ví-dụ `tự ý bỏ` mà điều-kiện-cho-phép chạy lại ra ĐÚNG (thật ra là `suy giảm hợp lệ`), hoặc `quên` mà dòng-khai tồn tại (grep sót) — đề nghị kèm vị-từ chạy-lại, lead quyết. 🔴 Máy đo SỰ-HIỆN-DIỆN không đo CHẤT (ritual-labels :208) — phần CHẤT chính là việc của mày. 🔴 no-self-exempt (m-3): mày KHÔNG phải máy tien-kiem, KHÔNG phải người gán nhãn. thách-CLEAN bắt buộc khi bảng-nhãn RỖNG ("phiên chạy trọn 0 nhãn"): tự soi 1 cửa của phiên (đối chiếu file lệnh cửa đó vs vật chứng) tìm bước lệch bị sót — 0-nhãn khi có bước lệch là ca nguy nhất. AUTO fire @bookend-close SAU khi lead chốt bảng-nhãn phiên (session-end §L.b(m)); phiên KHÔNG có bảng-nhãn/0 cửa lệch ⇒ pin missing ⇒ NO-OP-có-khai 1 dòng, CẤM ĐẠT-ảo. PIN đích-danh fail-closed — nhận path bảng-nhãn + vật chứng cửa + run-folder; pin missing ⇒ SKIP-CO-KHAI, CẤM tự glob. Propose-only, lead single-writer (backstop = git-diff commit-gate). KHÔNG soi vòng tooling/harvest (ring1) · KHÔNG soi H24 (ring2) · KHÔNG soi nén-ngủ (ring4) · KHÔNG soi trio-memory (harness-audit) · KHÔNG soi lớp-mềm _mind (bộ-ba Ctx) · KHÔNG chấm diff-code (reviewer). ✅ verified-runtime @S185 CÙNG PHIÊN LAND: registry hot-reload agent-MỚI (data-point lần 2 sau S107 — MỚI ⟂ EDIT khác nhau) + spawn-probe ALIVE fail-closed đúng ngưỡng (SKIP-CO-KHAI 3-pin + 2 nhà canonical / 2 tool-call).
tools: Read, Grep, Glob, Bash
model: opus
effort: max
memory: project
maxTurns: 16
---
# ring5-audit — KIỂM vòng-6 nghi-thức cửa phiên (slot 41, land @S185)
Mày là vai-KIỂM của vòng nghi-thức cửa phiên. Con-đo của vòng này gồm: máy `scripts/tien-kiem-cua.ps1` (điểm danh 2-nguồn đầu mỗi cửa, LUÔN exit 0 — INFORM) + người-gán-nhãn theo `docs/governance/ritual-labels.md` (4 nhãn + vòng hỏi ngược 5 cột). Mày ĐỌC output của họ, chấm ĐẠT/TRƯỢT per-nhãn, và là vai DUY NHẤT có quyền **đề nghị xoá án**.
## CONTRACT — 4 nghĩa-vụ (thứ-tự bắt buộc)
1. **PIN-gate (fail-closed):** nhận {path bảng-nhãn phiên · path vật chứng các cửa (run.md/session-log/marker) · run-folder bookend}. Thiếu ⇒ in `RING5: SKIP-CO-KHAI — pin missing: <cái gì>` + DỪNG. Phiên 0-nhãn có khai ⇒ `RING5: NO-OP — 0 nhãn` + thách-CLEAN (nghĩa vụ 3).
2. **Per-nhãn verdict:** với MỖI hàng bảng-nhãn — chạy lại 3 vị-từ của nhãn đó (vật-mốc `Test-Path`/grep-khuôn · dòng-khai grep-mã-bước · điều-kiện-cho-phép chạy-lại) bằng lệnh KHÁC lệnh người gán dùng. Nhãn đúng lớp ⇒ ĐẠT. Nhãn NHẦM LỚP ⇒ **XOÁ-ÁN-ĐỀ-NGHỊ** kèm vị-từ + lớp đúng. Vị-từ không chạy được ⇒ KHÔNG-CHẤM-ĐƯỢC (cấm ĐẠT-ảo).
3. **thách-CLEAN:** bảng-nhãn rỗng/mỏng ⇒ tự đối chiếu 1 cửa (file lệnh cửa vs vật chứng lượt) tìm bước lệch sót. Tìm được ⇒ FLAG SÓT kèm nhãn đề nghị.
4. **Return schema-NHỎ chống #53:** artifact-first ghi `sub-ring5-audit.md` vào run-folder TRONG LÚC LÀM; return dòng-1 `RING5: <n>Đ/<m>T/<x>-xoá-án-đề-nghị · falsify <h>H/<b>B · <1 câu>` + con-trỏ.
## Ranh
Đề-nghị-xoá-án ≠ xoá: lead verify vị-từ rồi mới lật sổ (single-writer). Nhãn `tự ý bỏ` được xoá-án thành `suy giảm hợp lệ` phải có điều-kiện-cho-phép chạy-lại ra ĐÚNG in kèm — không có phép chạy = không có đề nghị. KHÔNG store_memory. Mọi số kèm lệnh tái-lập.

View File

@ -32,7 +32,7 @@ Chỉ cắm 2 cửa `session-start`/`session-end` thì **đúng ca anh đang lo
| chế-độ | cửa | làm gì | chi-phí |
|---|---|---|---|
| **DÒ** (detect-only) | `/tiep` · `/pause` | list + so id → in `thu-moi: se=X all=Y`. 🔴 **KHÔNG copy · KHÔNG hash · KHÔNG python.** X hoặc Y > 0 ⇒ nêu **1 dòng** rồi đi tiếp, để bookend kéo | ~5ms |
| **DÒ** (detect-only) | `/tiep` · `/pause` · `/day` *(+S185 W-1 — cửa VÀO nhẹ, nhịp thành 5 cửa)* | list + so id → in `thu-moi: se=X all=Y`. 🔴 **KHÔNG copy · KHÔNG hash · KHÔNG python.** X hoặc Y > 0 ⇒ nêu **1 dòng** rồi đi tiếp, để bookend kéo | ~5ms |
| **KÉO** (đầy-đủ) | `/session-start` · `/session-end` | `se>0`**`/check-email`** STAGE 1 (copy + verify 2 tuyến + log `_index`) · `all>0`**`/adap-apply`** | theo số thư |
🔴 **DÒ PHẢI QUÉT CẢ HAI KÊNH — đây là kẽ thật, và nó nằm ở NHỊP chứ không ở tool:** `outbox/se` (directed, → `/check-email`) **VÀ** `outbox/all` (fan-out, → `/adap-apply`). Không có nhánh `all` thì **10 broadcast đợt adap-11 nằm im 5 ngày** (07-18→07-23) — ca đã xảy ra thật, không phải giả-định. **DÒ chỉ ĐẾM và ĐỊNH TUYẾN, không kéo** ⇒ vẫn rẻ.

39
.claude/commands/day.md Normal file
View File

@ -0,0 +1,39 @@
# /day — dậy-nhẹ probe-first (W-1 YC-021 anh chốt @S185 · adopt hub `2026-07-28-Governance-day-wake-probe-first-resume`, floor F1-F4)
> **Nguyên tắc: probe-rồi-mới-trả-giá.** Đo delta TRƯỚC (chỉ-đọc, <500ms — ngưỡng owner `stop_point_cheap_ms`), trả đúng giá SAU: **sạch thì dậy nhẹ, bẩn thì tự nâng chạy trọn `/tiep`**. Nghiêng an-toàn: probe lỗi / nghi ngờ = DELTA.
> 🔴 **KHÔNG thay `/tiep`** — `/tiep` vẫn là đường nối-đầy-đủ (H22); `/day` chỉ mở lối rẻ cho ca **đầu-ngày-sau-điểm-dừng-SẠCH**. Gõ `/day full` = ép chạy trọn `/tiep` bỏ qua probe (cửa thoát cưỡng chế F2).
## Thực hiện tuần-tự
### 1. BƯỚC 0 — tiền kiểm (không chặn)
`powershell.exe -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1 -Cua day` → in 1 dòng. Lỗi ⇒ `tien-kiem loi (khong chan)` → đi tiếp.
### 2. Probe (F1+F3 — máy, chỉ-đọc)
`powershell.exe -ExecutionPolicy Bypass -File scripts/day-probe.ps1` → đọc verdict dòng `DAY-PROBE:`.
- Máy chọn marker cuối bằng **ts TRONG file** (không mtime — Dropbox chạm mtime), anchor = **commit-chốt-dừng** (commit ADD marker; fallback head-sha trong marker — bẫy-một F3), kiểm anchor **sống + tổ-tiên HEAD** (bẫy-hai F3 — SE có squash closeout nên bẫy này THẬT).
- 4 tín hiệu: commit-sau-anchor · dirty (mọi porcelain — không allowlist, nghiêng DELTA) · (run-folder mới đã phủ bởi 2 tín hiệu trên) · sentinel `closing:` (Sàn-2).
### 3. Route theo verdict
| Verdict | Đường |
|---|---|
| **CLEAN** (0-hit toàn bộ) | **DẬY NHẸ** — bước 4 |
| **DELTA** | in nguyên dòng signals của probe → **TỰ NÂNG**: chạy TRỌN [`/tiep`](tiep.md) §0→§3-ter. KHÔNG dậy nhẹ trên nền có delta |
| **ANCHOR-LOST** | khai verdict CÔNG KHAI trong report (hỏng-an-toàn phải CÓ TIẾNG — F3) → TỰ NÂNG `/tiep` trọn |
| *(user gõ `/day full`)* | bỏ probe → `/tiep` trọn |
### 4. DẬY NHẸ (chỉ khi CLEAN)
1. **Nạp LÕI:** đọc `.claude/WAL.md` (trọn, ≤40 dòng) + block TRÊN CÙNG của `_mind-s-<N>.md` (mới-nhất-ở-trên). 🔴 **BỎ** nạp-nền 9-nguồn `tiep_reload` + **BỎ** spawn `ctx-verifier` (tầng kiểm-lúc-đọc) — hợp lệ vì block lớp-mềm đã qua `ctx-curator` kiểm-lúc-ghi tại `/pause`, và 0-delta nghĩa là nó còn nguyên giá trị (**không trả tiền kiểm hai lần** — F1).
2. **Report dậy ≤10 dòng:** verdict + tóm `next:` WAL + 1 ý sống nhất từ §D `_mind` + **khai rõ 2 khoản SKIP** (nạp-nền + ctx-verifier).
3. **Marker mỏng (F4):** ghi `_day-<i>.md` vào `.claude/sessions/session-<N>/` (`<i>` = max(_day-*)+1) — ĐÚNG 5 trường như `_tiep-*`: `ts` · `head-sha` · `verdict: CLEAN` · `route: day-nhe` · `jsonl-hint`. KHÔNG khối lớp-mềm, KHÔNG commit tay — **Stop-hook `wal-flush.ps1` tự commit nó cuối turn** (`sessions/` thuộc 4-path hook) ⇒ lượt `/day`/`/pause` KẾ probe thấy cây SẠCH, marker không tự-đầu-độc phép đếm dirty (reviewer F-3 @S185 — mâu thuẫn "không commit riêng ⟂ probe đếm dirty" hoà giải bằng sự thật hook, không phải bằng allowlist).
4. DỪNG — chờ việc anh giao. Việc tới mà cần nền đầy đủ ⇒ nâng `/tiep` lúc đó.
### 5. Falsifier 2 chiều (F4 — cho tầng audit / ring5)
- **CLEAN-giả:** marker `_day-*` ghi `verdict: CLEAN` mà tồn tại commit thật giữa anchor và ts của nó ⇒ probe sai → FLAG (`git rev-list --count <anchor>..<commit-tại-ts>` > 0).
- **Luôn-DELTA:** report dậy BẮT BUỘC khai signals/`anchor-lost` mỗi lần tự nâng ⇒ chuỗi tự-nâng dài bất thường soi được từ dãy `_day-*` marker (route toàn `full`), không chết im.
## Guard F2 (chống-trùng — mirror ở 2 lệnh cũ)
- [`pause.md`](pause.md) bước-0: marker cuối đã là `_pause-*` + probe CLEAN ⇒ **no-op** "đã dừng rồi, 0 delta — giữ nguyên" (không sinh thêm marker/lớp-mềm/commit).
- [`tiep.md`](tiep.md) ghi chú đầu §0: probe CLEAN ⇒ được phép route `/day`-nhẹ thay vì đốt nghi-thức full lần hai (trừ khi user muốn full).
## Nấc trung thực @S185
`executed + dogfood-TAY` (probe chạy thật DELTA-379ms trên repo + fault-inject cây tạm 4/4: CLEAN · DELTA-sentinel · DELTA-thật · ANCHOR-LOST-loud) + **listed-in-session** — lệnh MỚI hiện skill-list NGAY không cần restart (data-point ×2 cùng ngày: `/day` + agent `ring5-audit`; **file .md MỚI hot-reload ⟂ EDIT file cũ thì không** — phép đo no-hot-reload S120/S121 đo trên EDIT, 2 lớp KHÁC nhau). `/day` gõ-thật + self-check ca-3/4/5 thư hub = lượt dậy thật kế tiếp.

View File

@ -6,7 +6,11 @@ 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).
> Cặp với **`/tiep`** (đường recovery duy-nhất). 🔴 restart Claude Code sau khi **SỬA** command `.md` (EDIT không hot-reload — đo S120/S121); file `.md` **MỚI** thì hot-reload được (data-point S107 + ×2 @S185: `/day` + `ring5-audit` đều hiện ngay trong phiên land).
## 0. Guard chống-trùng (F2 day-wake, +S185 YC-021/W-1)
Chạy `powershell.exe -ExecutionPolicy Bypass -File scripts/day-probe.ps1` (chỉ-đọc, <500ms). Nếu **marker cuối đã là `_pause-*`** verdict = **CLEAN** **NO-OP**: in *"đã dừng rồi, 0 delta — giữ nguyên"* + DỪNG (không sinh thêm marker/lớp-mềm/commit người trùng lệnh không bị phạt token). Mọi ca khác (DELTA/ANCHOR-LOST/marker-cuối-không-phải-pause/probe-lỗi) chạy tiếp bình thường từ bước 1.
Thực-hiện **tuần-tự 5 bước** sau; trong lúc chạy **KHÔNG nhận việc mới**:

View File

@ -187,6 +187,7 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
- **(vi) Post-wave assertion:** xong 3 con → `git status --short` → **kỳ vọng 0 tracked-change ngoài run-folder**; có thay-đổi lạ ⇒ residual-write ⇒ **báo anh + revert** (G-015: propose-only KHÔNG code-enforced ở kênh Bash — git-diff = backstop THẬT).
- **(vii) [M4] Vết 2 lớp (giữ NGUYÊN sau khi bỏ consent @S151):** dòng trạng-thái ở (i) **IN CẢ khi Light/hỏi-đáp** (Light ⇒ skip CHẠY hợp-lệ, **CẤM skip IM-LẶNG**); khi skip (Light **HOẶC** vòng không chạy được — 🧊 vế "khong-gat" retired @S151 cùng consent-gate) ⇒ ghi **1 dòng vết** vào `.claude/WAL.md`: `trio: skipped S<nn> (<ly-do: light | loi | ...>)`.
- **(viii) Đơn-vị nhịp:** "phiên-LOGIC" hub map **TẠM** = nhãn-phiên `S<nn>` (SE chưa adopt session-logic). 🔴 **KHÔNG cadence-key** trong `memory-budget.json`, **KHÔNG tick** counter cho bộ-ba (nhịp bộ-ba ≠ nhịp H24 — trộn 2 đồng-hồ = hỏng cả hai).
- **(m) 🔬 ring5-audit @close — KIỂM vòng-6 nghi-thức cửa phiên** *(+S185 slot (41) — YC-021/W-2 anh chốt "đồng ý thêm 1 nghi thức ko vấn đề"; khuôn thư hub 08-08 vòng-6):* SAU khi lead chốt **bảng-nhãn nghi-thức** của phiên (các bước cửa bị lệch gán 1 trong 4 nhãn `ritual-labels.md`) ⇒ spawn `ring5-audit` PIN {bảng-nhãn · vật chứng cửa · run-folder} → verdict per-nhãn + falsify vị-từ + **đề-nghị-XOÁ-ÁN** khi nhãn nhầm lớp (lead verify vị-từ rồi mới lật). Phiên 0-bước-lệch ⇒ lead ghi 1 dòng `ring5: 0-nhãn @S<nn>` (vết M4) ⇒ vai NO-OP-có-khai. Contract = canonical [`.claude/agents/ring5-audit.md`](../agents/ring5-audit.md) (B1). 🔴 verified-pending-restart @S185 — trước restart CLI, mục này ghi vết skip thay vì spawn.
- **(l) 🔎 ctx-audit @close — vai-3 vòng Ctx (SOI-CHUỖI)** *(adopt thư `0df10df4` @S153; 🔄 **OWNER-VETO @S153**: (38)(a) 1-vai → **hub-form 3-vai** anh chốt trực tiếp — vai-1 `ctx-curator` @mỗi-pause · vai-2 `ctx-verifier` @mỗi-tiep · vai-3 đây; 🔴 ăn từ phiên sau restart CLI):* AUTO **SAU các vòng đo (a)-(k), TRƯỚC §L.c** — spawn vô-điều-kiện (hình-B), **máy TRƯỚC vai** (`mind-check` full + closed-check §6.3-bis). **PIN đích-danh fail-closed**: path `_mind-s-<N>.md` + run-folder bookend-close; `_mind` vắng ⇒ **NO-OP 1 dòng có khai**. Vai: **bất-biến chuỗi** (tự đếm ĐĨA) + **chấm mồi-ngầm** + **KIỂM-VẾT vai-1/vai-2** (phiên có pause/tiep: đọc verdict chúng + đối-chứng chọn mẫu; phiên 0-pause/0-tiep: tự chạy hồi-tố 5-khoản + 4-khoản = fallback) — contract = canonical [`.claude/agents/ctx-audit.md`](../agents/ctx-audit.md) (B1, KHÔNG chép). Lead scribe `sub-ctx-audit-close.md` **NGAY khi trả** + seed diary `agent-memory/ctx-audit/` **CÙNG lượt** (kẻo C11(b) FLAG diary-0-delta — datum T3 @S153).
### §L.c — completeness-gate 5-vòng (D1, land S146 — 🔴 CÓ RĂNG: CẤM bare-PASS)

View File

@ -10,6 +10,8 @@ argument-hint: (không tham số)
Thực-hiện **tuần-tự**: §0 (sàn) → §1 → §2 → §3 → §4.
> 🔸 **Guard F2 day-wake (+S185 YC-021/W-1):** TRƯỚC §0 được phép chạy `scripts/day-probe.ps1` (chỉ-đọc <500ms); verdict **CLEAN** + ca đầu-ngày ⇒ hợp lệ route sang [`/day`](day.md) dậy-nhẹ thay vì đốt nghi-thức full lần hai (trừ khi user muốn full / việc tới cần nền đầy-đủ). DELTA/ANCHOR-LOST ⇒ chạy trọn file này như thường — nghiêng an-toàn.
---
## 0. 🔴 Sàn-3 canonical — **"sổ trống ≠ sạch"** (ĐỊNH-NGHĨA MỘT CHỖ DUY-NHẤT)
@ -101,7 +103,9 @@ for d in .claude/sessions/session-*/; do
{ [ -f "$d/_end" ] || [ -f "$d/closed.md" ]; } && continue
p=$(( $(ls "$d"_pause-*.md 2>/dev/null | wc -l) + $(ls "$d"pause-*.md 2>/dev/null | wc -l) ))
[ "$p" -eq 0 ] && continue
r=$(( $(ls "$d"_tiep-*.md 2>/dev/null | wc -l) + $(ls "$d"resume-*.md 2>/dev/null | wc -l) ))
r=$(( $(ls "$d"_tiep-*.md 2>/dev/null | wc -l) + $(ls "$d"resume-*.md 2>/dev/null | wc -l) + $(ls "$d"_day-*.md 2>/dev/null | wc -l) ))
# ^ `_day-*` cộng vào r từ @S185 (W-1 day-wake): dậy-nhẹ CLEAN = một lần NỐI hợp lệ (marker mỏng F4).
# Thiếu vế này thì chuỗi pause→day→pause đọc thành p>r ⇒ ORPHAN-L kêu oan mỗi lần dùng /day.
[ "$p" -gt "$r" ] && echo "ORPHAN-L: $d (pause=$p tiep=$r, chua chot-ket)"
done
```

View File

@ -40,6 +40,7 @@ const VALID_ROLES = [
// TUẦN TỰ eval→refine→audit (CẤM song song — audit đọc bản cũ = verdict vô-nghĩa), lead scribe return từng con vào run-folder.
'ring1-audit', // +S145 C4/C4b (adap dot-11, owner-decision [2] TÁCH) — vai-KIỂM ĐỘC-LẬP vòng tooling/harvest: đọc OUTPUT H1(tooling-auditor)+H2(harvest-curator), no-self-exempt ≠ H1/H2. AUTO fire-after-measure @session-end §L.b(g-bis) (KHÁC trio/H24 consent-gated). Vai #1/3 round-KIỂM (ring2-audit + ring4-audit land dần incremental).
'ring2-audit', 'ring4-audit', // +S145 C4/C4b vai #2/3 + #3/3 round-KIỂM (owner-decision [2] TÁCH mỗi-vòng-1-con). ring2-audit = KIỂM vòng soi-lead (đọc OUTPUT lead-stale+lead-gap, no-self-exempt ≠ chúng, KHÔNG soi lead trực-tiếp) · ring4-audit = KIỂM vòng nén-ngủ (đọc /sleep-recovery gist+Fidelity, tự đo byte). AUTO fire-after-measure, propose-only, NO-OP nếu vòng không đo.
'ring5-audit', // +S185 slot(41) YC-021/W-2 anh chốt — KIỂM vòng-6 nghi-thức cửa phiên (đọc OUTPUT tien-kiem-cua + bảng-nhãn ritual-labels 4-nhãn, quyền ĐỀ-NGHỊ-XOÁ-ÁN khi nhãn nhầm lớp). AUTO @bookend-close sau bảng-nhãn, NO-OP nếu 0-nhãn-có-khai.
'ctx-audit', // +S153 ctx soft-memory 0df10df4 — vai-3 vòng Ctx: SOI-CHUỖI 2 đầu phiên, INFORM-only (🔄 OWNER-VETO @S153: (38)(a) 1-vai → hub-form 3-vai, anh chốt trực tiếp)
'ctx-curator', 'ctx-verifier', // +S153 OWNER-VETO hub-form 3-vai — vai-1 KIỂM nháp @mỗi-pause (carve-out pause §1) · vai-2 ĐỐI-CHIẾU+NẠP @mỗi-tiep; cả 2 INFORM-only trả-văn-bản
'score-counter', 'score-count-auditor', // +S181 W4b (chủ dự án phán P4) — tầng-2 + tầng-3 của luật chấm điểm

View File

@ -0,0 +1,280 @@
# sub-reviewer-yc021 — REVIEW độc lập gói YC-021 @S185 (W-1 day-wake · W-2 ring5 · W-4 bảng+thư)
> Vai: `reviewer` (adversarial, READ-only). Artifact-first. Mọi số dưới đây **đo tại phiên này**, kèm lệnh tái-lập.
> Diff scope: working-tree dirty (chưa commit) — `git diff --stat` = 9 file tracked (+16/4) + 5 file untracked.
## 0. Bản đồ diff (đo, không chép)
```
git status --porcelain -> 14 dòng (9 M + 5 ??) [khớp probe: dirty=14]
git diff --stat -> 9 files, 16 insertions(+), 4 deletions(-)
```
| Khối | File | Loại |
|---|---|---|
| W-2 | `.claude/agents/ring5-audit.md` | MỚI |
| W-2 wire | `session-end.md`(m) · `hmw.js` VALID_ROLES · `agents/README.md` · `docs/STATUS.md` | sửa |
| W-1 | `scripts/day-probe.ps1` · `.claude/commands/day.md` | MỚI |
| W-1 chạm | `tiep.md` ⑤(b) + ghi-chú route · `CLAUDE.md` · `check-email.md` · `pause.md §0` | sửa |
| W-4 | `docs/governance/bang-tham-quyen-owner-DRAFT.md` · thư outbox + `broadcasts/_index.md` | MỚI/sửa |
---
## R1 — ring5 persona đúng khuôn ring-family? → **PASS_WITH_FIXES**
### Đo khuôn frontmatter (lệnh tái-lập ở dưới)
```bash
for f in .claude/agents/*.md; do ... grep -c "^effort:" / "^memory:" / "^maxTurns:" / "^tools: \[" ; done
```
| Vai | effort | memory | maxTurns | tools dạng list |
|---|---|---|---|---|
| ring1/ring2/ring4-audit | 1 | 1 | 1 | 1 |
| **ring5-audit** | **0** | **0** | **0** | **0** |
| 26/29 vai còn lại (trừ `score-*`) | 1 | 1 | 1 | 1 |
**F-1 (MAJOR):** `ring5-audit.md:4-5` chỉ có `tools:`+`model: opus`; **THIẾU `effort: max` + `memory: project` + `maxTurns`**. `ring5` là vai DUY NHẤT trong 29 vai thiếu cả `effort` lẫn `memory` (`score-counter`/`score-count-auditor` thiếu maxTurns nhưng VẪN có effort+memory). Hệ quả đo được: worker-tier-pin S124 ("14/14 sub = opus + effort:max") **không áp cho vai này** ⇒ vai KIỂM nặng nhất về suy-luận lại chạy effort mặc định; và không có `memory: project` ⇒ nhật-ký vai (`.claude/agent-memory/ring5-audit/MEMORY.md`) không được nạp như 3 ring kia. Đây là lệch **khuôn**, không phải lệch thẩm mỹ.
### 5 thuộc tính ranh (soi từng cái, so `ring2`/`ring4`)
| Thuộc tính | ring2 | ring4 | ring5 | verdict |
|---|---|---|---|---|
| PIN fail-closed | có (§i) | có (§i) | có (§CONTRACT-1, `SKIP-CO-KHAI` + DỪNG) | ✅ |
| no-self-exempt | có (m-3) | có (m-3) | có (m-3, "KHÔNG phải máy tien-kiem, KHÔNG phải người gán nhãn") | ✅ |
| NO-OP-có-khai, cấm ĐẠT-ảo | có | có | có (`RING5: NO-OP — 0 nhãn` + CẤM ĐẠT-ảo) | ✅ |
| propose-only + lead single-writer | có | có | có + khai backstop git-diff | ✅ |
| thách-CLEAN bắt buộc khi 0-flag | có | có | có (soi 1 cửa tìm bước lệch sót) | ✅ |
| falsify ≥2 + tái-dựng ≥1 số | có (§iii/§iv) | có (§iii/§iv) | có (gộp vào §2/§4) | ✅ |
### "Có chỗ nào cho vai tự lật sổ không?" → **KHÔNG** (soi 3 lớp, đều khoá)
1. `:21` — "Đề-nghị-xoá-án ≠ xoá: lead verify vị-từ rồi mới lật sổ (single-writer)".
2. `:21` — điều-kiện đề nghị **có vị-từ bắt buộc**: "không có phép chạy = không có đề nghị" ⇒ không thể xoá án bằng lời.
3. `:3` — "Propose-only, lead single-writer (backstop = git-diff commit-gate)" + return schema chỉ chứa `xoá-án-ĐỀ-NGHỊ`, không có động từ ghi.
⇒ quyền đặc thù **có ranh đúng**, không đẻ cửa tự-lật-sổ.
### Ghi nhận đứng vững (không hạ thước, cũng không bịa lỗi)
- `ring5` khai ranh-trục **loại trừ đủ 6 turf** (ring1/ring2/ring4/harness-audit/bộ-ba-Ctx/reviewer) — đầy đủ hơn cả ring2 (loại 3) và ring4 (loại 4). Đây là điểm **tốt hơn** khuôn cũ, giữ nguyên.
- 2 con-đo mà nó KIỂM **tồn tại thật trên đĩa**: `docs/governance/ritual-labels.md` (13.620 B) + `scripts/tien-kiem-cua.ps1` (5.813 B). Không phải pin ma.
- **F-2 (minor):** `ring5` là ring DUY NHẤT không khai `tools:` gồm 4 MCP `rag-unified` như ring1/2/4 — nếu là CỐ Ý (vai không cần RAG) thì nên khai 1 câu; hiện đọc thành sót.
---
## R2 — Wire ring5 đủ + nhất quán? → **PASS**
### Đếm lại (không tin lời khai)
```bash
python: parse block VALID_ROLES (strip //-comment TRƯỚC khi regex) -> 29
ls .claude/agents/*.md | grep -v README | wc -l -> 29
```
🔴 **Bẫy thước đã dẫm và tự sửa:** lần đếm đầu `s.index(']', i)` cắt block ở dấu `]` **trong comment** `owner-decision [2]` ⇒ ra **18** (hụt 11). Chỉ khi cắt theo dòng `^\]` mới ra 29. Ghi lại vì "0/N hit" kiểu này im lặng.
| Chỗ wire | Bằng chứng | verdict |
|---|---|---|
| `hmw.js:43` VALID_ROLES | `'ring5-audit',` có comment lý-do | ✅ |
| `session-end.md:190` mục (m) | AUTO @close sau bảng-nhãn + NO-OP 0-nhãn + trỏ canonical (B1) | ✅ |
| `agents/README.md:217` | row matrix đặt ĐÚNG cụm ring1/2/4 | ✅ |
| `docs/STATUS.md:478` | 28→**29**, khớp 2 phép đếm độc lập ở trên | ✅ |
**Không sót chỗ thứ 5** — 2 ứng viên đã soi và loại:
- `hmw.js:251-254` writeGuard comment liệt "SE read-only sub": **ring1/ring2/ring4 cũng KHÔNG có tên ở đó** ⇒ ring5 vắng là **nhất quán với tiền lệ**, không phải gap mới (không nhồi cosmetic).
- skill-matrix: cả 4 ring đều khai "KHÔNG dùng domain skill" trong cùng bảng README ⇒ đã phủ.
---
## R3 — `day-probe.ps1` → **PASS_WITH_FIXES**
### Đo cứng
```bash
python: bytes=5486 · non-ascii=0 · BOM=none · EOL=LF # gotcha #30 SẠCH
powershell -File scripts/day-probe.ps1
-> DAY-PROBE: DELTA | anchor=32f50f35(seal-commit) alive+ancestor
| commits-sau=27 | dirty=14 | closing=0 | marker=_tiep-3.md | 350ms
```
- `dirty=14` **khớp byte-exact** `git status --porcelain | wc -l` = 14 ⇒ tín hiệu (b) đo đúng thứ nó khai.
- 350ms < `stop_point_cheap_ms` = 500 (đo lại từ `memory-budget.json`).
### Nghiêng-DELTA: liệt **đủ 8 nhánh thoát**, không nhánh nào exit ≠ 0
| # | Nhánh | verdict in ra | exit |
|---|---|---|---|
| 1 | `:40` no sessions dir | DELTA | 0 |
| 2 | `:46` no logic-session | DELTA | 0 |
| 3 | `:58` 0 marker có ts | DELTA | 0 |
| 4 | `:68` anchor không resolve | DELTA | 0 |
| 5 | `:72` anchor mất khỏi object store | **ANCHOR-LOST** (loud) | 0 |
| 6 | `:76` anchor không phải tổ tiên HEAD | **ANCHOR-LOST** (loud) | 0 |
| 7 | `:88/:89` CLEAN / DELTA | — | 0 |
| 8 | `:94` catch mọi exception | DELTA (`probe-loi:`) | 0 |
`Out-Line`**cửa thoát DUY NHẤT** và luôn `exit 0`; `finally { Pop-Location }` vẫn chạy trước exit. **KHÔNG có nhánh exit ≠ 0** ✅. Anchor logic đúng thư hub F3: seal-commit trước (`git log --diff-filter=A`), fallback in-file `head-sha`, rồi `cat-file -e` + `merge-base --is-ancestor` ✅.
### 🔴 F-3 (MAJOR) — marker `_day-*` **TỰ ĐẦU ĐỘC** probe kế tiếp
`day.md:27` chốt: marker `_day-<i>.md` "**KHÔNG commit riêng** (đi theo chuyến commit kế / hook)".
`day-probe.ps1:81` đếm dirty = `git status --porcelain` **không allowlist** (header `:12` tự khai "no allowlist - lean DELTA").
⇒ Ngay sau một lượt `/day` dậy-nhẹ, `_day-1.md` là file **untracked**`dirty ≥ 1`**mọi probe sau đó trả DELTA cho tới khi có commit**.
Hệ quả đo được, 2 cái:
- (a) `/day` lần thứ hai trong cùng chu kỳ commit **luôn** tự nâng `/tiep` trọn — đường rẻ chỉ dùng được **1 lần/commit**, trong khi `day.md:4` bán nó là lối rẻ cho "ca đầu-ngày".
- (b) Guard `pause.md §0` (điều kiện `marker cuối = _pause-*` **VÀ** CLEAN) **không bao giờ NO-OP** nếu lượt trước là `/day`.
Bằng chứng cơ chế: probe hiện tại in `dirty=14`, đúng bằng 9 M + **5 untracked** ⇒ untracked CÓ được tính.
Chưa vỡ an-toàn (nghiêng DELTA = đúng chiều), nhưng **claim giá trị của F2/F4 rộng hơn hành vi thật** ⇒ phải khai trong `day.md`, hoặc cho `_day-*` đi theo commit ngay, hoặc trừ chính marker vừa ghi khỏi phép đếm dirty.
### F-4 (minor) — `Substring(0,8)` cứng ở 2 chỗ
`:76``:87` dùng `$anchor.Substring(0,8)` **không** `[Math]::Min` (khác `:72` đã phòng). Nhánh fallback `in-file-sha` chấp regex `[0-9a-f]{7,40}` ⇒ sha 7 ký tự làm ném `ArgumentOutOfRange` → rơi catch → DELTA `probe-loi:`. Chiều hỏng an toàn, nhưng thông điệp sai lớp (báo "probe lỗi" thay vì sự thật).
### F-5 (minor) — `Get-Content -TotalCount 8` + họ marker hẹp
`:50-52` chỉ đọc 8 dòng đầu tìm `ts:`; và regex marker `^_(pause|tiep|snapshot|day)-\d+\.md$` **không phủ họ legacy `resume-*.md`** — vốn vẫn được `tiep.md:106` đếm là đối-ứng hợp lệ. Nếu marker mới nhất là `resume-*`, probe lấy marker CŨ hơn ⇒ anchor cũ ⇒ DELTA (an toàn, nhưng lý do in ra sai).
---
## R4 — 3 chạm + 2 guard → **PASS_WITH_FIXES**
### (a) r-set ⑤(b) — chạy nhẩm ca `pause=2 / tiep=2 / day=1`
`tiep.md:104-109` sau sửa: `p = |_pause-*| + |pause-*|` = 2 · `r = |_tiep-*| + |resume-*| + |_day-*|` = 2+0+1 = **3**`p > r` **false****không kêu oan** ✅. Ca đối chứng bỏ `_day-*` khỏi r: r=2, p=2 ⇒ vẫn không kêu; ca `pause=2/tiep=1/day=1`: có `_day` r=2 (im) ⟂ không `_day` r=1 (**kêu oan**) ⇒ vế thêm vào là **cần thật**, đúng như comment `:108` mô tả. Cân-sổ cũ **không vỡ**: `_end` vẫn `continue` trọn thư mục (`:103`), `p=0` vẫn `continue` (`:105`), dual-accept legacy vẫn cộng thẳng.
Chiều lỏng ra (r lớn hơn ⇒ ít kêu hơn) là **có thật nhưng đúng ngữ nghĩa**: `_day-*` chỉ sinh ở nhánh CLEAN, tức một lần NỐI hợp lệ. Không tính là lỗi.
Kiểm chéo bất-biến lớp mềm: `day.md:27` khai "KHÔNG khối lớp-mềm" ⇒ `|block| ∈ {p, p+1}``session_ctx.py:349-358` canh **không bị `/day` chạm** ✅ (đây là chỗ dễ vỡ nhất, và nó không vỡ).
### 🔴 F-6 (MAJOR) — họ marker `_day-*` **chưa đăng ký**, máy naming-scan sẽ kêu mỗi lần dùng `/day`
```bash
grep -n RX_SESSFAM scripts/naming-scan.ps1
-> :49 $RX_SESSFAM = '^_(tiep|pause|snapshot|context-s|mind-s|end)'
powershell: '_day-1.md' -cmatch $RX_SESSFAM -> False
'_tiep-1.md' -cmatch $RX_SESSFAM -> True (control dương)
```
`naming-scan.ps1:242-250` (bộ 5/7 `moc-phien`) rơi xuống `return @('LECH', 'tep moc phien moi BUOC BAT DAU bang _ ...')`**mỗi `_day-<i>.md` = 1 FLAG LECH vĩnh viễn**, mà thông điệp lại SAI (file có bắt đầu bằng `_`).
Doc song sinh cũng chưa vá: `docs/governance/naming-standard.md:115` khai **"7 họ tiền tố hợp lệ"** và liệt đủ 7, **không có `_day-*`**.
⇒ đây là **chỗ chạm thứ 5** mà spec W-1 (3 chạm + 2 guard) không đếm tới. Cùng lớp bài học "vá 1 CLASS phải grep MỌI matcher cùng-lớp": `_day-*` đẻ họ thứ 8 nhưng chỉ đăng ký ở 2/4 nơi biết mặt họ (`day-probe.ps1` biết · `tiep.md` biết · `naming-scan.ps1` KHÔNG · `naming-standard.md` KHÔNG).
### F-7 (minor) — "ĐÚNG 5 trường như `_tiep-*`" là **sai về tập trường**
`day.md:27` viết marker `_day-*` gồm `ts · head-sha · verdict · route · jsonl-hint` và gọi đó là "**ĐÚNG 5 trường như `_tiep-*`**". Đo `_tiep-3.md` thật: `ts · head-sha · **window-ordinal** · jsonl-hint · **account-label**`. Đúng số 5, **sai tập** — mất `window-ordinal` (thứ `tiep.md:171` khai là lý do người ta ĐỌC marker) và `account-label`. Chỉ là chữ, nhưng nó là chữ mô tả hợp-đồng file.
### (b) `CLAUDE.md` câu nới ⟂ YC-018 ONE-SHOT → **KHÔNG mâu thuẫn**
- Câu mới giữ nguyên "`/tiep` (đường đầy-đủ DUY-NHẤT)" + gắn ngoại lệ **có điều kiện máy** (CLEAN = 0 commit · 0 dirty · 0 sentinel) + "DELTA/ANCHOR-LOST tự nâng về `/tiep` trọn".
- YC-018 ONE-SHOT (bảng W-4 dòng 4) trú ở `session-start.md` + `session-end.md`**hai cửa BOOKEND**, còn `/day` là cửa **VÀO nhẹ giữa ngày**, không phải bookend ⇒ không giẫm địa phận. Kiểm chéo `check-email.md`: `/day` được xếp vào hàng **DÒ** (rẻ), KÉO vẫn chỉ `/session-start`·`/session-end` ⇒ nhất quán.
### (c) `pause.md §0` guard — không vòng lặp, không chặn nhầm ca thật
- Không đệ quy: §0 gọi `day-probe.ps1` (script thuần đọc), **không** gọi lại `/pause`.
- Điều kiện NO-OP là **hội** 2 vế và cả 2 vế đều đọc được từ **một dòng** output (`marker=` + verdict) ⇒ không cần đo thêm.
- Mọi ca còn lại (DELTA / ANCHOR-LOST / marker-cuối-không-phải-pause / probe-lỗi) → chạy tiếp bình thường ⇒ **fail-open đúng chiều**, ca thật không bị nuốt.
- Bất-biến `check-email.md:41` ("thêm bước vào `/pause`·`/tiep` phải đo wall-clock TRƯỚC"): **ĐÃ tuân** — 350ms (tôi đo) / 379ms (họ khai) < 500. **Không** dựng lỗi cộng-dồn: `_stop_point_cheap_owner_S185` ghi owner chấm PASS theo **từng số một** ("machine-block ~140ms, secrets-sweep ~64ms, tien-kiem ~194ms, probe ~281ms"), không theo tổng tôi bác giả thuyết "vượt trần" của chính mình.
---
## R5 — Thư hub → **PASS_WITH_FIXES**
### Stamp + số (đo bằng máy canonical, không tự chế hash)
```bash
python scripts/stamp_verify.py <thư> -> verdict: OK (canonical match)
9988aa0be... == declared
broadcasts/_index.md:153 hash 9988aa0bee16 == 12 ký tự đầu content_sha256 ✅
```
| Claim trong thư | Đo lại | verdict |
|---|---|---|
| `commits-sau=27` | probe tôi chạy: **27** | khớp |
| `dirty=6` | nay 14; **tái dựng thời điểm họ đo** = 5 file W-2 + `.session-counter.json` = **6** (W-1 chưa sinh) | hợp , không phải bịa |
| `379ms` | tôi đo 350ms cùng bậc, số biến thiên theo lượt | |
| `stop_point_cheap_ms=500` | `memory-budget.json` = **500** | |
| `_day-*` cộng vào r-set ORPHAN-L | `tiep.md:106` thật | |
| §3 detector C15 đã cắm | `governance-detectors.ps1:2307/:2342/:2420` , đã fold TOTAL | |
| fault-inject 4/4 răng | **KHÔNG tái lập được** (cây tạm đã xoá; `-RepoRoot` tồn tại nên khả thi về nguyên tắc) | chưa-đo |
### 🔴 F-8 (MAJOR) — claim "không cần restart" của thư **ngược với 2 artifact nội bộ của chính SE**
- Thư `:22`: *"command .md **MỚI** hiện trong skill-list **NGAY không cần restart**"*.
- `day.md:39`: *"`/day` gõ-thật = verified-pending-restart (**command .md mới không hot-reload** cùng chuyến restart slot 73)"*.
- `pause.md:9`: *"🔴 restart Claude Code sau khi **tạo/sửa** command `.md` (no hot-reload)"* chữ "**tạo**" phủ đúng ca MỚI.
Ba câu, hai chiều ngược nhau, về **cùng một cơ chế**; **bản hướng RA NGOÀI là bản mang claim mạnh hơn**. Hub chỉ đọc thư nhận đúng vế chưa được chốt. Không phải overclaim G-015 về *việc đã làm* (thư hedge "gõ-thật = chờ lượt kế"), nhưng **claim cơ-chế** chưa hoà giải nội bộ. Phải: hoặc hạ về "hiện trong danh sách, hành vi gõ-thật chờ restart", hoặc sửa `day.md:39` + `pause.md:9` cho khớp **không được để 2 chiều cùng sống**.
### 🔴 F-9 (MAJOR) — mỏ-neo `error-ledger.md:118` **trỏ hụt**
Thư `:27` viết: *"Họ hàng `first-run-role-has-diary` đã gửi hub tại `error-ledger.md:118`"*.
```bash
grep -n "first-run-role-has-diary" docs/governance/error-ledger.md -> 143 (đếm: 1 hit duy nhất)
sed -n '116,120p' -> nội dung E-012 slot-reuse, KHÔNG liên quan
```
Lệch **25 dòng**, nội dung `:118` nói chuyện khác hẳn người hub mở đúng dòng sẽ đọc nhầm ca. Đúng lớp "mỏ-neo số dòng trôi" đã ăn đòn nhiều lần thư ra ngoài nên neo **TÊN mục** (`E-0xx` / chuỗi `first-run-role-has-diary`), không neo số dòng.
### Cat-6 (văn hướng ra ngoài) — **PASS**, 1 minor
Câu hoàn chỉnh, dấu câu đủ, ngữ pháp đúng; token kỹ thuật giữ nguyên hợp lệ. **F-10 (minor):** vài nhãn nội bộ chưa giải nghĩa cho người ngoài "nấc EXECUTED / listed-in-session", "Fact-0 phía SE", "goi-chot 4.3", "dạng-5 tự-ăn-nhân-chứng" đứng một mình. `bẫy-một/bẫy-hai` thì hợp lệ lấy từ chính thư hub.
---
## R6 — Bảng DRAFT thẩm quyền → **FAIL**
Đo trực tiếp `.claude/agent-memory/memory-budget.json` (python, `utf-8-sig`), từng key một:
| Dòng | Bảng ghi | ĐO THẬT | verdict |
|---|---|---|---|
| 1 | `h24_cadence` 6 · 1 · 3 | 6 · 1 · 3 | |
| 2 | `h24_title_freshness_sessions` 14 | 14 | |
| 3 | `stop_point_cheap_ms` 500 | 500 | |
| 4 | `archive_gate.{autoinject_cap_bytes, **soft_cap_bytes**}` = 25.600 · 30.720 | `autoinject_cap_bytes`=25600 · **`soft_cap_bytes` KHÔNG TỒN TẠI** (keys thật: `_note, autoinject_cap_bytes, low_watermark_ratio, keep_floor_entries, strike_threshold, value_protect`) | 🔴 **F-11** |
| 5 | `keep_floor_entries` 5 · `strike_threshold` 2 | 5 · 2 | |
| 6 | `hmw_width.cap` 30 | 30 (mirror `hmw.js:176 WIDTH_CAP=30`) | |
| 7 | `token_governor` **target 210.000** (thiếu 75.427) | `"210000"` xuất hiện **0 lần** trong `token_governor`; số owner-set thật = `tier1_hotfeed_tokens.lead_tokens` = **380000**. `"75427"` = **0 hit** toàn file | 🔴 **F-12** |
| 8 | `mind_ctx_kb` **32** · `session_ctx_kb` 64 · verbatim 600 | **48** · 64 · 600 | 🔴 **F-13** |
| 9 | `pull_warn_days` "TRỐNG CỐ Ý" | key **vắng** khỏi `memory-budget.json`; nơi khai thật = `check-email.md:48` 🔒 | **F-14** |
| 10 | "mọi key số còn lại" | | |
### 🔴 F-11 (MAJOR) — dòng 4 **bịa provenance**: key `archive_gate.soft_cap_bytes` không tồn tại
`grep "soft_cap"` trong file = 2 hit, **cả 2 nằm trong `_note` văn xuôi**, không phải key. Số 30.720 thật nhưng **byte-cap MEMORY.md của sub** (`token_governor` note), **khác nhà, khác nghĩa**. Bảng này sinh ra để làm nơi tra thẩm-quyền trỏ key ma hỏng đúng chức năng.
### 🔴 F-12 (MAJOR) — dòng 7 sai **cả số lẫn hướng**
Bảng khai owner-SỐ = 210.000 "đang thiếu 75.427". Đo: không key nào tên `target`; số owner-set trong `token_governor` **380.000** (`lead_note`: "ANH-SET 380K (S94 owner-directive), raised 220K380K"). 210K con số **headroom** từng dùng trong diary `harness-eval`, **không phải** giá trị của khoá này. Lệch 45% trên một dòng nhãn "chỉ anh được đổi".
### 🔴 F-13 (MAJOR) — dòng 8 `mind_ctx_kb` **stale 2 phiên rưỡi**
Đo = **48**, bảng ghi **32**. Chính file khoá chứng: `_mind_ctx_kb_raise_S167` = *"🔴 OWNER-DECIDED 2026-08-01 (anh: 'Đồng ý phương án nâng trần' — slot (58)): **32→48**"*. Nghĩa bảng NHÁP trình anh duyệt đang **trả lại cho anh con số anh đã bỏ**, bỏ đúng bằng một quyết định owner vết. Đây ca nặng nhất của R6: bảng thẩm-quyền owner chép sai owner-SỐ thì gật cả bảng = **hồi sinh giá trị cũ**.
### F-14 (minor) — dòng 9 sai **nhà**, đúng **nghĩa**
"TRỐNG CỐ Ý" đúng ( vết owner @S148, khai tại `check-email.md:48`), nhưng header cột 1 tuyên "nhà = `memory-budget.json` trừ khi ghi khác" dòng 9 **không ghi khác** người tra mở JSON sẽ thấy **vắng key** không phân biệt được "cố ý bỏ trống" "chưa ai đặt".
### Cột 2 (owner-LUẬT) — soi provenance, 10/12 có vết thật
Đối chiếu được ngay trong phiên: dòng 1 (`_sealed_P3B_S181` trong JSON) · dòng 9 (ring5 @S185 chính diff này) · dòng 11 (`check-email.md:41` bất-biến **vẫn nguyên văn sau sửa của W-1**, hunk chỉ chạm `:35`) · dòng 7 (C15 fold TOTAL verified R5). Dòng 6 để trống ô "lệnh anh gần nhất" (`—`) **khai thật, không bịa** ✅. Không dựng lỗi cột này.
---
## Tổng kết verdict
| Trục | Verdict | Finding |
|---|---|---|
| R1 ring5 persona | PASS_WITH_FIXES | F-1 (MAJ), F-2 (m) |
| R2 wire ring5 | **PASS** | (29 = 29, 4/4 chỗ, không sót chỗ 5) |
| R3 day-probe.ps1 | PASS_WITH_FIXES | F-3 (MAJ), F-4 (m), F-5 (m) |
| R4 3 chạm + 2 guard | PASS_WITH_FIXES | F-6 (MAJ), F-7 (m) cân-sổ + ONE-SHOT + guard đều SẠCH |
| R5 thư hub | PASS_WITH_FIXES | F-8 (MAJ), F-9 (MAJ), F-10 (m) |
| R6 bảng DRAFT | **FAIL** | F-11, F-12, F-13 (đều MAJ), F-14 (m) |
**Tổng: 8 MAJOR + 6 minor = 14 finding.** Không CRITICAL (không mất dữ liệu / vỡ an-toàn; mọi nhánh máy đều nghiêng DELTA đúng chiều).
**Chặn commit hay không:** R6 thứ **duy nhất** tôi đề FAIL đó bản NHÁP **sắp trình anh gật một lượt**, 3 dòng sai đều owner-SỐ (F-11 key ma · F-12 lệch 45% · F-13 stale sau quyết định owner vết). Gật nhầm = ghi đè quyết định của chính anh. 5 trục kia commit được sau khi khai F-3/F-6/F-8/F-9.
## Phản-chứng đã chạy (bác giả thuyết của CHÍNH TÔI — giữ để đừng lặp)
1. **"Tổng thời gian `/pause` vượt 500ms"** **BÁC**. `_stop_point_cheap_owner_S185` liệt từng số một owner chấm PASS **per-step**, không per-sum day-probe 350-379ms hợp lệ. Không dựng lỗi giả.
2. **"ring5 sót writeGuard `hmw.js:251`"** **BÁC**. ring1/2/4 cũng vắng đó tiền lệ, không phải gap của W-2.
3. **"`_day-*` làm lỏng cân-sổ ORPHAN-L"** **BÁC (một nửa)**. lỏng, nhưng đúng ngữ nghĩa `_day-*` chỉ sinh nhánh CLEAN. Ca `pause=2/tiep=1/day=1` chứng minh vế thêm **cần**, không phải nới bừa.
4. **"thư khai `dirty=6` nay 14 số bịa"** **BÁC**. Tái dựng thời điểm: 5 file W-2 + counter = đúng 6.
## Thước hỏng của TÔI trong lượt này (ghi để không tái phạm)
- `python s.index(']')` cắt mảng JS **trúng `]` trong comment** đếm VALID_ROLES ra 18 thay 29 (hụt 38%). Phải cắt theo **dòng** `^\]`, luôn in cả danh sách để mắt soi.
- `grep -rn` không giới hạn glob trên repo này **treo quá 120s** dùng Grep tool / khoanh `--include`.
END

View File

@ -18,7 +18,7 @@ Kiến trúc: **.NET 10 Clean Architecture + 2 React FE (admin + user) + SQL Ser
5. docs/workflow-contract.md ← ⭐ State machine 9 phase HĐ — base pattern cho PE workflow
```
> ⛓️ **Mạch việc dở (H22):** nằm ở `.claude/WAL.md`; nối lại DUY-NHẤT bằng `/tiep` — kể cả khi anh gõ "làm tiếp" bằng text thường. Không tự recovery cách khác. (Chốt dừng chủ-động = `/pause`; cơ-chế → `docs/governance/harness-11-engine.md` PHẦN N.)
> ⛓️ **Mạch việc dở (H22):** nằm ở `.claude/WAL.md`; nối lại bằng `/tiep` (đường đầy-đủ DUY-NHẤT) — kể cả khi anh gõ "làm tiếp" bằng text thường. Không tự recovery cách khác. **Ngoại lệ hẹp @S185 (YC-021/W-1):** ca **đầu-ngày-sau-điểm-dừng-SẠCH** được `/day` dậy-nhẹ — CHỈ khi máy `day-probe` chứng **CLEAN** (0 commit sau chốt-dừng · 0 dirty · 0 sentinel); DELTA/ANCHOR-LOST tự nâng về `/tiep` trọn. (Chốt dừng chủ-động = `/pause`; cơ-chế → `docs/governance/harness-11-engine.md` PHẦN N.)
> 🔴 **Nghi-thức 2 đầu phiên = ONE-SHOT (YC-018 anh chốt @S185, nguồn thư hub 08-08 Phần 1b):** bookstart + bookend chạy **trọn MỘT LƯỢT**, CẤM lấy `/pause`·`/tiep` làm nhịp chia-chặng nghi-thức, CẤM hẹn-vòng-cửa-sau; đứt bất-khả-kháng ⇒ lượt-nối đầu tiên chạy HẾT phần thiếu. Luật sống ở đầu [`session-start.md`](.claude/commands/session-start.md) + [`session-end.md`](.claude/commands/session-end.md) — dòng này CHỈ TRỎ (B1).
> 🎛️ **Chế-độ đang hiệu-lực (operating-posture) — TRA Ở ĐÂU** *(adap đợt-11, `3-khoan:31-41` discoverability-home ⟂ implement-home)*:

View File

@ -150,3 +150,4 @@
| 2026-07-25 | 2026-07-25-se-to-ai_infra-bao-nac-adap-backlog-va-probe-opus5 | se → ai_infra | outbox/ai_infra | 3a05a6cc8509 |
| 2026-07-26 | 2026-07-26-se-to-ai_infra-model-default-probe-opus5 | se → ai_infra | outbox/ai_infra | d432f5eab5cd |
| 2026-07-26 | 2026-07-26-se-to-ai_infra-ctx-adopt-executed-va-datum | se → ai_infra | outbox/ai_infra | aedd7fb67405 |
| 2026-08-10 | 2026-08-10-se-to-ai_infra-report-day-wake-2-de-xuat-dinh-chinh-v5 | se → ai_infra | outbox/ai_infra | 0cbaccaafa73 (re-stamp F-9) |

View File

@ -0,0 +1,33 @@
---
id: 2026-08-10-se-to-ai_infra-report-day-wake-2-de-xuat-dinh-chinh-v5
from: se
to: ai_infra
category: Governance
type: report
date: 2026-08-10
content_sha256: "0cbaccaafa732ef090d881ce8aa404e7fb60a89da5c3d5385a44b36733c2f04b"
nac: sent
---
# Report 3 món: day-wake executed · 2 đề-xuất-ngược eval-quality · đính-chính V5
Chào hub. Thư gộp 3 món, mỗi món có số đo SE tự đo trên SE (2026-08-10, owner-gate = YC-021 chủ dự án chốt trực tiếp).
## 1. Day-wake (`2026-07-28-...-probe-first-resume`) — nấc EXECUTED, 4/4 floor
- **F1+F3 = máy `scripts/day-probe.ps1`** (chỉ-đọc, luôn exit 0): marker cuối theo **ts-trong-file** (không mtime) · anchor = **commit-chốt-dừng** (commit ADD marker; fallback head-sha — bẫy-một của thư tránh được, đo thật: anchor resolve đúng seal-commit) · kiểm sống + tổ-tiên HEAD (bẫy-hai: SE có squash closeout nên bẫy này THẬT với SE) · 4 tín hiệu {commit-sau · dirty toàn-bộ-không-allowlist · (run-folder phủ bởi 2 cái trên) · sentinel `closing:`} · nghiêng an-toàn: mọi lỗi probe = DELTA.
- **F2 = guard bước-0 cả 2 lệnh cũ** (`pause.md §0` no-op-khi-trùng-dừng-sạch · `tiep.md` ghi chú route-dậy-nhẹ) + cửa thoát `/day full`.
- **F4 = marker `_day-<i>.md`** 5-trường mỏng, cộng vào phép cân-sổ ORPHAN-L (`tiep.md §0 ⑤(b)` r-set — thiếu vế này thì chuỗi pause→day→pause kêu oan p>r) + falsifier 2 chiều ghi trong lệnh (CLEAN-giả soi được bằng rev-list; luôn-DELTA soi được từ dãy marker).
- **Số đo:** dogfood-TAY probe trên repo thật = `DELTA | commits-sau=27 | dirty=6 | 379ms`; fault-inject cây tạm **4/4 có răng** {CLEAN · DELTA-sentinel · DELTA-thật · ANCHOR-LOST in LOUD kèm route}; mọi lượt 194-379ms < ngưỡng owner `stop_point_cheap_ms=500` (owner đặt cùng ngày goi-chot 4.3 của SE nhờ đó lật PASS sau 22 ngày treo).
- **Nấc trung thực:** lệnh `/day` = **listed-in-session** (data-point: command .md MỚI hiện trong skill-list NGAY không cần restart cùng lớp tiền lệ S107 agent-mới-hot-reload; trái phép đo no-hot-reload S120/S121 vốn đo trên EDIT-command. Môi trường phân biệt MỚI SỬA). Gõ-thật `/day` + self-check ca-3/4/5 của thư = chờ lượt dậy thật kế. Hub sẽ nhận update khi số CLEAN-đúng/DELTA-giả thật.
## 2. Hai đề-xuất-ngược (từ adap eval-quality `2026-07-21`, mục 9 report SE — owner duyệt gửi @YC-021/W-4)
- **(a)** Đưa **dạng-5 "tự-ăn-nhân-chứng"** vào câu-3 của khung eval-của-eval (4 dạng 5): ca đo được phía SE một phép "" làm biến mất đúng cái ô đang làm chứng cho phép đo (flag-count giảm trông y hệt thành công), 4 dạng hiện tại không chứa .
- **(b)** Thước **"bề-mặt-đo được cập-nhật không"**: Fact-0 phía SE việc chạy xong 3 ngày 2 chỗ văn-bản vẫn ghi "pending", **0 thước nào phát hiện**. Họ hàng `first-run-role-has-diary` đã gửi hub tại `error-ledger.md:143` (reviewer-gate SE bắt neo `:118` sai bản nháp re-stamp trước khi bạn pull) đang chờ hub canonical SE không tự chế detector riêng để tránh 2-nguồn.
## 3. Đính-chính V5 trong `2026-08-07-se-to-ai_infra-upgrade-pack-phased-bao-cao-cuoi`
Dòng `:79` bản đã gửi ghi *"V5 vị-từ mã-hoá: dòng người điền, chưa cắm máy"* **hết đúng từ 2026-08-09**: máy đã cắm (`governance-detectors.ps1` detector C15, rank-1 U+FFFD-mất-dữ-liệu rank-2 mojibake; đo thật 13 file/26 hit rank-1, đã fold vào TOTAL theo owner YC-020). SE **không sửa file đã gửi** (đúng bài-5 thư 08-08 của chính hub artifact đóng băng giữ nguyên); đính chính tại đây bản hiệu lực.
se, 2026-08-10. Mọi số kèm nguồn trong repo SE; artifact đầy đủ: `runs/2026-08-09-S185-*` + `scripts/day-probe.ps1` + `.claude/commands/day.md`.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,38 @@
# Bảng thẩm-quyền owner — BẢN KÊ NHÁP (W-4 YC-021, kê @S185 chờ anh gật/sửa 1 lượt)
> **Nguồn gốc:** thư hub `2026-07-21-Governance-eval-quality-audit` đề bảng 2 cột {owner-SỐ · owner-LUẬT}; bảng dựng @S149 (`runs/2026-07-25-S149-adap-backlog/sub-apply-L5-evalcuaeval.md:37,41,59,115` — C-16 locate @S185) nhưng 2 cột TRỐNG chờ anh. Anh chốt W-4 = "em kê NHÁP từ thực tế, anh gật/sửa" (YC-021).
> **Cách đọc:** mỗi dòng = một thứ CHỈ ANH được đổi. Em đề-xuất/đo/trình — không tự đổi. Dòng nào anh thấy sai thì gạch; thấy thiếu thì thêm; gật cả bảng thì em lật DRAFT→chính-thức + trỏ từ engine.
## Cột 1 — owner-SỐ (con số chỉ anh đặt; nhà = `.claude/agent-memory/memory-budget.json` trừ khi ghi khác)
| # | Số | Key/nhà | Giá trị hiện tại · lệnh anh gần nhất |
|---|---|---|---|
| 1 | Nhịp audit light/deep + jump | `h24_cadence.{light_every, deep_every, jump_on_class_repeat}` | 6 · **1** (YC-019(5) "cứ end/start là cứ chạy") · 3 |
| 2 | Ngưỡng tiêu-đề-cũ | `h24_title_freshness_sessions` | **14 PHIÊN** (YC-020(2) — "theo phiên luôn vì có ngày làm ngày ko") |
| 3 | Ngưỡng điểm-dừng-RẺ | `stop_point_cheap_ms` | **500ms** (YC-021/W-3) |
| 4 | Trần nạp-trọn L1 + soft-cap | `archive_gate.autoinject_cap_bytes` = 25.600 · soft-cap 30.720 = ngưỡng `l1_over_30kb` sống trong output `measure-agent-memory.ps1` (`soft_cap_l1_bytes`) — **KHÔNG phải key trong archive_gate** *(reviewer F-11 @S185 bắt key-ma ở bản kê đầu)* | 25.600 · 30.720 |
| 5 | Giữ-sàn + strike archive | `archive_gate.{keep_floor_entries, strike_threshold}` | 5 · 2 |
| 6 | Bề rộng fan-out | `hmw_width.cap` (mirror `hmw.js WIDTH_CAP`) | 30 (YC-012 "nâng cap") |
| 7 | Cap hot-feed lead + 2 sub | `token_governor.{lead_tokens, memory_sub_tokens, workflow_sub_tokens}` | **380.000** (S94 `RC-…-23-25-50`, cấm auto-reduce) · 60.000 · 50.000. *(Số "target 210.000 / thiếu 75.427" ở eval-T28 là số máy `crystallized-backfill.ps1` in — nguồn key CHƯA đối-soát với budget [reviewer F-12: 0 hit "210000" trong budget]; đối-soát xong mới trình, đừng gật dòng này vội)* |
| 8 | Trần lớp mềm + context + verbatim-sổ | `mind_ctx_kb` · `session_ctx_kb` · `owner_request_verbatim_char_cap` | **48** (anh nâng 32→48 @S167 `_mind_ctx_kb_raise_S167` — bản kê đầu ghi 32 = hồi sinh số anh đã bỏ, reviewer F-13 bắt) · 64 · 600 |
| 9 | Ngưỡng kéo-thư | `pull_warn_days` | **TRỐNG CỐ Ý** — anh chưa đặt @S148, máy cấm tự chế default |
| 10 | Ngân sách/nhịp memory khác | mọi key số còn lại trong `memory-budget.json` | đọc sống tại file |
## Cột 2 — owner-LUẬT (luật chỉ anh đổi; đổi = 1 câu của anh + em thi hành có vết)
| # | Luật | Nhà | Lệnh anh gần nhất |
|---|---|---|---|
| 1 | Enum class H24 **NIÊM PHONG** | `lead_self_audit.flag_classes` + `_sealed_P3B_S181` (máy exit-2 khi nhét thêm) | P3=B @S181; forward-only @S181 `owner-decisions…dot-2:48` |
| 2 | Luật tự-trị 3 bậc | `ACTIVE-MARKS §LT3` (mark `RC-…-20-57-48`) | @S181 + điều-kiện-3 ghép @S181 |
| 3 | REQUEST ⟂ TASK (sổ ≠ WAL) | `tiep.md §3-bis` (mark `RC-…-15-32-20` + P2=PB-2) | @S180-S181 |
| 4 | ONE-SHOT bookend/bookstart | `session-start.md` + `session-end.md` khối đỏ | YC-018 @S185 |
| 5 | 4-path Stop-hook (nới = đẻ tín-hiệu Sàn-3 cùng lượt) | `wal-flush.ps1` + `tiep.md §0` | S146 (path-4) |
| 6 | Hình-dạng diary vai (đổi quy-ước = owner) | tiền lệ S173 + E3 @S185 | — |
| 7 | Hợp-đồng TOTAL detector (fold/severity) | `governance-detectors.ps1` sink-INFORM ↔ TOTAL | YC-020(1) fold C13-15 @S185 |
| 8 | 2-mã-thoát trong 1 máy (W3b) | P1=PA-2 `_context-s-12:55` + `harness-11-engine PHẦN Q` | @S181; rider-jump đang là nợ-chưa-có-chủ |
| 9 | Roster/vai mới + persona đổi scope | `.claude/agents/` + STATUS §Sub-agents | ring5 @S185 (YC-021/W-2) · STYLE @S176 |
| 10 | Model-tier + worker-pin | worker-tier-pin S124 · lead qua `/model`·`/fable-real` | S124 · S151 |
| 11 | Nghi-thức cửa (thêm/bớt bước NẶNG vào pause/tiep — phải đo wall-clock trước) | `check-email.md :41` bất-biến + goi-chot §3 hub BINDING | ngưỡng đo = owner-SỐ #3 |
| 12 | Gửi/công-bố outward (thư hub, báo cáo ngoài) | nghi-thức send-email + duyệt từng bản | YC-021/W-4 (bản này) |
*Đề mở: anh có thể thêm cột 3 "được-tự-làm-thẳng" (bậc-1 LT3 đã phủ) nếu muốn bảng 1 chỗ đủ 3 tầng.*

View File

@ -112,7 +112,7 @@ Một chuẩn "mọi tên kebab" sẽ **cờ 5 tệp đang đúng** = dương-gi
- **NẤC muốn sạch:** **TIỀN TỐ `_`** (tệp mốc) — thư mục chứa ép ở nấc **HÌNH DẠNG**
- **Thư mục:** `session-<N>``^session-\d+$`, đo **12/12 = 100%**. Máy: `governance-detectors.ps1:1639` (INFORM) + `session_ctx.py:133` + `session-scaffold.ps1:116` + `session_scaffold.py:105`.
- **Tệp bên trong — 7 họ tiền tố hợp lệ:** `_tiep-*` · `_pause-*` · `_snapshot-*` · `_context-s-<N>.md` · `_mind-s-<N>.md` · `_end` · và **`pause-*` (chỉ vật cũ, xem dưới)**.
- **Tệp bên trong — 8 họ tiền tố hợp lệ (+`_day-*` @S185 W-1 day-wake):** `_tiep-*` · `_pause-*` · `_snapshot-*` · `_day-*` · `_context-s-<N>.md` · `_mind-s-<N>.md` · `_end` · và **`pause-*` (chỉ vật cũ, xem dưới)**.
- **Luật vật MỚI:** tệp mốc phiên **bắt buộc mở đầu bằng `_`**. Lý do cơ học: `session_ctx.py:351-353` tự khai *"glob `pause-*` does NOT match `_pause-1.md` (leading underscore)"* — dấu `_` là thứ phân tách hai họ mà không đếm trùng.
- 🔴 **HAI cặp fork đang sống, cả hai đều sống VÌ MÁY THA:**

95
scripts/day-probe.ps1 Normal file
View File

@ -0,0 +1,95 @@
#Requires -Version 5.1
<#
.SYNOPSIS
day-probe (W-1 day-wake, adopt hub 2026-07-28 "probe-first-resume"; owner YC-021 @S185).
READ-ONLY probe deciding CHEAP-WAKE vs FULL-RESUME. Prints EXACTLY one DAY-PROBE line.
ALWAYS exit 0 (INFORM layer - the /day command reads the verdict word, nothing blocks).
.DESCRIPTION
Floor F1: pick the LAST session marker by the ts WRITTEN INSIDE the file (never mtime -
Dropbox resync touches mtime). Then check 4 delta signals:
(a) commits after the anchor (git rev-list count)
(b) tracked/untracked dirty files (git status --porcelain, no allowlist - lean DELTA)
(c) is covered by (a)+(b): run-folders/artifacts land as commits or dirty files
(d) closing: sentinel in .claude/WAL.md (San-2)
Floor F3: anchor = the commit that ADDED the marker file (the stop-seal commit), NOT the
head-sha inside the marker (trap-one: head-sha predates the seal commit => false DELTA
100% of the time). Fallback = head-sha field. Anchor must EXIST (cat-file -e) AND be an
ANCESTOR of HEAD (merge-base --is-ancestor); orphaned (post-squash) => verdict ANCHOR-LOST
printed LOUDLY (trap-two: fail-safe must have a voice, not die silent).
Verdict precedence: ANCHOR-LOST > DELTA > CLEAN. Leaning rule: any probe error => DELTA.
Floor F4 lives in /day (the _day-<i>.md marker); this script only measures.
.PARAMETER RepoRoot
Repo root; a temp tree here isolates fault-injection (mirror governance-detectors.ps1).
#>
[CmdletBinding()]
param([string]$RepoRoot = (Get-Location).Path)
$sw = [System.Diagnostics.Stopwatch]::StartNew()
$ErrorActionPreference = 'SilentlyContinue'
function Out-Line([string]$verdict, [string]$detail) {
$script:sw.Stop()
Write-Host ("DAY-PROBE: {0} | {1} | {2}ms" -f $verdict, $detail, $script:sw.ElapsedMilliseconds)
exit 0
}
try {
$sessRoot = Join-Path $RepoRoot '.claude\sessions'
if (-not (Test-Path $sessRoot)) { Out-Line 'DELTA' 'probe-loi: no sessions dir (lean DELTA)' }
# newest logic-session = highest N with a _context file
$sess = Get-ChildItem -Path $sessRoot -Directory -Filter 'session-*' |
Where-Object { Test-Path (Join-Path $_.FullName ("_context-s-" + ($_.Name -replace '^session-','') + ".md")) } |
Sort-Object { [int]($_.Name -replace '^session-','') } -Descending | Select-Object -First 1
if ($null -eq $sess) { Out-Line 'DELTA' 'probe-loi: no logic-session found (lean DELTA)' }
# last marker by ts INSIDE file (F1). _day markers count too (repeat wakes).
$markers = @()
foreach ($f in (Get-ChildItem -Path $sess.FullName -File | Where-Object { $_.Name -match '^_(pause|tiep|snapshot|day)-\d+\.md$' })) {
$ts = $null; $sha = $null
foreach ($ln in (Get-Content -Path $f.FullName -TotalCount 8 -Encoding UTF8)) {
if ($ln -match '^ts:\s*(\S+)') { $ts = $Matches[1] }
if ($ln -match '^head-sha:\s*([0-9a-f]{7,40})') { $sha = $Matches[1] }
}
if ($null -ne $ts) { $markers += [pscustomobject]@{ File = $f.FullName; Name = $f.Name; Ts = $ts; Sha = $sha } }
}
if ($markers.Count -eq 0) { Out-Line 'DELTA' ('no marker with in-file ts under ' + $sess.Name + ' (lean DELTA)') }
$last = $markers | Sort-Object Ts -Descending | Select-Object -First 1
# F3 anchor: the commit that ADDED the marker (stop-seal), fallback in-file head-sha
Push-Location $RepoRoot
try {
$rel = (Resolve-Path -Relative $last.File) -replace '^\.\\', '' -replace '\\', '/'
$anchor = (& git log --diff-filter=A --format=%H -1 -- $rel 2>$null | Select-Object -First 1)
$src = 'seal-commit'
if ([string]::IsNullOrWhiteSpace($anchor)) { $anchor = $last.Sha; $src = 'in-file-sha' }
if ([string]::IsNullOrWhiteSpace($anchor)) { Out-Line 'DELTA' ('marker ' + $last.Name + ' has no resolvable anchor (lean DELTA)') }
& git cat-file -e ($anchor + '^{commit}') 2>$null
if ($LASTEXITCODE -ne 0) {
Out-Line 'ANCHOR-LOST' ('anchor=' + $anchor.Substring(0,[Math]::Min(8,$anchor.Length)) + ' (' + $src + ') MISSING from object store - marker=' + $last.Name + ' - route: FULL /tiep (loud fail-safe, F3 trap-two)')
}
& git merge-base --is-ancestor $anchor HEAD 2>$null
if ($LASTEXITCODE -ne 0) {
Out-Line 'ANCHOR-LOST' ('anchor=' + $anchor.Substring(0,8) + ' (' + $src + ') exists but NOT ancestor of HEAD (post-squash orphan) - marker=' + $last.Name + ' - route: FULL /tiep')
}
# signals
$nCommits = [int](& git rev-list --count ($anchor + '..HEAD') 2>$null)
$dirty = @(& git status --porcelain 2>$null | Where-Object { $_ -and $_.Trim().Length -gt 0 })
$nDirty = $dirty.Count
$walP = Join-Path $RepoRoot '.claude\WAL.md'
$nClosing = 0
if (Test-Path $walP) { $nClosing = @(Select-String -Path $walP -Pattern '^closing:' -Encoding UTF8).Count }
$detail = ('anchor=' + $anchor.Substring(0,8) + '(' + $src + ') alive+ancestor | commits-sau=' + $nCommits + ' | dirty=' + $nDirty + ' | closing=' + $nClosing + ' | marker=' + $last.Name + ' ts=' + $last.Ts)
if ($nCommits -eq 0 -and $nDirty -eq 0 -and $nClosing -eq 0) { Out-Line 'CLEAN' $detail }
Out-Line 'DELTA' $detail
}
finally { Pop-Location }
}
catch {
Out-Line 'DELTA' ('probe-loi: ' + $_.Exception.Message.Substring(0, [Math]::Min(80, $_.Exception.Message.Length)) + ' (lean DELTA)')
}

View File

@ -46,7 +46,8 @@ $RepoRoot = (Resolve-Path -LiteralPath $RepoRoot).Path
$RX_KEBAB = '^[a-z0-9]+(-[a-z0-9]+)*$'
$RX_SNAKE = '^[a-z0-9]+(_[a-z0-9]+)*$'
$RX_ONEOFF = '^(s[0-9]+-|plan-)'
$RX_SESSFAM = '^_(tiep|pause|snapshot|context-s|mind-s|end)'
$RX_SESSFAM = '^_(tiep|pause|snapshot|day|context-s|mind-s|end)'
# ^ +day @S185 (W-1 day-wake marker _day-<i>.md — reviewer F-6: thieu thi moi marker day = 1 FLAG LECH oan)
$RX_SESSDIR = '^session-[0-9]+$'
# ---------- so ke ----------