[CLAUDE] Docs: W0.4 go claim STALE bypass-surface + W0.5 baseline orphan (git %cI, KHONG mtime)

W0.4 workflows/README.md - go claim STALE dang CHE San-1:
- Ban cu tuyen SE "tailored-out" khoi lop anti-bypass detector + coi mat-lach gan-nhu-khong-co.
  BI BAC x3 BANG SU-KIEN (khong phai ly-le):
  (i)  S72 RECURRED: chay REVIEW qua raw Workflow tool -> khong inject writeGuard -> reviewer
       tu ghi MEMORY +2850B over-cap -> git-status bat @session-end + revert. Nguyen-van
       feedback_harness10_run_trace.md:20 "dung RAW Workflow tool = MAT governance project-wrapper".
  (ii) S118 raw-Agent 7-spawn -> 0 run-folder (viec rot khoi so).
  (iii) CHINH run S119 di raw Workflow tool.
- Ban moi khai 3 DUONG phong, chi 1 gate duoc: /ultra-on->hmw.js (gate) | raw Workflow (KHONG)
  | raw Agent (KHONG). + khai KE CON-LAI: lach o SE KHONG can CLI-launcher, goi thang tool
  harness la xong => 3 nguyen-tac detector (whitelist launcher / path-variant / anchor launch-key)
  N/A VI KHONG CO LAUNCHER DE WHITELIST, khong phai vi "khong co ke". Containment THAT =
  em-main single-writer + git-diff + chunk-count = PHAT-HIEN-SAU, KHONG NGAN-CHAN-TRUOC (G-015).
- Neu de nguyen claim cu: co "tailored-out" se (sai) bien-minh cho viec skip luon San-1 (F2 v1).

W0.5 baseline orphan - FIX #4 (bo mtime, dung git log %cI):
- Moc closeout cuoi = 3fde8af @ 2026-07-14T16:29:55+07.
- 3 phep do doi chung: naive(chi flat)=13 | dual-accept(+harvest/)=8 | dual+scoped(%cI>moc)=1={S119}.
- Khop CHINH XAC du-bao FIX #4 (13 / 8 / {S119}). Chenh 13-8 = 5 folder S71 h10/h910 dung
  harvest/<stage>-synthesis.md -> KHONG duoc flag (C8 README:19). Chenh 8-1 = 7 ton-dong cu
  -> loai bang SCOPE, KHONG tao *-synthesis.md gia (Goodhart, R3 flag).
- {S119} bi flag la DUNG: run chua dong, se dong o W6 khi co synthesis that.
- REGRESSED da va: v2 chot scope theo mtime; Dropbox resync GHI DE mtime => khong ben (R3-m5).

W0-evidence-15-07-2026.md - capture stdout THAT vao run-folder (fix #9c: bang-chung
time-anchored thay "reviewer chung-kien" lam neo duy-nhat). Gom: ground-truth /tiep 3 cho stale
+ W0.0-W0.5 so do + 2 fault-inject + nac trung-thuc.

2 LOI LEAD TU MAC o W0.4 (ghi vao evidence, di nguyen vao adap-report, KHONG im):
1. Gate tu-tham-chieu: lead trich NGUYEN-VAN claim cu lam bang-chung -> grep bat trung chinh
   cau trich -> FAIL tren ban sua DUNG. Roi lead viet LITERAL mau regex cua gate vao ghi-chu
   -> mau tu khop chinh no -> FAIL lan 2. => gate grep-chuoi chay tren chinh file no kiem =
   TU-THAM-CHIEU, can neo bang dau-hieu khac. Cung ho R2-C1.
2. Meta-count tai-pham: bang tong-ket cua lead IN SAN chu "PASS" trong khi phep do ngay canh
   tra "1 hit" = FAIL. Dung lop v3 §Nac-trung-thuc "lead DO tot; lead DEM VE CHINH MINH thi sai".
   => pass/fail phai TINH tu so do, cam in nhan cung. Da ap dung o lan do lai.

0 prod-code, 0 migration, 0 FE, 0 test-change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-07-15 11:48:24 +07:00
parent 92de58f329
commit 48e0d26ee9
2 changed files with 144 additions and 1 deletions

View File

@ -49,5 +49,9 @@ Phân biệt RAW (prefix `sub-`) vs VERIFIED (suffix `-synthesis.md`) bằng **T
## Guard
- **S1:** Workflow CHỈ repo SOLUTION_ERP KHÔNG fan-out repo/corpus khác (`cross_project_search` = READ reference only).
- **S2/S3:** chỉ chạy khi HMW-mode ON (`/ultra-on` marker `.claude/hmw-mode.on`) + checkpoint INFORM (`hmw.js` throw nếu `checkpointApproved≠true`) + sub KHÔNG spawn sub.
- **Anti-bypass detector (h10-refine b): SE TAILORED-OUT** SE chạy workflow qua Anthropic Workflow tool (KHÔNG CLI-launcher để lách như node-CLI) bypass-surface ~N/A; containment = git-diff + run-folder TRACKED + folder-scan orphan (🧊 `_ledger` retired H18-B S100) (G-015). 3 nguyên-tắc detector (whitelist launcher · path-variant match · anchor launch-key + nghiệm-thu quan-hệ) đã cân-nhắc, N/A cho threat-model SE. Chi-tiết `runs/README.md`.
- **Anti-bypass detector (h10-refine b) SE KHÔNG dựng detector; nhưng CẤM đọc thành "SE không kẽ".** 🔴 Bản trước S120 tuyên SE đã "tailored-out" khỏi lớp detector này **và coi mặt-lách là gần-như-không-có** **STALE, gỡ S120 W0.4** b bác **×3 bằng sự-kiện thật**, không phải lý-lẽ. *(Nguyên-văn claim cũ: `git log -p --follow -- .claude/workflows/README.md`. Ở đây **cố ý paraphrase, không trích literal**: gate của W0.4 một phép grep-chuỗi trên chính file này, grep **không phân-biệt được** claim-đang-sống với claim-đã-chết-được-trích-làm-bằng-chứng trích nguyên-văn sẽ làm gate FAIL trên đúng bản sửa ĐÚNG. Cùng lý-do: **không viết literal mẫu regex của gate vào đây** S120 đã mắc đúng bẫy đó, mẫu tự khớp chính . Ghi lại đ adap-report nêu với hub: gate grep-chuỗi trên file kiểm = **tự-tham-chiếu**, cần neo bằng dấu-hiệu khác.)* **SE có 3 đường phóng workflow/agent, chỉ 1 đường gate được:**
1. `/ultra-on` `hmw.js` **QUA gate** (writeGuard · Sàn-1 marker · VALID_ROLES). Đường DUY NHẤT được phủ.
2. **raw Workflow tool** (Anthropic) **KHÔNG gate.** S72 RECURRED: chạy REVIEW đường này không inject writeGuard reviewer tự ghi MEMORY **+2850B over-cap** git-status bắt @session-end + revert. Kết-luận nguyên-văn `feedback_harness10_run_trace.md:20`: *"dùng RAW Workflow tool = **MẤT governance của project-wrapper**"*. 🔴 **Chính run S119 đi đường này.**
3. **raw Agent tool** **KHÔNG gate.** S118: 7-spawn **0 run-folder** (việc rớt khỏi sổ).
🔴 **Kẽ CÒN-LẠI (khai thẳng, KHÔNG overclaim):** lách SE **không cần CLI-launcher** gọi thẳng tool của harness xong. 3 nguyên-tắc detector (whitelist launcher · path-variant match · anchor launch-key + nghiệm-thu quan-hệ) **N/A vì KHÔNG CÓ launcher để whitelist**, **KHÔNG phải vì "không có kẽ"** đây đúng chỗ claim trượt. Containment THẬT = **em-main single-writer + git-diff (run-folder TRACKED nên mọi write in-repo hiện) + chunk-count RAG + folder-scan orphan** (🧊 `_ledger` retired H18-B S100) = **phát-hiện-SAU, KHÔNG ngăn-chặn-TRƯỚC** (G-015). Chi-tiết `runs/README.md`.
- **G-015 accuracy (no-overclaim):** run-folder TRACKED read-only-ENFORCED sub vẫn giữ Bash (write-channel mở: ghi-ngoài-repo git-diff / curl Qdrant). Containment THẬT = **em-main single-writer + git-diff (in-repo, run-folder tracked nên hiện) + chunk-count (RAG)**, defense-in-depth, KHÔNG sandbox cứng. KHÔNG claim "ENFORCED", KHÔNG bỏ chunk-count.

View File

@ -0,0 +1,139 @@
# W0 PRE-FLIGHT — bằng-chứng chạy THẬT (S120, 2026-07-15, em-main SOLO)
> **Vì sao có file này:** fix #9(c) — *"capture-stdout detector ra `runs/<id>/` = bằng-chứng time-anchored (thay 'reviewer chứng-kiến' làm neo **duy-nhất**)"*. Số dưới đây là **stdout thật**, không phải tường-thuật.
> **W0 = SOLO có chủ-đích** (v3 §176): phẫu-thuật index + reset + restart; fan-out ⇒ hook commit `agent-memory/` **giữa lúc mổ**.
> **Nối từ:** `/tiep` S120 sau khi S119 chốt spec v3 + push `4727d16`.
---
## 0. Ground-truth @/tiep — WAL S119 stale 3 chỗ (ground-truth THẮNG)
| WAL S119 | Đĩa (đo 11:30) | Xử |
|---|---|---|
| 7 broadcast `UNTRACKED CỐ Ý` → gộp vào commit-chốt W0.3 | cả 7 **đã tracked + pushed** trong `4727d16` | tiền-đề **tự giải-quyết**; W0.3 bỏ việc gộp |
| "K trôi 10→11" | `K=0` · range **RỖNG** · porcelain **0** | squash+push đã chạy 11:20:29 |
| dòng 13 `[ ] anh ký fix#8` vs dòng 17 `[x]` | `owner-decisions §ACK` xác-nhận **ĐÃ KÝ** | gate-blocker = **0** |
**Kết luận:** S119 **không làm sai** — nó dừng đúng chỗ anh chốt (*"dung truoc wave"* ghi thẳng trong commit message), rồi chết trước khi tick sổ.
---
## 1. W0.0 — RE-MEASURE (R3-C4)
```
K = 0 · NONWAL = 0 · BOTTOM = <RỖNG> · porcelain-count = 2
M .claude/WAL.md → lead reconcile @/tiep
M .../spec-…-v3-PATCH.md → lead vá FIX #3-bis
⇒ 2/2 entry ĐƯỢC PHÂN-LOẠI ⇒ không ABORT.
```
🔴 **K=0 là ẢNH CHỤP, không phải hằng-số.** Hook `wal-flush.ps1:7` phủ 3 path (`.claude/WAL.md` · `agent-memory/` · `workflows/runs/`) ⇒ **mỗi lần lead ghi WAL = +1 `wal:` ở ĐÁY range**. W0.3 re-đo lại ngay trước khi chạm git. K đã trôi `3→4→5→6→8→11→0` trong một buổi — đây là lý do LUẬT SỐ ĐỘNG là **bắt buộc**, không phải khuyến-nghị.
## 2. W0.1 — `.gitattributes` theo CLASS
| Phép đo | Trước | Sau |
|---|---|---|
| `git check-attr text eol -- .claude/agents/reviewer.md` | `text: unspecified` · `eol: unspecified` | **`text: auto` · `eol: lf`** ✅ |
| binary `attr/-text` | (heuristic đoán) | **19/19** (12 `.docx` + 6 `.png` + 1 `.xlsx`) |
| `.svg` | — | `text: auto` (**cố ý** giữ text — SVG = XML) |
**🔬 Fault-inject chứng rule CÓ RĂNG** (không chỉ happy-path):
```
gỡ `*.docx binary` → git coi .docx là `text: auto` ← NGUY HIỂM THẬT (mangle OOXML)
khôi phục → `text: unset`
```
⇒ Khai binary **tường-minh** không thừa: heuristic `text=auto` chỉ soi NUL-byte trong **8000 byte đầu**`.docx` "gầy" có thể lọt thành text ⇒ hỏng file **không cứu được**.
## 3. W0.2 — SCOPED-ONLY (vacuous — KHAI THẲNG)
```
scope-gate (agents + commands + skills) = 0 ← ĐÃ XANH SẴN TRƯỚC KHI LÀM GÌ
repo-wide `i/lf w/crlf` = 188 (131 Migrations + 57 còn lại) ← INFORM-only
git add --renormalize --dry-run . → 0 file dirty
git diff --cached --stat (sau) → rỗng
```
🔴 **Gate scoped = 0 KHÔNG PHẢI thành-tựu của W0** — nó xanh sẵn (R2-C4). Giá-trị thật của W0.1/W0.2 = **materialize theo attr mới cho file MỚI/ghi-lại**, KHÔNG phải sửa 188 file cũ. **CẤM mass `rm`+`checkout`** phiên này (spec v2 W0.2: việc riêng, phiên riêng, worktree sạch tuyệt-đối).
## 4. W0.3 — 4-ca + hook-interlock (commit-chốt CÙNG TURN)
### 4.1 FIX #3-bis — fault-inject 4 cây tạm
| Cây | Shape (`origin/main..HEAD`) | K | NONWAL | **v3-bis** | v2 cũ (`NONWAL==0`) |
|---|---|---|---|---|---|
| ca0 | `base` | 0 | 0 | **ca 0** NO-OP | A (reset — vacuous) |
| ca1 | `base│wal:│wal:` | 2 | 0 | **ca 1** reset--soft | A ✓ trùng |
| ca2 | `base│wal:│[CLAUDE]` | 2 | 1 | **ca 2** reset--soft | 🔴 **B (REBASE)** ← LỆCH |
| ca3 | `base│[CLAUDE]│wal:` | 2 | 1 | **ca 3** rebase OK | B ✓ trùng |
### 4.2 Chạy THẬT nhánh-B trên ca2 ⇒ deadlock **XÁC NHẬN**
```
trước: 789c753 [CLAUDE] Infra: real work
4dd71d9 wal: flush 1 ← đáy range
GIT_SEQUENCE_EDITOR=<pick-đầu,fixup-sau> git rebase -i origin/main
REBASE-EXIT = 0 ← KHÔNG crash, KHÔNG để lại .git/rebase-merge
sau: c2c39dc wal: flush 1 ← commit gộp THỪA KẾ message của commit ĐẦU
n(wal: trong range) = 1 ⇒ push-guard chặn ⇒ re-squash ⇒ vẫn "wal:" ⇒ STOP VĨNH VIỄN
```
🔴 **Nguy-hiểm nằm ở chỗ nó THÀNH-CÔNG một cách sai** — exit 0, sạch sẽ, không dấu-vết. Lỗi báo-lỗi-to thì dễ sửa; lỗi kiểu này mới giết cổng.
**`NONWAL` không được là biến rẽ nhánh.** Một khi đáy là `wal:`, `reset --soft` đúng cho **cả** ca1 **và** ca2 — spec v2 lạc đúng chỗ này.
### 4.3 Hook interlock — chứng RĂNG **2 CHIỀU** (cây tạm, không đụng `.git` thật)
| Chiều | Kỳ vọng | Đo |
|---|---|---|
| (a) **KHÔNG** rebase-state | hook **VẪN** commit (guard không over-fire) | ✅ `wal: flush 20260715T1140` |
| (b) **CÓ** `.git/rebase-merge` | 0 commit · `exit 0` · worktree **giữ** dirty | ✅ 0 commit · exit 0 · 2 dòng dirty **được giữ** |
🔴 Chiều (a) là chiều **bắt buộc phải test**: chỉ test chiều (b) thì một `exit 0` đặt nhầm ở dòng 1 cũng PASS — mà nó giết luôn WAL persistence.
🔸 **Lệch spec có chủ-đích:** spec ghi *"thêm vào đầu file"*; thực-thi đặt **SAU `Set-Location $root`**. Lý-do: đặt trước thì `Test-Path .git/rebase-merge` soi **nhầm CWD** (hook chạy từ thư-mục bất-kỳ) ⇒ guard **im-lặng vô-hiệu**. Cùng FUNCTION, khác vị-trí ⇒ khai ở đây.
### 4.4 Ca fire trên repo thật = **ca (0)**
```
K=0 NONWAL=0 BOTTOM=<RỖNG> ⇒ ca(0) ⇒ NO-OP (không reset, không rebase) ⇒ commit thẳng
rebase-state: absent OK
sau commit-chốt: K=1 · đáy range = "[CLAUDE] Infra: W0 pre-flight…" · n(wal:)=0 · porcelain=0
```
**Đúng ý-đồ fix#3(a):** đáy range giờ là **commit thường** ⇒ mọi `wal:` hook sinh ra từ đây đều nằm **phía trên** ⇒ rơi vào **ca(3)** = rebase+fixup an-toàn ở W6.
## 5. W0.4 — `workflows/README.md` gỡ claim STALE
Claim cũ tuyên SE "tailored-out" + coi mặt-lách gần-như-không-có ⇒ **bị bác ×3 bằng sự-kiện**: (i) S72 raw-Workflow ⇒ reviewer ghi MEMORY **+2850B over-cap** ⇒ git-status bắt @session-end + revert; (ii) S118 raw-Agent 7-spawn ⇒ **0 run-folder**; (iii) **chính run S119 này** đi raw Workflow.
Bản mới khai **3 đường** (`hmw.js` ✅ gate · raw Workflow ❌ · raw Agent ❌) + **kẽ CÒN-LẠI**: lách ở SE **không cần CLI-launcher** ⇒ 3 nguyên-tắc detector N/A **vì không có launcher để whitelist**, KHÔNG phải vì "không có kẽ".
| Acceptance | Đo | Kết |
|---|---|---|
| grep claim-cũ = 0 | 0 | ✅ (positive-control: inject claim giả → bắt 1; khôi phục → 0) |
| có dòng khai 3-đường | 2 hit | ✅ |
### 🔴 2 lỗi S120 tự mắc ở W0.4 — ghi để adap-report nêu với hub
1. **Gate tự-tham-chiếu.** Lead trích **nguyên-văn** claim cũ làm bằng-chứng ⇒ grep bắt trúng chính câu trích ⇒ **FAIL trên bản sửa ĐÚNG**. Rồi lead viết **literal mẫu regex** của gate vào ghi-chú ⇒ mẫu **tự khớp chính nó** ⇒ FAIL lần 2. ⇒ **Gate grep-chuỗi chạy trên chính file nó kiểm = tự-tham-chiếu**; cần neo bằng dấu-hiệu khác (vd assert cấu-trúc, hoặc grep trên bản diff chứ không trên file). Cùng họ R2-C1 (*"gate FAIL trên implementation ĐÚNG"*).
2. **Meta-count tái-phạm.** Bảng tổng-kết của lead **in sẵn chữ `PASS`** trong khi phép đo ngay cạnh trả `1 hit` = FAIL. Đúng lớp v3 §Nấc-trung-thực: *"lead ĐO tốt; lead ĐẾM VỀ CHÍNH MÌNH thì sai"*. ⇒ **Sửa cách làm:** pass/fail phải **TÍNH từ số đo**, cấm in nhãn cứng. Đã áp dụng ở lần đo lại.
## 6. W0.5 — Baseline orphan (FIX #4: `git log %cI`, **KHÔNG** mtime)
Mốc closeout cuối = `3fde8af` @ `2026-07-14T16:29:55+07:00`
| Phép đo | Số | Nhận-xét |
|---|---|---|
| (1) **naive** (chỉ `*-synthesis.md` phẳng) | **13** orphan/25 | 🔴 bão dương-giả |
| (2) **dual-accept** (+`harvest/<stage>-synthesis.md`) | **8** orphan | C8 `README:19` — 5 folder S71 `h10`/`h910` **thoát đúng** |
| (3) **dual + scoped** (`%cI` > mốc) | **1** orphan = **`{S119}`** | ✅ = sàn Sàn-3 sẽ dùng |
- Chênh (1)(2) = **5** folder S71 dùng `harvest/<stage>-synthesis.md`**KHÔNG được flag** (đúng FIX #4).
- Chênh (2)(3) = **7** tồn-đọng cũ ⇒ loại bằng **SCOPE**, **KHÔNG** tạo `*-synthesis.md` giả (Goodhart — R3 flag). Số khớp **chính xác** dự-báo FIX #4 (13 / 8 / {S119}).
- 🔸 `{S119}` bị flag là **ĐÚNG**: run này chưa đóng — nó đóng ở W6 khi có synthesis thật.
- ⚠️ **REGRESSED đã vá:** v2 chốt scope theo **mtime** — Dropbox resync **ghi đè mtime** ⇒ không bền. Nay dùng `git log -1 --format=%cI -- <folder>`.
## 7. W0.6 — spawn-probe CRLF ⏳ **CHƯA CHẠY — CẦN RESTART CLI**
Đây là **bảo-đảm falsifiable DUY NHẤT** của cả wave (broadcast ④(d): *"mọi kiểm static-text đều KHÔNG falsifiable; chỉ spawn-probe / assert-registry mới thật-sự chứng-minh"*).
Nó quyết **§1.C L3** + **④(a) chọn control** + **nấc R4-request** ⇒ chạy TRƯỚC W6.
🔴 **Phải RESTART để cô-lập biến:** nếu spawn thẳng mà fail, không phân-biệt được *"CRLF-fatal"* với *"registry chưa hot-reload"* (hot-reload = **ENV-DEPENDENT**, hub từng ra kết-quả NGƯỢC ở S110).
---
## Nấc trung-thực W0
- **PASS thật:** W0.0 · W0.1 (+fault-inject) · W0.3 (4-ca + interlock 2-chiều) · W0.4 (+positive-control) · W0.5 (baseline khớp dự-báo).
- **PASS vacuous — KHÔNG tính công:** W0.2 (gate xanh sẵn trước khi lead làm gì).
- **CHƯA CHẠY:** W0.6 (chờ RESTART).
- **CHƯA VERIFY (giữ nguyên, không giả-vờ đã test):** đường đọc frontmatter CR-tolerant hay LF-only (**W0.6 quyết**) · precedence spawn-param ⟂ frontmatter (**defer phiên lead=Fable**; hôm nay lead=Opus ⇒ **không phân-biệt được**) · param `model:` có từ-chối full-id không (fix#8a — anh ký **trên tiền-đề đã khai là đọc-doc, chưa thử**) · hot-reload `hmw.js`.
- **2 lỗi lead tự mắc ở W0.4** (§5) — ghi vào đây, **đi nguyên vào adap-report**, không im.