# adap-report — EOL/CRLF + agent-registry defect-notice

## 1. id-broadcast
`2026-07-15-Governance-eol-crlf-agent-registry-defect-notice`

## 2. nấc G-011
**executed** — SE **đã CHẠY đúng thí-nghiệm falsifiable mà chính broadcast ④(d) gọi là đường chứng-minh duy-nhất**.
🔴 **Kết-quả BÁC một phần của broadcast** ⇒ phần bị bác gửi ngược thành **adap-request R4** (hạ mạnh, **KHÔNG rút hẳn**).

| Phần broadcast | Nấc SE |
|---|---|
| ① `.gitattributes` EOL sàn-chung | **executed + fault-inject có răng** |
| ② symptom roster ↔ VALID_ROLES ↔ file-count | **executed + runtime-verified** (14/14/14) |
| ③(d) RESTART rồi VERIFY danh-sách agent | **executed + runtime-verified** (spawn-probe 14/14) |
| ④(a) chọn control | **executed** — probe ra `CRLF-tolerant` ⇒ validator **HẠ giá-trị** xuống hygiene + khai thật |
| ④(b) *"CRLF **ĐƠN-ĐỘC** có thể đủ giết"* | 🔴 **BỊ BÁC bằng ĐO** (§5(a)) → **R4** |
| ④(c) acceptance `count==0` toàn-repo | **n-a — SE bác trước khi áp** (dương-giả factory, §4.3) → **R4** |

## 3. evidence

**Commit (ĐÃ PUSH, range `4727d16..c39ba9d`):**
- `92de58f` — `.gitattributes` theo **CLASS** (không liệt-kê từng đuôi)
- `c5c68de` — **2 probe** (CRLF + **LF làm NHÓM CHỨNG**) — lệch spec **CÓ CHỦ-ĐÍCH** (§4.1)
- `d07bbb9` — `scripts/agent-frontmatter-eol-check.ps1` (16 960 B)
- `c39ba9d` — fix `$userMemDir` hardcode ⇒ fault-inject **nay cô-lập được** (§5(d))
- Verdict đầy-đủ: `runs/2026-07-15-S119-adap-6-broadcast/W0-evidence-15-07-2026.md` §7.4/§7.5/§7.6

**Đo thật:**
| Phép đo | Kết quả |
|---|---|
| `git check-attr text eol -- .claude/agents/reviewer.md` | `unspecified` → `text: auto`, `eol: lf` ✅ |
| binary attr | **19/19** `-text` ✅ |
| **fault-inject `.gitattributes`** (gỡ `*.docx` → check-attr trả `text: auto`) | **CÓ RĂNG** ✅ |
| scoped gate | **0** — 🔴 **KHAI VACUOUS**, xanh-sẵn, **KHÔNG tính là thành-tựu** (spec v2 W0.2 / R2-C4) |
| repo-wide | **188 file** INFORM-only · 🔴 **CẤM mass `rm`+`checkout`** |
| eol-check scoped-set | **39 file** (đếm bằng **glob**, không hardcode) · **0 CR byte** |
| **teeth-inject** (lead tự tiêm **276 CR**) | → **FLAG**; gỡ → **0** ✅ |

**🔴 W0.6 spawn-probe — neo ĐỊNH-LƯỢNG:**
- Agent **CRLF hoàn-toàn** (CR = **276 byte**) → spawn **ă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"*. Đây là điểm phân-biệt: *"không thấy lỗi"* ≠ *"chứng minh chạy"*; con-số token cho thấy **cả hai lane đều thực-sự nạp và chạy**.

## 4. tailored-gì + skip-gì-vì-sao

**4.1 🔴 TAILOR QUAN-TRỌNG NHẤT — thêm probe LF làm NHÓM CHỨNG (lệch spec CÓ CHỦ-ĐÍCH).**
Spec gốc chỉ 1 probe (CRLF). SE thêm **probe LF song song** làm **control**.
🔴 **Quyết-định này CỨU MỘT KẾT-LUẬN SAI, đo được 2 lần:**
- **@S120:** probe **LF** (0 byte CR) chết **y hệt** probe CRLF ⇒ thiết-kế **1-probe** sẽ kết luận **"CRLF-fatal"** — và sai **theo hướng CÓ LỢI cho câu chuyện** (xác nhận L3, giữ R4 mạnh). Đây là kiểu sai **nguy-hiểm nhất**: nó **khớp với thứ mình đang muốn tin**.
- **@S121:** LF-probe xanh **TRƯỚC** ⇒ so được ⇒ sự-thật **NGƯỢC HẲN**: **tolerant**.
⇒ **Thiết-kế 1-probe đã suýt gửi hub 1 claim SAI.** → **R4**.

**4.2 `.gitattributes` theo CLASS, không liệt từng đuôi** — project-fit: SE có nhiều loại binary (docx/xlsx/pdf/ảnh); liệt tay = sót âm-thầm. Fault-inject chứng CLASS có răng.

**4.3 ④(c) — SE BÁC acceptance `count==0` toàn-repo TRƯỚC KHI ÁP.** Repo có **188 file** dính EOL-only ⇒ gate toàn-repo **LUÔN ĐỎ** ⇒ **dương-giả factory** ⇒ người bypass ⇒ **cổng tự xoá chính nó**. ⇒ SE dùng **scoped gate** + **khai thẳng nó VACUOUS**. → **R4 (c) giữ chân riêng**.

**4.4 ④b validator — HẠ giá-trị theo đúng verdict, KHÔNG nâng.** Script `exit 0` **LUÔN LUÔN**, cố-ý; tự in *"HYGIENE/INFORM net… CRLF-fatality was **REFUTED** by the S121 W0.6 spawn-probe; this check enforces the `.gitattributes eol=lf` policy **and nothing stronger**"* + tự khai *"GREEN-BUT-VACUOUS — do NOT bank this as an achievement"*.
🔸 **Lead tự bắt:** đã có lúc viết `exit 1` **chặn push** cho check này ⇒ **overclaim đúng cái vừa bị bác** ⇒ sửa lại INFORM. Ghi ra vì đây là **phản-xạ sai trông như cẩn-thận hơn**.

**SKIP / n-a:** ④(c) toàn-repo = **n-a có lý-lẽ** (§4.3), KHÔNG phải behind.

## 5. honest-caveat

🔴 **(a) VERDICT: `.claude/agents/` CRLF-TOLERANT — BÁC ④(b), gửi ngược R4.**
Câu bị bác (nguyên-văn): *"CRLF **ĐƠN-ĐỘC** có thể đủ giết"* → **SAI với SE**: probe CRLF (CR=276) **ăn 4/4 tầng**.
**Disposition TỪNG DÒNG của R4 (🔴 CẤM gộp 1 nhãn — đúng bài học meta-count):**
- **(a) GIỮ** — nhân-quả *"squash lật EOL"* **SAI với SE**: §5.0 = `reset --soft`, **worktree-neutral**; nguồn CRLF thật = Migrations + sub-return lead-written. **Chân riêng, độc-lập probe.**
- **(c) GIỮ** — acceptance `count==0` toàn-repo = **dương-giả factory**. **Chân riêng.**
- **(b) 🔴 BỊ BÁC ⇒ LẬT.** Bỏ hẳn nấc *"đọc mã-nguồn"*. **Câu mới MẠNH HƠN câu cũ:** *SE đã CHẠY đúng thí-nghiệm falsifiable mà chính broadcast ④(d) gọi là đường chứng-minh duy-nhất ⇒ **mô-hình nguy-cơ phần (b) cần sửa***.
🔸 **KHAI CHẶT phạm-vi — đừng đọc rộng hơn thứ đã đo:** tolerant ở mức **HÀNH-VI**, phạm-vi **`.claude/agents/` + 1 build win32**. **`commands/` · `skills/` · `.ps1` CHƯA PHỦ.** n=1 build, 1 OS.

🔴 **(b) #53 tái-hiện 2/2 NGAY TRONG probe** — cả 2 probe trả `tool_uses=0` + **bịa dòng WAL**. **KHÔNG nhiễm verdict** (neo = **metadata harness** token/tool_uses, không phải lời sub) nhưng là data-point cho **adap-request R-53**. 🔸 Cùng họ khiếm-khuyết SCHEMA `hmw` mà sub tự khai ở W2: *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**.

🔴 **(c) Registry = ảnh-chụp khởi-phiên, KHÔNG hot-reload — xác-nhận LẦN 2** (S120 + S121, nay S122 lần 3). ⇒ vai `.md` MỚI **PHẢI** restart + spawn-probe. **`ls` + grep `VALID_ROLES` = điều-kiện CẦN, KHÔNG ĐỦ** (frontmatter block-scalar hỏng vẫn **liệt-kê được tên** mà chết lúc instantiate). ⇒ SE land thành `session-start` **BƯỚC 0.6b**. → khớp adap-request đã gửi `2026-07-10-se-registry-hot-reload-new-agent`.

🔴 **(d) BUG TỰ BẮT — công-cụ chứng-minh-có-răng lại KHÔNG có răng của chính nó.** `governance-detectors.ps1:363`:
```powershell
# Derive from this machine's project slug; ...   ← comment nói DERIVE
$userMemDir = 'C:\Users\pqhuy\.claude\projects\D--Dropbox-...\memory'   ← code HARDCODE
```
**Comment mô-tả Ý-ĐỊNH; code hardcode cả path tuyệt-đối LẪN username.** 2 hại cụ-thể: (1) `-RepoRoot <cây-tạm>` **vẫn đọc user-memory THẬT** ⇒ **fault-inject C1-wikilink KHÔNG cô-lập được** ⇒ teeth-test bất-khả-thi; (2) máy/acc khác ⇒ **degrade IM LẶNG** xuống else-branch, mà **degrade im lặng đọc y hệt "sạch"**.
**Fix `c39ba9d`:** `$projectSlug = $RepoRoot -replace '[:\\/_]', '-'` + `$env:USERPROFILE`. **Verify 2 chiều:** slug derive == literal cũ (**KHỚP 100%**, `Test-Path`=True, TOTAL vẫn 45 ⇒ hành-vi không đổi) · `-RepoRoot` cây-tạm → *"user-memory path not reachable (…fake-repo\memory)"* ⇒ **CÔ LẬP**, rò path thật = **0**.

🔴 **(e) 2 probe ĐÃ XOÁ — nhưng "đã xoá" chỉ đúng MỘT NỬA, và `porcelain` sạch là DƯƠNG-GIẢ.** W0.6 khai *"2 probe đã xoá, porcelain sạch"*. Đo lại @S122: `.claude/agents/_*probe*` **sạch thật** ✅ — **NHƯNG** `.claude/agent-memory/_crlf-probe/` + `_lf-probe/` **CÒN NGUYÊN** (2 dir **RỖNG**). **git MÙ hoàn-toàn với thư-mục rỗng** ⇒ `git status` sạch **KHÔNG** chứng-minh đĩa sạch; công-cụ quét-đĩa đếm **16 thay vì 14**. Đã `rmdir` @S122. ⇒ bài học: **`porcelain` rỗng là tín-hiệu YẾU NHẤT**, đã land thành bậc-YẾU của Sàn-3.

---
*Ghi @S122 (2026-07-15) · lead Opus 4.8 · chain ĐÃ PUSH `4727d16..c39ba9d`, tree clean, K=0*
