# S149 — Owner-gated 3-khoản #17/#18/#19 (O-2 / O-3 / O-7) — sub-invest-owner-gated

> Run: `2026-07-24-S149-owner-gated-3-khoan` · agent: investigator-codebase (fable-real deep-pass)
> Trạng thái: SKELETON ghi TRƯỚC khi đọc (chống mất-trắng khi return hỏng — bài học run bước-1). Append dần bên dưới.

## ① Đề-bài (phát biểu chính xác + verbatim nguồn)

### ⚠️ PHÁT HIỆN NGUỒN-GỐC (đợt-1): goi-chot KHÔNG phải văn bản gốc của O-2
- Broadcast `2026-07-19-Governance-goi-chot-owner-nam-khoan.md` (sha `c580c566…`, đọc trọn 92 dòng) có **5 khoản = (1) default lead Opus MAX 2-cửa-Fable · (2) RETIRE resume-agent · (3) ràng-buộc NỀN cửa-dừng-phải-thông · (4) cửa-duyệt lời-hứa-máy · (5) pool ≠ pin**. KHÔNG khoản nào là "trục-SÂU + trần tổng-lượt". Đây là 5 khoản OWNER-HUB đã chốt, không phải 3 khoản treo của SE.
- Nguồn gốc THẬT của O-2/O-7 = broadcast **`2026-07-19-Agent-ensemble-depth-axis-deepen-on-contested.md`** (+ `depth-cost-update-so-do-thuc.md`) — spec v2 cite `depth-axis:40/:43` + `depth-cost:52/:53` (spec-adap-dot-11 v2:71-74). Đang đọc verbatim.
- Chú ý nhãn trùng trong spec v2: dòng 85 "**P4-6 (O-2)**" = khoản-2 của goi-chot (resume), KHÔNG phải owner-gated O-2 bảng dòng 93. Hai "O-2" khác nhau trong cùng spec.

### #17 = O-2 — posture trục-SÂU + trần tổng-lượt
- Spec v2:93 `| O-2 | Posture trục-sâu + **trần tổng-lượt** |` · v2:72 P2-1(a) verbatim: `**(a) trục SÂU** — 'assert tổng-lượt ≤ trần'; trần = **O-2 (owner)**` · C8a v2:116: `Clamp **trục SÂU** — 'assert tổng-lượt ≤ trần'. **BLOCKED-by-O-2**`.
- Nguồn gốc `depth-axis` (sha `f05eba5b…`, đọc trọn 60 dòng) — khoản-1 khung sàn `:40` VERBATIM: `**Trục sâu = owner-gated, posture tự-chọn**: mỗi dự-án chọn default (AI_INFRA = trần + dial-down + MAX; hoặc opt-in-off); **tắt-trục-sâu = escape về chiều-rộng LUÔN còn** (không khoá cứng); clamp trần cứng (vd ≤3) + assert tổng-lượt ≤ trần.`
- Phạm-vi áp `:20`: `Áp cho dự-án nào có **ensemble đa-agent / đa-lăng-kính** … Không có ensemble → FYI, chưa cần áp.` · `:47`: `Không có ensemble → khoản này chưa áp; có ensemble đơn-trục → 4 khoản trên là sàn đáng thêm trục sâu.` · `:55`: `Posture default … mỗi dự-án tự chọn — điểm sàn adopt = có trục sâu **bật-được** + có **escape width-only** … KHÔNG bắt buộc default nào.`
- "Lượt" đơn-vị hub = member-run của ensemble: `depth-cost:24` cấu-hình trần `5-góc + thử-phá + 3-đào-tầng-2 + thử-phá-2 = **10 lượt**` (KHÔNG phải turn nội-agent).
- Trạng-thái SE @S144: `C14-disposition-per-khoan.md:32` — `ADOPT phần WIDTH · BLOCKED phần SÂU … Trục SÂU ('assert tổng-lượt') = **BLOCKED-by-O-2** (chưa có trục sâu để assert)`.

### #18 = O-3 — gộp hay TÁCH vai-KIỂM cho các vòng còn thiếu
- Spec v2:94 `| O-3 | Gộp hay tách vai-KIỂM 3 vòng còn thiếu |`.
- Nguồn hub `harness-dong-du-vong:51` VERBATIM: `Số vai, tên vai, gộp hay tách audit (1 con kiểm nhiều vòng hay mỗi vòng 1 con), ngôn ngữ label — mỗi dự-án tự quyết theo roster mình. Dự-án đã adopt khung 5-vòng: bổ vai kiểm cho vòng còn thiếu.`
- Hub chỉ đòi vai-kiểm cho **3 vòng-đo thiếu: tooling/harvest · soi-lead · nén-ngủ** (`harness-dong-du-vong:24-29` — vòng-3 memory ĐÃ có; vòng-5 sàn-sự-thật KHÔNG cần: "floor chính-sách áp tại chỗ lúc viết artifact, không phải vòng-đo có con-đo để kiểm" :24).
- SE @S145 đã land TÁCH cho 3: `tooling-harvest-audit` / `h24-audit` / `sleep-audit` (theo đề-bài lead). Cần đo đĩa: 3 vai này tồn tại ở đâu, và "phần còn lại" là vòng NÀO còn thiếu vai-KIỂM (đối chiếu bảng 25 dòng sub-invest-5-se-do-B).

### #19 = O-7 — trần WIDTH `hmw.js:115` = 16 (soft, LOUD-skip)
- Spec v2:98 `| O-7 🆕 | Trần width + cơ chế ('hmw.js:115' hiện '16', soft) — số = owner-SỐ; throw-hay-LOUD-skip = owner-LUẬT |`.
- 🔴 CODE THẬT hiện tại (đọc 2026-07-24): `hmw.js:125` `const WIDTH_CAP = 16` + `:126-134` block LOUD-skip ĐÃ IMPLEMENT (log 4 dòng 🔴 + slice giữ 16 lane đầu + liệt kê lane bị bỏ + bắt em-main khai số bỏ @P4). Comment `:116` ghi `(S144, adap đợt-11 · owner chốt O-7 2026-07-22)`; `:120` `Owner chốt O-7 = **LOUD-skip**`; `:124` `🔸 Trần 16 = GIÁ TRỊ CŨ ĐÃ CÓ, không phải số mới AI đặt. Đổi số = quyền owner (O-7).`
- ⇒ Cơ-chế (LOUD-skip, không-throw) ĐÃ land theo vết "owner chốt 2026-07-22"; phần CÒN treo = **con số 16 chưa được owner ratify** (code tự khai "giá trị cũ đã có, không phải số owner đặt"). Cần xác minh vết chốt 22-07 nằm đâu (WAL/run-folder S144).

## ② Cách implement (PROPOSE — lead verify rồi mới ghi spec; sub KHÔNG ghi spec)

### #17 (O-2) — 3 posture, owner chọn 1 (có-dựng-hay-không = owner-LUẬT)

**Posture A — KHÔNG dựng trục-sâu trong máy; depth = owner-gated pipeline (KHUYẾN NGHỊ).** Căn cứ đo được:
1. `depth-axis:20/:47` — khoản chỉ áp cho hệ muốn máy TỰ đào tầng-2; SE fan-out là width-only 1-invocation (`hmw.js:192` `parallel()` duy nhất, không vòng lặp tầng).
2. SE ĐÃ CÓ depth thực-dụng ngoài máy: pipeline 3 bước sống ngay hôm nay (`run.md:6` — bước-1 fable-clone 8-lane → bước-2 deep-pass này → bước-3 hmw implement) + P1-6 "audit ở invocation SAU" (spec v2:64-68). Người điều tầng-2 = owner/em-main, không phải máy.
3. `depth-axis:40` chính nó đòi "Trục sâu = **owner-gated**" — SE thoả ở mức MẠNH NHẤT: trục sâu chỉ tồn tại dạng lệnh owner (`/fable-real` per-invocation, H21 không persist).
4. `depth-cost:44-46` đo n=1: mode "thật" THẮNG hiệu-quả/token ("cùng cỡ ~5 lỗi-nặng, giá 1/10") + "thật = mặc-định cho phán-quyết hệ-trọng" — SE đang dùng đúng mode thắng; ảo-trần 10-lượt ≈ 10-11× chi phí.
- **Việc làm (em-main, 0 code):** (i) spec đợt tới: O-2 disposition = `RESOLVED — posture width-only + owner-gated deep-pass` kèm 4 căn cứ; (ii) C8a: `BLOCKED-by-O-2` → `N/A-by-posture` (phân loại C13 = bác-bỏ-có-bằng-chứng); (iii) 1 dòng posture vào `docs/governance/harness-11-engine.md`; (iv) KHÔNG sửa `hmw.js`.
- "Trần tổng-lượt" trong posture A = WIDTH_CAP per-invocation (O-7) — không sinh số mới phải chốt. Optional teeth rẻ (owner-option, không bắt buộc): detector closeout đếm Σ `sub-*.md` per run-id in 1 dòng informational — nằm ở closeout nên không phạm ràng-buộc NỀN "điểm-dừng-phải-thông" (`goi-chot:44-46`).

**Posture B — dựng trục-sâu TỐI-THIỂU qua args-tally (nếu owner muốn trần cứng xuyên-invocation).**
- Hình dạng: em-main tally lane trong `run.md` (taskList snapshot @P1 đã có sẵn) → truyền `args.lanesSoFar` mỗi invocation → `hmw.js` assert `lanesSoFar + taskList.length ≤ TRẦN_TỔNG`, vượt ⇒ LOUD-skip phần vượt (cùng cơ-chế + cùng lý-do không-throw với C8b). TRẦN_TỔNG = **owner-SỐ** — dữ liệu nền cho owner: per-invocation max từng thấy = **14** (S126, `hmw.js:50-55` run `wf_f960dae2-fa0`); Σ-per-run-id max từng thấy = **16 file `sub-*.md`** (đếm đĩa run `2026-07-16-S127-adap-dot-16-07`: 5+5+1 w-lane + 5 reviewer/invest stage khác); run thường 5-8 lane.
- Chi phí/rủi ro khai thẳng: +1 arg mọi call; số do em-main TỰ FEED (Goodhart: feed 0 là lọt) ⇒ cần thêm detector closeout recount từ run-folder đối-chứng ⇒ tổng 2 máy mới cho 1 con số **chưa từng gây bệnh thật** (bệnh cháy-lượt đã thấy là **maxTurns per-lane** — `hmw.js:244-245` wf_491c05a8 3/5 lane chết — trục KHÁC, C2 đã khai "chưa đo được" spec v2:109).

**Posture C — port full deepen-on-contested engine:** BÁC — xem mục ĐÃ CÂN NHẮC.

### #18 (O-3) — đo đĩa: "các vòng còn thiếu" = TẬP RỖNG hiện-trạng; còn lại 2 câu ratify

- **Khung 5-vòng KÍN** — bảng gate `session-end.md:170-176`: V1→`tooling-harvest-audit` · V2 soi-lead (H24)→`h24-audit` (xác nhận trục tại `agents/h24-audit.md:4` "KIỂM vòng-ĐO soi-lead (H24)") · V3→`harness-audit` (có sẵn trước) · V4→`sleep-audit` · V5 = floor "— (floor tự-soi)". `VALID_ROLES` đủ 20 vai gồm cả 3 vai audit (`hmw.js:22-41`, cụ thể `:39-40` ghi "owner-decision [2] TÁCH mỗi-vòng-1-con" S145). Hub chỉ đòi 3 vòng đó (`harness-dong-du-vong:24-29`), V3 có sẵn, V5 miễn. ⇒ **KHÔNG cần build gì cho hiện-trạng — kết luận hợp lệ tiết kiệm việc.**
- **2 câu owner ratify (0 code):**
  (a) **V5 giữ floor-không-vai** — căn cứ verbatim hub `:24`: "vòng thứ-năm — sàn-sự-thật — không cần vai-audit riêng: nó là floor chính-sách áp tại chỗ lúc viết artifact". (Điểm yếu V5 bước-1 đo — sub-invest-5-se-do-B row 18 "máy đếm 1-nhãn-bị-chặn/phiên = THIẾU" — là chuyện COUNTER, không phải ROLE; đề nghị KHÔNG nhét vào O-3, để backlog riêng nếu anh muốn vá.)
  (b) **LUẬT cho vòng-đo MỚI về sau** (ca đầu sắp tới: eval-use C5 đang DEFER-cần-máy, `C14-disposition:26`):
  【1】 **mặc-định TÁCH** — vòng-đo mới land ⇒ vai-KIỂM riêng land CÙNG đợt (mirror S145; đóng O-3 vĩnh viễn, không tái-hỏi; nhất quán no-self-exempt) — owner giữ quyền override per-case.
  【2】 **per-case hỏi owner mỗi lần** — control tối đa; giá = chính pattern "câm N phiên" đang xử (3 khoản này im 5 nhãn phiên = bằng chứng chi phí sống).
  Khuyến nghị 【1】; chọn cái nào vẫn là owner-LUẬT.
- Việc làm khi ký: em-main ghi O-3 RESOLVED vào O-table spec + 1 dòng luật ở home vai-KIỂM (`agents/README` hoặc `harness-11-engine` §roster) trỏ precedent S145.

### #19 (O-7) — cơ-chế ĐÃ land + fault-inject; treo THẬT = ratify SỐ + đính-chính attribution

- Hiện trạng đĩa: `hmw.js:125` `WIDTH_CAP = 16` + `:126-134` LOUD-skip ĐÃ implement, **fault-inject 7/7 @S144** (`C14-disposition:32`). Line-drift: spec v2 nói `:115`, code nay `:125-126` (block chèn thêm đẩy dòng).
- 🔴 **Attribution lệch cần đính-chính:** comment `:116/:120` ghi "owner chốt O-7 2026-07-22" nhưng đối-chứng **0 vết** trên 5 bề-mặt owner + toàn bộ session-logs (đo S148 + tái xác nhận S149, `run.md:16`, h24-audit chấm FLAG này ĐẠT/HELD) + chính `run.md:14` ghi "chưa ai duyệt". Cơ-chế thực tế do spec-R2 + C14 3.4 ADOPT theo floor hub (`depth-axis:43`), KHÔNG phải owner ký. Comment đang tuyên một quyết-định owner không có vết = cùng họ lời-hứa-máy (`goi-chot:52` — tuyên phải có proof tại chỗ).
- **Dữ liệu cho owner-SỐ (CẤM tao đặt số — chỉ trình):**
  • Roster nay **20 vai** (`hmw.js:22-41` đếm = 20; `.claude/agents/` 21 file − README = 20) ⇒ **cap 16 < roster 20**: sweep toàn-roster kiểu S125/S126 (14/14 thời roster 14) nay sẽ bị LOUD-skip cắt 4 — phải chia 2 invocation.
  • Per-invocation max từng thấy = 14 (S126) · run thường 5-8 lane · Σ-per-run-id max ~16 (S127, đếm đĩa).
  • Lựa chọn: **giữ 16** (headroom trên max-observed 14; sweep chia 2 đợt — có thể xem là feature giảm tải) · **nâng ≥20** (sweep 1 phát; brittle — roster lớn thêm lại đụng trần) · **hạ <14** (rẻ hơn; cắt cả sweep-class đã từng chạy thật) · **cap động = `VALID_ROLES.length`** (tính được trong-file, tự lớn theo roster — NHƯNG số trôi theo edit roster = de-owner con số; trình kèm caveat đó).
- **Cơ-chế (owner-LUẬT) — khuyến nghị GIỮ LOUD-skip, 3 căn cứ:** `depth-axis:43` verbatim "không văng lỗi, không lặng-thầm bỏ" · per-lane throw bị nuốt thành null = STOP-SILENT tệ hơn (`hmw.js:121-123`, bằng-chứng first-person wf_491c05a8) · `/fable-real` = lệnh owner đích danh — cổng cứng máy chặn lệnh owner = đúng lớp bệnh `depth-cost:52` "máy đè lệnh owner".
- **Việc làm khi owner ký:**
  1) Số vào `memory-budget.json` key mới (vd `hmw_width: {cap, mechanism:"loud-skip", ratified:"<date>"}`) — precedent owner-số O-1/O-6 sống đúng file này (`:13-14` `min_pending_shards:15` · `bulk_note_shards:30`).
  2) `hmw.js` WIDTH_CAP giữ hardcode = MIRROR (sandbox no-fs `:5` — không đọc json runtime được) + sửa comment: bỏ attribution sai → "owner ratified <date> · canonical = memory-budget.json hmw_width.cap · mirror vì sandbox no-fs".
  3) Drift-check thêm vào `scripts/governance-detectors.ps1` (hiện **0** kiểm width — grep `WIDTH|width` toàn `scripts/` = 0 hit): regex `const WIDTH_CAP = (\d+)` vs json, lệch ⇒ FLAG.
  4) Nếu số ĐỔI: re-run fault-inject 2-chiều trên số mới (cap+1 → 4 dòng 🔴 + giữ cap lane; =cap → 0 dòng 🔴). Số 16 đã có 7/7 @S144 — không redo nếu giữ.

## ③ Checklist (vai + deliverable + acceptance ĐO ĐƯỢC — lệnh chạy được)

| # | Vai | Deliverable | Acceptance đo được |
|---|---|---|---|
| K1 (#17) | **owner** 🔒 | chọn posture A/B/C (+TRẦN_TỔNG nếu B) | vết chữ owner ≥1 bề-mặt owner (ACTIVE-MARKS / session-log): grep token `O-2` ra ≥1 hit — hết "câm 0/5 bề-mặt" |
| K2 (#17-A) | em-main | O-2 RESOLVED + C8a→N/A-by-posture + 1 dòng posture | `grep -rn "BLOCKED-by-O-2" <spec-mới>` = **0** · `grep -in "truc sau\|trục sâu" docs/governance/harness-11-engine.md` ≥1 |
| K3 (#17-B, chỉ khi B) | em-main + implementer | args.lanesSoFar assert + detector recount | fault-inject: invoke `lanesSoFar=TRẦN` → log LOUD + skip; inject run-folder Σ>TRẦN → detector FLAG; Σ=TRẦN → 0-flag |
| K4 (#18) | **owner** 🔒 | ratify (a) V5-no-role + (b) luật 【1】/【2】 | vết chữ owner như K1, token `O-3` |
| K5 (#18) | em-main | O-3 RESOLVED + 1 dòng luật ở home vai-KIỂM | bảng gate giữ nguyên 5 dòng đủ con-KIỂM: `sed -n '170,176p' .claude/commands/session-end.md` · luật grep ra đúng 1 home |
| K6 (#19) | **owner** 🔒 | ký {cap, cơ-chế} | `grep -n "hmw_width" .claude/agent-memory/memory-budget.json` = 1 block {cap·mechanism·ratified} |
| K7 (#19) | em-main | sync hmw.js + đính-chính comment | `grep -n "owner chốt O-7 2026-07-22" .claude/workflows/hmw.js` = **0** · giá trị `WIDTH_CAP = <n>` == json (drift-check exit 0) |
| K8 (#19) | implementer (hoặc em-main) | drift-check trong governance-detectors.ps1 | fault-inject cây tạm (`-RepoRoot`): WIDTH_CAP+1 → FLAG; revert → 0-flag (khuôn fault-injection-proves-teeth S95) |
| K9 (#19, nếu số đổi) | em-main | fault-inject 2-chiều C8b số mới | taskList=cap+1 → log "VƯỢT TRẦN WIDTH" + `results ≤ cap` · taskList=cap → 0 dòng 🔴 |

## RANH: AI-quyết-được ⟂ owner
- **AI trong khung (đề xuất thẳng):** hình dạng 3 posture + trade-off · acceptance K2/K3/K5/K7/K8/K9 · thiết kế drift-check · đính-chính attribution comment (sửa-sự-thật, không phải quyết-định) · home canonical cho số (memory-budget.json theo precedent O-1/O-6).
- **Owner-SỐ 🔒:** giá trị WIDTH cap · TRẦN_TỔNG (chỉ khi posture B).
- **Owner-LUẬT 🔒:** #17 có-dựng-hay-không (A/B/C) · #19 throw-hay-LOUD-skip (khuyến nghị giữ LOUD-skip, nhưng quyền anh) · #18 V5-no-role ratify + luật default-TÁCH hay per-case.

## KHÔNG CHẮC
1. **"Owner chốt O-7 2026-07-22" (`hmw.js:116/:120`)**: tao đọc là attribution overstated (0 vết 5 bề-mặt + run.md:14 "chưa ai duyệt"), nhưng KHÔNG loại trừ anh chốt MIỆNG trong phiên S144 mà không ghi sổ — rẻ nhất là anh xác nhận ngay lượt duyệt này; nếu anh ĐÃ chốt thật thì K6/K7 chỉ còn là ghi-vết-lại, không phải quyết mới.
2. **Max-width 14 (S126)**: đứng trên `hmw.js:50-55` comment + memory tao; folder S126 KHÔNG còn `sub-*.md` để đếm lại (chỉ synthesis) — chưa re-derive từ đĩa. Con số Σ=16 (S127) là đếm đĩa thật.
3. **"Phần còn lại" của O-3**: tao đọc = {V5 + vòng-đo tương-lai}. Nếu ý anh gồm cả lớp instrument (mfe-eval/applied-eval/nhip-no-probe) thì lập luận của tao là chúng nằm TRONG bề-mặt đo V3 (trio đọc output + harness-audit re-chạy ≥2 số, `session-end.md:152`) — không phải vòng-đo riêng; cần anh confirm cách đọc này.
4. **`run.md:27` taskList snapshot** nhắc 2 file tao KHÔNG đọc (`hub-tu-danh-gia-3-goc`, `spawn-label-panel-audit-khung`) — chúng phục vụ O-4/C3 (ngoài 3 khoản này); prompt sống của lead không yêu cầu. Nếu spec bước-3 đụng O-4 thì lane sau phải đọc.
5. **Σ-lane per run-id = 16 (S127)** đếm mọi `sub-*.md` kể cả stage reviewer/spec-draft — nếu định nghĩa "lượt" chỉ tính execute-lane thì Σ = 11. Đơn-vị đếm phải chốt trước khi dùng làm nền TRẦN_TỔNG.

## ĐÃ CÂN NHẮC RỒI BÁC
1. **Posture C — port full deepen-on-contested engine (hub-style)**: BÁC vì (i) `depth-cost` đo ≈10-11×/run + 9 hardening defect hub ăn ở lần chạy thật đầu (`depth-cost:50`); (ii) duel n=1: mode "thật" thắng hiệu-quả/token — SE đã có mode thật owner-gated; (iii) SE 3-bước pipeline phủ đúng use-case "đào điểm nóng" bằng người điều thay máy điều.
2. **THROW ở width-cap**: BÁC — `depth-axis:43` cấm văng lỗi; per-lane throw nuốt thành null = STOP-SILENT (`hmw.js:121-123` + bằng-chứng wf_491c05a8); reviewer R2 đã bắt spec v1 tự-mâu-thuẫn đúng chỗ này.
3. **WIDTH_CAP đọc runtime từ memory-budget.json**: BÁC — sandbox no-fs (`hmw.js:5`) ⇒ bất khả; phải hardcode-mirror + drift-check ngoài-band.
4. **Gộp ngược 3 vai audit thành 1 con**: BÁC — đảo owner-decision [2] TÁCH đã land 3 vai (agents + VALID_ROLES + gate rows) mà không có bệnh mới nào làm căn cứ.
5. **Dựng vai-KIỂM cho V5**: BÁC theo hub verbatim `:24` (floor ≠ vòng-đo); điểm yếu V5 là COUNTER thiếu (row 18) — vá là khoản riêng, không thuộc O-3.
6. **Trần tổng-lượt = Σ maxTurns nội-agent**: BÁC — sai đơn-vị; "lượt" hub = member-run ensemble (`depth-cost:24` "10 lượt"), không phải turn trong agent; trộn 2 đồng-hồ = hỏng cả hai (mirror bài học `session-end.md:155`).
7. **Đợi luôn eval-use C5 land rồi mới xử O-3**: BÁC — C5 đang DEFER-cần-máy vô thời hạn (`C14-disposition:26`); treo O-3 theo nó = kéo dài đúng pattern "câm nhiều phiên"; luật 【1】 đóng được ngay hôm nay mà không cần máy.

## Nhật ký nguồn đã chạm
- [x] `goi-chot-owner-nam-khoan.md` — đọc trọn 92 dòng, verbatim đủ 5 khoản (§① ghi rõ: KHÔNG phải nguồn gốc O-2)
- [x] `harness-dong-du-vong-audit-va-eval-use-side.md` — đọc trọn 60 dòng, dòng 51 verbatim trong §①
- [x] `spec-adap-dot-11-22-07-2026-v2.md:60-137` — khối O-1…O-7 + C8a/C8b + trạng thái khoá
- [x] `hmw.js` — đọc :1-59 + :60-179 + :180-262 (trọn file 262 dòng): WIDTH_CAP block + VALID_ROLES 20 + C1 lane-chết-kêu + sandbox no-fs
- [x] Kế thừa bước-1: `sub-invest-1-vong-def.md` (5 vòng verbatim) + `sub-invest-3-vong-2lo.md` (khoản ①②③④ + gộp/tách) + `sub-invest-5-se-do-B.md` (bảng 25 dòng)
- [x] Thêm: `depth-axis` + `depth-cost` broadcast (nguồn gốc thật O-2/O-7) · `agents/h24-audit.md` · `session-end.md:140-224` (gate 5-vòng) · `C14-disposition-per-khoan.md` (grep :32/:35) · `run.md` run này · `memory-budget.json` keys · glob agents (21−1=20) · glob runs 07-16 (S126/S127 width data) · grep scripts width=0
