# Ctx soft-memory — SE-form ✅ RATIFIED + ĐÃ WIRE @S153 (adopt thư `0df10df4` pause-tiep-upgrade-vong-ctx)

> **Trạng thái: ✅ RATIFIED + ĐÃ WIRE @S153 (OWNER-VETO).** Anh bác (38)(a)-1-vai-gộp, chốt trực tiếp **"Build đủ 3 vai như hub"** qua AskUser ⇒ 3 vai `ctx-curator`/`ctx-verifier`/`ctx-audit` SỐNG trong roster (23, canonical → STATUS §Sub-agents) + máy `session_ctx.py mind-check` chạy mỗi cửa + wire tại `/pause §2.6(C-bis)` · `/tiep §3-ter` · bookend 2 đầu. Các câu đã định-đoạt: **(36)** hub-form spawn mỗi cửa (vai-1 @mỗi-pause = carve-out duy nhất luật "NGỪNG spawn", mirror hub O-1(a)) · **(37)(b)** nạp NỀN RÚT-GỌN theo khoá `tiep_reload` (`tiep.md §3-ter` cite "quyết (37)(b)") · **(38)(b)** 3 vai tách — marker inline dưới. 🧊 *Header cũ "DRAFT chờ anh chốt — CẤM wire" đứng từ S153→S164 SAU khi đã wire = **wired-but-declared-unwired** (ghost-wire chiều ngược, cùng class `closed.md` S146; ring1+ring2 bắt @S163 "ô xanh thủng"). **Dòng `#` đầu của chính tệp này còn trễ thêm một tầng nữa: nó giữ chữ `DRAFT` tới tận S185**, SAU khi khối trạng-thái ngay dưới đây đã vá — đúng lớp *"thân đã sửa, masthead sống sót"*; đồng-bộ @S185 theo `naming-standard.md` **§12-bis** (masthead của CHÍNH tệp vừa sửa), nguồn sàn `3-khoan:19-27`. Thân doc dưới GIỮ NGUYÊN dạng draft làm lineage — đọc "đề xuất" là đề-xuất-lúc-viết, không phải trạng-thái.*
> Nguồn: broadcast `2026-07-25-Governance-pause-tiep-upgrade-vong-ctx` (sha `0df10df4` — stamp-verify OK @S153, copy `broadcasts/inbox/` root=pending). Hub tự khai: **build xong + gate xanh, dogfood CHƯA có cửa nào chạy qua** — adopt là adopt KHUÔN chưa-kiểm-chứng, lỗi phát hiện thì gửi về hub (hub-owner Q-1: "có j debug sau cũng đc").

## 1. Bài toán (đúng SE)

SE dùng `/pause`→`/tiep` dày (1 phiên-logic = 2-3 cửa-sổ). Việc ĐÃ CHỐT giữ tốt (WAL + `_context-s-<N>.md` + master-checklist), nhưng 4 lớp MỀM rơi sau mỗi lần nối: **gói-turn vừa làm · hướng-làm-tiếp (vì-sao + nhánh đã loại) · kế-hoạch tổng-thể dạng suy-nghĩ · việc-đang-thảo-luận chưa thành quyết-định**. Khớp chẩn đoán hub §1.

## 2. Đối chiếu sàn 7-khoản vs SE hiện có (đo @S153)

| # | Sàn (bắt buộc, cấu-trúc) | SE hiện có | Thiếu gì |
|---|---|---|---|
| 1 | Ghi tươi @cửa mở phiên (nội dung thật xuống đĩa trước pause đầu) | scaffold `_context-s-<N>.md` = STOCK-map thật nhưng KHÔNG chứa 4 lớp mềm | tệp mềm `_mind-s-<N>.md` ghi @CUỐI bootstrap (như hub: "trước tiên" = trước pause đầu) |
| 2 | Mỗi pause refresh 4 tầng, mới-nhất-ở-TRÊN, block cũ bất biến | `/pause §2.6` append FLOW (narrative) — KHÔNG có lớp mềm riêng | block A-E vào `_mind` @pause (mục trống = "(trống — khai)") |
| 3 | Mỗi tiep: đối-chiếu + NẠP LẠI, CÓ BẰNG CHỨNG NỘI DUNG | `/tiep §2.6` đọc context + verify ground-truth — không nạp nền, không bằng-chứng-nội-dung bắt buộc | bước nạp-lại ≤15 dòng lead PHẢI nhắc lại trong báo cáo + (tuỳ Q-C) nạp nền |
| 4 | Mỗi vai phụ/engine-run → 1 dòng-sống {verdict + con-trỏ} | run-folder sub-file + WAL `wf:` (per-run, không per-spawn-tổng-hợp) | mục E trong `_mind`: 1 dòng/spawn |
| 5 | Vòng soi ĐỘC LẬP 2 đầu phiên, quyền phán TRƯỢT | ring1/ring2/ring4 soi vòng-đo khác; CHƯA ai soi lớp Ctx | vai kiểm Ctx (hub: 3 vai tách; Q-D số vai SE) |
| 6 | Ghi ra đĩa trong thư-mục phiên + commit theo luật nhà | ✅ hook `wal-flush.ps1` path-4 `.claude/sessions/` (S146) — tự cover | 0 (đã đạt) |
| 7 | ≥2 VAI TÁCH: bên GHI ≠ bên KIỂM | ✅ lead single-writer ⟂ monitor INFORM-only là khuôn sẵn | đạt by-design khi khoản 5 có vai |

Suy-biến vô-hại: KHÔNG áp dụng cho SE (SE dùng pause nhiều — khoản 2-3 là ruột).

## 3. SE-form đề xuất (phần tự quyết — form theo hub, tên SE)

- **Tệp:** `.claude/sessions/session-<N>/_mind-s-<N>.md` (đứng cạnh `_context`, KHÔNG nhét vào — lý-do đúng duy nhất = trần-và-nén, hub §3).
- **Block:** `### MIND-<k>` (k = ĐẾM số block hiện có TRƯỚC khi chèn — block gốc @open chiếm số 0; phép kiểm chỉ đòi duy-nhất + mới-hơn). 5 mục A-E: A gói-turn · B hướng-tiếp (+nhánh đã loại) · C kế-hoạch delta-suy-nghĩ (KHÔNG chép checklist) · D việc-đang-thảo-luận + nhãn {mới-nêu|đang-cãi|gần-chốt|treo-chờ-anh} · E dòng-sống per-spawn {verdict + con-trỏ}. Việc ĐÃ CHỐT = con-trỏ về WAL/HANDOFF, CẤM chép.
- **3 rào đầu tệp:** (i) không chép lời anh (chỉ trỏ PAUSE-<k> của `_context`) · (ii) cấm mọi biến-thể khoá timestamp đầu dòng (máy đọc ts của SE quét `_*` — phải DÙNG LẠI regex của máy đọc, không cài bản hai) · (iii) cấm literal họ khoá/mật-khẩu; ngoại-lệ duy nhất "[đã che <8-hex>]", quét bản nháp TRƯỚC khi chèn.
- **Máy kiểm $0:** `scripts/ctx-mind-check.ps1` — 7 phép (3 rào · con-trỏ E **3-trạng-thái** {giải-được | đang-chờ [cha có, cờ khi chạy → trượt khi phiên đóng] | hỏng [trượt mọi chế-độ]} — bài F-1 hub: đường-rẻ-nhất-để-xanh không được là xoá-con-trỏ-đúng · số hiệu duy-nhất+mới-hơn · bất-biến |block| ∈ {p, p+1} với p = pause ĐẾM TRÊN ĐĨA (CẤM tin dòng `markers:` tự khai — hub đo lệch khai-THIẾU thật) · trần/nén) + 4 mức {đạt·trượt·cờ·bỏ-qua-có-khai} + chế-độ draft + chế-độ thư-mục-đã-đóng + tên-sai-phải-NÊU-tên. Fault-inject: fixture-hỏng phải TRƯỢT + đột-biến phải ĐỎ + mồi-ngầm bên-chấm-gieo.
- **Trần:** khoá MỚI `mind_ctx_kb` trong `memory-budget.json` (B1 — lệnh trỏ khoá, CẤM chép số). Vượt trần → nén block CŨ NHẤT trừ block-0 + block-trên-cùng; còn <3 block → TỪ CHỐI nén + giương cờ.
- **Chỗ cắm:** `/session-start` (ghi `_mind` block-0 @cuối bootstrap) · `/pause §2.6` (+refresh) · `/tiep §2.6` (+đối-chiếu-nạp-lại) · `/session-end` (vai soi-chuỗi + chế-độ đóng). Máy kiểm chạy TRƯỚC khi phóng vai (bắt lỗi rẻ trước, đốt tiền sau).

## 4. 🔢 4 câu chờ ANH (trả lời bằng số — mọi con-số/vai/nhịp = quyền anh)

- **(35) Trần `mind_ctx_kb` = bao nhiêu?** Hub đặt 32KB (O-4, tự khai "số chủ đặt, không rút từ dữ liệu" — tệp cùng-họ lớn nhất hub mới >12KB). SE `session_ctx_kb`=64. Đề xuất: **32** (theo hub, đổi sau khi có số đo SE).
- **(36) Nhịp phóng vai kiểm Ctx — cái núm ĐẮT NHẤT** (hub floor ~100K tok/spawn): (a-nguyên) spawn MỖI pause như hub-owner chốt · (b-tiết-kiệm) **máy-$0 chạy mỗi pause, vai chỉ spawn @2 đầu phiên** (khớp ràng "điểm dừng phải RẺ" thư goi-chot khoản 3 — đo SE: pause hiện ~5ms DÒ; +spawn = +phút+100K). Đề xuất: **(b)** — hub tự dặn "chuẩn bị sẵn núm hạ tần suất".
- **(37) Nạp-lại-NỀN mặc định @/tiep?** Hub chọn nạp (nền hub ~110K tok). Nền SE đo tươi @S153 = **596.316B ≈ 149-199K tok** (crystallized-backfill LIVE) — nặng hơn hub. (a) nạp full mỗi tiep · (b) **nạp RÚT GỌN** (STATUS dòng CURRENT + HANDOFF segment mới nhất + WAL + `_mind` — ước ~40-60K) · (c) giữ như nay (không nạp, chỉ `_mind`+`_context`). Đề xuất: **(b)**.
- **(38) Số vai kiểm Ctx:** (a) **1 vai `ctx-audit` gộp 3 nhịp** (kiểm@pause-draft · đối-chiếu@tiep · soi-chuỗi 2 đầu — vẫn đạt sàn 7: GHI=lead ⟂ KIỂM=vai) · (b) 3 vai tách như hub. Đề xuất: **(a)** — roster 20 đã dày, sàn chỉ đòi ghi≠kiểm; tách thêm khi lộ nghẽn. 🔄 **OWNER-VETO @S153: anh BÁC (a), chốt (b) 3 vai tách như hub — đã wire cả 3.** *"Roster 20" = số lúc viết; nay **23** (+3 chính vai Ctx này — số canonical → STATUS §Sub-agents). Đề-xuất (a) thua không phải vì sai sàn (ghi≠kiểm vẫn đạt) mà vì owner ưu tiên khớp khuôn hub nguyên bản.*

## 5. Nấc adopt + việc sau khi anh chốt

Nấc hiện tại: **gửi→ĐỒNG-THUẬN (draft này)**; thực-thi = sau khi anh trả lời (35)-(38) → build tệp mẫu + máy kiểm + fault-inject + wire 4 lệnh + persona vai (nếu (38)) + restart-verify + adap-report `0df10df4` + thư báo hub (kèm số đo nền SE 596KB để hub đối chiếu — hub xin số này ở §8).

---

## 6. 🔄 RESOLVED @S153 (cùng ngày — qua pipeline anh lệnh "/fable-real invest → spec → hmw Opus 5 MAX xử lý")

🔴 **NHÃN TÁCH ĐÔI, đừng đọc gộp** (vá @S153 FLAG-9): **(35)(36)(37)** = **OWNER-DELEGATED → ENGINE-PROPOSED (fable-real deep-pass) → LEAD-DECIDED @S153** (anh ra lệnh pipeline trọn gói; khuôn `hmw_width._ratified_by`; anh veto = 1 edit từng mục) · **(38)** = **OWNER CHỐT THẬT** (anh hỏi *"còn thiếu 2 vai ctx?"* rồi chốt AskUser *"Build đủ 3 vai như hub"*) — CẤM gộp (38) vào nhãn delegated, đó là xoá quyền tác-giả của owner, cùng lớp C8b chiều ngược:
- **(35)** `mind_ctx_kb = 32` (KB) — vết + lý-do: `memory-budget.json → _mind_ctx_kb_set`.
- **(36)** (b) máy-$0 mỗi pause · vai `ctx-audit` CHỈ @2 bookend ⇒ **KHÔNG cần carve-out O-1**, `pause.md §1` giữ nguyên.
- **(37)** (b) nạp NỀN RÚT-GỌN @tiep — khoá `tiep_reload` (danh sách + phạm-vi trong khoá, B1).
- **(38)** ~~(a) 1 vai `ctx-audit` gộp 3 nhịp~~ → 🔄 **OWNER-VETO cùng ngày @S153** (anh: *"còn thiếu 2 vai ctx?"* → chốt AskUser **"Build đủ 3 vai như hub"** — owner chốt THẬT): **hub-form 3-vai** = `ctx-curator` (vai-1 @mỗi-pause, carve-out `pause.md §1`) · `ctx-verifier` (vai-2 @mỗi-tiep) · `ctx-audit` (vai-3 chuỗi @2-bookend, hồi-tố = fallback). Hệ quả: carve-out O-1(a) mà (36)(b) từng né **nay CÓ THẬT trên đĩa** (`pause.md:15` §1 + `:48` bước 2-bis) ⇒ 🧊 câu "KHÔNG cần carve-out O-1 / `pause.md §1` giữ nguyên" ở **§6 dòng ngay trên** (mục (36), câu duy nhất còn sống — đo `grep -n carve-out` toàn file = 2 hit: chính nó + dòng này) = **SUPERSEDED @S153** (giữ chữ làm vết, đừng đọc thành hiện-hành). [🔄 vá R-2 — `ring2-audit` bắt: bản đầu tuyên blanket "mọi câu ở §3-§4" nhưng thân §3+§4 RỖNG câu đó ⇒ **phủ 0 câu, bỏ đúng 1 câu cần phủ**; class "vắng-mặt trông giống ổn". Bài: mệnh-đề supersede phải neo vào VỊ-TRÍ ĐO ĐƯỢC, không neo vào vùng đoán.]; (36) máy-$0-mỗi-pause GIỮ (máy vẫn chạy TRƯỚC vai).
Đề-khác so draft §3 (engine thắng, lead ACCEPT): máy = **extend `session_ctx.py`** (1-nguồn `_SECRET_RES`/`_TS_KEY_RE`) thay `.ps1` mới — draft mục 3 dòng "Máy kiểm $0: `scripts/ctx-mind-check.ps1`" **superseded**.
Thi hành: spec `runs/2026-07-26-S153-ctx-adopt/spec-ctx-adopt-26-07-2026.md` (9 task, T1-T8 land @S153 · T9 = phiên sau restart) + checklist 24 phép (T4 fault-inject). Trạng thái chi tiết = adap-report `0df10df4`.
