wal: flush 20260717T2249

This commit is contained in:
pqhuy1987
2026-07-17 22:49:43 +07:00
parent b9c1b74d72
commit 06b91fb35a
3 changed files with 49 additions and 12 deletions

View File

@ -5,8 +5,8 @@ goal: Adap 3 bản mới AI_INFRA (dinh-chinh-kep `624c378d` update 2-delta · m
chain:
[x] 1. STAGE-1 check-email AI_INFRA: outbox/se 0-mới · outbox/all 3 file MỚI copy verbatim → inbox root; verify 2-tuyến WHOLE-OK ×3 + BODY-MATCH full-64 ×3 (verifier-regex thiếu ngoặc-kép tự sai trước — sửa verifier, KHÔNG phải tamper); 3 file cũ hơn có adap-report = đã-adopt không kéo lại (bẫy S119 naive-diff); _index +3 row pending
[x] 2. wf: fable-real invest run=2026-07-17-S138-adap-3-ban-17-07 wf-id=wf_56d248ea-f8e XONG CLEAN (model claude-fable-5, 35 tool-use, sub-MD 7-phần trên đĩa, 0 garble) — verdict: 3/3 FIT, cần-implement = 3 cụm (checklist-2-tầng 4 cửa · C6 cite-2-nấc · H24-4 pending-flip), Δ2 SE-originated; lead verify 4/4 claim khớp đĩa; harvest C4 APPEND diary inv-cb (hook-cap bắn ~24.1KB — carry mở, KHÔNG tự nén) — STAGE-1 commit `efc0828`
[!] 3. wf: fable-real review run=2026-07-17-S138-adap-3-ban-17-07 wf-id=wf_a0aa62f5-9e8 (reviewer tier:fable chấm spec v1 ĐÃ GHI — ĐANG CHẠY NỀN) → lead áp fix → spec v2
[ ] 4. hmw implement (Opus 4.8 MAX worker-tier-pin default) theo spec v2
[x] 3. wf: fable-real review wf-id=wf_a0aa62f5-9e8 **#53-GARBLE** (36 tool-use 208K tok, chết TRƯỚC verdict; ladder: disk✗ → journal✗ → SendMessage✗ "No transcript found" [PHÁT HIỆN: wf-agent không resume được] → transcript-forensics ✓ vớt coverage+5 re-count) → **em-main-solo gate GO_WITH_FIXES 3M/3m/1n** (tiền lệ S116; M-1 boundary `^**Prev S` [HANDOFF:7 marker-collision] · M-2 H24-4 scope HANDOFF-only · M-3 đoạn-logic split) → áp trọn → **spec v2** + review-synthesis.md ĐÃ GHI
[!] 4. wf: hmw implement run=2026-07-17-S138-adap-3-ban-17-07 wf-id=wf_84c69a1b-960 2-lane implementer-backend opus-MAX (L1 4-cửa ⟂ L2 detector) theo spec v2 — ĐANG CHẠY NỀN
[ ] 5. adap-reports ×3 + STAGE-2 move 3 file → inbox/ai_infra + _index processed + email hub báo-nấc + commit/push (squash §5.0/§5.2)
next: mục 2 — scaffold run-folder + taskList snapshot → fable-real invest (tier:'fable', args.run BẮT BUỘC, non-JSON-args = object thật).

View File

@ -0,0 +1,35 @@
# review-synthesis — gate spec v1 (em-main-solo sau #53-garble reviewer-Fable) — VERIFIED lane
## Sự cố + recovery ladder (ghi trung thực)
- **Invocation 2 `/fable-real reviewer`** (`wf_a0aa62f5-9e8`, agent `a4220ee1f342957bb`, model tier:fable): chạy 13.2 phút · 36 tool-use · 208.955 tok → **chết TRƯỚC StructuredOutput** ("completed without calling StructuredOutput after nudge") = **#53 garble, return rỗng `[]`**. Sub-file KHÔNG được ghi (dù prompt ép ghi-đĩa-trước-return — prompt-đúng KHÔNG chặn #53, tái xác nhận bài S123).
- Recovery ladder đã leo đủ: **(0)** disk-truth → `sub-reviewer-0.md` KHÔNG tồn tại · **(1)** journal.jsonl chỉ có `started` · **(2)** SendMessage-resume → FAIL "No transcript found" (**phát hiện mới: workflow-agent KHÔNG resume được qua SendMessage** — khác agent thường; agentId workflow nằm ngoài registry) · **(3)** transcript-forensics `agent-a4220ee1f342957bb.jsonl` (572KB) → vớt được **coverage đầy đủ + 5 re-count cuối** · **(4)** **em-main-solo gate** (tiền lệ S116 fable-real reviewer garble ×19 → em-main-solo GO-WITH-FIXES).
## Coverage vớt từ transcript (bằng chứng nó ĐÃ kiểm)
36 call: spec + sub-MD + 3 bản gốc (đọc TRỌN) + 5 script đo (measure/nhip-no/mfe ×2/crystallized ×2/archive-gate ×3 — narration "memory-archive-gate 3/3 anchors khớp") + governance-detectors ×5 lượt (inventory + fence-tracking + H25) + 4 file cửa + implementer-backend.md (boundary) + VALID_ROLES + 5 Bash re-count. Chết đúng lúc soạn verdict (text cuối: "Giờ governance-detectors.ps1 anchors").
**Re-count của nó (dùng làm evidence):** HANDOFF pending-token = 7 dòng · STATUS = 14 dòng (khớp invest §7.7) · danh sách vị trí "Prev S" trong HANDOFF: **:7 (GIỮA current-segment) · :9 · :13 · :17 · :21 · :25 · :58** · STATUS In-Progress headings = :578 (S117) + :585 (S113) — toàn lineage cũ · rules.md §6.6 @ :379 ✓ · G-011 ngoài adap-reports = chỉ usage trong session-logs/agent-memory (0 định-nghĩa canonical ✓).
## VERDICT (em-main-solo): **GO_WITH_FIXES** — 3 MAJOR / 3 minor / 1 nit, đã áp trọn vào spec v2
| # | Finding | Evidence | Fix (đã áp v2) |
|---|---|---|---|
| M-1 | H24-4 boundary "trước match `Prev S` đầu-tiên" bằng SUBSTRING sẽ **cắt current-segment sớm tại HANDOFF:7** ("chi tiết segment Prev S134 dưới" nằm giữa dòng NEXT-anh) → mất dòng :7-:8 khỏi vùng quét = âm-giả cấu trúc | re-count transcript: `Prev S` @ :7 giữa-dòng vs :9 `**Prev S134:**` đầu-dòng | boundary = dòng **BẮT ĐẦU** `**Prev S` (anchor `^`); fault-inject +ca: current-segment chứa "Prev S" giữa dòng → KHÔNG cắt |
| M-2 | H24-4 scope v1 gồm `STATUS §In Progress hiện-hành` — nhưng STATUS **không có** In-Progress hiện-hành (chỉ section cũ S117/S113 @ :578/:585) → quét = dương-giả nền ngày đầu | re-count transcript In-Progress headings | scope v1 = **HANDOFF current-segment ONLY** (2 ca thật đều ở HANDOFF); mở rộng STATUS = sau triage, khai thẳng |
| M-3 | "mã RC cạnh token, cùng đoạn-logic" KHÔNG định nghĩa đo được trên mega-line (61K ký tự/dòng) | O3 owner-decision: dòng-carry = đoạn LOGIC không dòng vật-lý | concretize: split dòng theo separator ` · ` / ` ; ` → token chờ + mã RC phải nằm **CÙNG MẢNH** split (deterministic, fault-inject được) |
| m-1 | C6 thiếu 2 khai limit: (a) multi-root resolve có thể mask dead-cite khi trùng basename ở root khác; (b) range-cite `file.md:12-15` regex chỉ bắt+kiểm line đầu | thiết kế v1 | +2 dòng khai limit header C6 + fault-inject +ca dòng-có-🧊 → IM (tổng 7 ca) |
| m-2 | L1 acceptance "dry-run liệt được 4-nhóm" mơ hồ (ai chạy, đo gì) + thiếu kiểm cấu-trúc | thiết kế v1 | concretize: (i) EM in-thử khối từ WAL/HANDOFF THẬT ngay post-land — mỗi nhóm ≥1 mục hoặc ghi "(trống)" tường-minh, chờ-anh có số; (ii) heading-count 4 file TRƯỚC=SAU (chỉ THÊM nội dung); (iii) BƯỚC 0 echo session-start còn nguyên |
| m-3 | EM tự edit `reviewer.md:46` (câu của chính vai reviewer) — cần no-self-exempt | thiết kế v1 | L3 diff-check BẮT BUỘC phủ cả edit này; edit anchor theo CONTENT (old_string) không theo line-number |
| n-1 | implementer-backend (scope tuyên bố .NET) làm governance .md/.ps1 | tiền lệ wave S135-S136 + 7760cdf | scope-grant tường-minh trong prompt lane + ghi nhận trong report |
**Trục owner-gate (axis 6):** giữ phương án spec — defaults + đánh-số trình anh trong report cuối (câu luật = FUNCTION-floor từ digest quyết-owner-hub, anh đã ra lệnh /adap-apply; placement = form tailor). L3 reviewer độc lập sau implement sẽ soi lại; anh veto được từng số.
**KHÔNG-BẮT-ĐƯỢC (khai):** chưa có diff code (L2 fault-inject + L3 re-run sẽ phủ) · volume cite 291 chưa re-đếm độc lập (lệnh invest có kèm; re-count pending-token 7/14 của reviewer-chết khớp invest → tin gián tiếp) · reviewer-Fable KHÔNG kịp phát biểu trục nào khác ngoài coverage trên — solo gate này là phán của LEAD, không phải của reviewer-Fable (không mạo danh).
## memoryDelta (on-behalf reviewer — lead ghi sau VERIFY-đĩa, nhãn on-behalf)
- task: review spec v1 wave 3-bản (bị #53 cắt trước verdict — em-main-solo gate thay, evidence transcript 36-call)
- verdict: GO_WITH_FIXES 3M/3m/1n (M-1 boundary line-start · M-2 scope HANDOFF-only · M-3 đoạn-logic split)
- learned: workflow-agent CHẾT không resume được SendMessage ("No transcript found") — recovery thang cho wf-lane = disk → journal → transcript-forensics → em-main-solo; transcript re-count của lane chết vẫn là EVIDENCE dùng được (2/3 MAJOR đến từ số nó đo trước khi chết)
- surprise: chính file HANDOFF hiện-hành chứa chuỗi "Prev S134" giữa dòng NEXT-anh (:7) — boundary marker và nội dung trùng mặt chữ ngay ngày đầu = bẫy tự-quy-chiếu lớp mới (marker-collision), cùng họ citation-trap S123

View File

@ -1,4 +1,6 @@
# SPEC — adap wave 3 bản AI_INFRA 17-07 (v1, lead-verified)
# SPEC — adap wave 3 bản AI_INFRA 17-07 (v2 — sau gate GO_WITH_FIXES)
> **v2 (22:55):** review-lane Fable `wf_a0aa62f5-9e8` #53-garble trước verdict → **em-main-solo gate** (tiền lệ S116; ladder + evidence → `review-synthesis.md`) = **GO_WITH_FIXES 3M/3m/1n ĐÃ ÁP TRỌN**: M-1 H24-4 boundary `^**Prev S` đầu-dòng (HANDOFF:7 chứa "Prev S134" giữa dòng — marker-collision) · M-2 H24-4 scope v1 = HANDOFF-only (STATUS In-Progress toàn section cũ S117/S113) · M-3 đoạn-logic = split ` · `/` ; ` cùng-mảnh · m-1 C6 +2 khai limit +ca 🧊 · m-2 L1 acceptance concretize 3 điểm · m-3 L3 phủ cả edit reviewer.md (no-self-exempt) · n-1 scope-grant tường-minh.
> Run `2026-07-17-S138-adap-3-ban-17-07` · Nguồn: invest `/fable-real` `wf_56d248ea-f8e` (model `claude-fable-5`, sub-MD `sub-investigator-codebase-0.md` 7-phần) → **lead verify 4/4 claim chịu-lực khớp đĩa** (`reviewer.md:46` 4-nhãn thiếu `grounded` verbatim · detector inventory `:14-26` 0 resolver path:line · outbox errata `:20` "13 dương-giả (12 .docx + 1 .xlsx)" SE-originated · sub-MD trọn trên đĩa) + 1 chỉnh: union bề-mặt-đo K1 đọc theo `memory-budget.json:hotload_sources` thật (sub ghi "CLAUDE.md(?)" — sai; đúng = STATUS/HANDOFF/ACTIVE-MARKS/migration-todos/gotchas/agents-README).
> Pipeline anh chỉ định: invest fable → spec → review fable → hmw Opus 4.8 MAX. Add-only §F4.1 · 0 số nhịp/cap mới (quyền anh) · 2 detector mới INFORM-only exit-0.
@ -26,17 +28,17 @@ Adopt wave 3 bản: **(A)** re-verify 2 delta bản đính-chính-kép `624c378d
- 2 nấc: file KHÔNG tồn-tại (resolve repo-rel + root quen `.claude/`, `docs/`) → FLAG LOW `cite-dead-file`; tồn-tại mà line > EOF (`ReadAllLines.Length`) → FLAG LOW `cite-line-past-eof`. *(LOW không MED — suite convention: net mới chưa-triage đọc bằng phán-đoán, tránh MED-noise ngày đầu; fold TOTAL + nâng sev = quyết sau triage, owner-gated.)*
- 3 loại-trừ: (a) code-fence + inline-backtick qua **`Test-Quoted`** (matcher prose ⇒ BẮT BUỘC — luật S123); (b) lineage: dir-exclude adap-reports + dòng mang marker đóng-băng 🧊 (khai thẳng: lineage ngoài 2 proxy này chấp-nhận dương-giả đầu, tune sau first-run); (c) self-def: đăng-ký `Test-Excluded` (C4) cho chính detector + spec/sub-MD run này.
- INFORM-only exit-0 · first-run BÁO count riêng, **KHÔNG fold TOTAL baseline 45** (chống Goodhart flag-giảm).
- Fault-inject cây tạm `-RepoRoot` 6 ca: cite-gãy-file → FLAG · cite đúng → IM · cite trong fence → IM · line>EOF file thật → FLAG · cite trong backtick → IM · **anti-Goodhart: 2 cite cùng dòng (1 đúng 1 gãy) → FLAG đúng 1**.
- Header khai limit: KHÔNG bắt trôi-mềm trong-EOF (class S108 ±1-2). Script ASCII-only + build token bằng code-point (gotcha #30).
- Fault-inject cây tạm `-RepoRoot` **7 ca** (m-1 +1): cite-gãy-file → FLAG · cite đúng → IM · cite trong fence → IM · line>EOF file thật → FLAG · cite trong backtick → IM · **anti-Goodhart: 2 cite cùng dòng (1 đúng 1 gãy) → FLAG đúng 1** · **(m-1 mới) cite trên dòng mang marker 🧊 → IM**.
- Header khai limit (m-1 mở rộng): (a) KHÔNG bắt trôi-mềm trong-EOF (class S108 ±1-2); (b) multi-root resolve có thể **mask dead-cite** khi file trùng basename tồn tại ở root khác; (c) range-cite `file.md:12-15` chỉ bắt + kiểm **line đầu** (12). Script ASCII-only + build token bằng code-point (gotcha #30).
**(C3) K3:** 0 code — adap-report bản-3 ghi bảng 3-hit/3-traced (`session-end.md:103`→H24-2 · `tiep.md:70`/`:73`→DUAL-ACCEPT block) + verdict candidate-list RỖNG, trình anh 1 dòng. *(Optional owner-gated: câu cửa-duyệt reviewer "diff thêm câu hứa-máy? → mã nào làm?" — chỉ liệt trong report, KHÔNG tự thêm.)*
**(C4) 1 câu relay-attribution** — nhà ĐỀ-XUẤT-MẶC-ĐỊNH = `docs/rules.md §6.6` *(em-main ghi; [owner-reviewable] — anh đổi nhà sang error-ledger được khi đọc report)*: "Thuật-lại quyết-định owner mang verb-durable (vĩnh-viễn/đóng-hẳn/bỏ-hẳn) = hợp-lệ KHI VÀ CHỈ KHI attribution tường-minh NGAY CẠNH verb (anh-chốt / anh-confirm S<nn> / mã RC-* / quote nguyên văn); verb-durable trần = tự-phán. Ranh máy-kiểm nếu mai port scanner lớp-từ: token-attribution cùng dòng + matcher PHẢI `Test-Quoted`." Kèm 1 dòng trỏ **G-011 ladder** (agreed/executed/verified-pending — "KHÔNG tự khai verified") vào `docs/governance/error-ledger.md` vì hiện 0 định-nghĩa canonical on-disk *(surprise-2 invest; [owner-reviewable])*.
**(C5) Detector H24-4 `pending-flip`** (`scripts/governance-detectors.ps1` ONLY):
- Nguồn A: `docs/HANDOFF.md` **segment HIỆN-HÀNH ONLY** (đầu file → trước match `Prev S` đầu-tiên; L15/L19 lineage = biết-trượt phải IM) + `docs/STATUS.md` §🔥 In Progress hiện-hành.
- Match: token chờ (`CHỜ GẬT|CHỜ ANH|chờ-ký` — build code-point #30) `RC-pqhuy1987-*` hoặc slug-mark cạnh (cùng đoạn-logic) × Nguồn B `ACTIVE-MARKS.md`: mã đó ĐÃ stamped (row Active/Active-High) hoặc `✅ RESOLVED` → FLAG LOW `pending-flip-stale`.
- Biết-trượt 5 ca (cây tạm): hàng giả CHỜ-GẬT RC-fake + mark RC-fake stamped → FLAG · mark 📦 SUPERSEDED → IM · token cạnh RC-khác chưa-stamp → IM · token trong backtick/fence (`Test-Quoted` — spec này TỰ-QUY-CHIẾU vì mô tả token chờ, khai trước) → IM · quét segment lineage → 0 flag.
**(C5) Detector H24-4 `pending-flip`** (`scripts/governance-detectors.ps1` ONLY)**v2 sau M-1/M-2/M-3**:
- Nguồn A: `docs/HANDOFF.md` **segment HIỆN-HÀNH ONLY** — boundary = dòng đầu-tiên **BẮT ĐẦU** bằng `**Prev S` (anchor `^`, match đầu-dòng; 🔴 M-1: CẤM substring — HANDOFF:7 current-segment chứa "segment Prev S134 dưới" GIỮA dòng, substring sẽ cắt sớm mất :7-:8 = marker-collision). **STATUS BỎ khỏi scope v1** (M-2: §In-Progress hiện chỉ còn section lineage S117/S113 @:578/:585 — quét = dương-giả nền; mở rộng = sau triage, khai thẳng trong header detector).
- Match (M-3 concretize): split dòng theo separator ` · ` hoặc ` ; ` (đoạn-LOGIC per O3) → token chờ (`CHỜ GẬT|CHỜ ANH|chờ-ký` — build code-point #30) `RC-pqhuy1987-*`/slug-mark phải nằm **CÙNG MẢNH split** × Nguồn B `ACTIVE-MARKS.md`: mã đó ĐÃ stamped (row Active/Active-High) hoặc `✅ RESOLVED` → FLAG LOW `pending-flip-stale`.
- Biết-trượt **6 ca** (cây tạm): hàng giả CHỜ-GẬT RC-fake cùng-mảnh + mark RC-fake stamped → FLAG · mark 📦 SUPERSEDED → IM · token cạnh RC-khác chưa-stamp → IM · token trong backtick/fence (`Test-Quoted` — spec này TỰ-QUY-CHIẾU vì mô tả token chờ, khai trước) → IM · quét segment lineage (sau boundary) → 0 flag · **(M-1 mới) current-segment chứa "Prev S…" GIỮA dòng → boundary KHÔNG cắt, dòng đó VẪN được quét**.
- Live đầu kỳ-vọng **0 flag** (đúng thiết-kế — giá-trị ở phiên tới). Khai thẳng: class "đề-xuất-landed-in-CODE không mark" (ca S137) NGOÀI tầm máy → GIỮ H24 view-audit mắt-người theo nhịp.
**(C6) K6 — 2 mảnh:** (i) `session-end.md` §L.b(c) Item 3-bis: +2 dòng khuôn `memory-triple: do-record=<governance-detectors TOTAL=n>` + `memory-triple: do-record=<nhip-no 3-vế>` (0 script mới — vào session-log đã committed). (ii) 1 câu luật re-base — nhà ĐỀ-XUẤT-MẶC-ĐỊNH = `docs/governance/error-ledger.md` Active-Guards (generalize E-010 đang sống ở đó; *[owner-reviewable]*): "Re-base baseline = chốt số SỐNG tại lúc re-base — mọi số vào sổ đọc lại từ nguồn sống tại thời-điểm ghi (CẤM chép từ ghi-chú/phiên trước, kể cả ghi-chú của chính mình); byte = `(Get-Item).Length` (E-010)."
@ -45,9 +47,9 @@ Adopt wave 3 bản: **(A)** re-verify 2 delta bản đính-chính-kép `624c378d
| # | Vai | Deliverable | Acceptance (đo được) |
|---|---|---|---|
| L1 | **implementer-backend** (lane-1 — CHỈ 4 file: `.claude/commands/{session-start,session-end,pause,tiep}.md`) | Khối MASTER-CHECKLIST 4 cửa (B) + 2 câu đóng-băng (C1) + 2 dòng do-record (C6i) + 1 dòng luật-số sàn-5 + câu cấm nguồn-đôi | grep anchor `MASTER-CHECKLIST` = 4/4 file · `find -iname "*checklist*.md"` delta = 0 file mới · dry-run: liệt được 4-nhóm từ WAL/HANDOFF THẬT (nhóm chờ-anh ≥1 mục có số) · diff 0 chạm con-số config/nhịp · 4 file giữ cấu-trúc section cũ (heading cũ 100% còn) |
| L2 | **implementer-backend** (lane-2 — CHỈ `scripts/governance-detectors.ps1`) | +C6 cite-2-nấc + H24-4 pending-flip + đăng-ký `Test-Excluded` + `Test-Quoted` CẢ 2 matcher + fault-inject harness cây tạm | fault-inject: C6 6/6 + H24-4 5/5 đúng cả 2 chiều (FLAG đúng + IM đúng) · live-run: H24-4 = 0 flag / C6 báo count riêng KHÔNG fold TOTAL (45 giữ) · exit 0 · suite cũ 0 flag mới (`comm` before/after chỉ ra dòng detector mới) · ASCII-only (#30) |
| L3 | **reviewer** (workflow RIÊNG sau implement — Harness-9 2-workflow) | Falsify acceptance L1/L2 độc-lập + add-only-floor check + `Test-Quoted` coverage MỌI matcher prose trong diff (S123) + measured-label gate mọi con-số mới | re-run fault-inject byte-exact khớp · 0 floor hạ · verdict GO/GO-WITH-FIXES kèm file:line |
| L1 | **implementer-backend** (lane-1 — CHỈ 4 file: `.claude/commands/{session-start,session-end,pause,tiep}.md`; scope-grant governance-file tường-minh per tiền-lệ S135-S136, n-1) | Khối MASTER-CHECKLIST 4 cửa (B) + 2 câu đóng-băng (C1) + 2 dòng do-record (C6i) + 1 dòng luật-số sàn-5 + câu cấm nguồn-đôi | grep anchor `MASTER-CHECKLIST` = 4/4 file · `find -iname "*checklist*.md"` delta = 0 file mới · **(m-2) heading-count TRƯỚC=SAU từng file (chỉ THÊM nội-dung dưới heading có sẵn — 0 heading mất/đổi tên)** · **(m-2) "BƯỚC 0" echo session-start còn nguyên (grep intact)** · diff 0 chạm con-số config/nhịp · **(m-2) dry-run = EM in-thử khối từ WAL/HANDOFF THẬT ngay post-land: mỗi nhóm ≥1 mục hoặc ghi "(trống)" tường-minh, nhóm chờ-anh CÓ SỐ** |
| L2 | **implementer-backend** (lane-2 — CHỈ `scripts/governance-detectors.ps1`; scope-grant n-1) | +C6 cite-2-nấc + H24-4 pending-flip + đăng-ký `Test-Excluded` + `Test-Quoted` CẢ 2 matcher + fault-inject harness cây tạm | fault-inject: **C6 7/7 + H24-4 6/6** đúng cả 2 chiều (FLAG đúng + IM đúng) · live-run: H24-4 = 0 flag / C6 báo count riêng KHÔNG fold TOTAL (45 giữ) · exit 0 · suite cũ 0 flag mới (`comm` before/after chỉ ra dòng detector mới) · ASCII-only (#30) |
| L3 | **reviewer** (workflow RIÊNG sau implement — Harness-9 2-workflow) | Falsify acceptance L1/L2 độc-lập + add-only-floor check + `Test-Quoted` coverage MỌI matcher prose trong diff (S123) + measured-label gate mọi con-số mới + **(m-3) diff-check PHỦ CẢ edit `reviewer.md` của EM (no-self-exempt)** | re-run fault-inject byte-exact khớp · 0 floor hạ · verdict GO/GO-WITH-FIXES kèm file:line |
| EM | **em-main single-writer** | `reviewer.md:46` +grounded · C4 câu (rules §6.6) + G-011 line + C6ii câu (error-ledger) · adap-reports ×3 · STAGE-2 move + _index processed · email hub · STATUS/HANDOFF | grep `grounded` reviewer.md = 1 hit đúng `:46` · adap-reports 3 file đủ 5-trường REPORT-FORMAT · nấc G-011 đúng từng mục (agent-file = verified-pending-restart, KHÔNG tự khai verified) · selftest-stamp email MATCH |
**Owner-gated (trình anh trong report cuối, KHÔNG chờ giữa pipeline):** nhà 2 câu luật (mặc-định đã chọn ở trên — anh veto được) · optional câu cửa-duyệt hứa-máy · fold C6 vào TOTAL + nâng sev sau triage · wording luật nếu anh muốn chỉnh.