# adap-report — 2026-07-16-Governance-erratum-eol-metric-hai-chieu-va-bon-lo-moi

- **Broadcast:** hub erratum EOL-metric (type update, supersedes-scope HẸP bản 2026-07-15 `1c039f33…`; content_sha256 `eb12b9b8…`, reviewer_gate PASS_WITH_FIXES→ALL-FOLDED). Nhận STAGE-1 S129 2026-07-16 đêm, verify 2-tuyến PASS (whole-file `9c716472…` + `stamp_verify.py` canonical exit-0).
- **Adopt:** S129 2026-07-16, Harness-9 2-workflow: IMPLEMENT `wf_3fccd7d1-b63` (3 lane inv-cb, 3/3) → REVIEW `wf_8a0249f6-709` (2 lane reviewer, GO-WITH-FIXES ×2). Run-trace: `.claude/workflows/runs/2026-07-16-S129-adap-errata-16-07/`. (Attempt-1 review `wf_dc8975ba-4ab` FAIL-AT-LAUNCH JSON-args-mangle 5ms/0-agent → spec-file invocation H21 — khai thẳng.)
- **Mandate re-verify CHỈ delta** (3 fix + 4 lỗ mới) — KHÔNG adopt lại bản gốc. PROJECT-FIT = ADOPT (SE là consumer thật: đã adopt bản 2026-07-15 ở S119/S120 dạng scoped + attr-floor).

## nấc (G-011)

- **fix① (phép đếm attr-aware 2-chiều + w/mixed) — đã-thoả (pre-satisfy, 2 lượt đo độc-lập T0+R0):** EOL-counter sống DUY-NHẤT của SE = `scripts/agent-frontmatter-eol-check.ps1` đếm **BYTE-level CR 0x0D** (`:180-184`), KHÔNG dùng pattern bị bác `grep -c 'i/lf.*w/crlf'`; bắt được w/mixed by-construction (mọi CR → flag); 0 false-positive vì scoped-set 39 file có 0 file cố-ý `eol=crlf`/`-text` (đo live). Mọi occurrence pattern-hỏng trong repo = **mention** (inbox hub + frozen-run + adap-request SE gửi hub), 0 live-consumer — phân use⟂mention chuẩn citation-trap.
- **fix② (đo SAU attr) — đã-thoả:** attr class-wide `* text=auto eol=lf` land `92de58f` **2026-07-15** (TRƯỚC erratum; first-touch `08c7036` 2026-06-15 chỉ có `broadcasts/**` — bẫy tail-1=first-touch được cả T0 lẫn R0 nail). Counter byte-level attr-independent nên không đứng trên cột attr rỗng.
- **fix③ (cổng push so SỐ, cấm `A && B || C`) — đã-thoả:** push-path sống DUY-NHẤT = `session-end.md §5.2` — `recount()` → `$n` → `if [ "$n" -gt 0 ]` / `[ "$n" -eq 0 ] || { exit 1; }` = so SỐ + guard-clause; `:175` tự-cấm exit-code-grep; eol-check chạy standalone `# exit 0 ALWAYS` INFORM rồi push KHÔNG chain. (R0 adversarial: `:168` có shape `A && B || C` nhưng không-push + B=echo-không-fail = an-toàn, không flag.)
- **lỗ #4 (lone-CR `i/-text`) — executed (check chạy, 0 suspect):** 19 `i/-text` = 12 docx + 6 png + 1 xlsx, TẤT CẢ `attr/-text` declared (0 heuristic-binary); filter SE-tailored → **0 suspect lẽ-ra-text**. Check giữ làm regression-guard (file text lone-CR mới sẽ rơi vào `i/-text` và bị soi). 🔴 **Phát-hiện-riêng gửi hub:** filter mẫu của erratum (`zip|exe|png|jpg|jpeg|gif|pdf|gz|ico|woff2?`) **THIẾU docx/xlsx/pptx/dll** → chạy nguyên-mẫu trên SE cho **13 dương-giả** — bằng-chứng cụ-thể "extension-list phải tailor theo binary-class TỪNG repo khai".
- **lỗ #5 (fixture tracked phải `-text`) — n-a-by-design:** SE 0 fixture EOL tracked — control của eol-check là **synthetic IN-MEMORY** (`:215-219`) + fault-inject qua `-RepoRoot` temp-tree. Không tồn-tại fixture-để-chết. Nếu tương-lai thêm fixture tracked → cần `<dir>/** -text` SAU dòng `* text=auto` (ghi nhận, chưa cần).
- **lỗ #6 (nguồn drift = công-cụ-sinh-file) — executed (vá point-of-generation 2-phía):** inventory 6 write-site → đúng **1 site ghi tracked-text**: `scripts/mfe-eval.ps1:204` `Set-Content -Encoding UTF8` (PS5.1 = BOM + CRLF) ra `.claude/agent-memory/.mfe-state.json` — worktree 5 CR; blob LF nhờ attr clean-filter (contained). **Datum R0 quyết-định: blob mang BOM 3-byte thật.** Vá S129 ĐỦ CẢ 2 PHÍA cùng commit (bài S87 consumer-sweep): writer → `[IO.File]::WriteAllText` UTF8-no-BOM + LF tường-minh; reader `:193` → +`-Encoding UTF8` (hết lệ-thuộc BOM-sniff — vốn là read duy-nhất trong file thiếu encoding). **Honest:** đây là phòng-ngừa point-of-generation + one-time blob-change (BOM rớt ở lần ghi state kế), KHÔNG phải sửa churn đang chảy (porcelain vốn rỗng). Verify: parse 0-err · 0 non-ASCII (gotcha #30) · synthetic write-shape CR=0/LF=5/BOM=False · reader round-trip OK.
- **lỗ #7 (ma-trận 4-ô) — executed-partial (khai thẳng phần không biết):** SE data-point W0.6 = **A/B đổi-EOL-only** (quote-format hằng-số) ⇒ củng-cố HÀNG CRLF-tolerant (scope agents/, 1 win32 build) + là ca-mẫu **restart-verify hợp-lệ** (không kết-luận từ probe-trước-re-scan); **trục-quote UNDETERMINED** (probe đã xoá cố-ý — untracked để attr không normalize; format description không recover được). Chống over-cite tương-lai: +4 dòng **AXIS-limit** vào header eol-check (`:27-30`) — "W0.6 says NOTHING about the description-colon-quote axis".

## evidence

- Run-trace: `runs/2026-07-16-S129-adap-errata-16-07/` — `implement-synthesis.md` + `review-synthesis.md` + `sub-investigator-codebase-{0,1,2}.md` + `sub-reviewer-{0,1}.md`. Diff code: `scripts/mfe-eval.ps1` (:193 + :202-209) + `scripts/agent-frontmatter-eol-check.ps1` (:27-30) — commit kèm push này.
- REVIEW độc-lập re-run **byte-exact** các số chốt: 19/0-suspect i/-text · CR worktree=5/blob=0 · eol-check 39 file 0 flag exit-0 · attr-landing 92de58f.

## honest-caveat

- **#53 WRITE-lane 4/5 lane** (chỉ T2 tự ghi đĩa) — nội-dung không mất (journal), em-main scribe on-behalf VERBATIM, R1 verify 0-miss. Số scoped-set canonical = **39** (T0 từng kể story "40 = +1 agent mới" — SAI, delta = `skills/README.md` ngoài glob; R1 nail).
- 188 file `i/lf w/crlf` repo-wide (131 EF Migrations) GIỮ INFORM-only by-design — erratum không đổi stance này (mass-fix vẫn cấm; đúng "false-price factory").
