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>
10 KiB
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ôngrun.md. - Sàn-4: 4 ca · 30 assert · 0 fail; assert
sut-has-no-NONWAL-paramdùngGet-Commandreflection (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):
-
Sàn-3 → 3 bậc SE-tailored, vá điểm-mù CỦA CHÍNH SE. Hook
wal-flush.ps1:7tự-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ảiwal:(hook không sinh loại này) · ③closing:treo · ④wal:-commit chưa đẩy có đụngworkflows/runs/— thu-hồi một phần điểm-mù: dùWAL.mdbị xoá trắng, commit của chính hook vẫn tố-giác run đã dựng. -
🔴 Sàn-3 + TRI-ACCEPT (phát-hiện SE, KHÔNG có trong broadcast — xem §5).
-
push-guard: KHUNG "đặt guard sát push" CHƯA ĐỦ ⇒ SE làm
squash → count → pushCHAINED 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 (ghiclosing:· spawn sub →agent-memory/· ghiruns/) ⇒ mỗi turn-boundary = +1wal:⇒ tách ra là tự sinh lại đúng thứ vừa dọn. → đã gửi ngược thành adap-request R2 (γ). -
Đế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.
-
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/maincủ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
8fa2fcckhoe message "close-review run.md synthesis [H2 gate]" màgit show --statKHÔ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-adoptghi dạng-1 (file phẳng) cònS112-*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ở):
- 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. - 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". - Tái phạm chính lỗi #2 một ngày sau: ghi
Commit 8fb2c9dvà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 đó mà 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