# sub-impl-M4-c11 — C11 detector (H24 FLAG-khuôn + diary-delta, INFORM-only)

> RUN-TRACE (Harness-10 FLAT). Implementer sub. Task: spec M4 + M9, checklist K4.
> Deliverable: chỉ edit `scripts/governance-detectors.ps1` (+ file này). Thêm detector C11 TRƯỚC block Summary, khuôn C9/C10.

## 0. Trạng thái (append-only)
- [x] Đọc spec M4/M9 + K4
- [x] Đọc C9/C10 + Summary + INFORM label (khuôn)
- [x] Recon: run-folders + mtime · INFORM-only roles từ agents · baseline TOTAL
- [x] Viết C11 (a FLAG-khuôn + b diary-delta) TRƯỚC Summary
- [x] Cập nhật nhãn INFORM-ONLY (+ C11 h24-flag-form)
- [x] Fault-inject K4 (a/b/c/d) — 4/4 PASS
- [x] Verify TOTAL giữ 46 + INFORM label có C11

## 1. Recon (append dần)

- **Baseline TOTAL = 46** (`powershell -File scripts/governance-detectors.ps1` → `TOTAL FLAGS: 46`, InformCount=0). K9/spec baseline khớp.
- **Khuôn C9/C10** (`governance-detectors.ps1:1518-1648`): mỗi net INFORM có `$cXFlags` + `$cXMeasured=$false`; dùng `Write-InformFlag` (→ `$script:InformCount`, KHÔNG `$FlagCount`); skip = `Write-Host DarkGray` giữ measured=false; cuối in `$cXNote = if(measured){''}else{' -- MEASURED NOTHING (skipped above); a 0 after a skip is not a green'}`. Chèn C11 giữa `:1648` (cuối C10) và `:1650` (Summary).
- **Nhãn INFORM-ONLY** `:1673` hiện liệt: `C6 + H24-4 + H24-5 + C9`. 🔴 **THIẾU C10** (C10 cũng INFORM-only nhưng vắng nhãn — bug tiền-tồn, đúng "bài học C9: quên update nhãn"). Tôi thêm `+ C11 h24-flag-form` (đúng task); C10-omission BÁO cho em-main (không tự sửa — ngoài scope directed).
- **INFORM-only roles (đọc sống `.claude/agents/*.md` frontmatter chứa 'INFORM-only', trừ README.md):** harness-audit, harness-eval, harness-refine, harvest-curator, lead-gap-auditor, lead-stale-auditor, ring1-audit, ring2-audit, ring4-audit, tooling-auditor. `name:` field = filename basename (khớp). reviewer/implementer/investigator KHÔNG chứa 'INFORM-only' → sạch tín hiệu.
- **agent-memory/ folders** tồn tại cho hầu hết role (ring4-audit chưa có — git log rỗng, chỉ ăn khi có sub-ring4 file).
- **mtime-gate = `2026-07-24`:** run-folder <ngày này (June + phần lớn July) → frozen, loại. 4 folder hôm nay (S148 19:05, S149-dong-du 19:13, S149-owner-gated 19:34, S149-hoi-tu 23:50) ≥ gate → scan.
- **Chứng gate an-toàn (find toàn lịch sử):** `*lead-stale*|*lead-gap*|*ring2-audit*` = **0 hit** mọi nơi → part (a) future-facing, hôm nay 0 candidate. S148 dùng `sub-h24-audit-S149.md` (combined, KHÔNG match 3 pattern) → scanned-but-inert. INFORM-role sub-file trong folder hôm nay = 0 (chỉ S144-bootstrap CŨ có sub-harvest-curator/sub-tooling-auditor, mtime 07-22 < gate). ⇒ real-repo C11 = **0 flag mới**, đúng "KHÔNG FLAG S148 về trước".

## 2. Thiết kế C11

- **Trigger part (a)** = `FLAG-\d+` (enum, case-sensitive) present AND no line `-match $flagTagRx`. 🔴 REFINE literal "chữ FLAG" → `FLAG-\d+`: tránh false-positive "0 FLAG"/"no FLAG" của ring2-audit (raise 0 vẫn chứa chữ FLAG). anti-Goodhart: green phải là green thật. `$flagTagRx = '## FLAG-\d+ '+$EM_DASH+' `?(?:view-|gap-)[a-z-]+`? '+$EM_DASH+' (?:LOW|MED|HIGH)'` (em-dash từ code-point `$EM_DASH` sẵn `:112`, gotcha #30). LIMIT khai: file-level (1 tag line silence cả file → partial-tag không bắt; đúng phạm-vi S148 total-omission).
- **Trigger part (b) M9** = folder có `sub-<role>-*.md` (role ∈ INFORM-only đọc sống) mà `git -C $RepoRoot log -1 --format=%cI -- .claude/agent-memory/<role>/` null/CŨ hơn sub-file mtime → GAP-3. git = local VCS (không model/API, spec M9 cho phép). Probe `git --version` trước; git vắng → skip-note (không đọc thành clean).
- **measured** = true iff ≥1 candidate file thật được đánh giá (part a name-match HOẶC part b INFORM-role sub). Hôm nay 0 candidate → note "MEASURED NOTHING" (trung thực: khuôn mới, chưa role nào chạy dưới nó).

## 2b. Implement

- **C11 block** chèn `governance-detectors.ps1:1650-1750` (giữa cuối C10 và Summary), khuôn C9/C10.
- **Nhãn INFORM-ONLY** `:1748` (mới) thêm `+ C11 h24-flag-form`.
- **ASCII-only (gotcha #30):** thay `🔴`→`***` trong comment C11 của tôi. non-ASCII bytes: 8→**4** (4 còn lại = `🔸` TIỀN-TỒN của C10 `:1590`, KHÔNG phải của tôi — báo em-main, không tự sửa). PARSE-OK. Change của tôi = ASCII-neutral (thêm 0 byte non-ASCII).
- **git = local VCS** (không model/API) — trong NO-API mandate; spec M9 chỉ đích danh. Probe `git --version` trước; git vắng → skip-note per file.

## 4. Fault-inject K4 (cây tạm `-RepoRoot`, scratchpad `c11-fi-tree`)

Cấu-trúc: `.claude/agents/{lead-stale-auditor(INFORM-only), reviewer(decoy non-INFORM)}` + 3 run-folder.

| Case | Fixture | Kỳ vọng | Kết quả |
|---|---|---|---|
| (a) | `2026-07-25-fa/sub-lead-stale-audit-A.md` chứa `## FLAG-1 view-stale-count` KHÔNG tag | part(a) FLAG | ✅ `...fa/...A.md:2` FLAG-khuon |
| (b) | append `## FLAG-1 {EM}\`view-stale-count\`{EM} MED` vào fa | im | ✅ RUN2 fa SILENT (C11: 2→1) |
| (c) | `2026-07-25-fc/sub-lead-stale-auditor-1.md` clean '0 FLAG' | part(b) diary-0-delta FLAG · part(a) IM (anti-FP) | ✅ `...fc/...1.md` GAP-3 FLAG; part(a) im trên clean file |
| gate | `2026-06-01-frozen/` untagged FLAG, mtime 06-01 | KHÔNG flag (frozen) | ✅ vắng mặt cả 2 RUN — gate có RĂNG |
| (d) | repo THẬT full | C11=0 + TOTAL 46 + label có C11 | ✅ `C11=0 MEASURED NOTHING` · `TOTAL FLAGS: 46` · label `+ C11 h24-flag-form` |

**Positive-control part(b):** `git log -1 --format=%cI -- .claude/agent-memory/lead-stale-auditor/` (repo thật) = `2026-07-24T23:19:34+07:00` → TryParse offset-aware OK ⇒ diary TƯƠI sẽ silence đúng (chứng 2 chiều: null→FLAG, fresh→im). Detector `exit=0`.

**4/4 PASS** (+ gate-teeth + anti-FP + decoy-scope + positive-control 2-chiều).

## 5. Verdict

**GO** — C11 (a FLAG-khuôn + b diary-delta M9, INFORM-only) land `governance-detectors.ps1` khuôn C9/C10; K4 4/4 PASS; TOTAL giữ 46; InformCount tách; ASCII-neutral. 1 phát-hiện phụ báo em-main: nhãn INFORM-ONLY THIẾU C10 (bug tiền-tồn, cùng lớp "quên update nhãn").
