From bc309c559cdd0cde2a2a8754609429a57b144c4a Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Mon, 10 Aug 2026 13:05:03 +0700 Subject: [PATCH] =?UTF-8?q?[CLAUDE]=20Docs:=20S185=20chay=20BU=20session-e?= =?UTF-8?q?nd=20=C2=A7L.b=20(6=20buoc=20dut=20do=20su-co)=20=E2=80=94=20ar?= =?UTF-8?q?chive-gate=20A7=20429/429,=20mfe=20-Detail=202=20muc=20MISS=20C?= =?UTF-8?q?O=20TEN=20->=20B3=20build-gap=20khong=20reinject,=20M5=20FLAG?= =?UTF-8?q?=3DFP=20ground-truth,=20H18-D=203/3,=20RAG=20store+verify,=20di?= =?UTF-8?q?nh-chinh=20memory-triple?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- .claude/agent-memory/.mfe-state.json | 12 +++++- .../feedback_claim_stronger_than_work.md | 3 ++ .claude/governance/reinject-ledger.md | 19 ++++++++++ ...-10-0400-S185-bookend-oneshot-yc017-022.md | 38 ++++++++++++++++--- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/.claude/agent-memory/.mfe-state.json b/.claude/agent-memory/.mfe-state.json index 62f1c7a..ca85a86 100644 --- a/.claude/agent-memory/.mfe-state.json +++ b/.claude/agent-memory/.mfe-state.json @@ -1,7 +1,7 @@ { "strikes_total": 25, "rca_entries": 16, - "at": "2026-08-09", + "at": "2026-08-10", "warn_baseline": 25, "history": [ { @@ -123,6 +123,16 @@ "strikes_total": 25, "rca_entries": 16, "at": "2026-08-09 22:17" + }, + { + "strikes_total": 25, + "rca_entries": 16, + "at": "2026-08-10 12:58" + }, + { + "strikes_total": 25, + "rca_entries": 16, + "at": "2026-08-10 12:58" } ] } diff --git a/.claude/auto-memory/feedback_claim_stronger_than_work.md b/.claude/auto-memory/feedback_claim_stronger_than_work.md index 4be17ab..e1e7b20 100644 --- a/.claude/auto-memory/feedback_claim_stronger_than_work.md +++ b/.claude/auto-memory/feedback_claim_stronger_than_work.md @@ -28,4 +28,7 @@ Cùng gia đình với `#53` (return nói khác đĩa) nhưng **ngược chiều **+S166 — biến-thể MỚI cùng class: chép claim VAI-ĐO vào sổ TRƯỚC vòng-KIỂM.** `lead-stale` deep trả FLAG F-8 "tiep_reload ĐẢO DẤU: đo tươi 180.649B = ĐÃ ĐẠT dải" — lead chép NGUYÊN kết-luận vào `WAL:33` ngay khi vai trả (trước khi `ring2-audit` chấm). Ring2 sau đó BÁC: vai đo SAI PHẠM-VI (đọc HANDOFF `:1-117` nuốt 7 segment cũ thay vì `:1-40`), đúng phạm-vi = 120.633B ~30-40K **VẪN DƯỚI sàn** — kết-luận LẬT NGƯỢC. Nếu closeout thi hành resolve theo WAL thì **owner-decision slot (59) bị đóng bằng tiền-đề sai, ngược chiều**. Khác 3 ca S162 (tự khai việc mình chưa làm): đây là **tin claim của VAI-ĐO khi vòng 3-nấc đo→kiểm CHƯA khép**. Luật: **claim ĐẢO-DẤU/LẬT-TIỀN-ĐỀ của vai-đo chỉ được vào sổ bền SAU khi vòng-kiểm chốt**; trước đó ghi ở thể nghi-vấn kèm "chờ ring2". Vòng 3-nấc chứng minh giá trị bằng đúng 1 ca này. +**+S185 — biến-thể thứ 3: sổ ghi theo DỰ-ĐỊNH khi nghi-thức bị CẮT giữa chừng.** Closeout ONE-SHOT viết khối `memory-triple` với 3 dòng `exit 0` / `mfe-eval -Detail` cho 2 máy **chưa hề chạy trong cửa đó** — không bịa, chỉ là "đằng nào cũng chạy" rồi mạch đứt vì push-fail + sự cố DB prod. Không máy nào bắt (dòng đó là văn-bản tự-do, ngoài mọi detector). Thứ bắt được = **owner gọi "làm tiếp session-end"** + lead tự rà checklist ⇒ chạy bù, đính chính tại chỗ, ghi cả lý do. +**Luật rút ra:** nghi-thức gộp-một-lượt (ONE-SHOT) có mặt tối phải khai — **đứt giữa chừng làm SỔ nói dối nhanh hơn làm VIỆC rơi**, vì việc thiếu thì thấy được, còn sổ thì đã ghi xong. ⇒ khi mạch bị cắt bất-thường: **rà lại checklist TRƯỚC khi tin sổ vừa viết**, và số nào chưa có máy in thì để trống chứ đừng điền trước. Cùng họ với `(f-bis)` (đo trước khi ghi) nhưng ở trục THỜI-ĐIỂM-GHI chứ không phải thứ-tự-đo. + Link [[feedback_agent_return_garble_recover]] [[feedback_absence_looks_like_clean]] [[feedback_faultinjection_proves_teeth]] [[feedback_meta_count_selfcoverage_blindspot]]. diff --git a/.claude/governance/reinject-ledger.md b/.claude/governance/reinject-ledger.md index 081dd7c..8f97574 100644 --- a/.claude/governance/reinject-ledger.md +++ b/.claude/governance/reinject-ledger.md @@ -55,3 +55,22 @@ 3. Floor = **FUNCTION not FORM** — implemented in SE's own script shape; no hub structure/filenames copied. > **Provenance:** `/fable-clone reviewer` 5-lane ensemble (`wf_b621aac4-f0b`) → spec `runs/2026-07-13-presence-not-age-adopt/spec-presence-not-age-adopt-13-07-2026.md` → `/fable-real reviewer` deep-pass (PASS-WITH-FIXES; M1+M2 applied) → HMW execute D1/D2/D3. Applies existing mark `RC-…10-29-11` (age=false-proxy) to the selector layer; codify-only (no new mark). + +--- + +## S185 (2026-08-10) — 2 mục MFE MISS lần đầu CÓ TÊN ⇒ phân loại B3 = **BUILD-GAP, KHÔNG reinject** + +**Bối cảnh:** `-Detail` được cắm vào `session-end §L.b(c)` @YC-019(6) (switch tồn tại từ đầu, **0 call-site suốt 12 phiên**). Lần chạy đầu tiên có cờ này, 2 mục MISS thoát khỏi trạng thái vô danh: + +| Vai | Điểm | Mục MISS (nguyên văn máy in) | Nhà trong role-file | +|---|---|---|---| +| `implementer-backend` | 17/18 = 94% | `❌ Integration testing multiple components` | `.claude/agents/implementer-backend.md:34` (auto-refuse #5) | +| `implementer-frontend` | 12/13 = 92% | `❌ < 30 min trivial` | `.claude/agents/implementer-frontend.md:31` (auto-refuse #6) | + +**Phân loại B3 (bắt buộc TRƯỚC reinject) = BUILD-GAP, không phải floor-rot.** Bằng chứng đo: `grep -ci` trên diary 2 vai = **0/0** — 2 mục này **chưa bao giờ xuất hiện rồi rơi**; chúng chưa bao giờ được **kích hoạt**. Lý do cơ chế: "integration test nhiều component" ở SE luôn về `test-specialist` (ranh vai), còn "< 30 min trivial" thì lead tự làm chứ không spawn sub ⇒ 2 vai **chưa từng gặp ca để từ chối**. + +🔴 **Quyết định: KHÔNG reinject-verbatim.** Nhồi 2 dòng này vào diary sẽ đẩy 94%→100% / 92%→100% mà **không thêm một giá trị nào** — đúng hình dạng Goodhart mà `feedback_goodhart_leave_measurement_set` mô tả: đổi hình-dạng thứ đang bị đo thay vì đổi thực-chất. CG-1 (≤1/N=3) **không tiêu quota** vì không có sự kiện reinject nào. + +**Hệ quả phải khai khi đọc số MFE về sau:** trần thực tế của 2 vai này **< 100% cho tới khi có ca thật** — 94%/92% ở đây đọc là *"chưa gặp ca"*, KHÔNG phải *"trí nhớ rot"*. Ai thấy số này rồi "vá" cho tròn 100% là đang xoá **chứng nhân**, không phải xoá lỗi. + +**Điều-kiện lật (làm cho phán quyết này falsifiable):** nếu về sau một trong 2 vai **thực sự từ chối** một task bằng đúng tiêu chí đó mà diary vẫn 0-hit ⇒ lúc ấy mới là **floor-rot thật** ⇒ reinject theo CG-1. diff --git a/docs/changelog/sessions/2026-08-10-0400-S185-bookend-oneshot-yc017-022.md b/docs/changelog/sessions/2026-08-10-0400-S185-bookend-oneshot-yc017-022.md index 1b39bc4..edc4240 100644 --- a/docs/changelog/sessions/2026-08-10-0400-S185-bookend-oneshot-yc017-022.md +++ b/docs/changelog/sessions/2026-08-10-0400-S185-bookend-oneshot-yc017-022.md @@ -30,19 +30,21 @@ harvest 698.109 B → **17 khối/11 sổ + 7 tệp MD5-trùng + 7 lane placed** ## Số chốt -Tests **668** (45D+623I) · Mig 72 · bảng 97 · roster **29** · counter **59** · gotcha 87 · deep 0/1 ok · over-cap **3** (reviewer 31.341 · harvest-curator 28.071 · ctx-audit 26.695 — sau seed M9, đo bằng (f-bis)). +Tests **668** (45D+623I) · Mig 72 · bảng 97 · roster **29** · counter **59** · gotcha **88** (+#88 sự cố prod, đo đĩa @lượt bù) · deep 0/1 ok · over-cap **3** (reviewer 31.341 · harvest-curator 28.071 · ctx-audit 26.695 — sau seed M9, đo bằng (f-bis)). ## memory-triple + gate ``` -memory-triple: do= -memory-triple: de-xuat= -memory-triple: kiem= -memory-triple: do-record= -memory-triple: do-record= +memory-triple: do= +memory-triple: de-xuat= +memory-triple: kiem= +memory-triple: do-record= +memory-triple: do-record= completeness-gate S185: vong 4/5 chuc-nang (khong-nhip: V4 nén-ngủ — SHARD-PROBE pending=6/nguong=15 ⇒ IM) | phep DAT 4 / TRUOT 0 / vacuous 0 ``` +> 🔴 **ĐÍNH CHÍNH (lượt bù 13:0x cùng ngày) — khối trên ban đầu ghi 3 dòng `exit 0` / `-Detail` khi 2 máy đó CHƯA chạy trong cửa closeout này.** Mạch bị cắt bởi sự cố push/DB, lead ghi sổ theo *dự-định* thay vì theo *máy vừa in* — đúng lớp `feedback_claim_stronger_than_work`. Số ở trên nay là số **đã chạy thật trong lượt bù**; `NHIP-NO` giữ nguyên-văn dòng máy in (probe đếm `tran-bo-nho` theo soft-cap = 2, khác `over-cap 3` của `measure` vì 2 thước khác ngưỡng — **không sửa cho khớp nhau**, mỗi dòng là nguyên văn của máy đã in nó). + ## Bài học đắt nhất phiên 1. **ONE-SHOT chạy được thật** — 9 vai một mạch; giá phải trả đúng như hub nói: *"cái đắt là kỷ luật"* = kỷ-luật RESUME (100% vai #53-garble ≥1 lần, cứu 10/10 bằng {disk-truth → resume → scribe}, **0 byte mất**). @@ -54,3 +56,27 @@ completeness-gate S185: vong 4/5 chuc-nang (khong-nhip: V4 nén-ngủ — SHARD- ## ADDENDUM — Sự cố prod SAU closeout (cùng đêm, gotcha #88) Push closeout hỏng 3/3 (Gitea 502 + unpacker) → giữ sentinel `closing:` đúng luật Sàn-2 → anh báo disk quá tải rồi "không đăng nhập được". Truy chuỗi: login 500 `transient failure UseSqlServer` → errorlog `Failed to open database 'SolutionErp'` → **RECOVERY_PENDING ×2 DB** → SET ONLINE fail **Msg 5118 file-is-compressed** = Disk-Cleanup nén NTFS đúng các .mdf/.ldf đang đóng. Fix theo phương án anh duyệt (copy-trước): OFFLINE từng DB → backup `C:\DBBackup-20260810` 4/4 → restart service nhả handle → `compact /U` → ONLINE → `Recovery is complete`, login **200 + token**, data nguyên (58 PE · 21 user · 12 KHKK · 97 bảng). Push lại **THÔNG** `72568f05..b45a8fec`, ahead 0 → §6.4 trả nợ (xoá sentinel + reset WAL) trong lượt này. 🔴 Treo cho anh: **1433 phơi Internet — `sa` bị brute-force liên tục** (thấy trong errorlog); đề xuất chặn firewall/disable sa — em không tự đổi security setting. + +## ADDENDUM-2 — Lượt BÙ session-end (ONE-SHOT §L.b, sau khi push thông) + +Anh gọi "làm tiếp session-end" ⇒ đúng luật ONE-SHOT (*đứt bất-khả-kháng ⇒ lượt-nối chạy HẾT phần thiếu*). Rà ra 6 bước §L.b bị bỏ khi mạch đứt, chạy bù trọn: + +| Bước | Máy/việc | Kết quả THẬT | +|---|---|---| +| (c) | `memory-archive-gate.ps1` DRY | **A7 GATE PASS — 429/429 pointer resolved, failed 0**, exit 0 | +| (c) | `crystallized-backfill.ps1` | bảng-số in đủ + honest-caveat (headroom = RANGE, backfill target owner-gated) | +| (c) | `mfe-eval.ps1 **-Detail**` | FIT=PASS · strikes 25 = baseline 25 · **2 mục MISS lần đầu CÓ TÊN** (xem dưới) | +| (j)(ii-ter) M5 | `closeout-sentinel.ps1 -Commit 38896120 -AuditRan` | `FLAG roles-with-delta=0/2` ⇒ **ground-truth = FALSE POSITIVE** (harvest-curator S185=1 · tooling-auditor S185=5, delta vào commit `wal:` `93173099`/`f42eea90` của hook — đúng known-FP script tự khai) | +| (j)(ii-ter) M7 | `applied-eval-nokey.ps1 -Selftest` | cơ-chế chạy; **4 caveat baked-in** giữ nguyên văn — *"This file is a MECHANISM, NOT a number"*, applied% vẫn DEFERRED chờ judge khác phiên | +| (h) | User-Mark ACTIVE-MARKS | 18 dấu RC hiển thị; **0 quyết-định governance MỚI** ở lượt bù ⇒ `n-a, chỉ hiển-thị` (sự cố prod = vận-hành, không phải đổi CANONICAL §-rule) | +| (i) | H18-D(a) outcome spot-check | **3/3 ĐẠT byte-exact**: gotcha anchor đĩa = **88** ✓ · roster `ls agents/*.md` = **29** ✓ · detector `TOTAL FLAGS: 58` ✓ | +| 6.1/6.2 | RAG store + retrieve | `store_memory` chunk `d598cce5` (gotcha #88) → `search_memory` **rerank 0.957 hit đúng chunk** ✓ | + +### Điểm đắt nhất lượt bù — `-Detail` trả tên cho món nợ 12 phiên + +`implementer-backend 17/18 = 94%` MISS `❌ Integration testing multiple components` · `implementer-frontend 12/13 = 92%` MISS `❌ < 30 min trivial`. +Phân loại B3 (đo `grep -ci` diary = **0/0**) ⇒ **BUILD-GAP, KHÔNG phải floor-rot** ⇒ **KHÔNG reinject** (nhồi cho tròn 100% = Goodhart thuần). Ghi trọn phán quyết + **điều-kiện lật** vào `.claude/governance/reinject-ledger.md` mục S185. + +### Bài học thứ 6 của phiên (bổ sung vào 5 bài trên) + +**Lead ghi sổ theo DỰ-ĐỊNH khi mạch bị cắt.** Khối `memory-triple` ban đầu mang 3 dòng `exit 0`/`-Detail` cho 2 máy **chưa hề chạy trong cửa closeout đó** — không ai bịa, chỉ là *"đằng nào cũng chạy"* rồi mạch đứt vì push/DB. Không máy nào bắt được (dòng đó là văn bản tự do). Thứ bắt được nó là **anh gọi chạy tiếp** + lead tự rà lại checklist. ⇒ ONE-SHOT có mặt tối cần khai: khi một lượt gánh cả nghi thức, **đứt giữa chừng làm sổ nói dối nhanh hơn làm việc rơi** — vì việc thì thấy thiếu, còn sổ thì đã ghi.