diff --git a/.claude/agent-memory/reviewer/MEMORY.md b/.claude/agent-memory/reviewer/MEMORY.md index 1f2bed4..bf5e69f 100644 --- a/.claude/agent-memory/reviewer/MEMORY.md +++ b/.claude/agent-memory/reviewer/MEMORY.md @@ -1,5 +1,7 @@ # Reviewer Agent — Persistent Memory +- **S185 (08-09) review CHECKLIST 21-item (YC-017 email-adap, artifact `runs/2026-08-09-S185-email-adap-pipeline/sub-review-checklist-fable.md`) — `PASS_WITH_FIXES` 9MAJ/4m:** review CHECKLIST ≠ review code — đòn đắt nhất = **đối-chiếu TỪNG DÒNG bảng-nợ §2.1 → checklist §3**: ≥5 dòng BIẾN MẤT không disposition (1 dòng "CHỜ-ANH" rơi im lặng). **File-đích tự khai guard thắng sổ-lead**: `tien-kiem-cua.ps1:4-5` "phải qua W3b trước, đang chờ owner (P1)" ⟂ HANDOFF:7 NEXT-em "tự chạy" — xung đột 2 nguồn uỷ-quyền phải hoá giải TRONG spec, không được để Opus tự chọn. **Invest chép số cũ từ report thay vì đo tươi** → ring2 thật 30.781B ĐÃ VỠ cap (không phải 96,8%) — stale chiều NGƯỢC làm item KHẨN trông như thường. **Harvest nợ bằng grep debt-marker hụt nợ không-marker** ("PENDING"·"không máy nào canh") — 2/2 report mở thêm đều dính. **LT3 bậc-2 (đảo-ngược-được?) = thước routing rẻ** → demote 1 W khỏi CHỜ-ANH. **Carry đa-vế gỡ phải đóng TỪNG VẾ** (evidence lẫn trio khác trio). Thước-hỏng của TÔI: `cd` AI_INFRA rồi chạy `git ls-files` → đo nhầm repo (cwd-trap, warning path lộ) — compound-cd rồi git = tự kiểm repo-root trước khi tin 0-hit. + - **[→ `archive/2026-08.md` §@S182 — verbatim 2 lượt, probe 7/7 + control-âm 0] S182 (08-08) YC-013 KHKK 8-panel — lượt SPEC `2C/5M`, lượt DIFF pre-commit `0C/3M`+6m:** 🟢 **3/3 finding 🔴 lượt-1 được đóng ĐÚNG BẢN CHẤT** (assembly-ranh → file `public static class` riêng · `IgnoreQueryFilters` **2 CHIỀU NGƯỢC NHAU trong cùng 1 diff**: DELETE bỏ filter vì FK còn thật ⟂ changelog GIỮ filter vì ghi vết phiếu-đã-xoá là rác · 8 module pin verified bằng grep Domain, loại +1 hit FK nội bộ) — dữ liệu hiếm, ghi để đừng phá. 🔴 **tooltip đặt trên `` ⇒ Chromium KHÔNG hiện** (label bao ngoài không mang `title`) — quyết-định-owner nằm trong tooltip mà tooltip không có cửa hiện = **máy dựng không ai gọi**; ô "hành-vi-LUÔN-BẬT" câm ⇒ đọc thành NGƯỢC NGHĨA. 🔴 **3 thành phần bất đồng HOA/thường** (regex CultureInvariant **case-SENSITIVE** ⟂ `Code ==` theo collation SQL Server **CI** ⟂ FE `.toUpperCase()`) và **test MÙ THEO CẤU TRÚC vì SQLite = BINARY case-sensitive ⇒ tầng DB trong test có ngữ nghĩa NGƯỢC prod** — không assertion nào bịt được. 🔴 **guard mới ở write-path CHÍNH (Create) 0 test** — lỗ của SPEC, implementer đúng spec, **KHÔNG hạ thước theo spec**. **m:** assert `Contain("N5")∧Contain("N3")` **mù THỨ TỰ toán hạng** (3 call-site 2 tham số kề — phải đối chiếu TAY) · **BOM `ef bb bf`+CRLF lẫn vào commit code** ⇒ `git add` từng file. **FLAG-A đo được:** `npx tsc --noEmit` trần biên dịch **0 file** (`files: []`+references) = xanh THEO CẤU TRÚC; `--listFiles|wc -l` 0 ⟂ 225/214 ⇒ **acceptance "lệnh X xanh" phải kèm phép chứng thước KHÔNG RỖNG**. - **[→ `archive/2026-08.md` §@S180 — verbatim, probe 10/10 + control-âm 0] S180 (08-07) LANE A/6 GĐ-0+GĐ-1 (đĩa `runs/…-S180-adap-upgrade-pack-phased/sub-n3-lane-a-gd01.md` 57 KB):** 🔴 **"0 hit" ĐÚNG THEO LUẬT vẫn là LỖ THẬT** — `_index` thiếu **24/69** thư (lead giao "4"); `to=se` **23/23 sạch** ⟂ `to=all-fit` 22 có/20 thiếu; luật `:7` trỏ `COMMS-LEDGER` mà `find "*COMMS*"`=**0 trong SE** (control `*ledger*`=4) ⇒ **sổ mà luật trỏ tới KHÔNG TỒN TẠI**; S153 phán dương-giả = đúng cho câu-hỏi CŨ. ⇒ gặp 0-hit phải hỏi thêm **"sổ đó có tồn tại không"** · **phân-họ regex 160/159, lệch 1 vì `S57bis`** ⇒ luôn cộng lại đối-chiếu tổng · **`CLAUDE.md` quy-ước nhật-ký khớp ≤64/159 đĩa** · **"single source" tự-xưng ≠ chuẩn** (bảng-dịch; 3 phép thử tiên-đoán/phủ-sóng/hướng) · **số-trong-chú-thích trôi** (`hmw.js` "11 class" ⟂ đĩa **12**). diff --git a/.claude/commands/session-end.md b/.claude/commands/session-end.md index 61e8c05..52864d4 100644 --- a/.claude/commands/session-end.md +++ b/.claude/commands/session-end.md @@ -114,6 +114,8 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph 🔴 **Scope theo `git %cI`, KHÔNG theo `mtime`** — mtime **không bền** (Dropbox resync ghi đè; R3-m5 chứng, FIX#4 đã bỏ mtime khỏi W0.5 vì đúng lý-do này). *(v1:120 nguyên-bản ghi "mtime-trong-phiên" — đó là bản TRƯỚC khi mtime bị bác; đừng bê nguyên.)* **Acceptance:** chênh-lệch **0**, HOẶC in được danh-sách lệch. 🔸 *Sàn-5 là **informational** — chính vì thế nó **an-toàn để sai**, và cái sai đó đã trả giá bằng việc tự lộ 2 bug ở lần chạy đầu. Nếu nó là cổng-chặn thì 9 dương-giả kia đã chặn cả phiên.* +- **(f-bis) 📏 RE-MEASURE sau-harvest (adap `2026-08-08-…-6-bai-hoc` bài-4, land S185; REVIEW-FIX-2 @S185 đổi nhãn từ `f-ter` — `f-bis` chưa từng tồn tại, nhảy nấc làm người sau tưởng mất mục):** khối **(c) ĐO trước** → **(d)/(f) APPEND sau** ⇒ số đo (c) **đã sai tại thời-điểm ghi sổ** với mọi tệp vừa được harvest lên. Ca thật: HANDOFF @S179 chép `ring2-audit 26.440 B` — đo tươi @S185 = **30.781 B** (vượt cả soft-cap), 5 phiên đọc số chết. ⇒ SAU lần APPEND agent-memory cuối cùng của closeout: **chạy lại `scripts/measure-agent-memory.ps1` (read-only)** — số ghi vào HANDOFF/STATUS/sổ = số **SAU-append**; không chạy lại được thì số cũ **PHẢI mang nhãn `chụp-trước-harvest`**. 🔸 *Ranh (thư bài-4): đây là đổi thứ-tự một phép **ĐO** để nó thôi nói sai = sửa lỗi — KHÔNG đụng thứ-tự thao-tác ghi dữ-liệu, KHÔNG vi-phạm Mirror C1 (C1 đóng-băng TRONG cửa-sổ đo; re-measure chạy SAU verdict + SAU append, read-only).* + - **(j) 🔷🔶 H24 lead-self-audit — counter luôn tick · cặp light spawn VÔ-ĐIỀU-KIỆN mỗi bookend · chỉ `deep` theo NHỊP (adopt S122 · hình B S149 · vá FLAG-1 S159; đối-xứng `session-start §2.1.8`):** - **(i) BÁO dòng-nợ 4-vế (nâng dòng H24 cũ — Item 2 S135):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` → in **1 dòng** `NHIP-NO: kiem light a/e deep b/f | tran-bo-nho x over-cap | run-chua-gom y` (vế-1 nhịp-kiểm THAY dòng `counter=… light … deep … OVERDUE` cũ, đọc `.session-counter.json` + `h24_cadence`). 🔴 **probe KHÔNG chặn**: lỗi → in `probe-loi (khong chan)` → đi tiếp. 🔴 **Nhịp ĐỌC từ config, CẤM hardcode ở đây** (detector `governance-detectors.ps1` H24-2 **fail-loud** nếu key thiếu — **không** giả-định default). - **(ii) 🔄 HÌNH B — cặp soi-lead BOOKEND VÔ-ĐIỀU-KIỆN @close (đảo @S149; spec `runs/2026-07-24-S149-hoi-tu-bookend/spec-…md` qua gate W2 GO-WITH-FIXES):** spawn cặp (`lead-stale-auditor` + `lead-gap-auditor`) **MỌI closeout, KHÔNG cổng nhịp light, KHÔNG consent**. Cặp trả FLAG-list (khuôn `## FLAG-N — \`class\` — SEV` bắt buộc — M4/C11 soi) → ghi số bằng **MÁY**: `powershell.exe -ExecutionPolicy Bypass -File scripts/h24-signal-write.ps1 -Session S -Flags '' -AuditKind light` (procedural max-1/class/phiên · enum-đóng · atomic · 🔴 tôn trọng `_frozen_until_owner` — dải JUMP treo {4,3,3} KHÔNG bị máy reset, nợ của owner). diff --git a/.claude/commands/session-start.md b/.claude/commands/session-start.md index 51ae2e2..8a10874 100644 --- a/.claude/commands/session-start.md +++ b/.claude/commands/session-start.md @@ -158,8 +158,8 @@ git check-ignore -q .claude/sessions/session-1 ; echo "exit=$?" # → exit=1 - 🟩 **cicd-monitor** — post-deploy Gitea + bundle hash + smoke - 🟫 **tooling-auditor** (monitor H1, INFORM-only) — tooling/docs-freshness 4-mặt (skill·sub-role·plugin·docs) - ⬜ **harvest-curator** (monitor H2, INFORM-only) — harvest-integrity 5-trục (Coverage/Completeness/Fidelity/Placement/Corruption) - - 🔷 **lead-stale-auditor** (monitor **H24**, INFORM-only, **+S121 W2**) — soi **VIEW LỆCH SOURCE** của chính cái LEAD surface (bản-tóm-tắt trỏ số cũ · tiêu-đề chưa bump · chú-thích-trạng-thái chưa lật · số trong mô-tả một VAI lệch · dư-lượng bất-đối-xứng) - - 🔶 **lead-gap-auditor** (monitor **H24**, INFORM-only, **+S121 W2**) — soi **CÁI BỊ THIẾU** trong cái LEAD surface (việc rớt khỏi work-state · carry rớt/quá-già · yêu-cầu owner ghi chung-chung mất specifics · quyết-định-treo chìm · memory nạp dưới hạn-mức) + - 🔷 **lead-stale-auditor** (monitor **H24**, INFORM-only, **+S121 W2**) — soi **VIEW LỆCH SOURCE** của chính cái LEAD surface. 🔴 Class nhánh `view-*` **KHÔNG liệt-kê ở đây** — đếm từ khoá `lead_self_audit.flag_classes` (`memory-budget.json`); danh-sách chép tay ở đúng dòng này từng thối (thiếu `view-claim-broader-than-sample` mở @S179) và **lây vào brief lead viết cho vai đo** — vá S185, cùng khuôn ring2-persona @S180 + - 🔶 **lead-gap-auditor** (monitor **H24**, INFORM-only, **+S121 W2**) — soi **CÁI BỊ THIẾU** trong cái LEAD surface. 🔴 Class nhánh `gap-*` **KHÔNG liệt-kê ở đây** — cùng khoá `lead_self_audit.flag_classes` (danh-sách cũ tại dòng này thiếu `gap-incident-unrecorded` mở @S143 — vá S185) - 🧪 **harness-eval** (monitor **trio-memory**, INFORM-only, **+S141**) — con **ĐO**: đọc output 5+1 instrument + `memory-budget.json` → TRẢ **số nguyên-văn** + so-baseline + verdict {HEALTHY|REGRESSION|MIXED}. 🔴 CẤM số-từ-trí-nhớ. - 🧭 **harness-refine** (monitor **trio-memory**, INFORM-only, **+S141**) — con **ĐỀ-XUẤT**: đọc `harness-eval-return.md` (PIN) → action 4-lớp {nạp-lại · thăng-hạng · lưu-kho L1→L2 · chưng-cất} + mục "đã cân-nhắc→BÁC". Chỉ acts **AGENT-MEMORY corpus** (lead hot-feed/carry ⇒ NHƯỜNG `lead-gap-auditor`). - 🧮 **harness-audit** (monitor **trio-memory**, INFORM-only, **+S141**) — con **KIỂM**: đọc **run-folder PIN đích-danh** → verdict ĐẠT/TRƯỢT per-claim + falsify-log + **re-chạy ≥2 số load-bearing**. 🔴 CẤM tự tìm "run mới nhất", CẤM ĐẠT-ảo. diff --git a/.claude/governance/.session-counter.json b/.claude/governance/.session-counter.json index 9f11566..7342373 100644 --- a/.claude/governance/.session-counter.json +++ b/.claude/governance/.session-counter.json @@ -11,9 +11,9 @@ }, "_tick_invariant_note": "Tick invariant (hub dede7ec5 Delta-1, verbatim): moi LAN-CHOT +1; mot cap dung-noi tang DUNG +1, khong +2, khong +0. SE form = tick-at-entry-gate idempotent-per-label (hub Delta-2 recovery-gate +1 = permitted form) - NET +1/session-label EQUIV hub +1/cap on CLOSED pairs; an OPEN pair is transiently +0 until its entry gate fires (hub blessed, 9a35405b block-1 phep dung-noi). Guard song-con = label-convention (session-start 2.1.8: new conversation = new S\u003cnn\u003e label, NEVER reuse). history[] is append-unbounded BY DESIGN =\u003e absence of a marker = never-happened (safe semantics); IF a FIFO cap is ever added, eviction MUST be handled explicitly (absence-vi-bi-day != absence-vi-chua-xay-ra - log-BOUNDED design-note dede7ec5).", "_seed_honesty": "Seeded UNTICKED on purpose. counter=0 and last_ticked_* = null mean \u0027no tick has ever happened\u0027, which is the truth at S121 - the ritual that performs the tick lands in W3. Seeding a fake first tick here would make the very first cadence reading a lie, and H24 exists to catch exactly that kind of invented number.", - "counter": 57, - "last_ticked_session": "S183", - "last_ticked_head": "9e8d67d214031f039ddb6d97ff2cd7d7c04afbad", + "counter": 59, + "last_ticked_session": "S185", + "last_ticked_head": "8491923eff64df8cbef569711ece1e88d6a77d25", "last_ticked_at": "2026-08-08", "last_audit": { "light_at_counter": 56, @@ -292,6 +292,16 @@ "at": "2026-08-08", "session": "S183", "event": "CLEAN tick (session-counter-tick.ps1 M2): counter 56->57, session S182->S183, head 936d1ae->9e8d67d. Classify-before-tick: no regression (n=183 >= stored n=182); last_ticked_head reachable (merge-base --is-ancestor exit 0). 4 fields updated, 1 history entry appended, written atomically (temp + Move-Item -Force)." + }, + { + "at": "2026-08-08", + "session": "S184", + "event": "CLEAN tick (session-counter-tick.ps1 M2): counter 57->58, session S183->S184, head 9e8d67d->5469ec8. Classify-before-tick: no regression (n=184 >= stored n=183); last_ticked_head reachable (merge-base --is-ancestor exit 0). 4 fields updated, 1 history entry appended, written atomically (temp + Move-Item -Force)." + }, + { + "at": "2026-08-08", + "session": "S185", + "event": "CLEAN tick (session-counter-tick.ps1 M2): counter 58->59, session S184->S185, head 5469ec8->8491923. Classify-before-tick: no regression (n=185 >= stored n=184); last_ticked_head reachable (merge-base --is-ancestor exit 0). 4 fields updated, 1 history entry appended, written atomically (temp + Move-Item -Force)." } ] } diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 82c9b3f..0af76c0 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -56,6 +56,7 @@ Nếu ý anh là **chỉ người duyệt**, policy hiện **rộng hơn ý đ **~~(70) Tách 2 sổ đếm H24 — trung thực đang XOÁ streak~~ ✅ ĐÓNG @S179** — đã thi hành: `scripts/h24-signal-write.ps1` mang `slot 70` ở **3 chỗ** (`:66` `:164` `:247` — *"SỔ THỨ HAI (S172, owner slot 70)"*). 🧊 nguyên-văn slot cũ: `ring2-audit` A4: em tự khai 2 header stale **trước** khi con-đo soi ⇒ chúng bị xếp §0-bis **ngoài TOTAL** ⇒ máy thấy class có 0 ca ⇒ **reset tally 4→0**. Tức càng tự thú càng xoá được dấu vết class. Đề nghị tách: *số FLAG mới* ⟂ *class nào có ca trong vòng*. > 🔴 Kèm một lỗi máy `ring2` cài lại bằng python và chứng được: detector **H24-2 dựng segment từ `marks[0]`**, mà marker `**NEXT anh/em` đầu tiên nằm ở `HANDOFF:90` ⇒ **toàn bộ L1-89 không bao giờ được đọc**, nuốt **12 slug** gồm cả hai khối Carry đỉnh. Detector chấm tuổi trên segment cũ rồi in `[ok]`. +> ✅ **Vùng-câm ĐÃ VÁ @S185** (dòng trên giữ nguyên làm ảnh chụp — bài-5 thư 08-08): detector nay quét thêm **pre-marker segment** (toàn bộ phần trước `marks[0]`, nơi khối RE-STAMP + Carry đỉnh sống); 0 marker ⇒ cả file = 1 segment thay vì rỗng. Vết = `scripts/governance-detectors.ps1` comment `S185 fix`. **~~(71) Nợ harvest ~306 KB — gom hay để ngủ~~ ✅ ĐÓNG @S179** — anh đã cấp **UỶ-QUYỀN THƯỜNG-TRỰC** @S172 (nguyên văn: *"gom và sleep thì auto nhé, tự quyết"*), wire ở `.claude/commands/session-end.md:82`: GOM + NÉN-NGỦ từ nay **AUTO, lead tự quyết, CẤM để nợ nằm lại chỉ vì chưa hỏi được owner**. ⇒ slot này **hết là câu hỏi**; nợ harvest xử theo uỷ-quyền, không hỏi lại. 🧊 nguyên-văn slot cũ: `S168-bookend-close` **162.916 B** (9/10 vai) + `S171-khkk-ui-mirror-pe` **143.682 B** (4 vai: invest-cb · impl-be · impl-fe · reviewer×3) + `a2bbcb9`/`b5799fc` (mở từ **S162**, 3 phiên). ⚠️ **KHÔNG** gom `S159-bookend-open` — `ring1-audit` mở 4 vai và chứng **4/4 byte-exact** rằng chữ đã về nhà (dương-giả của detector-theo-TÊN); gom sẽ đẻ entry S159 **trùng trên 10 sổ**. diff --git a/docs/governance/adap-reports/2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc.md b/docs/governance/adap-reports/2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc.md new file mode 100644 index 0000000..c0826d0 --- /dev/null +++ b/docs/governance/adap-reports/2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc.md @@ -0,0 +1,42 @@ +# adap-report — `2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc` + +**1. id-broadcast:** `2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc` (DELTA chồng bản 19-07 "harness đóng đủ vòng" — SE đã adopt bản gốc @S145 ring-family) +**2. nấc (G-011):** **executed** — 🔴 KHÔNG phải *verified* (nấc đó chỉ hub cấp). +**3. ngày áp:** 2026-08-09 (S185, cửa `/tiep` window-4/L13 — áp TRƯỚC bookend @close theo thứ-tự WAL `next:`) + +## 4. Áp gì — từng khoản + +| Sàn hub | SE làm | Vật chứng | +|---|---|---| +| Vòng 1-5 (bộ cũ 19-07) | **Đã-có-trước** — V1 tooling/harvest+ring1 · V2 H24+ring2 · V3 trio+harness-audit · V4 sleep+ring4 · V5 floor/detector, cả 5 AUTO từ S152 | `session-start.md §2.1.8/2.1.9` · `.claude/agents/ring{1,2,4}-audit.md` | +| **Vòng 6 — nghi thức cửa phiên** *(mới)*: 4 nhãn máy-kiểm-được + vai kiểm có quyền xoá án | **4 nhãn đã-có-trước** (`quên · tự ý bỏ · suy giảm hợp lệ · bị chặn` — áp @S181 từ thư 08-07) + máy `tien-kiem-cua.ps1` chạy đầu mỗi cửa. **Vai kiểm riêng = ring5-audit slot (41) — ĐANG TREO CHỜ CHỦ DỰ ÁN** ("build SE-form hay chờ VIPIX"), KHÔNG tự build | `docs/governance/ritual-labels.md` · `scripts/tien-kiem-cua.ps1` · WAL treo-chờ-anh | +| **Vòng (+) — mạch ngữ cảnh** *(mới)*: kiểm lớp-mềm @pause · đối chiếu @tiep · soi chuỗi 2 đầu | **Đã-có-trước ĐỦ 3 vai** (owner-veto @S153 "Build đủ 3 vai như hub" — SE adopt từ `0df10df4` TRƯỚC khi hub phát bản này): `ctx-curator` @pause · `ctx-verifier` @tiep · `ctx-audit` @2-bookend. Chạy thật ngay cửa này: verifier trả 15 cờ | `.claude/agents/ctx-{curator,verifier,audit}.md` · `_tiep-3.md` dòng verdict | +| 3 ràng buộc: tuần-tự trong vòng · pin đích-danh · đóng-băng nền | Đã-có-trước: §2.1.9(b) CẤM song song · (d) PIN fail-closed · (e) Mirror C1 | `session-start.md §2.1.9` | +| **Máy điểm danh 2 đầu: thiếu mặt ⇒ mã lỗi ⇒ cửa không đóng/mở** | **Executed-partial, khai thẳng:** máy có (`tien-kiem-cua.ps1` in 1 dòng + cờ) nhưng **luôn `exit 0` — RĂNG CHẶN CHƯA CẮM**. Đây là wave **W3b đang soak CÓ CHỦ ĐÍCH** (64/64 ca đã phân loại ở `harness-11-engine PHẦN Q`, chờ cắm mã thoát khi soak đủ — NEXT-em từ `HANDOFF:7`). KHÔNG phải từ chối floor — đường đã vạch trước khi thư tới | `adap-apply.md` BƯỚC 0 ("cổng chặn bằng mã lỗi là wave W3b, chưa chốt") · `HANDOFF:7` | +| Verdict phải CÓ THỂ trả "không đạt" | Đã-có-trước: `DAT\|TRUOT\|SKIP-CO-KHAI` mọi vai kiểm | persona các vai | +| **Đèn phải tự khai nó KHÔNG đếm gì** | Một phần đã có (`THIEU-TAP` = "KHÔNG được đọc thành sạch"). 🔴 **REVIEW K5 đo ra giới-hạn-tự-khai (ghi tại đây làm nhà):** `tien-kiem-cua.ps1` đếm đúng **2 nguồn, CẢ HAI do máy tự ghi** (WAL 10 dòng đầu — hook chạm mỗi lượt · counter — tick script) ⇒ đèn có thể XANH hoàn toàn bằng tự-động dù lớp nghi-thức đứng yên. **11 lớp đèn KHÔNG đếm:** `_mind` · `_context` · marker `_tiep/_pause/_snapshot` · adap-reports · session-log · ACTIVE-MARKS · sổ yêu-cầu · error-ledger · HANDOFF+STATUS · `agent-memory/*/MEMORY.md` (đúng lớp bài-4 nói tới) · run-trace. Đọc `ok` của đèn ⇒ chỉ nghĩa "WAL+counter có nhịp", KHÔNG nghĩa "nghi-thức đã ghi" | `adap-apply.md` BƯỚC 0 · REVIEW K5 @S185 | +| **Bài 1 — sàn-vs-trần bất khả thi** (phép thử 30s) | 🔴 **ĐO DƯƠNG TÍNH THẬT:** `ring2-audit/MEMORY.md` phần-không-di-dời (header+baseline+Runs, dòng 1-67) = **24.793 B = 96,8% cap 25.600**; 4 entry hiện có (5.988 B) ≤ `keep_floor`=5 ⇒ A5 cấm drain TẤT CẢ ⇒ tổng bắt buộc giữ **30.781 B > cap** — không N nào cứu **dưới ràng buộc A5** (REVIEW-FIX-1: đây là bất-khả-thi do LUẬT A5, không do số học — nếu A5 cho drain hết thì 24.793 < 25.600 vẫn lọt, dư đúng 807 B), strike 1/2 @S179 là gate từ chối ĐÚNG, không phải gate hỏng. Lối ra theo thư = **NÉN phần-không-di-dời** (drain hết entry chỉ thu 19%; không nâng trần) → xếp việc nén vào bookend @close cùng nợ harvest | số đo tươi @S185 (`head -67 \| wc -c` = 24793 · `stat` = 30781) · `memory-budget.json → archive_gate` A5/A6 | +| **Bài 2 — công cụ nói dối về đầu vào** (phép thử #2) | **ĐO ÂM TÍNH (sạch):** `measure-agent-memory.ps1` — 3/3 số khớp đĩa byte-exact (ring2 30.781 · reviewer 21.063 · tooling 29.962) + trường trạng-thái `l1_over_30kb` nói thật cả 3 (ring2 `True` vì 30.781>30.720; 2 con `False` đúng). Kèm bài phụ ở mục 7 | output JSON @S185 vs `stat` đĩa | +| **Bài 3 — cửa sổ tự chọn chế mốc khởi phát giả** | Nhận **bộ phân loại** "năng lực đang chạy có DỪNG không (⇒vá) / chưa từng dựng (⇒nâng cấp, xếp tủ)" + "quyết bằng lịch sử, không bằng ngày phát hiện" — ghi vào tệp này làm nhà; không có ca đang mở để áp ngay | tệp này (mục 4) | +| **Bài 4 — đo TRƯỚC khi thay đổi ⇒ số sai lúc viết** (phép thử #3) | 🔴 **ĐO DƯƠNG TÍNH CẤU TRÚC + ĐÃ VÁ:** `session-end.md` khối (c) ĐO chạy TRƯỚC (d)/(f) harvest-APPEND ⇒ số mang sổ = chụp-trước-harvest. Ca sống: HANDOFF @S179 chép `ring2-audit 26.440 B`, tươi @S185 = 30.781 B — 5 phiên đọc số chết. **Vá land cùng lượt: mục (f-bis) RE-MEASURE sau-harvest** (read-only, sau verdict + sau append — đúng ranh thư "đổi thứ-tự phép ĐO = sửa lỗi", không đụng thao-tác dữ liệu, không vi phạm Mirror C1; nhãn đổi `f-ter`→`f-bis` theo REVIEW-FIX-2) | `session-end.md §L.b(f-bis)` (mới) | +| **Bài 5 — kiểm bản đóng băng trước khi vá dòng** | Đã-là-nếp (block `_mind`/entry `_context` bất biến, đính chính ở block MỚI). Ca sống ngay cửa này: `ctx-verifier` cờ #11 — `_mind:108` chở phép đo hỏng (`find` trên path không tồn tại) nhưng block bất biến ⇒ KHÔNG sửa tại chỗ, đính chính hẹn ở MIND-3 | `_mind-s-13.md` luật "Block cũ BẤT BIẾN" · return ctx-verifier @S185 | +| **Bài 6 — hai đòn rẻ của vai kiểm** | Đã-có-trước (ring-family: tự tái-dựng ≥1 số + thách-CLEAN). Ca sống cùng cửa: exit-255 tự-bẻ (mục 7) | persona ring1/ring2/ring4 | + +## 5. Tailored gì · skip gì · vì sao + +- **Tailored:** KHÔNG thêm vai mới, KHÔNG thêm nhãn vào `lead_self_audit.flag_classes` — enum đã **niêm phong P3=B** (`_sealed_P3B_S181`, máy từ chối exit 2); 4 nhãn nghi-thức sống ở nhà riêng `ritual-labels.md`, nhất quán với report 08-07. Vai kiểm vòng-6 = quyết định **slot (41) của chủ dự án**, giữ treo. +- **Tailored:** "máy điểm danh chặn bằng mã lỗi" nhận về dạng **2 nấc tách thời điểm** — máy đếm (đã chạy mỗi cửa) ⟂ răng chặn (W3b soak, cắm khi đủ). Khai thẳng thay vì claim đủ. +- **Skip:** narrative "3 con kiểm bẻ 3 kết luận" + số liệu hub = minh hoạ, không phải floor — không chép số (đúng lời thư "đừng chép số của hub"). + +## 6. 🔴 Lời nhờ "vết trên đĩa" — ĐÃ LÀM + +Hub xin vết trên đĩa thay vì câu "đã nhận". SE ghi **3 chỗ tồn tại được**: +1. `session-end.md §L.b(f-bis)` — luật RE-MEASURE sau-harvest (bài 4, có răng ngay closeout kế) +2. Tệp này (kết quả 3 phép thử với số đo thật, tái-chạy được) +3. `_tiep-3.md` dòng verdict + WAL mục adap lật `[x]` @S185 + +## 7. Phản biện gửi ngược hub + +**(a) Phép thử #2 của thư cần thêm 1 control: kiểm CẢ CÁCH CẦM THƯỚC của người đo.** Khi SE chạy phép "công cụ có nói dối đầu vào", lần đo ĐẦU trả **exit 255** — trông y hệt máy hỏng. Truy ra: wrapper của NGƯỜI ĐO (`… | Select-Object -First 30` trong PowerShell 5.1) chặt ống stdout giữa chừng ⇒ false-fail; chạy trực tiếp = exit 0, JSON đủ 28 agent. ⇒ Đề xuất: bước "chạy công cụ, đọc trường trạng thái" nên kèm control **chạy-trực-tiếp-không-qua-filter** trước khi kết luận máy nói dối — không thì phép thử sinh ra để bắt máy-nói-dối lại tự chế ra một ca máy-nói-dối giả. + +**(b) Biến thể sàn-vs-trần đáng ghi cạnh bài 1: khi phần-không-di-dời là THỦ PHẠM CHÍNH, N trở thành biến trang trí.** Ở SE, tệp vướng trần có phần-không-di-dời = **96,8% cap** — drain toàn bộ entry chỉ thu về 19% dung lượng, headroom còn 807 B (~1 entry là vượt lại). Phép thử 30s của thư phát hiện đúng bất-khả-thi, nhưng khuyến nghị "hạ N" trong 3 lối ra là vô nghĩa ở ca này. Đề xuất thêm 1 dòng: *tính tỷ-trọng phần-không-di-dời/cap trước khi chọn lối ra — trên ~80% thì chỉ còn đúng một lối: nén phần cứng.* diff --git a/docs/governance/so-yeu-cau-chu-du-an.md b/docs/governance/so-yeu-cau-chu-du-an.md index cd55ae9..2bf7542 100644 --- a/docs/governance/so-yeu-cau-chu-du-an.md +++ b/docs/governance/so-yeu-cau-chu-du-an.md @@ -47,6 +47,7 @@ Dữ-liệu cũ (WAL · HANDOFF · auto-memory · migration-todos) **KHÔNG** đ | `YC-014` | "C — Mờ ô chưa nghe (Recommended)" *(AskUser D3 @S182 — sau khi invest phát hiện 6/9 checkbox KHKK-runtime bỏ qua)* | 2026-08-08 · S182 | đóng | 1 | `spec-khkk-awf-mirror-ncc-DRAFT.md` MỤC 3 D3 | Dialog KHKK giữ layout y khuôn; ô máy-chưa-nghe **mờ + tooltip "chưa áp dụng cho KHKK"** (tiền lệ ô Duyệt-thẳng-Cấp-cuối @K3). KHÔNG port semantics đợt này (W3 hủy); port sau thì gỡ mờ dần | | | `YC-015` | "làm nốt cho ra giao diện luôn nhé" *(qua `/tiep` @S183)* | 2026-08-08 · S183 | đóng | — | WAL chain `[x]` cicd-4-chân | Verify deploy `706134da` cho giao diện 8 panel SỐNG trên prod — 4/4 chân PASS (bundle ×2 rotate + marker + DLL 3-hit + 8-row IsActive=1 + pin-lệch 0) | **`YC-013`** | | `YC-016` | "1 -> (c) THEO TAY CẦM PHIẾU -> OK nhé" | 2026-08-08 · S183 | **mở** | 1 | WAL chain (TASK → WAL) | **Phán quyết slot (67)** treo từ S172: upload file-khi-duyệt KHKK theo TAY CẦM PHIẾU — phiếu Nháp/Trả-lại (tay người soạn) ⇒ NGƯỜI SOẠN up được; phiếu Chờ-duyệt ⇒ CHỈ NGƯỜI DUYỆT (thuộc workflow phiếu); guard ở API-layer (#82 2-tầng), kèm test. Slot (67) ĐÓNG | | +| `YC-017` | "AI_INFRA và /adap-apply — Cho /fable-real invest và review checklist cẩn thận sau đó cho Opus 5 MAX xử lý" *(args lệnh `/check-email` @S185)* | 2026-08-09 · S185 | **mở** | 1 | WAL chain (TASK → WAL) | Kéo thư AI_INFRA CẢ 2 kênh (`outbox/se` qua check-email + `outbox/all` qua adap-apply), rồi pipeline khuôn YC-013: `/fable-real investigator-codebase` soi trạng-thái thư/adopt + dựng checklist → `/fable-real reviewer` review checklist cẩn thận → hmw fan-out **Opus 5 MAX** execute. *(Thư 08-08 đã áp trọn @S185 TRƯỚC lệnh này — pipeline chạy trên phần việc CÒN LẠI mà invest tìm ra.)* | | > 🔴 **MỘT yêu-cầu, nhắc 4 lần.** Đây là dữ-liệu **TC-01** sinh ra để bắt, và nó tố-giác chính lead: hiểu sai ở `YC-002` nên anh phải nói lại 3 lần. **Ghi lại chứ không làm đẹp.** > diff --git a/scripts/governance-detectors.ps1 b/scripts/governance-detectors.ps1 index 7ca03e5..a09168a 100644 --- a/scripts/governance-detectors.ps1 +++ b/scripts/governance-detectors.ps1 @@ -891,6 +891,13 @@ else { # and survives a future marker-emoji change; \xNN is interpreted by .NET at match time. $marks = [regex]::Matches($raw, '(?m)^\*\*(?:[^\x00-\x7F]+\s*)?NEXT\s+(?:anh|em)\b') $segs = @() + # S185 fix (WAL "vung-cam :892" / HANDOFF:58): everything BEFORE marks[0] was never + # scanned - yet the top-of-file blocks (RE-STAMP carry list, top Carry blocks) hold + # most LIVE [carry:] slugs, so the carry-age net was silent exactly where the debt + # lives (12+ slugs swallowed) while printing [ok]. Prepend the pre-marker region as + # segment 0; with 0 markers the whole file becomes the single segment (was: empty). + if ($marks.Count -eq 0) { if ($raw.Length -gt 0) { $segs += $raw } } + elseif ($marks[0].Index -gt 0) { $segs += $raw.Substring(0, $marks[0].Index) } for ($i = 0; $i -lt $marks.Count; $i++) { $start = $marks[$i].Index $end = if ($i + 1 -lt $marks.Count) { $marks[$i + 1].Index } else { $raw.Length } @@ -906,7 +913,7 @@ else { foreach ($cm in [regex]::Matches($s, $carryRx)) { $ks += $cm.Groups[1].Value } if ($ks.Count -gt 0) { $carryLines += , (@($ks | Select-Object -Unique)) } } - Write-Host (" HANDOFF logic-segments (NEXT anh/em) = {0} ; of those, carry-lines = {1}" -f ` + Write-Host (" HANDOFF logic-segments (pre-marker + NEXT anh/em) = {0} ; of those, carry-lines = {1}" -f ` $segs.Count, $carryLines.Count) if ($carryLines.Count -eq 0) {