Files
solution-erp/docs/governance/adap-reports/2026-07-13-Governance-harness-22-wal-defect-fix.md
pqhuy1987 6dcd457dc7 [CLAUDE] Docs: W6 adap - 5 adap-report + 5 adap-request + email hub (selftest-stamp PASS)
5 ADAP-REPORT (nac cham TUNG DONG, khong gop 1 nhan; KHONG tu phong `verified`):
- H22 wal-defect-fix : executed. 4/6 san co runtime; San-2 + San-5 CHUA chay lan nao.
- H23 model-at-spawn : executed. 🔴 CAU HOI TRUNG-TAM van CHUA TEST (lead=Opus khong
                       phan-biet duoc; DEFER toi phien lead=Fable). Khai thang.
- H24 lead-self-audit: executed + spawn-probe 14/14 runtime. 🔴 2 vai CHUA CHAY lan nao,
                       counter CHUA tick => 0 bang-chung chung bat duoc gi.
- EOL/CRLF notice    : executed. SE BAC phan (b) bang thuc-nghiem.
- owner-sign 3 marks : n-a (SE da ky 3 mark cung noi-dung truoc do, duong DACI rieng).

5 ADAP-REQUEST (chieu nguoc):
- R1 H8 all-inherit vs hub tu pin 17/17 -- KHUNG noi mot dang, thuc-hanh hub mot neo.
     SE khong tu chon duoc: 3 nhanh dan toi 3 hanh-dong NGUOC nhau.
- R2 push-guard 3 loi: (a) dem sai pham-vi 57 vs 0-2 (b) grep -c exit-1 khi dem 0
     (c) 🔴 MOI: "dat guard sat push" VAN CHUA DU -- guard TU-DEADLOCK vi hook fire
     moi turn-boundary => de-xuat squash->count->push CUNG 1 LUOT vao KHUNG.
- R3 hook side-ref vs floor N.2 -- 🔴 SE KHONG TU LAM, xin hub phan truoc
     (nguyen-tac: lech floor => request, DU LY-LE TOT). Khai: chua verify plumbing.
- R4 CRLF-tolerant bac phan (b) EOL-notice. Disposition TUNG DONG: (a) GIU chan rieng
     (c) GIU chan rieng (b) BI BAC. + de-xuat dua NHOM-CHUNG vao KHUNG: 1-probe suyt
     gui hub 1 claim SAI, va sai THEO HUONG CO LOI cho cau chuyen dang ke.
- R5 🔴 "orphan" do TEN FILE khong do NOI DUNG -- 32% duong-gia / 25 run. Folder ghi
     chep DAY-DU NHAT (co cicd PASS + bundle-hash + smoke 200) VAN bi xep orphan.
     0/7 la viec mat. De-xuat: sua DINH-NGHIA, va "nhan != cho phep".

EMAIL hub: broadcasts/outbox/ai_infra/2026-07-15-...-wave-report.md
  content_sha256 d9536445cc9178efcc4d66a0d3d7b5980b7c07855f8dcd5072fda1c2f3497d91
  SELFTEST-STAMP PASS (recompute == stamped) => 0 stamp-then-edit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 15:29:07 +07:00

85 lines
10 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.

# adap-report — H22 wal-defect-fix (5 sàn + push-guard)
## 1. id-broadcast
`2026-07-13-Governance-harness-22-wal-defect-fix`
## 2. nấc G-011
**executed** — per-sàn KHÔNG đồng đều, chấm TỪNG DÒNG (gộp 1 nhãn = che mất chỗ yếu):
| Sàn | Nấc | Vì sao đúng nấc đó |
|---|---|---|
| **1** đăng-ký-dương @launch | **executed + runtime-verified** | gate cơ-khí-hoá `hmw.js:147`; fault-inject **2 CHIỀU**: 3 task thiếu `args.run`**THROW, agent_count=0, token=0, 14ms** (chặn TRƯỚC spawn) · 2 task thiếu cờ → **gate IM, 2/2 sub return** ⇒ ngưỡng ≥3 đúng, không over-fire |
| **2** closeout-sentinel | **verified-pending** | 🔴 văn-bản đã land (`session-end` BƯỚC 0 đặt + §6.4 xoá) nhưng **`/session-end` CHƯA chạy lần nào từ khi land** ⇒ chưa có bằng-chứng runtime |
| **3** ground-truth khi sổ trống | **executed + fault-inject 9/9** | định-nghĩa canonical @`tiep.md` §0 + `session-start` 0.7 rút logic (acceptance `grep -c "chain rỗng"` = **0** ✅). Fault-inject cây tạm 9/9 gồm 2 ca anti-Goodhart |
| **4** test-suite 3 lớp | **executed + runtime-verified** | `scripts/wal-recovery-test.ps1`**4/4 ca · 30 assert · 0 fail**, có counterfactual tái-hiện DEADLOCK `rebase-exit=0` |
| **5** hậu-kiểm cờ-vs-nội-dung | **executed** | gấp vào `session-end §L.b(f)`; **chưa chạy** (cùng lý do sàn-2) |
| **push-guard** | **executed + RUNTIME-VERIFIED (dùng thật)** | fault-inject cây **git THẬT 10/10** + **push thật phiên này**: `4727d16..c39ba9d`, trailing-K=0, K sau push=0, `wal:`/20-commit **11→7 (không tăng)** |
🔴 **KHÔNG claim `verified`** — nấc đó do `/adap-audit` phía AI_INFRA chấm cross-repo.
## 3. evidence
**Chain commit (ĐÃ PUSH — server-verifiable tại `git.baocaogiaoduc.vn/vietreport-admin/solution-erp`, range `4727d16..c39ba9d`):**
| Wave | sha | Nội dung |
|---|---|---|
| W0 | `92de58f` | `.gitattributes` EOL-class + hook rebase-interlock + FIX#3-bis 4-ca |
| W0.4/0.5 | `48e0d26` | `workflows/README.md:52` gỡ claim STALE + baseline orphan (`git %cI`, KHÔNG mtime) |
| W0.6 | `c5c68de` | probe LF làm **nhóm chứng** (lệch spec CÓ CHỦ-ĐÍCH) |
| W1 | `d07bbb9` | `wal-recovery-test.ps1` 4-ca + 2 detector + eol-check |
| W2 | `00a1c67` | Sàn-1 gate + 3 cờ wrapper **CÙNG 1 COMMIT** (9 file, +296/14) |
| W3 | `dfa3dae` | `tiep.md` §0 Sàn-3 canonical · `session-start` 0.7-trỏ · `session-end` Sàn-2 + §5.0/§5.2 + Sàn-5 |
| W3 | `53765b0` | `workflows/README.md` orphan-authority TRI-ACCEPT |
**Đo thật:**
- Sàn-1 fault-inject: THROW ở **14ms**, `agent_count=0`, `token=0` ⇒ chặn **TRƯỚC** spawn, không phải sau.
- Sàn-3 fault-inject **9/9** (cây tạm): FLAG đúng → orphan-thật · flat 0-byte · C8 0-byte · chữ "synthesis" **giữa câu văn** (không phải heading). IM đúng → dạng-1 · dạng-2 · dạng-3 · `## Synthesis` (hoa+space) · folder không `run.md`.
- Sàn-4: 4 ca · **30 assert** · 0 fail; assert `sut-has-no-NONWAL-param` dùng **`Get-Command` reflection** (KHÔNG grep — né tự-tham-chiếu).
- push-guard fault-inject **10/10** trên cây **git thật**.
- `grep -c "chain rỗng" .claude/commands/session-start.md` = **0** (acceptance Sàn-3).
## 4. tailored-gì + skip-gì-vì-sao
**TAILORED (giữ FUNCTION-floor, đổi FORM theo project-fit):**
1. **Sàn-3 → 3 bậc SE-tailored, vá điểm-mù CỦA CHÍNH SE.** Hook `wal-flush.ps1:7` tự-commit **3 path** ở mọi turn-boundary ⇒ 2 tín-hiệu trực-giác nhất (**cây bẩn** + **có commit chưa đẩy**) **MÙ đúng 3 vùng đó**. ⇒ bậc MẠNH dựng từ tín-hiệu hook **không chạm tới được**: ① orphan run-folder (**git-independent**) · ② commit **không phải** `wal:` (hook không sinh loại này) · ③ `closing:` treo · ④ **`wal:`-commit chưa đẩy có đụng `workflows/runs/`** — thu-hồi một phần điểm-mù: dù `WAL.md` bị xoá trắng, **commit của chính hook vẫn tố-giác** run đã dựng.
2. **🔴 Sàn-3 + TRI-ACCEPT (phát-hiện SE, KHÔNG có trong broadcast — xem §5).**
3. **push-guard: KHUNG "đặt guard sát push" CHƯA ĐỦ ⇒ SE làm `squash → count → push` CHAINED 1 LƯỢT.** Lý do đo được: giữa §5.0 và §5.2, closeout **chắc chắn** làm bẩn path hook (ghi `closing:` · spawn sub → `agent-memory/` · ghi `runs/`) ⇒ **mỗi turn-boundary = +1 `wal:`** ⇒ tách ra là **tự sinh lại đúng thứ vừa dọn**. → **đã gửi ngược thành adap-request R2 (γ)**.
4. **Đếm TRAILING, không đếm tổng.** §5.0 **cố ý** để yên `wal:` kẹp dưới commit thường (hard-safety: không rewrite lịch-sử đã đẩy) ⇒ nếu §5.2 đếm toàn dải thì nó đếm luôn mấy cái cố-ý-để-yên ⇒ **chặn push vĩnh viễn**. Đo thật: đếm-toàn-lịch-sử = **57**. **Cả 2 bẫy TÁI HIỆN ĐƯỢC trên cây git thật**, không phải cảnh-báo lý-thuyết:
- `grep -c` đếm 0 → **exit 1** ⇒ dùng exit-code làm điều-kiện thì ca **SẠCH** bị chặn.
- đếm-toàn-lịch-sử=1 vs trailing=0 ⇒ đếm tổng chặn push.
5. **4 ca của FIX#3-bis KHÔNG vào `session-end`** — chúng thuộc W0.3 (ca mổ **một lần**) nơi phải chọn *rebase vs reset*. §5.0 **không bao giờ rebase** ⇒ không có nhánh để chọn. Chứng: trailing-K **tự đúng cả 4 ca** — ca(1) `HEAD~K == origin/main` (≡ `reset --soft origin/main` của FIX#3(c)) · ca(2) `base+wal+[CLAUDE]` → K=0 → **push được, KHÔNG deadlock** · ca(3) đáy không bị chạm, nội-dung còn ở INDEX · ca(0) skip.
**SKIP / n-a:** không có sàn nào skip.
## 5. honest-caveat
🔴 **(a) 2 sàn CHƯA có bằng-chứng runtime:** Sàn-2 (sentinel) + Sàn-5 (hậu-kiểm) — văn-bản đã land nhưng `/session-end` **chưa chạy lần nào** từ khi land. **KHÔNG được đọc thành "đã hoạt động".**
🔴 **(b) Gate CHỈ phủ đường `hmw.js`.** Kẽ **CÒN LẠI, KHÔNG gate được**: raw `Workflow` tool + raw `Agent` tool đi **thẳng**, không qua file đó ⇒ mất writeGuard + run-trace. Bằng-chứng thật: S72 raw-Workflow ⇒ reviewer tự ghi MEMORY **+2850B over-cap** · S118 raw-Agent 7-spawn ⇒ **0 run-folder** · **chính run S119 của wave này** cũng đi raw-Workflow. SE **KHÔNG có CLI-launcher để whitelist** ⇒ 3 nguyên-tắc detector của broadcast là **N/A vì không có launcher**, **KHÔNG phải vì "hết kẽ"**.
🔴 **(c) Ngưỡng "hoặc ước >5 phút" KHÔNG cơ-khí-hoá được** (script không đo trước thời-lượng) ⇒ nửa đó vẫn là **kỷ-luật người**, không phải cổng.
🔴 **(d) PHÁT-HIỆN NGƯỢC — "orphan" trong thiết-kế H22/H18-B đo TÊN FILE, không đo NỘI DUNG.** SE đo trên 25 run: **naive 13 / dual-accept 8 / C8 cứu 5****8 dương-giả = 32%**. Nặng nhất: folder **ghi chép ĐẦY-ĐỦ NHẤT** (`pe-negative-quote` — có cicd PASS + bundle-hash + smoke 200 + 6 stage `[x]` + dòng *"PIPELINE COMPLETE — shipped + live-verified"*) **VẪN** bị xếp orphan, chỉ vì không có file tên `*-synthesis.md`. Thực-địa có **≥4 dạng** ghi synthesis; doc thừa-nhận **2** ⇒ mệnh-đề C8 dual-accept **CHƯA ĐỦ** → SE mở **TRI-ACCEPT** (nhận dạng-3 `## synthesis` trong thân `run.md`).
- 🔴 **KHÔNG phải lỗi tailor của SE — là giới-hạn của chính ĐỊNH-NGHĨA orphan.** Gate hỏi *"đã harvest chưa"* (câu hỏi về **NỘI DUNG**) nhưng đo **TÊN FILE** ⇒ đo cái **dễ đo**, không phải cái **cần đo**.
- **Bồi:** commit `8fa2fcc` khoe message *"close-review run.md synthesis [H2 gate]"*`git show --stat` **KHÔNG chạm folder** ⇒ H2-gate **đã soi + coi là ĐÓ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 dạng-1 (file phẳng) còn `S112-*` ghi dạng-3 (trong run.md) ⇒ **thói-quen không nhất-quán**.
- **Kẽ CÒN LẠI:** **dạng-4** (kết-quả rải dưới heading tuỳ-ý) **không máy nào bắt được** — nhận nó = phải nhận "bất-kỳ run.md nào có vẻ nói về kết-quả" ⇒ quá lỏng ⇒ **để người phán**. Khai thẳng: **chưa xử**.
- **Nấc nhận:** 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** (mượn đúng khuôn C8: tha di-sản, cấm viết mới kiểu cũ).
🔴 **(e) 7 orphan tồn-đọng ĐÃ ĐÓNG THẬT (anh chủ-dự-án chốt), KHÔNG scope/allowlist.** `22ea8c5` — 7 synthesis viết theo lối **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**. dual-orphan **8→2** (còn wave S119 + run S122 = 2 run đang bay hợp-lệ).
🔴 **(f) 3 lỗi LEAD trong đợt adopt này (khai để hub thấy chỗ quy-trình còn hở):**
1. **Sàn-1 LỆCH ở chính W1:** lead đăng-ký marker `wf:` **SAU** khi phóng (luật = **TRƯỚC**). Vá ở W3.0: đăng-ký marker thành **nhịp riêng trước phóng**.
2. **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`. 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".**
3. **Tái phạm chính lỗi #2 một ngày sau:** ghi `Commit 8fb2c9d` vào WAL **TRƯỚC khi commit** = **SHA bịa**. ⇒ **bài học viết ra không tự nó chặn được gì.**
🔴 **(g) GAP THẬT thay claim sai — carry-age vacuous VỀ 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)**, trong khi **seg#2 (S118)** nhắc **đúng việc đó****không có dấu****tuổi thật ≥2, máy đọc 1**. §Q3 no-retrofit ⇒ đường duy nhất = **nghi-thức RE-STAMP mỗi phiên** (land `session-end §L.b(j)(iv)`). **Khai thẳng: carry mở TRƯỚC S122 có tuổi đo-thiếu.**
---
*Ghi @S122 (2026-07-15) · lead Opus 4.8 · chain ĐÃ PUSH `4727d16..c39ba9d`, tree clean, K=0*