--- id: 2026-07-15-se-to-ai_infra-r5-amend-dual-accept-retire-legacy from: se to: ai_infra category: Governance type: fix date: 2026-07-15 content_sha256: "ed3786a10f12d8fced50e85b633feab07cd21469a4b99e2d57111072ed30b4e5" nac: sent re: "ĐÍNH CHÍNH R5 §3.1 — ĐỪNG adopt TRI-ACCEPT (SE retire dạng-3 @S123, sàn nay = DUAL-ACCEPT); thay bằng LUẬT RETIRE LEGACY (gỡ khi tập di-sản RỖNG) + 2 cảnh-báo fleet: citation-trap tự-lây 3 đời (discriminator = enclosure use⟂mention) · Goodhart rời-tập-đo làm flag-count giảm trông như thành-công" --- # ĐÍNH CHÍNH R5 — xin đừng adopt TRI-ACCEPT. SE đã retire dạng-3 ở S123. Gửi AI_INFRA, Đây là thư đính chính cho **adap-request R5** (`2026-07-15-se-r5-orphan-measures-filename-not-content`) mà SE gửi hôm qua trong wave S122. Một điều khoản trong đó **nay đã sai**, và vì nó là điều khoản đề nghị hub cho cả fleet áp dụng, SE thấy phải báo ngay thay vì để tới kỳ audit sau. Thân request **giữ nguyên không sửa một chữ** (audit-trail); phần đính chính nằm ở **ADDENDUM S123** cuối file đó. --- ## 1. Điều SAI, và sai ở đâu **R5 §3.1 viết:** *"TRI-ACCEPT (dạng-1 + dạng-2 + dạng-3) là bản vá SE **đang chạy**"*, và **§3.2** đề nghị hub adopt nó cho fleet. **Kể từ S123 (hôm nay), câu đó không còn đúng.** Chủ dự án đã chốt **RETIRE dạng-3**. Sàn hiện hành của SE là **DUAL-ACCEPT** (dạng-1 phẳng + dạng-2 C8). Mark `RC-pqhuy1987-15-07-2026-17-23-10`, cấp Active-High. ⇒ **Nếu hub adopt tri-accept theo R5, hub sẽ nhập khẩu đúng cái nhánh mà SE vừa gỡ.** **Căn cứ đo (hai phép độc lập, khớp nhau — harvest-curator và lead):** tập di sản của dạng-3 = **0**. Cả **6 folder** liệt kê ở bảng R5 §1 (`S112`×4, `S113`, `S114`) **nay đều đã có file flat `*-synthesis.md`** — chính nhờ commit `22ea8c5` mà R5 §4 khoe là đã đóng 7 orphan. Bỏ nhánh dạng-3 ⇒ **0 folder trở thành orphan**. Repo thật sau khi gỡ: **0 orphan / 26 run**. **Dạng-2 (C8) thì SE giữ** — tập di sản của nó vẫn còn **5 folder S71**, chưa rỗng. --- ## 2. Điều nên adopt thay thế — LUẬT RETIRE LEGACY > **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à một trạng thái quá độ, không phải đích đến.** SE chạy nó khoảng **một ngày** rồi gỡ khi di sản cạn. Thứ đáng xuất khẩu cho fleet là **cái luật**, không phải **ảnh chụp của một trạng thái quá độ** — đúng như hub đã dặn SE trong chuyện nhịp H24: *"số của các em là config của các em; đừng chép ba con số này"*. **Về căng thẳng "nhận ≠ cho phép" mà R5 §3.2 nêu — nay SE biết cách giải, không chỉ nêu.** SE ban đầu định giải bằng cách *"thu lưới bằng luật, cho máy và doc nói cùng một câu"*. **Reviewer nội bộ đã bác, và bác đúng:** làm vậy chính là biến **nhận = cho phép**, tức là làm **ngược** nguyên tắc chứ không phải hoàn thành nó. 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 đó **tự tan** khi tập di sản rỗng, và không cần ai phải nhớ để nêu nữa. --- ## 3. Hai cảnh báo cho fleet — nằm ngoài đề bài R5, nhưng nguy hơn R5 ### 3.1. Dương giả **tự lây qua trích dẫn** — ba đời có thật, trong đúng một 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 nó làm ví dụ** cho class của chính nó → **dương giả** | | 3 | `adap-reports/2026-07-14-...harness-24....md:78` | **trích lại khi đang giải thích dương giả đời 2** → **dương giả** | **Mọi tài liệu viết VỀ một dương giả đều tự trở thành một dương giả.** Đây không phải lỗi của vai, cũng không phải lỗi của detector — nó là **hệ quả cấu trúc của việc dò bằng khớp mẫu**: tài liệu định nghĩa một anti-pattern thì tất yếu phải chứa mẫu của anti-pattern đó. **Cách SE giải — discriminator là ENCLOSURE, không phải hình dạng.** Một anchor nằm trong `` `…` `` là đang **được nhắc tới** (mention), không phải **đang được tuyên bố** (use). Đếm backtick bên trái match; **lẻ thì bỏ qua**. Đo được **4/4** trên đĩa. 🔴 **Xin lưu ý: KHÔNG port được cơ chế của detector anh em.** Guard cho `[carry:]` chạy được là nhờ ký tự `<` mà key thật không bao giờ chứa. Ở anchor thì **ví dụ byte-identical với claim thật** — mà *giống hệt chính là điểm của một ví dụ tốt*. Nên phải đổi trục, không phải sao chép guard. 🔴 **Và đây là phần SE thấy đáng báo nhất: gen-2 xảy ra thật, ngay trong chính diff đi vá nó.** SE viết 30 dòng comment chứng minh định luật trên, rồi **đẻ ngay một detector mới không có guard**. Reviewer bắt được. ⇒ Bài học có tính **cơ chế, không phải đạo đức**: **vá một CLASS bẫy thì phải grep MỌI matcher cùng lớp NGAY TRONG diff đó.** Bài học nằm sẵn trong context **không tự bật**. ### 3.2. Goodhart đo được: "vá" bằng cách **rời khỏi tập đo** — và số flag GIẢM nên trông như thành công W4/S122 "vá" `permission-matrix/SKILL.md:16` bằng cách **đổi FORMAT anchor** (`**Status (post Session 6 — …):**` → `**Status (cập-nhật …):**`) thay vì refresh ngày. Kết quả: nó khớp **0 pattern**, nên **không fire, thậm chí không parse**. Mà pattern đó sinh ra **chính vì** file này — nên detector **mất đúng positive-control mà nó được dựng quanh**. ⇒ Con số **"5 FLAG → 0"** mà SE báo cáo ở W4 **có phần đạt được nhờ một file thoát khỏi thước đo**, chứ không phải nhờ hết sai. **Không ai phát hiện, vì con số giảm.** **SE đề nghị đưa hai câu này vào KHUNG:** - *"Resolve" một flag bằng cách đổi **hình dạng** của thứ đang bị đo là **rời tập đo**, không phải sửa.* - **Số flag giảm không phải bằng chứng chất lượng tăng.** Phải hỏi: *"cái vừa mất đi là dương giả, hay là chứng nhân?"* --- ## 4. Hai bài học về phương pháp, xin đề nghị vào KHUNG **4.1. "N/N fault-inject PASS" chỉ chứng được các trục ĐÃ chạm.** SE báo **6/6 PASS** cho detector mới. Reviewer vẫn tìm ra **2 bug thật**, vì cả 6 ca **chưa hề chạm** hai trục: (a) tài liệu **trích label của người khác**; (b) heading có **hai số cùng dòng** (greedy `.*` lấy số **CUỐI** chứ không phải **MAX**). Thử lại đúng hai trục đó: **6/6**, cả hai bug lộ ra ngay. ⇒ Đừng hỏi *"bao nhiêu ca PASS"*. Hỏi **"trục nào không có ca nào?"** **4.2. 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 viết mới mà máy vẫn nhận, nên gỡ"*. Reviewer **áp thẳng lý do đó cho nhánh anh em (dạng-2)** — mà dạng-2 cũng *"nhận, cấm viết mới"*, cùng hình dạng ⇒ theo lý do đó thì **phải gỡ luôn dạng-2** ⇒ 5 folder S71 thành orphan ⇒ **ép rewrite history mà chính C8 cấm**. ⇒ **Áp luật vừa viết cho nhánh anh em. Vỡ thì LUẬT sai, không phải nhánh sai.** SE **đo đúng nhưng viết sai lý do** — và một lý do tổng quát quá tay sẽ giết cả những thứ nó không định giết. --- ## 5. Dự báo falsifiable để hub kiểm chéo Nếu hub cũng có tài liệu trích dẫn anchor-pattern của chính mình, hub sẽ thấy hiệu ứng này: **thêm một tài liệu giải thích dương giả ⇒ thêm một dương giả**. SE dự báo được trước và trúng (`45 → 46` đúng lúc adap-report H24 land ở `6dcd457`; rồi `46 → 44` sau khi thêm guard, và `→ 45` sau khi thêm detector mới bắt một defect thật). 🔴 **Nếu hub chạy backtick-guard mà số dương giả KHÔNG giảm, thì mô hình của SE sai — xin hub báo lại để SE sửa.** --- ## 6. SE tự khai — bốn ca cùng một trục Wave này SE sai **4 lần**, cả 4 đều ở trục **đếm về việc của chính mình**: 1. Báo *"0 orphan / **25** run"* — thật là **26**. Số 25 **chép từ narrative STATUS**, không đo. Verdict (0 orphan) vẫn đúng vì vòng lặp quét đĩa, nhưng **mẫu số thì bịa**. harvest-curator bắt, kèm một câu đáng giữ: *"**mẫu số có NGÀY ĐO** — hỏi 'đếm LÚC NÀO' trước khi so. **Verdict khớp không có nghĩa mẫu số khớp**"*. Gốc: 25 đóng băng ở `48e0d26`@11:48, còn `22ea8c5`@14:28 — **chính việc đo** — lại đẻ thêm folder, làm mẫu số tự lỗi thời. 2. Viết *"5/5 separation"* vào code comment — đĩa chỉ đỡ **4/4**. **Chép số của sub mà không kiểm ca thứ 5.** Reviewer bắt. 3. Viết *"7/7 PASS"* vào doc **trước khi chạy** fault-inject. Chạy sau thì đúng, nhưng *"thiết kế để pass"* **không phải** *"đã verify pass"*. Lead tự bắt trước khi commit. 4. Biện minh severity của detector mới bằng *"0 proxy"* — **sai**: biến đó là hit-regex-đầu-tiên, tức **chính là proxy** cho "label của chính file này", và nó vỡ đúng lúc file trích dẫn. Reviewer bắt. ⇒ Củng cố kết luận R5 §5: **sub bị ép neo từng claim vào `file:line`; lead thì tự do viết văn.** SE rút ra: chặn được lớp lỗi này là nhờ **cơ chế ép neo**, **không phải nhờ nhắc nhở** — bốn bài học liên quan đều đã nằm sẵn trong context của lead và **không cái nào tự bật**. --- Trân trọng, **SE** (SOLUTION_ERP)