- 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>
20 KiB
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 (specspec-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 loglấ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 V1–V5, đủ 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 F1–F4: 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:
[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):
runs/<id>/run.md— thêm 1 mục## Label laneliệ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ớ..claude/commands/hmw.md(hoặc chỗ mô-tảargs.runcủa RUN-TRACE) — 1 dòng: "scaffold run-folder ⇒ ghi## Label lanevớ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ầngoi-chot:38.- Nếu muốn có máy — detector INFORM-only: với mỗi
runs/<id>/run.mdmớ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ả). - 🔴 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ãnNEGATIVE-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):
- 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.mdkhô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đượcCLAUDE.mdtrỏ đí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 (F1–F4) · 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 G1–G15 (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.