Files
solution-erp/.claude/workflows/runs/2026-07-25-S149-adap-backlog/sub-apply-L3.md
pqhuy1987 398d343403
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m48s
[CLAUDE] Docs: S149-S150 closeout — bookend lượt đầu end-to-end (hình B) + 2 arc đóng + tally #53 chốt 45
- Arc-1 hội-tụ-bookend (rename 5 vai + 4 máy PS1 + C9-C12) + arc-2 adap-backlog 23/23 + probe Opus-5 khép (S149)
- Bookend @close S150: wave 6 vai (4 đo + 2 KIỂM) → 20 FLAG disposition từng-dòng; ring1 31/34-ĐẠT, ring2 10/10 + M-1 view-stale-role-desc
- Khoá _frozen_until_owner CẮM trước h24-signal-write (frozen-held in thật); 9 class FIRE; JUMP dải {5,4,4,3}+asym{1,4} chờ anh #21
- STATUS bump CURRENT S149-S150 + 2 khối Recently Done; HANDOFF segment mới + re-stamp đủ-slug + (17)(18)(19) lật + (14) viết lại + 6 slot #21-#26
- K2 posture-A @engine PHẦN K + K5 luật TÁCH vòng-đo-mới @session-end (O-2/O-3 OWNER-DELEGATED execute)
- sleep-doc derive-monitor-set (bỏ hardcode 4-tên); spawn-model-audit desc/comment fix; h24-signal-write param-default fix (first-live bug)
- M9 on-behalf ×3 (tooling + inv-cb F3 + reviewer F4); ring1/ring4 nhà seed; ring2 3 cite-dead vá
- Sổ garble #53 derive-from-body chốt 45 + sub-class ngược-#53/skeleton-ruột-rỗng (ghi-đĩa CẦN-KHÔNG-ĐỦ)
- Session-log S149-S150 (Sàn-5 đăng-ký 6 run=) + closeout-synthesis dạng-1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 12:17:05 +07:00

153 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# sub-apply-L3 — wave Opus-5-MAX apply: 4 adap-report nhóm-B + C-c + C-e
> Lane: L3 · Agent: implementer (Opus 5, effort MAX) · Ngày: 2026-07-25 · Run: `2026-07-25-S149-adap-backlog`
> Đề-bài (spec `spec-adap-backlog-25-07-2026.md:10`): 4 report-B (spawn-label · depth-axis · goi-chot · dong-du-vong) — **bảng per-khoản theo C14, CẤM số-tổng**; evidence commit/run THẬT (tự `git log` lấy sha, CẤM bịa); phần dở = `verified-pending`/DEFER 🔒. + **C-c** label-falsifier + **C-e** masthead codify (PROPOSE-only, KHÔNG sửa canonical).
> **Khung rỗng ghi đĩa TRƯỚC khi làm** (chống #53 return-garble: ghi-đĩa-TRONG-lúc-làm).
## ⓪ Ghi-chú tên file (khai lệch, không tự ý im)
Prompt lane có **2 tên khác nhau** cho cùng một sub-MD: chỉ-thị đích-danh của lead ghi `sub-apply-L3.md`; khối boilerplate RUN-TRACE ghi `sub-task-2.md`. Lane chọn **`sub-apply-L3.md`** (chỉ-thị đích-danh + đúng khuôn đặt tên `sub-apply-L*` mà L1/L4 đang dùng — `git status` cho thấy `sub-apply-L1.md`, `sub-apply-L4.md` cùng có mặt). Cả 2 đều nằm trong run-folder ⇒ **không vi phạm isolation**. Trả `subMdPath` = tên đã chọn.
## ① Ground-truth đo hôm nay (2026-07-25, trước khi viết report)
| # | Phép đo | Lệnh / công cụ | Kết quả | Ý nghĩa |
|---|---|---|---|---|
| G1 | Khuôn label đã codify chưa | đọc `.claude/commands/fable-clone.md:62-71` | **CÓ** — tiêu-đề `🔴 KHUÔN LABEL 4 THÀNH-PHẦN (C3 — spawn-label:22-27, BINDING)`; khuôn `{nhóm\|Vòng-N\|Core\|Gate\|WF} {vai} {pha/wave} s{N}` `:67` | khoản ①③ spawn-label có vật-chứng |
| G2 | Label trong run 07-25 | `grep -ic "label" runs/2026-07-25-S149-adap-backlog/run.md` | **0** | 🔴 acceptance C3 "neo artifact" (`spec-…-v2.md:110`) **TRƯỢT** trên chính run này |
| G3 | Trần WIDTH | `memory-budget.json:9-13` + `hmw.js:148` | `cap: 20` · `mechanism: loud-skip` · `ratified: 2026-07-24``const WIDTH_CAP = 20` | mirror khớp, 0 drift |
| G4 | Cơ-chế LOUD-skip | `hmw.js:149-156` | in `🔴 VƯỢT TRẦN WIDTH` `:152` + `🔴 LANE BỊ BỎ` `:154` + `slice(0, WIDTH_CAP)` `:156`, **0 throw** | khớp `depth-axis:43` "không văng lỗi" |
| G5 | Ratify-attribution | `memory-budget.json:14` `_ratified_by` | **"OWNER-DELEGATED → LEAD-DECIDED @S149. KHONG PHAI 'owner chot'"** | 🔴 cấm nâng thành owner-chốt |
| G6 | K2 vế (a) | `grep -rn "BLOCKED-by-O-2" **/*.md` | **14 hit**, 0 hit trong spec 07-25; 14/14 nằm trong run-folder LỊCH SỬ S144/S149 | vế (a) **ĐẠT** (spec-mới sạch) |
| G7 | K2 vế (b) | `grep -ic "trục sâu" docs/governance/harness-11-engine.md` | **0 hit** | 🔴 vế (b) **TRƯỢT** — posture-A chưa codify ở engine-doc |
| G8 | Bảng gate 5 vòng | đọc `.claude/commands/session-end.md:175-181` | 5 dòng V1V5, đủ cột con-KIỂM + cột bằng-chứng-phải-dán | khoản ① dong-du-vong có vật-chứng |
| G9 | writeGuard | `grep -n writeGuard .claude/workflows/hmw.js` | `:225` (khai báo) · `:252` (truyền) · `:208` (lineage S72) | khoản ② có vật-chứng |
| G10 | Máy eval use-side | `ls -la scripts/applied-eval-nokey.ps1` | **tồn tại, 19.045 B** | khoản ④ máy THẬT, không phải dự-định |
| G11 | Đường `/pause` còn tiến-trình ngoài? | `grep -i "powershell\|nhip-no-probe" .claude/commands/pause.md` | **`:89` VẪN gọi** `powershell.exe … nhip-no-probe.ps1`, kèm khai *"probe KHÔNG chặn điểm dừng"* (fail-open) | 4.3 vi-phạm-theo-chữ còn sống |
| G12 | Chi-phí bước dừng mới | đọc `pause.md:44-46` | `machine-block` ~**140ms** · `secrets-sweep` ~**64ms** (3 lượt, tb); ròng ~64ms + 1 write | có SỐ, **không có NGƯỠNG** ⇒ chưa chấm được |
| G13 | masthead ở rule-file | ripgrep glob `{docs/**,.claude/commands/*.md,.claude/skills/**,CLAUDE.md}` | **0 match** | C-e: claim invest HOLD, và mở rộng hơn phạm vi invest tự khai |
| G14 | masthead toàn repo | `grep -rn` (nguồn 2, độc lập) | **22 hit** — toàn bộ ở run-note + inbox-copy + chính file này | 2 nguồn khớp: rule-file = 0 |
| G15 | Neo commit | `git log --oneline -2 -- <file>` + `git merge-base --is-ancestor` | `hmw.js`/`session-end.md`/`fable-clone.md`/`pause.md`**`72d2d1b wal: pause`** · `memory-budget.json``611b41f wal: flush` · `hoi-tu-synthesis.md``f33d729 wal: flush`. `72d2d1b` **KHÔNG** ancestor `origin/main` (=`2f39a7e`) | 🔴 **CẤM cite sha `wal:`** — neo bằng file:dòng |
**Kết luận G15 (quan trọng nhất về evidence):** spec bắt "evidence commit/run THẬT, tự `git log` lấy sha". Lane đã chạy `git log` — và kết quả là **không có sha nào hợp lệ để cite**: mọi thay-đổi S144/S149 còn nằm trong commit `wal:` sẽ bị squash ở closeout. Cite chúng = tái phạm đúng class **`bằng-chứng-tự-huỷ-sau-squash`** đã ghi ở `adap-reports/2026-07-18-Governance-model-tier-h23-precedence-tested-update.md:26`. ⇒ 4 report đều neo **file:dòng trên đĩa** + khai thẳng "commit-anchor pending closeout-squash". **Không bịa sha, cũng không im lặng bỏ trường evidence.**
## ② VIỆC A — 4 report nhóm-B (đã ghi, mỗi thư 1 file, format-LOCK 5 trường)
Đường dẫn: `docs/governance/adap-reports/<id>.md`.
### A1. `2026-07-18-Governance-spawn-label-panel-audit-khung`
Nấc **executed**, khoản-④ **verified-pending**. Bảng 4 khoản: ① executed (codify `fable-clone.md:62-64` + dogfood `C14:14`) · ② executed (đo lại ký tự: 25 / 24 / 34, 3/3 ≤40) · ③ executed-luật, **0 phép đo máy** · ④ 🔴 **verified-pending** (G2: run 07-25 có 0 label ⇒ trượt neo-artifact C3:110).
Caveat nặng nhất khai trong report: **lane không tự verify được label của chính nó** — label nằm ở phía gọi, không có trong prompt gửi xuống ⇒ người duy nhất verify được là lead lúc spawn, và hiện không có vết bắt buộc.
### A2. `2026-07-19-Agent-ensemble-depth-axis-deepen-on-contested`
Nấc **executed**. Bảng F1F4: **F1 KÉP** executed-WIDTH (G3/G4) + **N/A-by-posture** phần SÂU (posture-A, `gate-synthesis.md:3`) — 🔴 kèm **1 vế acceptance TRƯỢT**: K2(b) đòi ≥1 dòng posture ở `harness-11-engine.md`, đo được **0 hit** (G7) · **F2/F3 n-a by posture** (đổi lý do từ *"chưa có"**"cố ý không dựng"*) · **F4 executed** (LOUD-skip, 0 throw).
Caveat nặng nhất: **nhãn "O-2 RESOLVED" đã có, vật-chứng codify thì chưa** — posture-A chỉ sống trong run-folder, không có ở nhà canonical ⇒ đúng lớp *"vắng-mặt trông giống ổn"*. + giữ nguyên phân biệt **OWNER-DELEGATED ≠ owner-chốt** (G5).
### A3. `2026-07-19-Governance-goi-chot-owner-nam-khoan`
Nấc **executed** cho 4.1/4.2/4.4/4.5; **4.3 KÉP executed-luật + verified-pending-đo**. Bảng 5 khoản (không phải 4 — `C14:4`): 4.1 nhãn O-5 **đóng bằng #23** (`run.md:7`) · 4.2 ADOPT-có-phạm-vi + C15 xong, còn vế *lane workflow `tier:`-override* **chưa đo** · **4.3 🔒 ngưỡng-rẻ = owner-SỐ, lane KHÔNG đặt** (G11/G12) · 4.4 cổng-người ADOPT, **máy quét = dự-định** · 4.5 ĐÃ-CÓ (worker-tier-pin S124).
Caveat nặng nhất: 4.1 nấc `executed` **tựa trên file đã sửa, KHÔNG tựa trên runtime đã chứng** — bằng-chứng lớp thi hành là **lời khai của lead** (`run.md:7`), probe thật thuộc **L6**; L6 probe lệch thì dòng 4.1 phải hạ nấc.
### A4. `2026-07-19-Governance-harness-dong-du-vong-audit-va-eval-use-side`
Nấc **executed** ①②④(cơ-chế); **③-thực-thi + ④-vòng-chạy-thật = verified-pending**. Bảng 4 khoản: ① executed (O-3 tập-rỗng @S149 + bảng gate G8) · ② executed **kèm caveat có răng** (whitelist `tools:` KHÔNG chặn ghi runtime, backstop thật = git-diff commit-gate) · ③ KÉP luật-land / thực-thi-chờ · ④ máy wire @S149, máy THẬT 19.045 B (G10), **ghost-wire 18 ngày** trước đó.
Caveat nặng nhất: **chưa có lượt bookend THẬT nào chạy end-to-end** (`hoi-tu-synthesis.md:29`) ⇒ khung 5-vòng mới verify bằng fault-inject + smoke. + dải JUMP 🔒 FROZEN · M8 V5-counter DEFER (V5 **không có máy đếm**, số do người điền) · trio giữ CONSENT chờ #12.
## ③ VIỆC B — PROPOSE (KHÔNG sửa canonical; lead single-writer áp)
### C-c — label-falsifier: 3 task thử + negative-control
**Vì sao phải thay phép của hub:** falsifier gốc (`spawn-label:47`) là *"mở bảng Background-tasks → chọn 3 task → chỉ đọc label"*. Panel là bề-mặt của **owner**; sub-agent không thấy panel, và panel **ephemeral không grep được** (chính C3:110 đã nhận). ⇒ phép phải chuyển sang bề-mặt **grep được** = `runs/<id>/run.md`, giữ nguyên FUNCTION (đọc-label-là-đủ-hiểu).
**Phần TÍCH-CỰC — 3 task thật của SE, chỉ đọc label, không mở transcript:**
| # | Label (thật, có trong repo) | ai | gì | nhịp | phiên | Ký tự | Verdict |
|---|---|---|---|---|---|---|---|
| T1 | `Vòng-3 harness-eval w1 @start s144` (`fable-clone.md:70`, `runs/2026-07-22-S144-trio-first-run/run.md:13`) | `harness-eval` | đo memory (wave-1 của bộ-ba đo→đề-xuất→kiểm) | Vòng-3, `@start` = đầu phiên | s144 | **34** | ✅ 4/4 |
| T2 | `Gate reviewer anchor s144` (`fable-clone.md:70`, `C14:14`) | `reviewer` | cổng review nhánh *anchor* | `Gate` = cổng review trước phát | s144 | **25** | ✅ 4/4 |
| T3 | `Gate reviewer teeth s144` (`C14:14`) | `reviewer` | cổng review nhánh *teeth* | `Gate` | s144 | **24** | ✅ 4/4 |
**3/3 đọc được cả {ai · gì · nhịp · phiên}, 3/3 ≤ 40 ký tự.** Khoản ①② ĐẠT trên tập này.
**Phần ÂM (negative-control) — bắt buộc phải TRƯỢT, nếu "đạt" thì phép đo là rác:**
```text
[NEGATIVE-CONTROL SAMPLE — KHÔNG phải label đang dùng, KHÔNG copy đi nơi khác]
NC-1 "Vòng-3 harness-audit" → thiếu {pha, phiên} ⇒ đọc ra: ai ✔ nhịp ✔ | pha ✘ phiên ✘ ⇒ TRƯỢT ✅(đúng kỳ vọng)
NC-2 "audit tài liệu" → dạng tự-do (verbatim ví dụ xấu của hub, spawn-label:20)
⇒ đọc ra: 0/4 ⇒ TRƯỢT ✅(đúng kỳ vọng)
NC-3 "Gate reviewer anchor" → thiếu {phiên} ⇒ 3/4 ⇒ TRƯỢT ✅(đúng kỳ vọng)
```
**3/3 negative-control TRƯỢT đúng chiều** ⇒ phép đọc **phân biệt được** label đủ và label thiếu (không phải phép luôn-xanh).
**Phần ÂM THẬT (không phải mẫu dựng) — chạy trên chính run hôm nay:**
`grep -ic "label" runs/2026-07-25-S149-adap-backlog/run.md` = **0** ⇒ 6 lane của wave này **không có label nào neo vào artifact****khoản ④ (phủ MỌI loại spawn) TRƯỢT tại chỗ**, ngay trong phiên áp chính khuôn đó. Đây là bằng-chứng mạnh hơn mọi mẫu dựng.
**PROPOSE-diff (KHÔNG áp trong lane này):**
1. **`runs/<id>/run.md`** — thêm 1 mục `## Label lane` liệt kê label từng lane, ghi **lúc scaffold @P1** (không phải lúc đóng run). Lý do: đó là thời-điểm duy nhất lead còn cầm label trong tay; ghi sau = chép lại trí-nhớ.
2. **`.claude/commands/hmw.md`** (hoặc chỗ mô-tả `args.run` của RUN-TRACE) — 1 dòng: *"scaffold run-folder ⇒ ghi `## Label lane` với label đủ 4 thành-phần cho từng task; thiếu = run-folder chưa scaffold xong"*. Đây là chỗ **chặn từ lúc VIẾT**, đúng tinh thần `goi-chot:38`.
3. **Nếu muốn có máy** — detector INFORM-only: với mỗi `runs/<id>/run.md` mới, regex `^-?\s*\S+\s+\S+\s+\S+\s+s\d+` trên mục `## Label lane`; 0 dòng khớp ⇒ FLAG. 🔴 **Bắt buộc kèm fault-inject 2 chiều** (cây tạm `-RepoRoot`): run-folder có label đúng ⇒ **không được** FLAG; run-folder 0 label ⇒ **phải** FLAG. Không có vế âm thì detector này vô nghĩa (bài C6: neo literal *"máy sẽ"* xanh cả khi cắm câu giả).
4. 🔴 **Cảnh báo citation-trap (S-lesson `feedback_citation_trap_selfreference`):** chính file này chứa 3 mẫu NC là **label sai có chủ đích**. Detector nào quét "label xấu trong repo" sẽ bắt đúng file định nghĩa negative-control — và lây qua mọi doc trích lại. Discriminator phải là **enclosure use ⟂ mention** (chỉ quét trong mục `## Label lane`, bỏ qua fenced-block gắn nhãn `NEGATIVE-CONTROL SAMPLE`), **KHÔNG** vá bằng charset/regex-tinh-vi hơn.
**Không tự áp vì:** cả 3 đích đều là canonical (`run.md` của run đang chạy do lead sở hữu · `hmw.md` là command · detector là `scripts/governance-detectors.ps1` — spec `:13` giao **L6 là lane DUY NHẤT** đụng file đó).
### C-e — masthead codify 1 dòng
**Trạng-thái đo được (2 nguồn độc lập, khớp):** ripgrep glob rule-file = **0 match** (G13) · grep repo-wide = **22 hit**, toàn bộ ở run-note / inbox-copy / chính file này (G14). ⇒ luật masthead **có trong sổ ghi việc, KHÔNG có trong file luật**. Đây đúng bệnh mà chính khoản-2 của thư 3-khoan đặt tên: **implement-home ⟂ discoverability-home** (`sub-invest-8-thu-bind-3.md:17`). Lưu ý phạm-vi: invest S149 tự khai chỉ grep `.claude/commands/*.md` + `docs/rules.md` (`sub-invest-8-thu-bind-3.md:82`); lane này **mở rộng thêm** `docs/**`, `.claude/skills/**`, `CLAUDE.md` — vẫn 0.
**PROPOSE-diff — 1 dòng, đích CHÍNH: `docs/rules.md` §6.3 (chèn sau dòng 282):**
```diff
- Phase đổi → update `STATUS.md` + `HANDOFF.md` + `changelog/migration-todos.md`
+ - **Sửa body doc nào → đọc lại dòng-1 + masthead/tiêu-đề của CHÍNH doc đó** trước khi tuyên sweep xong (tiêu-đề là "view của doc về chính nó", không nằm trong danh mục của ai nên sống sót lâu nhất — `2026-07-20-…3-khoan:19-27`)
```
**Vì sao chọn §6.3 chứ không chỗ khác:**
- §6.3 (`docs/rules.md:276-282`) là danh sách **"sửa X → phải update Y"**, luôn-áp-dụng, không gắn với chu-kỳ. Luật masthead đúng dạng đó ⇒ vào **cùng hình-thức với các dòng anh em**, không phải mục lạ.
- §6.4 (`:284-296`) là **cadence audit định kỳ** (cuối session / cuối phase / đầu tháng). Nhét vào đó sẽ ngầm biến luật *"mỗi lượt sửa doc"* thành *"việc của đợt audit"***thu hẹp sai** phạm vi, đúng cái bẫy làm khoản này chết 5 ngày qua.
- `.claude/commands/session-end.md` **không** phải nhà đúng: sweep xảy ra bất cứ lúc nào ta sửa doc, không chỉ lúc đóng phiên; đặt ở đó lại tái tạo lỗ *implement-home mà không có discoverability-home*.
- `docs/rules.md` được `CLAUDE.md` trỏ đích danh (*"⭐ Coding conventions"*) ⇒ đạt vế **discoverability-home**.
**Tuỳ chọn thứ hai, TÁCH RIÊNG để anh/lead duyệt độc lập (KHÔNG bó vào cái trên):** thêm 1 dòng vào checklist §6.4 (`docs/rules.md:298-305` khối ```) — `6. Doc nào sửa body trong lượt này → dòng-1 + masthead khớp chưa?`. Giá trị: biến luật thành **mục phải tick** ở lượt audit. Nêu riêng vì gộp 2 diff thành "1 dòng" là tự nói dối về khối lượng.
**Acceptance sau khi lead áp:** `rg -i masthead docs/rules.md` ≥ **1 hit** (hiện 0). 🔸 Đây là acceptance **đếm-chữ**, yếu — nó chứng *dòng đã tồn tại*, **không** chứng *có ai làm theo*. Phép mạnh hơn (positive-control): lấy 1 doc vừa sửa body trong phiên, kiểm dòng-1 có nói điều cũ không. Lane này **không tự nâng** acceptance vì đó là quyết định của lead.
## ④ Honest-caveat + verified-pending / DEFER 🔒 (gom, không giấu trong report)
| Mục | Trạng-thái | Ghi chú |
|---|---|---|
| Neo commit 4 report | 🔴 **pending closeout-squash** | Mọi vật-chứng đang ở commit `wal:`, không phải ancestor `origin/main`. Hub clone repo về **chưa thấy** các dòng được cite. Cần re-anchor sang commit closeout S149 |
| Khoản ④ spawn-label (phủ mọi loại spawn) | **verified-pending** | G2 = 0 label trong run 07-25 |
| Posture-A codify ở engine-doc (K2 vế b) | 🔴 **TRƯỢT — còn 1 dòng phải land** | G7 = 0 hit. Trùng phạm vi C-f của **L4** ⇒ lead đối chứng 2 nguồn |
| 4.3 ngưỡng "rẻ" | 🔒 **owner-SỐ, DEFER — lane KHÔNG đặt** | Có 2 số đo (G12) nhưng không có ngưỡng ⇒ không chấm được. Từ chối suy ngưỡng từ chính số vừa đo |
| 4.2 lane workflow `tier:`-override qua resume | **chưa đo** | C15 chỉ kết luận cho Agent-tool |
| 4.4 máy quét lời-hứa-máy | **dự-định, chưa có** | Khai đúng dạng theo chính khoản 4 |
| Bookend lượt ĐẦU | **verified-pending — phiên sau** | `hoi-tu-synthesis.md:29` |
| M8 V5-counter | **DEFER** | `hoi-tu-synthesis.md:27`; V5 hiện không có máy đếm |
| Dải JUMP {4,3,3} + view-residual-asym | 🔒 **FROZEN chờ anh** | `hoi-tu-synthesis.md:26`; `_frozen_until_owner` chưa ghi vào file |
| Trio consent #12 | 🔒 **owner-held** | Khoảng cách với 2 sister là CÓ CHỦ ĐÍCH |
| sha 4 thư | **chưa tái-đo hôm nay** | Kế thừa frontmatter inbox theo brief; hub sửa file sau 07-24 thì lệch |
| Probe model #23 | **KHÔNG thuộc lane này** | L6 làm; A3 không chép claim lead làm evidence |
| Fault-inject cho `WIDTH_CAP=20` | **kế thừa, chưa tái-chứng hôm nay** | Luật SE đòi re-run khi số đổi; lane không chạy lại (ngoài phạm vi) |
## ⑤ Acceptance-checklist evidence
| Ràng (spec `:10`, `:16-19`) | Đo | Verdict |
|---|---|---|
| 4 file report nhóm-B, đúng id outbox | `docs/governance/adap-reports/` +4 file, tên khớp `broadcasts/inbox/ai_infra/<id>.md` 1:1 | **ĐẠT** |
| Format-LOCK 5 trường (`adap-report.md:14-19`) | mỗi file có `## 1. id-broadcast` → `## 5. honest-caveat` | **ĐẠT** |
| Bảng per-khoản theo C14, **CẤM số-tổng** | A1 4 dòng · A2 4 dòng (F1F4) · A3 **5** dòng (không ép về 4) · A4 4 dòng; **0 dòng "tổng"**, 0 câu dạng "x/y khoản đã xong" | **ĐẠT** |
| Evidence commit/run THẬT, CẤM bịa sha | Đã chạy `git log --oneline` + `merge-base --is-ancestor` (G15); phát hiện **không có sha hợp lệ** ⇒ neo file:dòng + khai lý do, **0 sha bịa** | **ĐẠT (theo cách khai thẳng)** |
| Nấc G-011 đúng, CẤM nấc ảo | 4/4 dừng ở `executed`, **0 file claim `verified`**; phần dở gắn `verified-pending`/`n-a`/🔒 | **ĐẠT** |
| honest-caveat bắt buộc | 4/4 có §5 với ≥4 gạch đầu dòng, mỗi file ≥1 mục 🔴 | **ĐẠT** |
| C-c falsifier | 3/3 task thật đọc được 4/4 thành-phần · **3/3 negative-control TRƯỢT đúng chiều** · 1 phép âm THẬT trên run 07-25 = 0 label | **ĐẠT (và phát hiện khoản ④ hở)** |
| C-e propose | 1 diff chính (`docs/rules.md` §6.3) + lý do bác 3 đích khác + 1 tuỳ-chọn TÁCH RIÊNG + acceptance kèm tự-phê "yếu vì đếm-chữ" | **ĐẠT** |
| Ghi ngoài phạm vi cho phép? | Chỉ 4 file `adap-reports/` + `sub-apply-L3.md`. **0** file canonical bị sửa; **0** ghi `agent-memory/`; **0** đụng `governance-detectors.ps1` (của L6) | **ĐẠT** |
## Log tiến-trình
- [L1] khung rỗng ghi đĩa TRƯỚC khi đọc/viết.
- [L2-3] đọc spec + run.md + sub-invest §② (spec THẮNG sub-MD ⇒ tập 4 thư = spawn-label · depth-axis · goi-chot · dong-du-vong, KHÔNG phải tập ở `sub-invest:64`).
- [L4-5] format-LOCK `adap-report.md:14-19` + C14 17-khoản + 1 report mẫu (`h23-precedence`) → rút luật cite-sha.
- [L6-8] ground-truth G1G15 (2 lượt grep độc lập cho masthead; git log + ancestor-check cho neo commit).
- [L9-12] ghi 4 report.
- [L13] ghi C-c + C-e + acceptance vào file này.