Files
solution-erp/docs/changelog/sessions/2026-07-15-S123-citation-trap-dual-accept.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

114 lines
13 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.

# S123 (2026-07-15) — Citation-trap guard + H24-3 + DUAL-ACCEPT + luật retire-legacy
**Lead:** Opus 4.8 (owner-choice, KHÔNG outage — flip-9 tiếp) · **HMW-mode:** ON · **Scope:** governance-only (0 prod-code · 0 mig · 0 FE · test 509 giữ)
**Mark MỚI:** `RC-pqhuy1987-15-07-2026-17-23-10` (Active-High · supersede-**partial** `RC-pqhuy1987-15-07-2026-15-32-20` điều-khoản (2))
**Spawn:** 🟫 tooling-auditor · ⬜ harvest-curator · 🟥 reviewer (3 vai, **0 workflow** — đúng §0.5 *governance-authoring single-writer → solo*)
---
## 1. Bootstrap — ALL-GREEN
| | |
|---|---|
| WAL | ✅ SẠCH — Sàn-3 **4/4 tín-hiệu MẠNH im** (0 orphan · 0 non-`wal:` chưa đẩy · 0 `closing:` treo · 0 `wal:` đụng `runs/`) |
| Tests | **509 PASS** (45 Domain + 464 Infra), 0 fail/skip — chạy thật |
| Detector | **46** (15 derived-stale + 24 wikilink + 3 vocab-fork + 4 title-stale + 0 carry-age) |
| H17 spec-audit | **GAP = none** (A1·A2·A3·B1·B2·HCV) — A1 xác nhận **14 sub-agent** ở tầng tool-scope |
| RAG | `proj_solution_erp` **2440 chunks**, `last_indexed 05-29` (stale đã biết) |
| H24 counter | TICK **1→2** (content-addressed, HEAD `cefb183`; reachability PASS) · `light 2/6 · deep 2/15 · OVERDUE none` |
| Registry-probe §0.6b | **SKIP đúng** — roster không đổi từ S122 |
**Sleep-check:** `last_sleep 2026-07-10` = 5 ngày < 7 skip. **Monthly:** kế 2026-08-01 n/a.
## 2. Bootstrap tự bắt 3 dương-giả cùng MỘT lớp cấu-trúc
`lead-view-auditor:45` · `adap-report…h24…:78` · `reinject-ledger.md:11,28` **cả 3 bị bắt vì chúng ĐỊNH-NGHĨA chính cái mẫu đang bị dò.**
🔴 **Ca `reinject-ledger` suýt thành việc-ma:** `§2.1.7` bảo grep `status=escalated` grep trả **2** nhưng cả 2 hit nằm **phần định-nghĩa schema** (`:11` luật · `:28` ví-dụ); bảng ledger thật (`:34`) = **RỖNG**. Tin số 2 bịa 2 quyết-định không tồn-tại để hỏi anh.
🔴 **Guard chống bẫy này CHỈ CÓ Ở MỘT CHỖ:** `governance-detectors.ps1:670-673` H24-2 **cố ý** loại `<` khỏi charset, comment ghi *"a detector that flags the sentence DEFINING its own pattern is the self-reference trap"*. Nhưng **H24-1 trong CÙNG file script không có**, cổng `reinject-ledger` session-start cũng không.
## 3. Monitor RE-REPORT — cả 2 bắt lỗi THẬT của lead
**🟫 H1 (ALL-4 PASS · 1 MED · 2 LOW):**
- 🔴 **MED — G-015 overclaim ở đúng 2 vai soi-LEAD:** `lead-view-auditor.md:77` + `lead-omission-auditor.md:68` khai *"KHÔNG Write/Edit/commit (mày không có tool đó)"* nhưng `:6` **`Bash`** `git commit` làm được **sai với `commit`**. 5 vai anh em caveat G-015 (`tooling-auditor:55` viết thẳng nguyên-tắc), 2 vai mới **thiếu**. *(Lead verify: `:48` khớp "residual" chỉ vì tên class `view-residual-asym` — grep của lead mới là cái ẩu.)*
- **15/15 derived-stale = FALSE-POSITIVE** (ratio-band làm đúng) **đừng vá**.
- **+1 delta 4546 giải-thích xong:** 45 đo tại **W4 `a09dcae`**, không phải lúc đóng phiên; adap-report H24 land `6dcd457` (W6) bị bắt **trích lại ví-dụ về dương-giả**.
** H2 (MOSTLY-CLEAN · 0 data-loss/0 orphan/0 corruption · 1 coverage-gap + 2 placement):**
- 🔴 **Bắt lỗi lead: mẫu-số "25" ≠ 26.** *"**Mẫu-số NGÀY-ĐO** hỏi 'đếm LÚC NÀO' trước khi so. **Verdict khớp ≠ mẫu-số khớp**"*. Gốc: 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. Lead đo lại: **28 folder, 26 có `run.md`**.
- 🔴 **dạng-3 = DEAD CODE** bỏ **0 folder** thành orphan (6 folder embedded đều đã flat).
- 🔴 **`tiep.md:66` STALE-AT-BIRTH** khai `pe-negative-quote` *"chưa xử"* `22ea8c5`@14:28 đã xử, còn câu đó viết @`dfa3dae`@**14:48 = SAU 20 phút**.
- **MED-3:** reviewer chạy **5 spawn** wave S119/S122 ghi **0 dòng** diary. *(→ trả giá THẬT vài giờ sau, xem §6.)*
- **3 dir RỖNG git mù:** 2 vai H24 **chưa seed diary** + **1 stray mis-land** `runs/…S119…/.claude/agent-memory/reviewer` (lớp S54).
## 4. Bốn việc anh chốt — thực-thi + đo
### (1) Backtick-guard cho H24-1
**Discriminator = ENCLOSURE, không phải hình-dạng.** Anchor trong `` `` `` = đang **được NHẮC TỚI** (mention), không phải **được TUYÊN BỐ** (use). Đếm backtick trái match; **LẺ ⇒ skip**.
🔴 **KHÔNG port được cơ-chế H24-2:** 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 ví-dụ tốt* ⇒ phải đổi TRỤC.
**Từ chối chồng head-N-lines** (dù cũng 5/5): vị-trí = **proxy**; backtick đã tách đúng cùng tập ⇒ chồng proxy = 0 lợi + đẻ điểm mù mới. Viện mark `RC-10-29-11`.
**Fault-inject 5/5** — 2 anti-Goodhart: quoted-rồi-bare **cùng dòng** → FLAG anchor thật `2026-02-02` (chứng `Matches` ≠ `Match`) · backtick **CHẴN** → FLAG (chứng odd/even ≠ "có backtick thì bỏ").
### (2) Detector MỚI H24-3 session-label lag (MED)
So `(S<N>` ở `**Last updated**` với **MAX** `(S<M>` ở heading, **cùng file**. Bắt `STATUS:6` = **âm-giả CHỨNG-MINH-ĐƯỢC** của H24-1 (nó so NGÀY, mà `2026-07-15` = mới nhất ⇒ 0 flag; đo: S119 ×3 hit, S120/S121/S122 = **0 hit**). **Tái-phát lần 4** (S116/S117/S118) — 3 lần trước vá bằng **bump số** ⇒ quay lại.
**Fault-inject 6/6** — anti-Goodhart: **MAX không đứng đầu/cuối** (S110·S122·S117) → lấy đúng S122; 2 bản cài sai *"lấy đầu"*/*"lấy cuối"* **đều PASS trên repo thật** vì ở đó MAX tình cờ đứng đầu.
### (3) Retire dạng-3 → DUAL-ACCEPT
**Đo trước khi gỡ (2 phép độc-lập, khớp):** 0 folder thành orphan; 6 folder từng dựa đều có flat sau `22ea8c5`. **Fault-inject 7/7** gồm ca chốt `## Synthesis`-no-flat: **S122 IM → S123 FLAG** = hiệu-lực retire. Repo thật **0 orphan/26**.
### (4) `tiep.md:66` + chú-thích mark
Giữ lập-luận (dạng-4 = kẽ CÒN LẠI **vẫn đúng**), gỡ literal đã chết. Bài: **neo vào TÍNH-CHẤT, đừng neo TÊN FOLDER** (`acceptance literal tự-lão-hoá`). Thân mark **0 chữ bị sửa** (P4/P8).
**🔴 Sweep `view-residual-asym` (lead suýt tự đẻ đúng lỗi đang vá):** đổi thân `tiep.md` sang DUAL-ACCEPT xong thì **frontmatter vẫn ghi TRI-ACCEPT**, và `workflows/README.md:21` còn nói *"nhận **BA dạng, KHÔNG phải hai**"* — sau thay đổi thì thành **hai**, mà doc đang nhấn mạnh *không phải hai*. Sửa **6 bề-mặt LUẬT** (`tiep.md` frontmatter+`:31`+§0 · `workflows/README` · `session-end` ×5 · `session-start:79`); **đóng băng CÓ CHỦ-ĐÍCH** (lịch-sử, đúng tại thời-điểm ghi): `runs/**` · session-log S122 · adap-report · broadcast đã gửi · narrative STATUS/HANDOFF.
## 5. 🟥 Reviewer PASS_WITH_FIXES — tìm ra 6 lỗi thật, lead verify 4/4 độc-lập
| # | Finding | Lead verify |
|---|---|---|
| **1** | 🔴 **H24-3 lặp ĐÚNG bẫy mà cùng diff vừa vá (gen-2)** — trigger canonical = **chính adap-report S123 mô-tả H24-3** | ✅ |
| **2** | 🔴 **greedy `.*` lấy `(S<N>` CUỐI ≠ MAX** — `## Tong hop (S122…) va lich su (S110…)` → **S110** | ✅ đo thật |
| **3** | 🔴 **MAJOR — lý-do retire áp cho dạng-2 thì GIẾT C8** (5 folder S71 thành orphan ⇒ ép rewrite history mà C8 cấm) | ✅ |
| **4** | 🔴 **"retire HOÀN-THÀNH mark" = NGUỴ-BIỆN** — điều-khoản (2) **cố ý tách** lưới-rộng ⟂ luật-hẹp; retire **thu lưới bằng luật** = biến nhận **=** cho-phép = **NGƯỢC** | ✅ rút lại |
| **5** | 🔴 **"5/5" = 4/4** — `permission-matrix:16` **không còn fire** (anchor đổi format, khớp 0 pattern) | ✅ `pattern1=False pattern2=False` |
| **6** | `node_modules/*.md` (30 file) nằm trong `$GovMd` — cùng lớp hiểm-hoạ lead tự ghi ở `:495-503` | ✅ vá |
**✅ Chống được soi:** 46→45 tái-hiện · fenced **"0 ca" ĐÚNG** (383 file, 6 anchor, 0 in-fence) · `Matches`-not-`Match` **cần thật** · retire 0-orphan/26/5-dạng-2 **khớp từng số** · **7/7 fault-inject TỰ tái-hiện** · **Q8 ENDORSE không-bump**.
**🔴 LUẬT retire (phát-biểu ĐÚNG, thay bản sai):** *gỡ nhánh legacy khi **tập di-sản RỖNG**; giữ khi **CÒN người thụ-hưởng**. Miễn-trừ C8 hết hiệu-lực đúng lúc hết di-sản để tha.*
**Fault-inject 2 trục reviewer chỉ ra CHƯA HỀ THỬ: 6/6** — quoted-label→IM (gen-2 fix) · 2-số-cùng-dòng→MAX cả 2 chiều · heading trích `` `(S999)` ``→bỏ qua (guard phải ở **CẢ HAI phía**, không chỉ label).
## 6. #53 garble ×4 / 3 agent — và bài học nó dạy
| Agent | tool_uses | Đĩa cứu? |
|---|---|---|
| 🟫 tooling-auditor | 31 / 112K | ❌ → **resume** ✅ |
| ⬜ harvest-curator | 29 / 120K | ✅ **diary có 2 bài học S123** → đọc thẳng đĩa |
| 🟥 reviewer ×2 | 29/140K → 54/208K | ❌ lần 1 → **resume** → ✅ lần 2 **vớt được từ đĩa** |
🔴 **Vòng khép trong 1 phiên:** reviewer **tự rút luật *"ghi diary TRƯỚC return"*** từ lần garble đầu, tự áp, và **nhờ đúng luật đó mà lần garble thứ 2 vớt được**. Nó tự ghi: *"#53 garble ×1 ở CHÍNH TAO; đĩa KHÔNG cứu được vì chưa ghi diary ⇒ **H2 MED-3 trả giá THẬT**"* — đúng cái finding H2 bắt sáng cùng ngày.
🔴 **Prompt-đúng KHÔNG chặn được #53:** lead cấm bẫy *"return trước, làm sau"* ngay từ prompt đầu cho **cả 3**, **cả 3 vẫn garble**. Chặn được là nhờ **ghi-đĩa-trong-lúc-làm** + **resume in-session** — không nhờ nhắc-nhở.
🔸 `git status` **không có file lạ nào** từ 3 sub ⇒ containment G-015 giữ (chúng đề-xuất, lead single-writer).
## 7. 🔴 Lead sai 4 ca — TRỌN ở trục đếm-về-mình
1. **"0 orphan / 25 run"** — thật **26**; chép từ narrative STATUS, không đo. Verdict đúng (vòng lặp quét đĩa) nhưng **mẫu-số bịa**. H2 bắt.
2. **"5/5 separation"** viết vào code-comment — đĩa đỡ **4/4**; **chép số của sub**, không kiểm ca-5. Reviewer bắt.
3. **"7/7 PASS"** viết vào doc **TRƯỚC khi chạy** fault-inject. Chạy sau thì đúng — nhưng *"thiết-kế để pass" ≠ "đã verify pass"*. Lead tự bắt trước commit.
4. **"MED vì 0 proxy"** — sai; `$labelN` = hit-regex-ĐẦU = **chính là proxy**. Reviewer bắt.
⇒ Khớp `feedback_meta_count_selfcoverage_blindspot`: **lead ĐO tốt, ĐẾM-VỀ-MÌNH thì sai**. File đó **tự nạp vào context đầu phiên** mà lead **vẫn mắc ngay ở báo cáo đầu tiên** ⇒ củng cố: **bài-học nằm-trong-context KHÔNG tự bật; chặn được = LUẬT soi-được**.
## 8. Outward — đính chính hub
- **Addendum R5** (thân §1§5 giữ **0 chữ**, audit-trail): 🔴 *"ĐỪNG adopt TRI-ACCEPT"* — SE đã retire dạng-3; **TRI-ACCEPT là trạng-thái QUÁ-ĐỘ, không phải đích** (SE chạy ~1 ngày rồi gỡ). Thay bằng **LUẬT RETIRE LEGACY**. + 2 cảnh-báo fleet (citation-trap 3 đời · **Goodhart rời-tập-đo**) + 2 bài phương-pháp (*"trục nào KHÔNG có ca nào?"* · *"áp luật cho nhánh anh em — vỡ thì LUẬT sai"*) + **dự-báo falsifiable** để hub kiểm chéo.
- **Email `ed3786a10f12`** (`type: fix` · `category: Governance`) — **selftest-stamp MATCH ×2** (re-stamp sau khi sửa frontmatter: body-hash không đổi, đúng thiết-kế canonical). `to = ai_infra` ⇒ **không cần infra-CC** (bước 6b chỉ khi `to ≠ ai_infra`).
- 🔴 **`_index` reconcile — gap thật:** `outbox/ai_infra/` có **3 file 07-15** mà `_index` **0 row** ⇒ **2 email S122 đã gửi mà chưa log** (S122 chạy tới 6c rồi bỏ bước 7). Hash lấy **từ frontmatter trên đĩa**, không tính lại. **Bài: `_index` là sổ hub/audit đọc — gửi mà không log = hub không biết có nó; bước 7 phải cùng lượt với 6c.**
## 9. Còn nợ (khai thẳng)
- 🔴 **`STATUS:6` CỐ Ý chưa bump — H24-3 đang FLAG, GIỮ cho hiện ra.** Bump = **nói dối kiểu khác** (mega-line **0 hit S122**). Fix đúng = **bỏ nhãn phiên (B1 collapse)** — dính carry **re-tier mega-line rơi sổ từ S95** (28 phiên, **không có tag** nên carry-age vĩnh-viễn không thấy). Nó cũng là thứ làm **lead không đọc nổi HANDOFF** (`:5` = 55.447 ch > cap Read 25K/call) ⇒ lead phải grep mò suốt phiên.
- 2 vai H24 **chưa chạy lần nào** (nhịp ~S128) · **H23 precedence CHỜ lead=Fable** (lead=Opus không phân-biệt được) · **dạng-4 orphan = kẽ CÒN LẠI** · 3 dir rỗng git-mù (2 vai H24 chưa seed + 1 stray S54).