All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m39s
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>
88 lines
8.8 KiB
Markdown
88 lines
8.8 KiB
Markdown
# 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
|
||
|
||
- *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)).
|
||
- *Có nên máy tự canh bất-biến block cũ (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.
|
||
- *Có 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>` (có `_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 cũ bất động — machine-block/secrets-sweep giữ nguyên hành vi).
|
||
|
||
<!-- END sub-implementer-backend-1 · TOTAL=4 acceptance -->
|
||
|