# ADAP-REQUEST (se → AI_INFRA) — R5: 🔴 "orphan" trong H22/H18-B đo **TÊN FILE**, không đo **NỘI DUNG** — 32% dương-giả đo được

- **id:** 2026-07-15-se-r5-orphan-measures-filename-not-content
- **from:** se · **date:** 2026-07-15 (S122) · **classify:** **infra** (định-nghĩa orphan — H22 sàn-3 + H18-B orphan-authority)
- **status:** proposed · **nấc:** **evidenced — đo trên toàn bộ 25 run của SE**

## 1. Phát hiện (evidence-first)

**Orphan-authority hiện-hành:** *"`runs/<id>/` có `run.md` mà `*-synthesis.md` VẮNG/0-byte"*.

🔴 **Gate hỏi *"đã harvest chưa"* — một câu hỏi về NỘI DUNG — nhưng đo *"có file tên X không"*.** Khi hai thứ đó lệch nhau, detector đo được **cái DỄ ĐO**, không phải **cái CẦN ĐO**.

**Đo trên toàn bộ 25 run của SE:**
```
total run.md = 25 | naive-orphan = 13 | dual-accept-orphan = 8 | C8 cứu = 5
⇒ 8 dương-giả / 25 = 32%
```

**7 "orphan" tồn-đọng (trừ 1 run đang bay hợp-lệ) — điều-tra bằng 7 lane read-only + lead verify từng cái:**
🔴 **0/7 là việc mất. 7/7 ĐÃ XONG, chỉ ghi synthesis SAI CHỖ.**

| Folder | Kết-quả nằm ở đâu | LANDED |
|---|---|---|
| S112-pe-signoff-close-review | `run.md:19` `## synthesis` | `a829d0d` |
| S112-pe-signoff-save-advance | `run.md:21` `## synthesis` | `a829d0d` (qua run kế) |
| S112-supplier-excel-import | `run.md:25` `## synthesis` | `e100ef0` + Mig 63 |
| S112-supplier-import-close-review | `run.md:8` `## synthesis` | Run #496 |
| S113-supplier-import-v2-invest | `run.md:34` `## Synthesis` + `## OUTCOME` | `5fa11b5` + Mig 64 |
| S114-multi-ncc-per-hangmuc | `run.md:28` `## Synthesis` | `d436af2` + Mig 65 |
| pe-negative-quote (**S116**) | `run.md:8-19` `## Stages` + `## wf run-id` | `88368fd` |

### 🔴 Ca nặng nhất — folder ghi chép ĐẦY-ĐỦ NHẤT vẫn bị xếp orphan

`pe-negative-quote/run.md:19` ghi **thẳng**: *"✅ PIPELINE COMPLETE — shipped + live-verified 2026-07-13"*, kèm **6 stage `[x]`**, **4 wf-id** + verdict từng stage, **cicd-monitor PASS** (CI Run 386, bundle rotate `D51OYyGV`→`Dd55jBpj`, smoke 200, byte-level feature-strings PRESENT).
**Vẫn bị xếp orphan.** Chỉ vì không có file tên `*-synthesis.md`.

### Bồi: H2-gate ĐÃ soi và ĐÃ coi là đóng

Commit `8fa2fcc` có message khoe *"close-review run.md synthesis [H2 gate]"* — nhưng `git show --stat` **KHÔNG chạm folder đó**. ⇒ H2 harvest-curator **đã nhìn, đã coi ĐÓNG**; chỉ tên file không khớp glob nên folder-scan **vẫn kêu**.

### 🔴 KHÔNG phải "convention cũ của một thời-kỳ"

**Cùng ngày 2026-07-12:** `h22-wal-adopt` ghi **dạng-1** (file phẳng) · `S112-*` ghi **dạng-3** (trong run.md). **Cùng lead, cùng ngày, hai kiểu.**
⇒ **thói-quen không nhất-quán**, KHÔNG phải di-sản migration. ⇒ nhận dạng-3 mà không cấm viết mới = **đóng băng sự tuỳ-tiện thành luật**.

### Thực-địa có ≥4 dạng; doc thừa-nhận 2

| Dạng | Doc thừa-nhận? |
|---|---|
| 1. `<stage>-synthesis.md` phẳng | ✅ |
| 2. `harvest/<stage>-synthesis.md` (C8) | ✅ |
| 3. **`## synthesis` trong thân `run.md`** (6 folder) | ❌ **không ở đâu** |
| 4. **kết-quả rải dưới heading tuỳ-ý** (`## Stages` + `## wf run-id`) | ❌ **không ở đâu** |

## 2. Phạm vi ĐÃ verify vs CHƯA verify

| Điều | Trạng-thái |
|---|---|
| 13/8/5 trên 25 run của SE | ✅ đo thật, tái-hiện được |
| 0/7 là việc mất | ✅ 7 lane read-only + **lead verify từng cái bằng SHA thật** |
| Dạng-3 nhận được bằng máy (`^#+\s*synthesis`) | ✅ **fault-inject 9/9**, gồm 2 ca anti-Goodhart |
| **Dạng-4 nhận được bằng máy** | 🔴 **KHÔNG** — 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, vô-nghĩa ⇒ **để người phán. KẼ CÒN LẠI, chưa xử.** |
| Repo khác có cùng bệnh không | ❓ **KHÔNG BIẾT** — SE chỉ đo repo mình |

## 3. Đề xuất cho AI_INFRA

1. **Sửa ĐỊNH-NGHĨA orphan, không phải sửa một dòng.** Câu hỏi là *"đã harvest chưa"* ⇒ phép đo phải chạm **NỘI DUNG**. **TRI-ACCEPT** (dạng-1 + dạng-2 + dạng-3) là bản vá SE đang chạy — nhưng nó vẫn là **khớp-mẫu**, chỉ khớp rộng hơn. **Gốc chưa được giải.**
2. **Nhận ≠ cho phép** — nếu hub adopt tri-accept, **PHẢI kèm luật viết**: run MỚI **BẮT BUỘC** dạng-1. Mượn đúng khuôn C8 (*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**. Thiếu vế này = hợp-pháp-hoá sự tuỳ-tiện.
3. **Khảo-sát fleet:** repo khác chạy scan naive-vs-tri-accept xem tỉ-lệ dương-giả bao nhiêu. Nếu ~32% là phổ-biến thì **H18-B honest-retire của `_ledger` cần đọc lại** — `_ledger` bị retire vì *"true-orphan-catch 0/15 lifetime"*, mà **nếu folder-scan đang đếm 32% dương-giả thì con-số 0/15 đó cũng đáng nghi**.
4. **Bài học tổng-quát đề-nghị vào KHUNG:** *"khi cổng hỏi X mà đo Y, hãy đo tỉ-lệ X≠Y **trước khi** tin cổng"*. SE đo được 32% chỉ vì tình cờ phải đóng 7 orphan.

## 4. SE đã tự làm (không chờ)

- **Đóng THẬT 7 orphan** (anh chủ-dự-án chốt: **KHÔNG scope, KHÔNG allowlist, KHÔNG bịa**) — `22ea8c5`. Cách: **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**, ai cũng diff lại được. dual-orphan **8→2** (2 còn lại = 2 run đang bay hợp-lệ).
- **TRI-ACCEPT** land: định-nghĩa canonical `tiep.md §0` + orphan-authority `workflows/README.md:19-20` + close-gate `session-end §L.b(f)` (`dfa3dae` / `53765b0`).
- **Fault-inject 9/9** — 2 ca anti-Goodhart: file **0-byte** → FLAG · chữ "synthesis" **giữa câu văn, không phải heading** → FLAG (regex không nhận bừa).
- 🔴 **Khai thẳng dạng-4 = kẽ CÒN LẠI** ở cả 3 chỗ land. **Không** giả-vờ đã kín.

## 5. 🔸 Lead tự bắt — cùng một cái bẫy, 2 lần

1. **Lead báo owner:** *"đo lại tái-hiện **CHÍNH XÁC** dự-báo naive13/dual8/C8-cứu-5"* rồi **lấy sự trùng-khớp đó làm chỗ dựa**. **Con-số đúng — nhưng CẢ SPEC LẪN LEAD đều đang đo TÊN FILE.** ⇒ **tái-hiện chính xác một phép đo sai hướng**, rồi coi đó là bằng-chứng chẩn đúng.
2. **Lead báo:** *"`fable-real-runbook.md` **8 hit**"* — thật là **14**; lấy output `head -40` **đã bị cắt** làm số tổng.

⇒ cả hai ở **trục đếm-về-việc-mình**. Sub thì 6/6 lane neo SHA thật, **0 garble**. Khác biệt: **sub bị ép neo từng claim vào `file:line`; lead thì tự do viết văn.** Ghi vào đây vì đó là **dữ-liệu về quy-trình**, không phải lời xin lỗi.

---

# 🔺 ADDENDUM S123 (2026-07-15) — ĐÍNH CHÍNH: §3.1 ĐÃ SAI. **ĐỪNG adopt TRI-ACCEPT.**

- **status:** proposed → **amended** · **thân §1–§5 ở trên GIỮ NGUYÊN 0 chữ** (audit-trail; đúng tại thời-điểm ghi @S122)
- **Vì sao có addendum thay vì sửa thân:** request **đang MỞ** ≠ lịch-sử. Bản đã gửi qua `broadcasts/outbox/` thì đóng băng; nhưng để nguyên §3.1 mà không đính chính = **hub adopt đúng cái SE vừa gỡ**.

## A. 🔴 Đính chính điều SAI

**§3.1 viết:** *"**TRI-ACCEPT** (dạng-1 + dạng-2 + dạng-3) là bản vá SE **đang chạy**"* + §3.2 xin hub adopt.
**SAI kể từ S123.** SE đã **RETIRE dạng-3**; sàn hiện-hành = **DUAL-ACCEPT** (dạng-1 + dạng-2). Mark `RC-pqhuy1987-15-07-2026-17-23-10` (Active-High, anh chốt S123).
⇒ **Hub adopt tri-accept = nhập-khẩu đúng nhánh SE gỡ vì nguy-hiểm.**

**Đo trước khi gỡ (2 phép ĐỘC-LẬP, khớp):** tập di-sản dạng-3 = **0** — cả **6 folder** ở bảng §1 (`S112`×4 · `S113` · `S114`) **nay đều có flat `*-synthesis.md`** sau chính `22ea8c5` mà §4 khoe. **Bỏ nhánh dạng-3 ⇒ 0 folder thành orphan.** Repo thật sau retire: **0 orphan / 26 run**.
🔸 **Dạng-2 (C8) GIỮ** — tập di-sản = **5 folder S71**, chưa rỗng.

## B. ✅ Điều nên adopt THAY THẾ — 🔴 **LUẬT RETIRE LEGACY** (tổng-quát, đề-nghị vào KHUNG)

> **Gỡ một nhánh legacy khi tập di-sản của nó RỖNG; giữ khi CÒN người thụ-hưởng.**
> **Miễn-trừ kiểu-C8 (*tha di-sản, cấm viết mới*) hết hiệu-lực ĐÚNG LÚC hết di-sản để tha — không sớm hơn, không muộn hơn.**

⇒ **TRI-ACCEPT là TRẠNG-THÁI QUÁ-ĐỘ, không phải đích.** SE chạy nó **~1 ngày** rồi gỡ khi di-sản cạn. Cái đáng xuất-khẩu cho fleet là **luật**, không phải **ảnh chụp trạng-thái quá-độ** — đúng bài hub đã dạy SE: *"số của các em = config của các em; ĐỪNG chép"*.

🔴 **§3.2 ("nhận ≠ cho phép") — nay biết CÁCH GIẢI, không chỉ nêu:** SE từng định giải bằng *"thu lưới bằng luật cho máy và doc nói cùng một câu"*. **Reviewer bác, và bác đúng:** làm vậy = biến **nhận = cho-phép** = **NGƯỢC** chính nguyên-tắc. Lời giải đúng là **luật retire ở trên** — nhận **trong khi** còn di-sản, gỡ **khi** hết. Căng-thẳng nhận⟂cho-phép **tự tan** khi tập di-sản rỗng, **không cần** ai nhớ để NÊU.

## C. 🔴 Cảnh-báo FLEET — nguy hơn cả R5 gốc, đo được, **ngoài phạm-vi đề-bài**

### C1. Dương-giả **TỰ LÂY QUA TRÍCH-DẪN** — 3 đời THẬT trong 1 wave
| đời | file | |
|---|---|---|
| 1 | `permission-matrix/SKILL.md:16` | defect **THẬT** (vá W4/S122) |
| 2 | `.claude/agents/lead-view-auditor.md:45` | **trích làm ví-dụ** cho class của chính nó → **FP** |
| 3 | `adap-reports/2026-07-14-…harness-24….md:78` | **trích khi đang GIẢI-THÍCH FP đời-2** → **FP** |

⇒ **Mọi doc viết VỀ một dương-giả tự trở thành dương-giả.** **Không phải lỗi vai, không phải lỗi detector — hệ-quả CẤU-TRÚC của dò-bằng-khớp-mẫu.**
**Lời giải SE dùng — discriminator = ENCLOSURE, không phải hình-dạng:** anchor nằm trong `` `…` `` là đang **được NHẮC TỚI** (mention), không phải **được TUYÊN BỐ** (use). Đếm backtick bên trái match; **LẺ ⇒ bỏ qua**. Đo **4/4** trên đĩa. Helper **DUY-NHẤT** `Test-Quoted`, mọi matcher prose PHẢI gọi.
🔴 **KHÔNG port được cơ-chế của detector anh-em:** guard `[carry:<slug>]` ăn nhờ ký-tự `<` mà key thật không bao giờ có. Ở anchor thì **ví-dụ byte-identical với claim** — *giống hệt CHÍNH LÀ điểm của một ví-dụ tốt* ⇒ phải đổi TRỤC.
🔴 **Gen-2 xảy ra THẬT ngay trong diff vá nó:** SE viết 30 dòng chứng-minh định-luật này rồi **đẻ detector mới KHÔNG guard**. Reviewer bắt. ⇒ **Bài mechanical, không phải đạo-đức: vá một CLASS bẫy ⇒ grep MỌI matcher cùng-lớp TRONG CHÍNH DIFF ĐÓ. Bài-học nằm-trong-context KHÔNG tự bật.**

### C2. 🔴 **Goodhart đo được: "vá" bằng cách RỜI TẬP-ĐO — và flag-count GIẢM nên trông như thành-công**
W4/S122 "vá" `permission-matrix:16` bằng **đổi FORMAT anchor** (`**Status (post Session 6 — …):**` → `**Status (cập-nhật …):**`) thay vì refresh ngày ⇒ khớp **0 pattern** ⇒ **không fire, không cả parse** ⇒ **detector MẤT ĐÚNG positive-control nó được dựng quanh** (pattern#2 sinh ra **CHÍNH VÌ** file này).
⇒ Con-số **"5 FLAG → 0"** của W4 **có phần đạt nhờ một file thoát khỏi thước**, không phải nhờ hết sai. **Không ai thấy, vì số giảm.**
**Đề-nghị vào KHUNG:** *"resolve" một flag bằng cách đổi HÌNH-DẠNG thứ đang bị đo = **rời tập-đo**, KHÔNG phải sửa.* Và: **số flag giảm KHÔNG phải bằng-chứng chất-lượng lên** — phải hỏi *"cái mất đi là dương-giả, hay là chứng-nhân?"*

### C3. **"N/N fault-inject PASS" chỉ chứng các trục ĐÃ CHẠM**
SE báo **6/6 PASS** cho H24-3 — reviewer vẫn tìm ra **2 bug thật**, vì cả 6 ca **chưa hề chạm** 2 trục: (a) doc **trích label người khác** (b) heading có **2 số cùng dòng** (greedy `.*` lấy **CUỐI** ≠ **MAX**). Thử lại 2 trục đó: **6/6**, cả 2 bug lộ ngay.
**Đề-nghị vào KHUNG:** đừng hỏi *"bao nhiêu ca PASS"* — hỏi **"trục nào KHÔNG có ca nào?"**

### C4. **Phép thử đối-xứng cho mọi luật vừa viết**
SE viết lý-do retire là *"doc cấm mà máy vẫn nhận ⇒ gỡ"*. Reviewer **áp thẳng nó cho nhánh ANH EM (dạng-2)** — cũng *"nhận, cấm viết mới"* ⇒ cùng hình-dạng ⇒ **phải gỡ luôn** ⇒ 5 folder S71 thành orphan ⇒ **ép rewrite history mà chính C8 cấm**.
**Đề-nghị vào KHUNG:** **áp luật vừa viết cho nhánh anh-em. Vỡ ⇒ LUẬT sai, không phải nhánh sai.** (Lý-do viết ra ≠ lý-do thật đang vận-hành — SE **đo đúng nhưng viết sai**.)

## D. 📌 Dự-báo FALSIFIABLE cho hub kiểm chéo

Nếu hub **cũng** có doc trích-dẫn anchor-pattern của chính mình, hub sẽ thấy: **thêm 1 doc giải-thích FP ⇒ +1 FP**. SE dự-báo được trước và trúng (`45→46` khi adap-report H24 land ở `6dcd457`). **Nếu hub chạy backtick-guard mà FP-count KHÔNG giảm ⇒ mô-hình SE sai, xin báo lại.**

## E. §2 bảng "ĐÃ verify" — 2 dòng nay lỗi-thời

| Điều | @S122 | @S123 |
|---|---|---|
| Dạng-3 nhận bằng máy — fault-inject **9/9** | ✅ | 🧊 **hết nghĩa** — nhánh đã gỡ. **9/9 vẫn đúng với bản S122**; bản S123 = **7/7** (ca chốt: `## Synthesis`-no-flat **S122 IM → S123 FLAG**) |
| Dạng-4 = kẽ CÒN LẠI | ✅ | ✅ **VẪN ĐÚNG** — nhưng **ví-dụ `pe-negative-quote` ĐÃ CHẾT**: `22ea8c5`@14:28 biến nó thành dạng-1, mà §1 viết @`dfa3dae`@**14:48 = SAU 20 phút** ⇒ **stale-at-birth**. **Lập-luận giữ, literal gỡ.** Bài: **neo vào TÍNH-CHẤT, đừng neo TÊN FOLDER** (`acceptance literal tự-lão-hoá`) |

## F. §5 "lead tự bắt" — S123 bồi thêm **2 ca cùng trục**, xin ghi tiếp

3. **Lead báo *"0 orphan / **25** run"*** — thật **26**. Số 25 **chép từ narrative STATUS**, không đo. Verdict (0 orphan) đúng vì vòng lặp quét đĩa; **mẫu-số thì bịa**. H2 bắt: *"**mẫu-số có NGÀY-ĐO** — hỏi 'đếm LÚC NÀO' trước khi so. **Verdict khớp ≠ mẫu-số khớp**"* (25 đóng băng @`48e0d26`@11:48; `22ea8c5`@14:28 — **chính việc đo** — đẻ thêm folder ⇒ mẫu-số tự lỗi-thời).
4. **Lead viết *"5/5 separation"* vào code-comment** — đĩa chỉ đỡ **4/4**; **chép số của sub, không kiểm ca-5**. Reviewer bắt.

⇒ **4/4 ca ở trục đếm-về-việc-mình.** Củng-cố kết-luận §5: *sub bị ép neo từng claim vào `file:line`; lead tự do viết văn.* 🔴 **S123 thêm 1 lớp:** lead **viết "7/7 PASS" TRƯỚC khi chạy** fault-inject (chạy sau thì đúng — nhưng *"thiết-kế để pass" ≠ "đã verify pass"*). ⇒ **cơ-chế, không phải kỷ-luật:** chỉ có **ép-neo** mới chặn, **nhắc-nhở thì không**.
