Files
solution-erp/docs/governance/adap-requests/2026-07-15-se-r5-orphan-measures-filename-not-content.md
pqhuy1987 b764ac791a
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m22s
[CLAUDE] Docs: S123 citation-trap guard + H24-3 + DUAL-ACCEPT + luat retire-legacy
Anh chot 4 viec governance. Detector 46->45 = DOI THANH-PHAN (-2 duong-gia
+1 duong-THAT), khong phai "flag giam". Mark moi RC-pqhuy1987-15-07-2026-17-23-10.

- backtick-guard H24-1: discriminator = ENCLOSURE (use vs mention), KHONG port
  duoc charset-guard cua H24-2 vi vi-du byte-identical voi claim. Helper DUY-NHAT
  Test-Quoted. Fault-inject 5/5 (2 anti-Goodhart).
- H24-3 session-label lag (MED, moi): va am-gia CHUNG-MINH-DUOC cua H24-1
  (so NGAY ma ngay = moi nhat => 0 flag trong khi nhan lui 3 phien; tai-phat lan 4).
  Fault-inject 6/6 + 6/6 sau fix.
- DUAL-ACCEPT (dang-3 RETIRED) + LUAT RETIRE LEGACY: go nhanh legacy khi tap
  di-san RONG, giu khi CON nguoi thu-huong. Repo that 0 orphan/26. Fault-inject 7/7.
- tiep.md:66 stale-at-birth + sweep view-residual-asym 6/6 be-mat LUAT sach.

Reviewer PASS_WITH_FIXES bat 6 loi that, lead verify 4/4 doc-lap:
gen-2 citation-trap (lead viet 30 dong chung-minh dinh-luat roi de H24-3 KHONG
guard) - greedy .* lay CUOI khong phai MAX - ly-do retire ap cho dang-2 thi giet
C8 - "retire HOAN-THANH mark" = nguy-bien - "5/5" = 4/4.

Goodhart DO DUOC (ngoai diff): W4/S122 "va" permission-matrix:16 bang doi FORMAT
anchor => khop 0 pattern => H24-1 mat chinh positive-control no dung quanh;
flag-count GIAM nen trong nhu thanh-cong.

Outward: addendum R5 (DUNG adopt TRI-ACCEPT) + email hub ed3786a10f12
(selftest-stamp MATCH x2). _index reconcile: 2 email S122 gui ma chua log.

#53 garble x4/3 agent - harvest-curator ghi diary TRONG luc lam nen vot duoc tu
dia ngay; reviewer tu rut luat "ghi diary TRUOC return" tu garble-1 va nho dung
no ma garble-2 vot duoc. Prompt-dung KHONG chan duoc #53.

Lead sai 4 ca tron o truc dem-ve-minh: "25"!=26 - "5/5"!=4/4 - viet "7/7 PASS"
TRUOC khi chay - "0 proxy" sai.

State GIU NGUYEN: Mig 66 - 89 bang - 509 test - gotcha 82 - menu 54.
Con no: STATUS:6 CO Y chua bump (H24-3 dang FLAG, giu cho hien ra).

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

155 lines
15 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-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 (`4546` 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ỉ **ép-neo** mới chặn, **nhắc-nhở thì không**.