Files
solution-erp/.claude/WAL.md
2026-07-15 14:29:25 +07:00

43 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WAL — auto-generated, không sửa tay
updated: 2026-07-15T13:27 | session: S122 | branch: main
goal: Adap 6 broadcast AI_INFRA (H23 · H24 · H22-wal-defect 5-sàn · H22-push-guard · EOL/CRLF · owner-sign). Spec v3 CHỐT (GO-WITH-FIXES · fix#8 anh ký · gate-blocker=0). Phiên này = CHẠY WAVE W0→W6. Đọc v2 làm thân + v3-PATCH thay-thế; v1 CẤM CHẠY.
chain:
[x] S119 điều-tra: check-email → invest 5-lane → spec v1 → review 4-lane → fable-real gate → v3-PATCH → anh ký fix#8 → commit-chốt 4727d16 ĐÃ PUSH
[x] S120 /tiep reconcile: ground-truth thắng WAL 3 chỗ + vá v3-GAP → FIX #3-bis (4 ca, test ĐÁY range) ghi vào v3-PATCH
[x] W0.0 re-measure (K=0/NONWAL=0/porc=2, phân-loại đủ) · W0.1 .gitattributes CLASS (check-attr unspecified→text:auto eol:lf; 19/19 binary attr/-text; fault-inject gỡ *.docx→"text:auto" = CÓ RĂNG) · W0.2 scoped-gate=0 VACUOUS khai thật (repo-wide 188 INFORM-only, CẤM mass-checkout)
[x] W0.3 commit 92de58f — ca(0) fire · hook-interlock ĐẶT SAU Set-Location (đặt đầu file = soi nhầm CWD) · chứng RĂNG 2 CHIỀU (a)không-rebase→VẪN commit (b)có-rebase→0 commit+giữ dirty · fault-inject 4 cây tạm: ca2 v2-cũ→REBASE→exit 0 KHÔNG crash nhưng commit gộp thừa-kế msg "wal:"→deadlock XÁC NHẬN
[x] W0.4+W0.5 commit 48e0d26 — README:52 gỡ claim STALE (khai 3 đường: hmw.js gate / raw Workflow ❌ / raw Agent ❌ + kẽ CÒN-LẠI) · baseline orphan naive13/dual8/scoped1={S119} khớp CHÍNH XÁC dự-báo FIX #4
[x] W0.6 XONG @S121 sau restart — verdict **CRLF-tolerant** (W0-evidence §7.4/§7.5/§7.6). LF-probe xanh TRƯỚC ⇒ CRLF ăn 4/4 tầng (discovery→parse→spawn→exec); neo = token 45248/45240 lệch 8 = chênh prompt (KHÔNG phải "không báo lỗi"). ⇒ L3 nhánh LF-only-regex **BỊ BÁC** · R4 **HẠ MẠNH KHÔNG rút** (a)+(c) giữ chân riêng, chỉ (b) đổ · 2 probe ĐÃ XOÁ, porcelain sạch probe. Khai chặt: tolerant mức HÀNH-VI, phạm-vi agents/ + 1 build win32; commands//skills//.ps1 CHƯA phủ. 🆕 #53 tái-hiện 2/2 (tool_uses=0 + bịa dòng WAL) — KHÔNG nhiễm verdict (neo = metadata harness) → vào adap-report. nhánh-3 (registry=ảnh-chụp khởi-phiên) xác-nhận LẦN 2 ⇒ memory harness4 thu hẹp @session-end
[x] W1 XONG @S121 — wf `wf_de36dea9-265` 4/4 lane 0-error (694k tok, 159 tool, 21') · engine /hmw RUN-TRACE (KHÔNG raw-Workflow) · role-less ×4 · containment SẠCH (git status = đúng 4 file đích + 4 sub-task-*.md, 0 rò WAL/agent-memory/STATUS/spec). **LEAD ĐÃ TỰ CHẠY LẠI CẢ 4, KHÔNG tin return:** detectors TOTAL 42→**49** (≥46) + permission-matrix **FIRE** (title-stale 76d) + `menu=54`/`policy=MISSING` fail-loud + exit 0 + **stderr 0** (lane ① tự bắt bug `$M``$m` PS case-insensitive mà `exit 0` CHE — chỉ stderr mới lộ) · eol-check GREEN-BUT-VACUOUS tự khai + **teeth lead tự inject 276 CR → FLAG, gỡ → 0** · wal-recovery **4/4 ca · 30 assert · 0 fail**, có counterfactual tái-hiện DEADLOCK `rebase-exit=0` + assert `sut-has-no-NONWAL-param` bằng **Get-Command reflection** (KHÔNG grep = né tự-tham-chiếu W0.4#1) · spawn-model-audit FAIL-LOUD "expected constant missing (W2 chua land)" + **teeth lead inject `claude-opus-9-9` → FLAG mismatch, sửa → hết**. 4/4 non-ASCII = 0.
🔴 **2 LỖI LEAD @S121 (đi vào adap-report):** (a) **Sàn-1 LỆCH**: marker `wf:` đăng-ký SAU phóng (luật = TRƯỚC, run.md:8). (b) 🔴 **KHẲNG-ĐỊNH FACT-TRÊN-ĐĨA MÀ KHÔNG ĐO ĐĨA**: lead phán "backfill `[carry:*]` = ORPHAN chưa ai làm" → **SAI**, đã có **7 khoá** từ `4727d16` (S119, đã push). Cơ-chế: rà BẢNG WAVE thấy không ai được giao ⇒ suy ra chưa làm — *"không wave nào sở-hữu" ≠ "chưa có trên đĩa"*. Brief lead còn **4 tiền-đề sai** (config path · STATUS 07-14 vs thật 07-15 · carry · độ-dài) — lane ① re-verify đĩa và vá hết. Bẫy: `grep -c` đếm DÒNG (=1) vs `grep -o|wc -l` đếm occurrence (=8) trên mega-line.
[ ] **GAP THẬT thay claim sai** (lane ① tìm, lead verify đĩa): carry-age **vacuous CẤU-TRÚC** — 45 logic-segment nhưng **carry-lines=1** ⇒ streak≡1 ⇒ **0 fire vĩnh viễn kể cả sau W2**. Chứng: `tra-bui-relogin` chỉ đóng dấu seg#0(S119), mà seg#2(S118) nhắc đúng việc đó KHÔNG dấu ⇒ tuổi thật ≥2, detector đọc 1. ⇒ lỗ = **thiếu nghi-thức RE-STAMP mỗi phiên** (§Q3 = no-retrofit ⇒ chỉ còn đường này) ⇒ **giao W3 `session-end.md`**, KHÔNG phải W2.
[x] W2 XONG @S121 — commit **`00a1c67`** (9 file, +296/14, **1 commit nguyên-tử** đúng spec; commit TRONG lượt để hook không nuốt `memory-budget.json` thành `wal:` riêng = vỡ atomic). Gồm: hmw.js (Sàn-1 gate + VALID_ROLES 12→14 + PA-2a `TIER2_EXPECTED_FULL_ID='claude-opus-4-8'` + H23 note giữ nấc CHƯA-VERIFY) · 3 cờ wrapper (`args.run` 0→**3 hit**; wrapper thứ-4 = raw-invoke em-main KHÔNG có file ⇒ **gate chặn thẳng**) · 2 vai MỚI `lead-view-auditor`+`lead-omission-auditor` (0-CR, block-scalar, NO Write/Edit) · `h24_cadence`{6,15,3} + `lead_self_audit.flag_classes` 10-class enum ĐÓNG · `.claude/governance/.session-counter.json` seed **UNTICKED trung-thực** (counter=0, ngoài 3 path hook CÓ CHỦ-ĐÍCH) · STATUS `Sub-agents` 12→14 + row `Policies` **216 GROUND TỪ MÃ** (`|MenuKeys.All|`54 × `Actions`4, Program.cs:82-89 — Policies = DERIVED, 2 row BUỘC đổi cùng).
**14/14/14** (roster/VALID_ROLES/agentsREADME) = acceptance ② EOL. Glob thô=15 ⇒ xác nhận R2-C1 (acceptance CŨ `ls agents/*.md=14` sẽ FAIL trên impl ĐÚNG).
**Hợp-đồng chéo W1↔W2 khép CẢ HAI CHIỀU, đo bằng chính script W1:** detector `h24_cadence missing``M = light_every = 6 (read from config)` · spawn-model-audit `expected constant missing``[OK] claude-opus-4-8 = owner-ratified` · GAP-3 `policy=MISSING``216` **+ BẮT NGAY** `permission-matrix/SKILL.md:3 writes 240 policy but canonical=216` (+:81 writes 48) ⇒ TOTAL 49→**50** (1 cadence, +2 policy) = **số cộng khớp, không rác**. eol-check tự nhận 2 vai mới: scoped 37→**39** (glob, không hardcode).
**FAULT-INJECT Sàn-1 2 CHIỀU** (bài học W0.3 — 1 chiều thì điều-kiện viết nhầm vẫn PASS): (b) 3 task + thiếu `args.run`**THROW, agent_count=0, token=0, 14ms** (chặn TRƯỚC spawn) · (a) 2 task + thiếu cờ → **gate IM, 2/2 sub return** ⇒ không over-fire, **ngưỡng đúng ≥3** (viết nhầm `if(!wave)` thiếu ngưỡng ⇒ `/fable-real` 1-lane chết oan).
🆕 **Sub bắt khiếm-khuyết SCHEMA hmw (vào adap-report):** task cấm-đọc-file ⟂ schema BẮT BUỘC `checklistEvidence` đòi `file:line` = **mâu-thuẫn cấu-trúc ⇒ schema-pressure kéo agent CHẾ dữ-liệu**. Sub kháng được (khai N/A + lý-do) — cùng họ 2 probe W0.6 bịa với `tool_uses=0`. 🔸 Sub cũng khai đúng: **nó KHÔNG tự verify được gate** (điều-kiện quyết ở SPAWNER trước khi nó sinh ra ⇒ tự-dán PASS = suy từ vắng-mặt-tín-hiệu) ⇒ **giá-trị phép đo đến từ em-main thấy CẢ HAI phía**, không từ lời sub.
[x] ✅ **RESTART + spawn-probe 14/14 SỐNG @S122** (13:27) — Agent-tool registry: 14/14 trả ĐÚNG `ALIVE|<role>`, 0 error 0 garble. 2 vai mới `lead-view-auditor` 26284 tok + `lead-omission-auditor` 26469 tok = **LEAN NHẤT roster** (cap mem-sub 60K ⇒ dư); đối-chiếu `implementer-backend` **78808 = VƯỢT cap 60K** (soi §2.1.2, ngoài wave). 🔸 **Khai chặt 2 điều:** (a) probe phủ đường **Agent-tool registry** THÔI — đường **hmw.js `VALID_ROLES`→`agentType`** CHƯA phủ (W2 đổi CẢ HAI bề mặt) ⇒ chỉ chứng khi workflow THẬT gọi 2 vai mới. (b) `tool_uses=0` = **THEO LỆNH** (em cấm gọi tool; câu hỏi không cần tool), **KHÔNG** phải chữ-ký #53 (=tool_uses=0 + BỊA đã-làm-việc).
[x] ✅ **W3.0 XONG @S122** — wf `wf_5ce007c4-980` 7 lane investigator-codebase RUN-TRACE (engine `/hmw`, KHÔNG raw-Workflow) · **7/7 done · 0 error · 1 RỖNG** (`parallel[3]` schema-fail) · 526s · 836K tok · Sàn-1 marker đăng-ký ĐÚNG NHỊP TRƯỚC phóng (vá lỗi W1@S121 = WAL:13a). **Containment SẠCH:** porcelain rỗng sau P2 · 7 folder đích 0-chạm · 0 file synthesis do sub ghi ⇒ synthesis 100% lead single-writer (B6). Commit **`22ea8c5`** (10 file, +604/3).
⚠️ **LỖI LEAD #3 @S122 (tự bắt, → adap-report):** ghi `Commit 8fb2c9d` vào WAL **TRƯỚC KHI commit** = **SHA BỊA** — đúng lớp WAL:13(b) *"khẳng-định fact-trên-đĩa mà KHÔNG đo đĩa"*, lặp lại y nguyên 1 ngày sau khi ghi bài học đó. + **LỖI #4:** `git commit -m @'…'@` = here-string **PowerShell** dùng trong **Bash** ⇒ commit `9107b1f` subject dính `@` thừa ⇒ amend heredoc đúng → `22ea8c5`. (Tool-desc Bash **có cảnh-báo sẵn** đúng cú-pháp này — đọc mà vẫn sai.) 📌 **Nấc cấu-trúc:** WAL nằm TRONG commit ⇒ **KHÔNG THỂ chứa SHA của chính nó** (amend → SHA đổi → lặp vô-tận) ⇒ tham-chiếu SHA **PHẢI rơi vào commit SAU**; đây là lý-do đúng để KHÔNG amend tiếp.
🔴 **KẾT-QUẢ LẬT TIỀN-ĐỀ CỦA CHÍNH RUN — 0/7 là việc mất; 7/7 ĐÃ XONG, chỉ ghi synthesis SAI CHỖ.** 6 folder có `## synthesis` trong THÂN `run.md` (dạng-3) · `pe-negative-quote` có kết-quả rải trong `## Stages`+`## wf run-id` (dạng-4, `run.md:19` ghi thẳng *"✅ PIPELINE COMPLETE — shipped + live-verified"*, có cả cicd PASS + bundle-hash + smoke 200). ⇒ **thực-địa ≥4 DẠNG ghi synthesis, doc chỉ thừa-nhận 2** ⇒ mệnh-đề C8 (dual) mà FIX#4 bắt chép vào §0 là **CHƯA ĐỦ**, cần **tri-accept**. Gốc: orphan-authority `workflows/README.md:20` hỏi "đã harvest chưa" nhưng **đo TÊN FILE** ⇒ đo cái DỄ ĐO, không phải cái CẦN ĐO. Bồi: `8fa2fcc` message khoe *"close-review run.md synthesis [H2 gate]"*`git show --stat` KHÔNG chạm folder ⇒ **H2 đã soi + coi ĐÓNG**, chỉ lệch tên file. 🔴 **KHÔNG phải convention-cũ-một-thời-kỳ:** cùng ngày 07-12, `h22-wal-adopt` ghi file phẳng còn `S112-*` ghi trong run.md ⇒ **thói-quen không nhất-quán**.
⚠️ **LEAD TỰ NHẬN 2 LỖI:** (a) báo anh *"đo lại tái-hiện CHÍNH XÁC dự-báo FIX#4"* rồi lấy trùng-khớp làm chỗ dựa — **con-số đúng nhưng CẢ FIX#4 LẪN LEAD đều đo TÊN FILE**, sai hướng. (b) memoryPack bơm cho sub ghi *"**S113**/pe-negative-quote"* — SAI, là **S116** (`run.md:1`); sub KHÔNG bị dắt (tự truy git ra đúng) ⇒ lớp lỗi *lead-đưa-tiền-đề-sai-cho-sub*, lần này thoát, lần sau chưa chắc.
**ĐO TRƯỚC/SAU:** `naive 13→7` · **`dual-accept 8→2`** (còn S119 wave-đang-chạy + S122 run này) · **7 tồn-đọng → 0** · 7/7 file non-zero 5.78.2KB (verify byte — bẫy #53). Cách làm = **COPY additive**, run.md GIỮ NGUYÊN + file mới tự khai *"bản gốc trong run.md mới là CHUẨN"* ⇒ 0 rewrite history. Tên file theo convention **ĐO ĐƯỢC** từ 17 file sẵn có (`implement`×`review`×`audit`×2·…).
🧹 **+2 probe dir RỖNG đã `rmdir`** (`_crlf-probe`/`_lf-probe`) ⇒ agent-memory **16→14** khớp roster. Chứng lại: git MÙ với dir rỗng ⇒ `porcelain` sạch = **DƯƠNG-GIẢ**, không phải bằng-chứng đã dọn.
📌 **Khử mâu-thuẫn "làm cả hai" (anh chốt) bằng đúng khuôn C8:** **tri-accept = lưới PHÁT-HIỆN cho bản CŨ, KHÔNG phải giấy phép VIẾT bản MỚI** (C8 vốn vận-hành y hệt: tha di-sản, cấm viết mới kiểu cũ) ⇒ tín-hiệu phiên sau vẫn ĐƠN-NGHĨA. **→ áp vào W3 file#1 (`tiep.md` §0) + `workflows/README.md:19-20`.**
🆕 **→ adap-report:** *"orphan" trong thiết-kế H22/H18-B đo TÊN FILE không đo NỘI DUNG* — SE đo: **8 dương-giả / 25 run = 32%**, và folder **ghi chép ĐẦY-ĐỦ NHẤT** vẫn bị xếp orphan ⇒ **giới-hạn của ĐỊNH-NGHĨA orphan**, KHÔNG phải lỗi tailor SE.
[ ] W3 SERIAL **8 file** (WAL cũ ghi "5 file" = **SAI**`/tiep` S122 đo đĩa bằng pattern FIX#6): **1** `tiep.md` §0 dual-accept VERBATIM C8 · **2** `session-start.md` (0.6b registry-probe + 0.7 + counter + 2 vai + H23 note **+ sweep 7 hit** :2/:32/:35/:66/:73/:74/:202) · **3** `session-end.md` (§5.2 1-LƯỢT + sentinel + Sàn-5 + validator + counter **+ 🆕 nghi-thức RE-STAMP** WAL:14 **+ sweep 2 hit** :2/:83) · **4** `fable-clone.md` GAP#6 = R2-C3 §3.2 (**đo: 0 hit roster** ⇒ KHÔNG phải việc sweep) · **5** `agents/README.md` (8 hit) · **6 🆕 `fable-real-runbook.md`** (8 hit — **v3 FIX#6 GIAO ĐÍCH-DANH W3, WAL rớt**) · **7 🆕 `sleep-recovery-memory-l2.md:34`** `all`="9 sub"→**10** (rớt `office-document` S107; 2 monitor H1/H2 loại CÓ CHỦ-ĐÍCH — đo đĩa: 14 dir ký-ức thật) · **8 🆕 `workflows/README.md:36`** "12 sub"→B1-trỏ. 🔸 `fable-real.md` **KHÔNG vào W3**: FIX#6 giao nhưng đo = **0 hit**; cờ `args.run` đã land W2 (v2 §3.2:209 giao Sàn-1) ⇒ giao W3 = thừa. → W4 detector-fire (PHẢI in permission-matrix/SKILL.md TRƯỚC vá) → W5 harness-11-engine
[ ] W6 push (🔴 squash→count→push CHAINED 1 LƯỢT; K runtime, CẤM hardcode) → adap-report ×4 + adap-request R1-R4 + send-email AI_INFRA + stamp-mark
🔴 **`/tiep` S122 — 4 phát-hiện NGOÀI chain (đo đĩa, đi vào adap-report):** (1) **W3 rớt 3 file** (đã vá dòng W3 trên) — cơ-chế: WAL liệt W3 từ **trí-nhớ về spec**, KHÔNG đọc lại spec; FIX#6 sống ở v3-PATCH còn bảng wave ở v2 = **2 nguồn, lead tóm-tắt bên này quên đối-chiếu bên kia** ⇒ đúng `gap-workstate-drop`, đúng lớp mà `lead-omission-auditor` sinh ra để bắt — vai vừa land W2 và **CHƯA từng chạy**. (2) 🔴 **FIX#6 acceptance "0 hit sống" BẤT-KHẢ-THI**: `lead-view-auditor.md:47` = **ví-dụ CÓ CHỦ-ĐÍCH** ("`agents/README` ghi 12 sub khi roster = 14") trong bảng flag-class của chính vai đi bắt stale ⇒ sửa = phá doc, không sửa = acceptance FAIL vĩnh-viễn. **Cùng họ R2-C1 (`ls=14`) + R3-M3 (`TOTAL≥46`) = acceptance viết bằng LITERAL nên đo cả phần CỐ-Ý khớp** ⇒ reword "0 hit sống ngoài lịch-sử/archive **+ allowlist ví-dụ-có-chủ-đích**" (tiền-lệ WAL:29 = lead sửa acceptance cơ-học rồi báo). (3) **W0.6 "2 probe ĐÃ XOÁ" mới đúng NỬA**: `.claude/agents/_*probe*` sạch ✅ NHƯNG `.claude/agent-memory/_crlf-probe/` + `_lf-probe/` CÒN — **2 dir RỖNG, chưa từng commit, git MÙ với dir rỗng ⇒ `porcelain` sạch = DƯƠNG-GIẢ, không phải bằng-chứng đã dọn**; công-cụ quét-đĩa (sleep-recovery Phase 0.2 · measure-agent-memory.ps1) đếm **16** thay 14 ⇒ `rmdir`. = `view-residual-asym` (xoá định-nghĩa, sót ký-ức). (4) ✅ **ACTIVE-MARKS:19 anh CHỐT @S122** = **giữ bản ký nguyên-vẹn + thêm chú-thích dưới mark** (roster nay 14; "12" = số lúc ký 11-07; ý-định = "∈ roster" KHÔNG phải "∈ đúng 12 vai đó" ⇒ /fable-real|/fable-clone hợp-lệ cả 14) — P4/P8 giữ, sweep allowlist dòng mark ⇒ **W3 file #9**.
🔴 **NGÃ BA S122 — anh CHỐT: ĐÓNG THẬT 7 orphan bằng retro-harvest** (KHÔNG scope, KHÔNG allowlist). Lý-do fork: **FIX#4 TỰ MÂU-THUẪN** — thân ghi "W0.5: mtime→`git log -1 --format=%cI` so mốc `3fde8af`" (=SCOPE) nhưng acceptance ngay dưới ghi "scan ⇒ {S119} **sau khi ĐÓNG 7 tồn-đọng**" (=ĐÓNG); đây vốn là **2 nhánh loại-trừ** v1:110 nêu rõ ("Đóng … **HOẶC** scope"), FIX#4 lấy mỗi nhánh 1 nơi. Scope bị loại vì **run bỏ-quên 2 phiên sau cũng IM = đúng kịch-bản Sàn-3 sinh ra để chống**. Bịa synthesis bị cấm (v1:110 Goodhart/R3). ⇒ **W3.0 MỚI (trước file #1): retro-harvest 7 run** — nội-dung partial-honest (việc ĐÃ ship commit nào; synthesis viết muộn @S122), 🔴 **synthesis = EM-MAIN single-writer** (`workflows/README.md:17` + B6 — sub CẤM ghi `*-synthesis.md`) ⇒ sub chỉ ĐỌC+return, lead ghi. **Đo lại S122 tái-hiện CHÍNH XÁC dự-báo FIX#4: naive 13 / dual-accept 8 / C8 cứu 5** = đúng 5 folder h10+h910 ⇒ mệnh-đề C8 BẮT BUỘC vào §0, thiếu = 5 dương-giả lượt đầu.
🔴 Nhóm chứng LF CỨU 1 kết-luận SAI (2 lần, ghi adap-report): @S120 probe LF (0 byte CR) chết y hệt ⇒ spec 1-probe sẽ kết "CRLF-fatal" SAI — sai theo hướng CÓ LỢI cho câu chuyện (xác nhận L3 + giữ R4 mạnh). @S121 sự-thật NGƯỢC HẲN: tolerant. ⇒ thiết-kế 1-probe đã suýt gửi hub 1 claim SAI.
🔴 2 lỗi lead tự mắc @W0.4 (đã ghi W0-evidence §5, đi nguyên vào adap-report): (a) gate grep-chuỗi chạy trên chính file nó kiểm = TỰ-THAM-CHIẾU (trích claim cũ → FAIL; viết literal regex → FAIL lần 2) (b) meta-count tái-phạm: bảng tự in sẵn "PASS" trong khi số đo nói FAIL ⇒ pass/fail PHẢI TÍNH, cấm nhãn cứng.
🔴 Hook wal-flush.ps1:7 phủ 3 path (.claude/WAL.md · agent-memory/ · workflows/runs/) — KHÔNG phủ .claude/agents/ · broadcasts/ · .gitattributes/scripts/docs. Đáy range HIỆN = commit thường (92de58f) ⇒ mọi wal: sinh sau rơi ca(3) rebase+fixup an-toàn @W6.
next: 🔴 **ANH RESTART CLI**`/tiep`**spawn-probe 14/14 SỐNG** (2 vai mới — bằng-chứng falsifiable DUY NHẤT, static-check KHÔNG đủ) → W3 SERIAL 5 file (tiep §0 dual-accept · session-start 0.6b registry-probe + 0.7 + counter-tick + 2 vai · session-end §5.2 · fable-clone GAP#6 · agents/README) **+ 🆕 nghi-thức RE-STAMP carry** (lỗ thật thay claim-orphan-sai) **+ session-start.md còn "roster 12" stale** → W4 detector-fire (nay CHẮC fire: permission-matrix **6 dòng** gồm 240-policy + 60-menu + title-stale-76d) → W5 harness-11-engine + bug `$userMemDir` → W6 push
🔴 W2 PHẢI SỬA 2 ACCEPTANCE STALE trước khi dùng: (a) `h24_cadence` path THẬT = `.claude/agent-memory/memory-budget.json` (spec chỉ ghi basename ⇒ mơ-hồ; land sai ⇒ ① fail-loud vĩnh viễn). (b) acceptance "STATUS.md:6 in 2026-07-14" **TỰ LÃO-HOÁ ngay trong ngày** (thật = 07-15 sau `4727d16`) ⇒ đổi thành "in ĐÚNG ngày ở anchor STATUS.md:6", cấm literal.
🔴 Bug tiền-tồn NGOÀI lane (lane ① khai, KHÔNG sửa vì đổi baseline): `governance-detectors.ps1` `$userMemDir` **hardcode path tuyệt-đối** `C:\Users\pqhuy\...`, không derive `$RepoRoot``-RepoRoot <cây-tạm>` VẪN đọc user-memory THẬT ⇒ fault-inject C1-wikilink KHÔNG cô-lập được. Xử ở W5 hoặc phiên riêng.
📌 W4 cần biết (lane ① khai): `docs/changelog/skill-audit-2026-05-late.md:43` có phán-quyết audit CŨ ghi đúng anchor này là *"historical, KHÔNG drift"* ⇒ H24/W4 đang **LẬT chính-sách có chủ-đích**, KHÔNG phải phát-hiện-mới. Nói đúng nấc khi báo hub.
verify: K=$(git rev-list --count origin/main..HEAD) ; git log --format='%s' origin/main..HEAD | tail -1 [đáy range → ca 0/1/2/3; HIỆN = "[CLAUDE] Infra: W0 pre-flight…" = commit thường ⇒ ca(3)] ; git status --porcelain ; ls .claude/agents/_*probe* 2>&1 [PHẢI "No such file" — W0.6 xong, 2 probe đã xoá] ; grep -c "CRLF-tolerant" .claude/workflows/runs/2026-07-15-S119-adap-6-broadcast/W0-evidence-15-07-2026.md [>0 = verdict đã ghi] ; ls scripts/agent-frontmatter-eol-check.ps1 scripts/wal-recovery-test.ps1 scripts/spawn-model-audit.ps1 2>&1 ; ls .claude/workflows/runs/2026-07-15-S119-adap-6-broadcast/sub-task-*.md 2>&1 [W1 landed?]