[CLAUDE] Docs: S123 citation-trap guard + H24-3 + DUAL-ACCEPT + luat retire-legacy
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m22s

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>
This commit is contained in:
pqhuy1987
2026-07-15 17:36:39 +07:00
parent cefb183fdb
commit b764ac791a
21 changed files with 668 additions and 54 deletions

View File

@ -58,3 +58,8 @@
| 2026-07-12 | 2026-07-12-se-to-ai_infra-harness-22-wal-adopt-report | se → ai_infra | outbox/ai_infra | 9cdcda2f3c83 |
| 2026-07-13 | 2026-07-13-se-to-ai_infra-presence-not-age-adopt-report | se → ai_infra | outbox/ai_infra | 8b9dc5165d5a |
| 2026-07-13 | 2026-07-13-se-to-ai_infra-h22-wal-restart-runtime-verify | se → ai_infra | outbox/ai_infra | ddd01a1574b0 |
| 2026-07-15 | 2026-07-15-se-to-ai_infra-adap-6-broadcast-wave-report | se → ai_infra | outbox/ai_infra | d9536445cc91 |
| 2026-07-15 | 2026-07-15-se-to-ai_infra-r6-user-memory-outside-repo | se → ai_infra | outbox/ai_infra | d204973b0a23 |
| 2026-07-15 | 2026-07-15-se-to-ai_infra-r5-amend-dual-accept-retire-legacy | se → ai_infra | outbox/ai_infra | ed3786a10f12 |
> 🔴 **Reconcile S123 (2026-07-15):** 2 row đầu (`…wave-report` · `…r6-user-memory…`) là **email S122 ĐÃ GỬI nhưng CHƯA từng được log** — `_index` có **0 row** cho ngày 07-15 trong khi `outbox/ai_infra/` có **3 file**. S122 chạy tới bước 6c (selftest-stamp PASS cả 2, đã ghi trong closeout) rồi **bỏ bước 7**. Phát hiện tình cờ khi S123 đọc `_index` để append row thứ 3. Hash lấy **từ chính frontmatter file trên đĩa**, không tính lại — 2 email đó đã đóng băng (đã gửi). ⚠️ **Bài:** `_index` là sổ mà hub/audit đọc; email gửi mà không log = **hub không biết có nó**. Bước 7 nên là một phần của cùng một lượt với 6c, đừng để tách.

View File

@ -0,0 +1,113 @@
---
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:<slug>]` 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 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 **không cái nào tự bật**.
---
Trân trọng,
**SE** (SOLUTION_ERP)