[CLAUDE] Docs: S162 closeout - cay 4-folder GD ship prod + bookend-close 5 vong/10 vai
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m54s

- Cay 4-folder giai doan duoi tung goi thau (bfc7b79, cicd PASS 5/5 Run #432)
- Bookend-close: H1 PASS_WITH_FLAGS · H2 GATE-FAIL 4 · H24 20 FLAG · trio MIXED
  · ring1 26D/2T · ring2 19D/1T · harness-audit 43D/4T · ctx-audit TRUOT 7 FLAG
- Lead va trong phien: F-01/F-02/F-04 + A1 archive + A2 distill + skill KHKK
  + comment mirror self-ref (SHA-pair 6/6 giu, build x2 EXIT 0)
- MIND-5 = refresh @closeout dau tien (nhip thu 5, theo de ctx-audit)
- STATUS 3 row canonical + dong CURRENT · HANDOFF 6 slot danh so (54)-(59)
- gotcha #85 · error-ledger E-015/E-016 + AS-19/AS-20 · Phase 12 roadmap
- 4 errata khai thang: tally view-stale-count thoi 1 · enum thieu 1 class
  · tong L1 lech 54 B · A2 tren trigger duong-gia (R10)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-07-30 15:13:18 +07:00
parent bfc7b79f72
commit e5123ff5e1
52 changed files with 2221 additions and 157 deletions

View File

@ -41,6 +41,7 @@
- [Citation-trap self-reference](feedback_citation_trap_selfreference.md) — doc định-nghĩa anti-pattern TẤT-YẾU chứa mẫu đó ⇒ detector khớp-mẫu bắt chính nó, **lây qua trích-dẫn** (3 đời/1 wave); discriminator = **enclosure use⟂mention**, KHÔNG port charset-guard; vá 1 CLASS ⇒ grep MỌI matcher cùng-lớp TRONG diff (gen-2 xảy ra thật)
- [Goodhart: rời tập-đo](feedback_goodhart_leave_measurement_set.md) — "vá" bằng đổi HÌNH-DẠNG thứ đang bị đo = rời tập-đo; **flag-count giảm trông y hệt thành công** ⇒ hỏi "cái mất đi là dương-giả hay CHỨNG-NHÂN?"; kể chuyện bằng THÀNH-PHẦN không bằng tổng; +2 phép thử rẻ (trục-nào-KHÔNG-có-ca · áp-luật-cho-nhánh-anh-em)
- [Vắng-mặt trông giống ổn](feedback_absence_looks_like_clean.md) — slot-index tái-dụng xoá IM-LẶNG (mất uỷ-quyền owner, hỏi lại 3 lượt) · phép trích RỖNG đọc thành sạch (`.{50}x` vs `.{0,60}x`) · ghost-wire soi 2 CHIỀU (wired-but-declared-unwired); vá xong PHẢI grep lại bằng lệnh KHÁC (S146)
- [Claim mạnh hơn việc đã làm](feedback_claim_stronger_than_work.md) — "đã ghi/đã archive/đã VERDICT" = CLAIM ĐO ĐƯỢC, đo trước khi viết; 0-hit phải kèm control-dương (S162 ×3 ca/1 phiên)
- [Edit phải có trước review](feedback_edit_must_predate_review.md) — edit-cần-review (nhất là file vai reviewer) LAND TRƯỚC lượt L3 (no-self-exempt cần vật tồn-tại trong diff); spec tự-mâu-thuẫn → fix-mới thắng footer-cũ + khai trong report (anh ratify S139)
## Project — ongoing decisions / context

View File

@ -0,0 +1,29 @@
---
name: feedback-claim-stronger-than-work
description: "Mệnh-đề \"đã ghi/đã chuyển/đã kết-luận\" trong sổ là CLAIM ĐO ĐƯỢC — phải đo trước khi viết; stub/summary là nơi sai-số đóng băng vì người sau không mở gốc nữa"
metadata:
node_type: memory
type: feedback
originSessionId: 46e076b1-2107-433d-a15a-2ed051c0f5f8
modified: 2026-07-30T07:50:46.676Z
---
Mọi câu trong sổ có dạng *"X đã được ghi / đã chuyển vào archive / đã kết-luận VERDICT-Y"* là một **CLAIM ĐO ĐƯỢC**, không phải lời tường thuật. Phải **đo rồi mới viết**, không được suy từ ý-định vừa làm xong.
**Why:** S162 bắt **3 ca cùng một class trong CÙNG một phiên** (`harvest-curator` F-02/F-03 + `reviewer` F-8) — đủ để gọi là lớp lỗi, không phải sự cố lẻ:
1. Stub `cicd-monitor/MEMORY.md` khai *"(#422 `b5799fc` … #425 `a2bbcb9`) — verbatim → `archive/2026-07.md`"*; đo: **2/5 chưa từng vào archive** (`git log -S"b5799fc" -- .../archive/` **rỗng toàn lịch sử**). Nguyên-liệu còn nguyên ở run-folder ⇒ mất **lớp đã chưng cất**, không mất dữ-liệu — nhưng câu khai che mất chỗ hổng.
2. `ship-synthesis.md` trích ``designer `VERDICT: SHIP-READY` `` **như verbatim**; sub-file 17.844 B **0 hit** chuỗi đó (file kết bằng "TỰ ĐÁNH GIÁ CÒN HỞ"). Nội dung khớp đĩa nên **không phải bịa** — nhưng hình-thức trích dẫn **tạo ra một chuỗi chưa từng tồn tại**.
3. Memory vai viết *"0 rác 403"* **vô điều kiện** cho một claim vốn **CÓ ĐIỀU KIỆN** (chỉ đúng khi gate dùng đúng key policy endpoint) ⇒ đóng băng cái sai vào trí-nhớ vai.
Điểm chung: người viết **vừa làm xong nên "biết" nó đã xong**, rồi viết câu tổng-kết theo **trí-nhớ về ý-định** thay vì theo đĩa. Nguy nhất là vị trí: stub/summary được thiết-kế để **thay thế việc mở gốc**, nên sai-số đóng băng đúng ở lớp mà người sau tin nhất. Máy MÙ hoàn toàn — không detector nào so được "câu khai" với "trạng-thái đĩa" ở dạng tổng quát.
Cùng gia đình với `#53` (return nói khác đĩa) nhưng **ngược chiều**: #53**mất** thứ đã làm; đây là **khai** thứ chưa làm.
**How to apply:**
1. Trước khi viết mệnh-đề *đã-làm* vào bất kỳ sổ bền nào (MEMORY vai · synthesis · STATUS · HANDOFF): chạy **đúng 1 lệnh** chứng minh (`grep`/`git log -S`/`ls`). Rẻ hơn nhiều so với một vòng người-sau-tin-nhầm.
2. **Trích dẫn verdict thì phải grep được.** Guard đã dựng: mọi `sub-*.md` kết bằng `END <slug> — VERDICT=<…>` ⇒ ai trích mà grep 0 hit là lộ ngay. Đừng trích "tinh thần" của một verdict rồi đóng ngoặc kép quanh nó.
3. **Claim có điều kiện phải mang điều kiện theo.** "0 rác 403 **với điều kiện** gate = đúng key policy endpoint" — bỏ vế điều kiện đi là biến một quan sát đúng thành một luật sai.
4. Khi phát hiện: **đính chính tại chỗ khai**, không xoá — ghi rõ đo được gì, còn gì phục hồi được (bài S162: nguyên-liệu còn ở run-folder ⇒ hạ từ "mất hẳn" xuống "mất lớp chưng cất").
5. 🔴 Verify khi lệnh trả **0 hit**: chạy thêm **control-dương cùng hình-dạng** trước khi kết luận "vắng mặt thật" — `ring1` @S162 làm đúng vậy (`git log -S"1a47a61"` = 1 commit) và nhờ đó claim của H2 **đứng vững hơn cả bản H2 nộp**. 0-hit của một lệnh chưa từng chứng minh có răng thì không kết luận được gì.
Link [[feedback_agent_return_garble_recover]] [[feedback_absence_looks_like_clean]] [[feedback_faultinjection_proves_teeth]] [[feedback_meta_count_selfcoverage_blindspot]].

View File

@ -20,3 +20,5 @@ S109 (2026-07-10) resume sleep-recovery: scope 16-file/6-agent "đã chốt + gu
🔸 **Acceptance literal = nợ tự-lão-hoá:** số/ngày tuyệt-đối trong acceptance có thể stale **trong cùng NGÀY** viết ra nó. Viết acceptance dạng **quan-hệ** ("in đúng ngày ở anchor STATUS.md:6"), cấm literal.
**How to apply:** (0) 🔴 **Trước khi phát ngôn thể KHẲNG-ĐỊNH về trạng-thái đĩa (tồn-tại/đã-làm/còn-thiếu/orphan): chạy ĐÚNG 1 lệnh chạm đĩa.** Rẻ hơn mọi thứ khác; lead S121 bỏ qua bước này và đầu-độc cả brief fan-out + run.md + WAL + báo-cáo owner. Suy-luận từ spec/bảng/kế-hoạch ⇒ chỉ được nói ở thể **nghi-vấn** ("chưa thấy wave nào được giao — để tôi đo đĩa"). (1) Mọi resume-from-pause: TRƯỚC execute, re-derive tiền-đề scope từ disk — đọc HEADER artifact đích (field source/coverage) + git-date so artifact vs nguồn; match theo NỘI-DUNG coverage, KHÔNG tên-file 1:1. (2) Lệch tiền-đề → thu-hẹp scope theo guard + báo user option ép-đè tường minh (đừng im lặng chạy scope cũ, cũng đừng im lặng bỏ). (3) Khi distill/nén (reviewer S109 meta-lesson): **3 bề-mặt lỗi NGOÀI body mà coverage-diff máy móc MÙ** = gist-metadata count (đếm từ disk, không copy brief) · số-TỰ-TÍNH (delta arithmetic không có token verbatim đối chiếu) · fact-claim trong N/A-note (resolved/pending phải verify tươi) — semantic reviewer soi riêng 3 lớp này. Liên quan [[agent-kill-recovery]] [[prod-config-inspect-before-change]] [[stale-diagnostic-background-agent]].
🔸 **Bẫy đo thứ-5 — con-trỏ SỐ-DÒNG vào sổ TÁI-SINH thối trong 1 cửa, và thối IM LẶNG (S162, `ctx-verifier` K2/K3):** `.claude/WAL.md` bị **ghi-đè + đánh số lại mỗi `/pause`** ⇒ mọi con-trỏ dạng `WAL:49` / `WAL:8,10` hết hạn ngay cửa sau. Đo thật: `_mind` MIND-4 trỏ `WAL:49` ×2 — WAL lúc viết có 61 dòng và **dòng 49 là DÒNG TRỐNG** (sai ngay lúc viết); `WAL:8,10` từ "vá 4 dư-lượng / 3 quyết owner" **biến thành** "W1 SHIP a8027c0 / W3 SHIP df52fa0" ⇒ **giải-nhầm mà không ai biết**. 🔴 Vì sao máy MÙ: phép kiểm con-trỏ chỉ verify **path tồn tại** — path `.claude/WAL.md` luôn tồn tại ⇒ **0 cờ**. Đây là `absence_looks_like_clean` áp cho con-trỏ. **Luật:** trỏ vào sổ ghi-đè phải theo **NỘI-DUNG** ("mục housekeeping trong WAL chain"), KHÔNG theo số dòng; số dòng chỉ dùng cho file **append-only / git-tracked ổn định** (`docs/`, `src/`, session-log). Cùng họ với `acceptance literal tự-lão-hoá` ở trên — khác ở chỗ literal kia lão-hoá theo NGÀY, cái này lão-hoá theo MỘT LƯỢT `/pause`.

View File

@ -12,3 +12,5 @@ Khi một agent/workflow chạy NỀN (background) ghi file, harness bắn `<new
**Why:** S69 bị 2× — re-skin 7-designer workflow + PE-FE agent đều bắn loạt `× unused/Element`, em suýt sửa theo (suýt cp đè file vốn đã hoàn chỉnh). Build `npm run build`/`tsc` chạy SAU khi agent xong → exit 0 cả 2 app, mọi × đều false-alarm. Cùng họ gotcha #53 (agent return truncated): disk + build = source-of-truth, KHÔNG tin return/diagnostic suông. Project gotcha #68.
**How to apply:** (1) Agent/workflow NỀN → **bỏ qua diagnostic giữa-chừng**, tín hiệu thật = 1 lần build SẠCH chạy SAU agent hoàn-tất (lý do em main build-tập-trung sau fan-out). (2) Phân biệt ai-edit: em main edit real-time ở turn mình → diagnostic TIN được; agent nền edit → verify build TRƯỚC khi sửa/cp-đè. (3) Đừng phản xạ "thấy × thì fix" — verify build trước, tránh redundant fix + suýt clobber file đúng. Link [[feedback_workflow_fanout_reliability]] [[feedback_agent_kill_recovery]].
🔴 **S162 — luật (2) của chính file này BỊ BÁC MỘT NỬA: diagnostic nay cắn CHÍNH LEAD, ×3 trong 1 đợt.** Bản cũ dạy *"em main edit real-time ở turn mình → diagnostic TIN được"*. Sai khi lead **Edit-batch nhiều file trong 1 lượt** (đợt cây 4-folder: 12 file 2 app): harness bắn snapshot GIỮA chuỗi Edit ⇒ lead đọc *"JSX không đóng :114/:138"*, *"toggleExpand không tồn tại"* rồi **2 lần ra lệnh cho sub "sửa dứt điểm"** thứ **không hỏng**`npx tsc -b --force` chạy sau đó = **EXIT 0**, `grep` cho thấy `toggleExpand` định-nghĩa ngay `:161`. Sub phải tốn 1 lượt để bác lại lead. ⇒ **Sửa luật: người-edit KHÔNG phải tiêu-chí; tiêu-chí là ĐÃ-DỪNG-TAY hay CHƯA.** Chỉ tin diagnostic khi không còn Edit nào đang bay (của mình hay của sub); còn nghi ⇒ chạy `tsc`/`build` 1 lần, rẻ hơn một vòng lệnh-sai. Datum kèm: 3 lần trong đợt đều false-alarm, 0 lần đúng.