Files
solution-erp/.claude/workflows/runs/2026-07-26-S153-ctx-adopt/sub-implementer-backend-1.md
pqhuy1987 11db5efdf8
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m39s
[CLAUDE] Docs: S153 closeout — adopt TRỌN Ctx soft-memory + OWNER-VETO 3-vai + RENAME hub-form (squash 22 wal:)
Pipeline anh lệnh: /check-email + /adap-apply -> /fable-real invest (spec 9-task/24-checklist)
-> hmw Opus-5-MAX 2 đợt + lead-solo T6-T8 -> checklist verify.

Thư ① 9c909007 (model-default Opus 5 MAX): TRỌN — filing 2-tuyến + probe-sau-restart
2-nguồn claude-opus-5[1m] + thư hub d432f5eab5cd + caveat (e) đóng.

Thư ② 0df10df4 (pause-tiep Ctx soft-memory, sàn 7-khoản): EXECUTED
- máy mind-check: scripts/session_ctx.py +542 dòng (7 phép + 2 phụ, 4 mức, draft/closed/--root/--session PIN, exit 0/1/3)
- template .claude/templates/session-mind-template.md + wire 4 lệnh (pause C-bis+2bis+§1-carve-out, tiep §2.6+§3-ter, session-start Phase 3.5, session-end §L.b(l)+6.3-bis)
- memory-budget: mind_ctx_kb=32 + tiep_reload + ĐÓNG ghost-wire session_ctx_kb (H18 class-2 sống S146->S153)
- fault-inject 18/18 + 2 fix hậu-T4 (FI 6/6): GAP-#9 closed-mode E-0-con-trỏ CỜ->TRƯỢT (chặn gradient
  thưởng xoá-con-trỏ-trung-thực, họ bẫy F-1 của chính thư hub) · secrets-sweep +--root parity
- số ĐO THẬT pause +117ms thay ước lệch 2.2-5.4x

OWNER 2 quyết trong-phiên:
- (38) VETO: 1-vai -> hub-form 3-vai (ctx-curator @pause + carve-out pause §1 · ctx-verifier @tiep · ctx-audit @2-bookend)
- RENAME theo chuẩn hub/sisters để audit chéo: ctx-pause-check->ctx-curator, ctx-reload->ctx-verifier
  (đo đĩa 3 nhà; hub≠sister => SE theo HUB-form, tiền lệ S149). Roster 20->23, VALID_ROLES 23.
  Gap còn lại: ring5-audit (V5 truth-floor) hub CÓ, SE+VIPIX chưa -> slot (41).

Bookend 2 đầu (12 spawn) + trio auto 1 vòng:
- @open: H1 7f · H2 4f · H24 5+3 FLAG · ring1 28Đ/4T · ring2 8/8Đ + M-1 MISS thật · trio eval-MIXED-14/refine-3A-7B-4N/audit-25Đ-3T (re-chạy 7 instrument, 24 số byte-exact)
- @close: H1 6f · H2 8f (baseline S154 = 16/10, tự sửa bản ~23/11) · H24 4+2 FLAG · ring1 47Đ/5T/1KC/53 · ring2 6/6Đ + 21 phép phụ
- lead xử 11 mục: 9 FLAG H24 + 3 RESIDUAL ring2 + F-r2 (plugin 3 hard-site) + M-1 cả 2 persona + M9 14 sổ diary + F-3/F-5/F-6 + nit Sàn-5 + BÁC F-4 (fan-out không vào _index)

#53 x14-cận-dưới, 0 mất dữ liệu (WRITE-lane derive-from-body · Agent-resume · SendMessage-resume x6).
Datum: trio return-only hết miễn nhiễm (3/3 CLEAN -> 1/3). 4-A suýt xảy ra thật (bản committed của 2 file H24 là bản cắt 24%/48%).
completeness-gate: 5 vòng đủ · phép ĐẠT 4 / TRƯỢT 0 / vacuous 0.
State: Mig 67 · 89 bảng · 532 test · gotcha 83 · Sub-agents 23 · counter 27 · bundle FROZEN · governance-only 0 prod-code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 16:10:54 +07:00

88 lines
8.8 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-implementer-backend-1 — T1 MÁY `mind-check` (extend `scripts/session_ctx.py`)
> GHI TRONG LÚC LÀM (chống #53). Thứ tự: design → diff-summary → acceptance-runs → END-line.
> Task: T1 spec `spec-ctx-adopt-26-07-2026.md` + `sub-fable-invest-S153.md` Mục 2 §T1 / Mục 3 / PHẦN B.
> Vết ủy quyền: OWNER-DELEGATED qua lệnh pipeline 26-07 (KHÔNG ghi "owner chốt" ở bất kỳ file nào).
## ⚠️ Lệch tên file (khai ngay, không tự ý chọn im lặng)
TASK-block nói ghi `sub-implementer-backend-1.md` + END-line `<!-- END sub-implementer-backend-1 · TOTAL=<n> acceptance -->`;
RUN-TRACE boilerplate (đoạn footer chung mọi vai) nói `sub-implementer-backend-0.md`.
⇒ Theo **chỉ-thị task-specific** (nêu 2 lần, kèm đúng END-line) ⇒ ghi `-1`. Em main đọc `-1`, KHÔNG có `-0`.
---
## PHẦN 1 — DESIGN (chốt trước khi code)
### 1.1 Ranh scope
- SỬA ĐÚNG 1 FILE: `scripts/session_ctx.py` (ADD-only: 1 hằng module-level + 1 khối `mind-check` + 1 parser CLI + 1 nhánh dispatch).
- KHÔNG tạo `.ps1` (spec T1 chốt: extend python, 1-nguồn `_SECRET_RES`/`_TS_KEY_RE`).
- KHÔNG đụng `machine_block` / `secrets_sweep` / `_SECRET_RES` / `SECRET_PATTERNS` / helper git — hành vi 2 subcommand cũ BẤT ĐỘNG (proof = insertion-only diff, xem §2).
- KHÔNG đụng `memory-budget.json` (T7 = lead-solo), KHÔNG đụng template (T2 = lane khác), KHÔNG đụng command .md (T6 = lead).
### 1.2 Quyết định thiết-kế + lý-do đo được
| # | Quyết định | Vì sao (chứng) |
|---|---|---|
| D1 | **Config đọc LAZY** — chỉ đọc `memory-budget.json` khi CÓ tệp để đo | 2 dòng acceptance Mục 3 chỉ đồng-thời đúng khi đúng thứ tự này: repo thật `--session 6` (chưa có `_mind`, chưa có khoá `mind_ctx_kb` vì T7 land SAU) ⇒ `bỏ-qua-có-khai` exit 0; cây tạm CÓ `_mind` mà THIẾU khoá ⇒ exit 3. Nguyên tắc phát biểu tường minh trong code: *"không có gì để đo thì không đọc trần; có thứ để đo thì TỪ CHỐI đoán trần"* (khuôn H24-2 cấm default) |
| D2 | Full-mode đòi `{mind_ctx_kb, session_ctx_kb}`; draft-mode chỉ đòi `{session_ctx_kb}` | draft-mode bỏ phép 6/7 (spec) ⇒ không tiêu thụ `mind_ctx_kb` ⇒ đòi nó = fail-loud oan; và cho `/pause` draft-gate (T6a) DÙNG ĐƯỢC NGAY trước khi T7 land. Thiếu khoá ⇒ in **TÊN KHOÁ** thiếu (tên-sai-phải-nêu-tên) |
| D3 | Vùng nội-dung = slice DƯỚI `<!-- MIND-RULES-END -->`; marker VẮNG ⇒ quét TRỌN tệp + **CỜ** | enclosure use⟂mention (`feedback_citation_trap_selfreference`): khối luật CHỨA chuỗi cấm để giải thích. Hướng hỏng chọn NGHIÊM (quét trọn + cờ) vì tệp thiếu marker = tệp sai khuôn, phải lộ chứ không được im |
| D4 | Rào-3 in **pattern-name + file:line, KHÔNG in snippet** | mind-check là gate chống rò; in snippet = tự tay rò ra log/transcript. (Khác `secrets-sweep` cũ có in snippet — KHÔNG sửa hành vi cũ, chỉ không lặp ở phép mới) |
| D5 | Nhãn che nhận **DUY NHẤT** dạng có dấu `[đã che <8-hex>]` (escape `đã`) | spec literal. CỐ Ý không nhận biến-thể ASCII "da che": gate bảo-mật thì lệch về phía QUÁ NGHIÊM (fail-safe), không nới bằng suy diễn |
| D6 | Mọi đoạn trích in ra đi qua `_ascii_safe()` (backslashreplace) | giữ ASCII-source ⟂ ASCII-output: console cp1252 gặp diacritic sẽ `UnicodeEncodeError` = máy chết giữa gate. Đây là bẫy THẬT trên Windows PS 5.1 (họ gotcha #30/#37) |
| D7 | Phép-9 nhận **họ hình-dạng** heading A-E (`### A —` · `**A.**` · `- **A** —` · `A)` · `#### A:`) | T2 (template) do lane KHÁC viết SONG SONG ⇒ code khớp **marker theo SPEC** (`MIND-RULES-*`/`MIND-TOP`/`^## MIND-<k>`), còn hình-dạng A-E spec KHÔNG chốt ⇒ nhận rộng + in ra đúng "họ dạng đã nhận" khi trượt để chẩn 1 nhát. Khai coupling: nếu T2 chọn dạng ngoài họ này ⇒ phép-9 trượt oan ⇒ T4/lead phải chạy lại trên template THẬT |
| D8 | p (phép-6) = **ĐẾM ĐĨA** `_pause-*.md` + `pause-*.md` (dual-accept); `markers:`/`mind-blocks:` trong `_end` CHỈ cross-check ⇒ **cờ-INFO** | spec + `tiep.md:102` (glob `pause-*` KHÔNG khớp `_pause-1.md` ⇒ cộng thẳng an-toàn, 0 đếm đôi). Tự-khai KHÔNG BAO GIỜ là nguồn đếm |
| D9 | exit {0 = 0 trượt · 1 = ≥1 trượt · 3 = config/state} ; argparse giữ 2 = usage | spec T1 + khuôn `session-scaffold.ps1` (exit 2 usage / 3 config) |
### 1.3 Bảng phép (7 chuẩn + 2 phụ) — nguồn dữ liệu + 4 mức
| Phép | Đo gì | đạt | trượt | cờ | bỏ-qua-có-khai |
|---|---|---|---|---|---|
| (1) rào-1 lời-anh | `^[ \t]*>[ \t]*anh[ \t]*:` trong vùng nội-dung | 0 hit | ≥1 hit + file:line | — | draft: vẫn chạy |
| (2) rào-2 ts-key | `_TS_KEY_RE` (module-level, canonical) | 0 hit | ≥1 hit + file:line | — | — |
| (3) rào-3 secret | `_SECRET_RES` per-line, trừ dòng có nhãn che | 0 hit | ≥1 hit (pattern+line, 0 snippet) | — | — |
| (4) con-trỏ E top | path trong backtick ở mục E block TRÊN CÙNG | mọi path tồn tại | broken (cha KHÔNG có) — mọi mode · pending khi **closed** | pending khi **open** · E có nội dung mà 0 con-trỏ | E = `(trống — khai)` · token placeholder `<>`/`*` |
| (5) số-hiệu | `^## MIND-(\d+)` | duy nhất ∧ top ≥ mọi số dưới | trùng số / top < số dưới | | 0 block |
| (6) bất-biến | `|block| ∈ {p, p+1}` | trong tập | ngoài tập | lệch tự-khai (INFO) | draft-mode |
| (7) trần | `size(_mind)` vs `mind_ctx_kb`×1024 (LIVE) | trần | (nợ hiển thị, KHÔNG trượt) | vượt trần (+hướng nén / "TỪ-CHỐI nén" khi <3 block) | draft-mode |
| [phụ-8] `_context` | `size(_context-s-N.md)` vs `session_ctx_kb`×1024 | trần | | vượt | tệp vắng |
| [phụ-9] cấu-trúc | 5 mục A-E mọi block + nhãn D | đủ | thiếu mục / bullet-D thiếu nhãn | | |
- **Nhãn D nhận:** `mới-nêu` · `đang-cãi` · `gần-chốt` · `treo-chờ-anh` (escape `ớ ê đ ã ầ ố ờ`).
- **Mục trống:** `(trống …` `\(\s*trống`.
### 1.4 Chế-độ + thứ tự thi hành (fail-order)
```
--session N (BẮT BUỘC, không default-latest) --root PATH (seam fault-inject) [--draft F] [--closed]
1. resolve root/sessions/session-N ; closed = --closed OR exists(_end)
2. DRAFT? -> đọc file nháp; đếm block trên đĩa (canonical, 0 nếu vắng); phép 1,2,3 + 5-draft(số==count) + 4 + phụ-8 + phụ-9 ; phép 6,7 = bỏ-qua-có-khai
3. FULL: canonical vắng -> glob '*mind*' NÊU ĐÚNG TÊN ứng viên
open -> bỏ-qua-có-khai, exit 0 (CHƯA đọc config = D1)
closed -> TRƯỢT, exit 1
4. FULL có tệp: require keys -> thiếu = exit 3 (nêu tên khoá) ; rồi 7 phép + 2 phụ
```
### 1.5 Câu hỏi đã cân + BÁC
- * nên `--session` default "mới nhất"?* BÁC spec §3 "input chỉ đích danh 2 cửa sổ song song sẽ đua" (kẽ 2-cửa-sổ nêu PHẦN B #24(ii)).
- * nên máy tự canh bất-biến block (immutability)?* BÁC cần git-history diff, ngoài tầm $0; PHẦN B #17 đã khai lưới = luật + git + ctx-audit.
- * nên gộp `secrets-sweep` vào mind-check?* BÁC 2 lưới ĐỘC LẬP (PHẦN B #7 đo đúng tính chất đó: sweep rglob vốn phủ `_mind`).
---
## PHẦN 2+3 — ACCEPTANCE-RUNS *(lead on-behalf @S153 — lane mất return [schema-fail #53-biến-thể], code ĐÃ LAND; lead chạy 4 acceptance độc lập, dán số thật)*
| # | Lệnh | Kỳ vọng | Đo được | Verdict |
|---|---|---|---|---|
| a | `python scripts/session_ctx.py mind-check --session 6` (repo thật) | bỏ-qua-có-khai + exit 0 + glob nêu ứng viên | `(0) ... bo-qua-co-khai · glob *mind* (0 ung vien) · chua doc memory-budget.json` · exit **0** | ĐẠT |
| b | `--root <cây thiếu mind_ctx_kb>` ( `_mind`) | exit 3 + nêu TÊN khoá | `CONFIG/STATE ERROR: missing key(s) mind_ctx_kb ... CAM default (khuon H24-2 fail-loud)` · exit **3** | ĐẠT |
| c | `python -c "...decode('ascii')"` | pass | `ascii OK` · exit 0 | ĐẠT |
| d | `--root <cây đủ khoá + fixture render từ template THẬT 8845B>` | exit 0 | **8 đạt / 0 TRƯỢT / 0 cờ / 2 bỏ-qua-có-khai** (E `(trống)` khai · `_context` vắng khai) · phép-7 đọc LIVE 32×1024 · phép-6 đếm-ĐĨA p=0 dual-accept · exit **0** | ĐẠT |
Chứng code trên đĩa: `_TS_KEY_RE` :59 (canonical, comment single-truth) · vùng mind-check :196+ · `mind_check()` :535 · CLI parser :698 + dispatch :729 · 55 hit `mind`. Diff = ADD-only (2 subcommand bất động machine-block/secrets-sweep giữ nguyên hành vi).
<!-- END sub-implementer-backend-1 · TOTAL=4 acceptance -->