[CLAUDE] Docs: S153 closeout — adopt TRỌN Ctx soft-memory + OWNER-VETO 3-vai + RENAME hub-form (squash 22 wal:)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m39s
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>
This commit is contained in:
@ -0,0 +1,42 @@
|
||||
# ctx-adopt-synthesis — S153: adopt TRỌN thư `0df10df4` (VERIFIED, đóng run dạng-1)
|
||||
|
||||
> Pipeline anh lệnh 26-07: ① `/check-email` + `/adap-apply` → ② `/fable-real` invest → spec+checklist → ③ hmw Opus 5 MAX execute. Vết ủy quyền: **OWNER-DELEGATED → ENGINE-PROPOSED → LEAD-DECIDED @S153** (4 quyết (35)32-KB · (36)b-máy-mỗi-pause-vai-2-bookend · (37)b-nạp-rút-gọn · (38)a-1-vai; anh veto 1 edit — `memory-budget.json → _mind_ctx_kb_set`).
|
||||
|
||||
## Kết quả 9 task
|
||||
|
||||
| Task | Ai | Verdict | Ghi chú |
|
||||
|---|---|---|---|
|
||||
| ① check-email/adap-DÒ | lead | se=0 · all 0-mới | đối tượng = thư ② |
|
||||
| ② fable-real invest | investigator-codebase @ **Fable 5** (spawn-param) | SPEC-READY 9-task/24-checklist, return CLEAN | 8 findings; 3 đề-KHÁC draft đều được lead ACCEPT |
|
||||
| T1 máy `mind-check` | implementer-backend (hmw-1) | **4/4** | +528 dòng session_ctx.py; return schema-fail → derive-from-body + lead on-behalf acceptance |
|
||||
| T2 template `_mind` | implementer-frontend (hmw-1) | **4/4** | 8.819B; return schema-fail → derive-from-body |
|
||||
| T3 persona `ctx-audit` | implementer-backend (hmw-1) | **11/11** return CLEAN | 14.347B; registry-surfaced CÙNG phiên (datum); tự-enroll lưới INFORM-only detector |
|
||||
| T4 fault-inject #1-#17+#21 | test-specialist (hmw-2 + Agent-resume) | **18/18 PASS** | lần-1 đứt sau #7 (file nguyên) → resume tiếp #8-#21; DEFER-có-khai 2 vế literal |
|
||||
| T5 hmw.js | implementer-frontend (hmw-2) | **3/3** return CLEAN | VALID_ROLES 20→21 + writeGuard **2-điểm** (:235 = điểm có răng); WIDTH_CAP/TIER2 nguyên |
|
||||
| T6 wire 4 lệnh | lead-solo | 4/4 call-site + occ-2 | pause C-bis (số ĐO THẬT 117ms) · tiep §2.6+§3-ter · session-start Phase-3.5+a-bis+roster · session-end (l)+6.3-bis |
|
||||
| T7 budget.json | lead-solo | json OK | `mind_ctx_kb=32` + `tiep_reload` + **ghost-wire `session_ctx_kb` ĐÓNG** (reader phép-phụ-8, H18 class-2 sống S146→S153) |
|
||||
| T8 docs | lead-solo | done | STATUS §Sub-agents **21** (nấc `file-land + registry-surfaced`) · README ×3 · draft §6 RESOLVED · adap-report **executed** · thư hub `aedd7fb67405` selftest-0 |
|
||||
|
||||
## 2 fix hậu-T4 (lead, fault-inject 6/6 PASS)
|
||||
|
||||
1. **GAP-#9**: closed-mode "E-có-nội-dung-0-con-trỏ" CỜ→**TRƯỢT** — chặn gradient thưởng xoá-con-trỏ (họ F-1). 09-noptr: open CỜ/exit-0 giữ · closed TRƯỢT/exit-1 mới · 01-clean regression sạch cả 2 mode.
|
||||
2. **Seam parity**: `secrets-sweep` +`--root` — literal PHẦN B #7 nay chạy được như viết (07-2net exit-1 đúng dòng · 01-clean exit-0).
|
||||
|
||||
## Sự cố + xử lý (đếm-cái-chắc)
|
||||
|
||||
- **#53 arc này ×4**: T1+T2 schema-fail (WRITE-lane, code không mất — derive-from-body) · T4 schema-fail lần-1 (file #1-#7 nguyên → Agent-resume tiếp việc) · T4-resume trả narration (việc ĐÃ xong trọn trên đĩa 18/18 + END). Tổng phiên S153: **12-cận-dưới** (8 bookend + 4 arc này).
|
||||
- **Residual-write test-specialist**: tự-compact diary 22.140→13.189B KHÔNG được giao — verify máy A7 **28/28 pointer resolved (gate 401/401)** + entry cũ S133/S134 nguyên + entry S153 mới chất lượng cao ⇒ **ACCEPT verified-KEPT** (tiền lệ AS-10 @S115; moved-not-cut). Note cho eval/refine vòng sau: S3/S4 signal đổi số (test-spec hết sát-trần).
|
||||
- **Naming-collision kẽ CÒN LẠI sau S134** (T5 báo): cùng-role 2-invocation → index reset → suýt đè sub-file đợt-1; lane tự né bằng `-2` + verify đợt-1 nguyên 2020B. → đề xuất fix hmw.js `startIndex` (chờ dịp, không gấp).
|
||||
|
||||
## T9 — phiên sau restart (checklist #18/#19/#20/#22/#23)
|
||||
|
||||
Dogfood 1 vòng thật 4-cửa (session-start Phase-3.5 ghi block-0 → pause C-bis refresh → tiep §3-ter bản-nạp-lại → session-end (l)+closed-check) · spawn-probe `ctx-audit` ALIVE (BƯỚC 0.6b) + đối-chứng-dương · mồi-ngầm xuyên-cửa-sổ · C11(b) 2-chiều · STOP-HARD đối-chứng (đã hết hiệu lực dương — T5 land rồi, chỉ còn chiều chạy-được) · wall-clock pause thật.
|
||||
|
||||
## 🔄 T10 — OWNER-VETO (38) @S153 (SAU synthesis đầu — anh: "còn thiếu 2 vai ctx?" → AskUser "Build đủ 3 vai như hub")
|
||||
|
||||
(38)(a) 1-vai **BỊ BÁC** → **hub-form 3-vai** (owner chốt THẬT). Thi hành cùng phiên: +`.claude/agents/ctx-curator.md` (vai-1 @mỗi-pause; **carve-out `pause.md §1`** mirror O-1(a)) + `.claude/agents/ctx-verifier.md` (vai-2 @mỗi-tiep, `LEAD-PHAI-NHAC-LAI:`) · `ctx-audit.md` thu về vai-3 (chuỗi + mồi + kiểm-vết vai-1/2; hồi-tố = fallback phiên 1-cửa) · hmw VALID_ROLES 21→**23** + writeGuard 2-điểm · wire pause §1+C-bis-2bis / tiep §3-ter / session-start Phase-3.5+roster / session-end (l) · STATUS Sub-agents **23** + README ×3 · adap-report + draft vết veto. Nấc 2 vai mới = `file-land`; spawn-probe cả 3 = T9.
|
||||
|
||||
## Owner-note (KHÔNG tự xử)
|
||||
|
||||
- **Roster 23 > `hmw_width.cap` 20** ⇒ full-roster-sweep LOUD-skip **3 lane** cuối — nâng cap = đổi 2 nơi cùng lúc (hmw.js:152 mirror + budget.json canonical); số = quyền anh (O-7, câu (40) treo).
|
||||
- Veto-window 3 quyết còn lại (35)(36)(37) — anh veto = 1 edit từng mục ((38) đã veto → hub-form, done).
|
||||
21
.claude/workflows/runs/2026-07-26-S153-ctx-adopt/run.md
Normal file
21
.claude/workflows/runs/2026-07-26-S153-ctx-adopt/run.md
Normal file
@ -0,0 +1,21 @@
|
||||
# run: 2026-07-26-S153-ctx-adopt
|
||||
|
||||
goal: Adopt TRỌN thư `0df10df4` (pause-tiep-upgrade-vong-ctx, sàn 7-khoản soft-memory) theo lệnh anh 2026-07-26: "/check-email AI_INFRA và /adap-apply · Cho /fable-real đọc kỹ và invest sau đó ra spec-list-rõ-ràng-và-check-list-để-kiểm-tra-lại · Sau đó cho hmw Opus 5 MAX xử lý."
|
||||
|
||||
## Ủy quyền (ghi vết PHÂN BIỆT — khuôn S149 "Trả lời 4 câu")
|
||||
OWNER-DELEGATED qua lệnh pipeline 26-07 → engine-propose + lead-verify quyết 4 khoản (35)(36)(37)(38) + chi tiết form. KHÔNG PHẢI "owner chốt từng số". Anh veto = 1 edit từng mục. Vết đầy đủ ở spec-file.
|
||||
|
||||
## taskList snapshot
|
||||
- [x] ① /check-email ai_infra (se=0 mới) + /adap-apply DÒ (all = 2 thư 07-25, 0 mới hơn; thư ① đã TRỌN @bookend, thư ② pending root)
|
||||
- [!] ② /fable-real investigator-codebase — đọc kỹ thư ② + repo → PROPOSED-SPEC 3-mục + CHECKLIST kiểm-tra-lại → lead verify + ghi spec-<tên>-26-07-2026.md
|
||||
- [ ] ③ hmw Opus 5 MAX execute theo spec (args.run = run-folder này, RUN-TRACE mode)
|
||||
- [ ] ④ chạy CHECKLIST kiểm-tra-lại (per spec) + report + adap-report ② nâng nấc executed + thư hub
|
||||
|
||||
## quy ước file (H10 FLAT)
|
||||
- sub-fable-invest-S153.md — engine ghi TRONG LÚC LÀM (chống #53), END-line
|
||||
- spec-ctx-adopt-26-07-2026.md — LEAD ghi sau verify (engine KHÔNG tự ghi)
|
||||
- sub-<role>-<i>.md — worker hmw ghi
|
||||
- ctx-adopt-synthesis.md — lead @close run
|
||||
|
||||
## trạng thái
|
||||
[!] đang chạy ② — mở @2026-07-26T13:20
|
||||
@ -0,0 +1,36 @@
|
||||
# spec-ctx-adopt-26-07-2026 — BẢN CHỐT (lead verify + ghi, H21)
|
||||
|
||||
> Nguồn: engine `/fable-real investigator-codebase` deep-pass @S153 — PROPOSED-SPEC đầy đủ tại [`sub-fable-invest-S153.md`](sub-fable-invest-S153.md) (9 task / 24 checklist / END TOTAL=9). File này = bản CHỐT lead ký: verdict verify + 2 chỉnh + phân đợt thi hành. Worker đọc CẢ HAI file (spec chi tiết per-task ở sub-fable-invest PHẦN A Mục 2).
|
||||
> Đối tượng: adopt TRỌN thư `0df10df4` (ctx soft-memory 7-khoản). Lệnh anh 26-07: pipeline check-email → fable-real invest → spec+checklist → hmw Opus 5 MAX.
|
||||
|
||||
## Verdict verify của lead (H21 bước-2)
|
||||
|
||||
**ACCEPT spec với 2 CHỈNH:**
|
||||
1. **T3 persona ctx-audit** — câu "KHÔNG Write/Edit — chặn-bằng-thiếu-tool" phải viết đúng nấc: *"tools: khai KHÔNG Write/Edit (mô-tả ý-định — carry `tools-whitelist-no-teeth`: runtime vẫn cấp, backstop THẬT = git-diff commit-gate)"* — CẤM khai thành cơ-chế chặn (bài S143 4-site).
|
||||
2. **T6a pause.md** — thêm vế token vào dòng chi-phí: "+~1-3K tok soạn nháp" (ràng mềm 150K/cửa của hub-owner áp cả token, không chỉ wall-clock).
|
||||
|
||||
**ACCEPT 3 đề-KHÁC của engine so draft lead:** (i) máy = extend `session_ctx.py` (1-nguồn `_SECRET_RES`/`_TS_KEY_RE`) thay `.ps1` mới; (ii) (36)(b) ⇒ KHÔNG carve-out O-1, `pause.md §1` giữ nguyên; (iii) vai kiểm 2-lượt @open/@close kiểm hồi-tố thay 3-nhịp hub.
|
||||
|
||||
**4 quyết định RESOLVED** (vết: **OWNER-DELEGATED qua lệnh pipeline 26-07 → ENGINE-PROPOSED → LEAD-DECIDED @S153; anh veto = 1 edit từng mục; CẤM ghi "owner chốt"**):
|
||||
- (35) `mind_ctx_kb = 32` (KB)
|
||||
- (36) (b) máy-$0 mỗi pause · vai `ctx-audit` chỉ @2 bookend
|
||||
- (37) (b) nạp NỀN RÚT-GỌN @tiep, khoá `tiep_reload` (~40-60K tok vs full 149-199K)
|
||||
- (38) ~~(a) 1 vai~~ → 🔄 **OWNER-VETO @S153 sau executed: hub-form 3-vai** (anh chốt trực tiếp "Build đủ 3 vai như hub") — `ctx-curator` + `ctx-verifier` + `ctx-audit`(thu về vai-3); wire bổ sung cùng phiên (T10 — xem synthesis §OWNER-VETO)
|
||||
|
||||
## Phân đợt thi hành
|
||||
|
||||
| Đợt | Task | Vai | Ghi chú |
|
||||
|---|---|---|---|
|
||||
| **hmw-1** (song song) | T1 máy `mind-check` extend `scripts/session_ctx.py` · T2 template `.claude/templates/session-mind-template.md` · T3 persona `.claude/agents/ctx-audit.md` | implementer-backend · implementer-frontend · implementer-backend | chi tiết + skeleton ruột = sub-fable-invest Mục 2 |
|
||||
| **hmw-2** (sau đợt-1) | T4 fault-inject scratch-tree (PHẦN B #1-#17+#21) · T5 `hmw.js` +VALID_ROLES+writeGuard | test-specialist · implementer-frontend | T4 cần T1+T2 trên đĩa; T5 cần tên vai chốt (= `ctx-audit`) |
|
||||
| **lead-solo** (sau hmw) | T6 wire 4 command · T7 budget.json 3 khoản · T8 docs+adap-report+thư-hub | lead | governance single-writer H6.1; restart-note in đậm |
|
||||
| **phiên sau** | T9 registry-probe + dogfood + mồi-ngầm + đo wall-clock thật | lead + ctx-audit | sau restart CLI |
|
||||
|
||||
## Acceptance + Checklist
|
||||
|
||||
- Acceptance per-task = sub-fable-invest Mục 3 (bảng lệnh + kỳ vọng).
|
||||
- CHECK-LIST KIỂM-TRA-LẠI 24 phép = sub-fable-invest PHẦN B — lead chạy #1-#17+#21 sau wave (T4 đã chạy 1 lượt, lead re-chạy chọn mẫu) · #22-#23 sau lead-solo · #18-#20 @T9 · #24 = 3 khoản KHÔNG-KIỂM-ĐƯỢC chép vào adap-report + thư hub.
|
||||
|
||||
## Ràng đã verify (không lặp chi tiết — B1 trỏ sub-fable-invest)
|
||||
|
||||
BINDING điểm-dừng-rẻ (0 spawn @pause, +~0.3-0.6s máy + ~1-3K tok) ✓ · B1 trỏ-khoá ✓ · sàn-7 K1-K7 ✓ · 3 rào + enclosure ✓ · F-1 3-trạng-thái + kẽ khai ✓ · bất-biến đếm-ĐĨA ✓ · naming khớp C11(b) 2 đời filter ✓ · M-1 hình-B ✓ · không trùng queue @closeout #8 ✓ · Sàn-3 ⑤ sẵn phủ, 0 tín-hiệu mới ✓ · roster 21 > hmw_width.cap 20 → NÊU owner (câu hỏi riêng, KHÔNG tự đổi) ✓.
|
||||
@ -0,0 +1,151 @@
|
||||
# sub-fable-invest-S153 — /fable-real investigator-codebase deep-pass: adopt TRỌN thư `0df10df4` (ctx soft-memory)
|
||||
|
||||
> ĐANG GHI TRONG LÚC LÀM (chống #53). Trạng thái: ĐANG ĐỌC (progress-log dưới). Spec chính = PHẦN A/B sẽ append từng phần.
|
||||
> Phiên S153 (phiên-logic 6) · 2026-07-26 · engine /fable-real 1 lượt.
|
||||
|
||||
## Progress-log (append-only)
|
||||
|
||||
- [x] Đọc thư ② full 8 mục (`broadcasts/inbox/2026-07-25-Governance-pause-tiep-upgrade-vong-ctx.md` 148 dòng) — 4 nhịp / FORM hub §3 / F-1 3-trạng-thái §4 / bảng 13 hàng §5 / SÀN 7 + 3 phép §6 / nấc trung thực §7.
|
||||
- [x] Đọc draft lead `docs/governance/ctx-soft-memory-se-draft.md` — bảng đối chiếu 7-khoản (6+7 đạt sẵn), SE-form `_mind-s-<N>.md` + `### MIND-<k>`, 4 câu (35)(36)(37)(38) + đề xuất 32KB/(b)/(b)/(a).
|
||||
- [x] Đọc adap-report `docs/governance/adap-reports/2026-07-25-…-vong-ctx.md` — nấc agreed; nền SE đo tươi 596.316B ≈ 149-199K tok.
|
||||
- [x] Đọc `pause.md` (5 bước; §2.6 A-D marker⟂narrative + machine-block ~140ms + auto-snap ròng ~64ms; §1 NGỪNG-spawn; §3.5 tick; §4 commit đích-danh).
|
||||
- [x] Đọc `tiep.md` (§0 Sàn-3 5 tín-hiệu + ORPHAN-L dual-accept; §2.5 tick; §2.5b thư; §2.6 đọc `_context` + ghi `_tiep-<i>` SAU §3).
|
||||
- [x] Đọc `session-start.md` BƯỚC 0.5b (engine-đắt) / 0.8 (scaffold máy `session-scaffold.ps1 -New/-Ensure`; a-bis bảng 5 file; ghost-wire `session_ctx_kb` 0-reader) / §2.1.8 tick máy / §2.1.9 trio AUTO giữa 2 bookend (scribe lead ghi return ngay; PIN đích-danh fail-closed; TUẦN TỰ CẤM song song; post-wave git-status assertion).
|
||||
- [x] Đọc `session-end.md` §6.3-bis (`_end` FROZEN idempotent NO-OP; `markers:` = chụp cân-sổ; NO-OP im lặng nếu 0 thư-mục).
|
||||
- [x] Đọc `snapshot.md` (guard skip-êm; `_snapshot-<k>` essence ≤3 dòng + machine-block; secrets-sweep gate exit-1 chặn commit; K đọc LIVE `snapshot_trigger_k` default-if-absent 6).
|
||||
- [x] template + `_context-s-6.md` — FLOW mới-nhất-ở-CUỐI (NGƯỢC chiều `_mind` mới-nhất-ở-TRÊN — bẫy adopt-verbatim phải khai to). Session-6 FLOW còn trống (0 PAUSE).
|
||||
- [x] `session_ctx.py` — secrets-sweep rglob TRỌN session-dir ⇒ `_mind` TỰ vào tầm quét Category-5 @snapshot §3; SECRET_PATTERNS 4 mẫu + `_SECRET_RES` compiled sẵn (rào-3 tái dụng 1-nguồn); machine-block anchor {subject,ts} non-wal; module tự ràng "add subcommand ONLY when a ritual needs it" ⇒ thêm `mind-check` là HỢP luật module.
|
||||
- [x] `session-scaffold.ps1` — 2-mode New/Ensure, exit {0,2,3,4,5}, REFUSE-OVERWRITE, -RepoRoot fault-seam, pure-ASCII, template render {{N}}/{{TS}}/{{HEAD}}. KHÔNG cần sửa cho _mind (lead Write block-0 @cuối bootstrap — content thật, scaffold-rỗng không đạt "nội dung thật").
|
||||
- [x] `governance-detectors.ps1` C10 :1594-1665 (soi session-folder ABSENCE not LATENESS; C10 tự khai cần ts-compare mà "no reliable source" ⇒ rào-2 SE = phòng-thủ cho reader tương-lai) + C11 :1760-1810 (filter `sub-*.md` + `^sub-<role>[-.]` ⇒ đặt tên artifact vai mới `sub-ctx-audit-*.md` để LỌT LƯỚI C11(b) diary-delta — trio `harness-*-return.md` là kẽ đã biết).
|
||||
- [x] **Máy đọc ts của SE (truy theo rào-2):** grep scripts/ = **0 reader nội-dung `^ts:`** (session_ctx.py đọc mtime FS + git-ts; C10 không parse ts; scaffold GHI ts). ⇒ SE hiện KHÔNG có bộ-đọc-mốc kiểu hub; rào-2 vẫn giữ (marker `_pause/_tiep/_snapshot` ĐỀU có `ts:` đầu dòng by-design — reader tương-lai cho C10-LATENESS sẽ quét `_*`); canonical regex đặt 1 chỗ trong session_ctx.py (`_TS_KEY_RE`), mind-check DÙNG nó, reader tương-lai BẮT BUỘC import cùng hằng.
|
||||
- [x] `memory-budget.json` — khuôn khoá owner (`"key": val` + `"_key_..._note"` lineage; tiền lệ OWNER-DELEGATED→LEAD-DECIDED = `hmw_width._ratified_by` @S149); `session_ctx_kb=64` ghost-wire honest_caveat tự dặn "(a) đọc khoá (b) ×1024 (c) gỡ dòng khi có reader" ⇒ wire reader trong cùng máy = đóng ghost-wire $0.
|
||||
- [x] session-end.md §L.b(j)(ii) hình-B + (g-bis) ring1 khuôn AUTO/fail-safe/tuần-tự + (k) trio + §L.c gate 3-nhãn {ĐẠT-kèm-chứng/TRƯỢT/vacuous}.
|
||||
- [x] hmw.js — VALID_ROLES đếm tay = 20; writeGuard :233 liệt danh read-only theo TÊN (thêm vai = sửa cả 2 chỗ); WIDTH_CAP 20 mirror-hardcode (canonical hmw_width.cap); STOP-HARD role ∉ whitelist; SÀN-1 ≥3 task đòi args.run; C1 lane-chết-phải-kêu; sửa hmw.js = re-invoke ăn ngay (script đọc per-invoke), KHÁC agent-file-mới cần RESTART CLI (SE đo S120/S121 — hub §7 quan sát ngược, tin số SE).
|
||||
- [x] wal-flush.ps1:13 — 4 path gồm `.claude/sessions/` ⇒ `_mind` (nằm TRONG path 4 sẵn) tự vào hook + tín-hiệu ⑤ sẵn phủ ⇒ **KHÔNG cần tín-hiệu Sàn-3 mới** (không thêm path hook nào).
|
||||
- [x] bookend-open-synthesis S153 — #53 8/9 garble lượt-1 (6 vai ghi-đĩa-trong-lúc-làm vớt được; 2 return-only resume; trio hết miễn nhiễm); M-1 persona stale-cadence (vai mới PHẢI hình-B từ lúc sinh); queue #8 @closeout ĐÃ nhận fix C11(b) filter `(sub|harness)-*` — spec KHÔNG trùng việc, chỉ đặt tên artifact vai mới khớp cả filter cũ lẫn mới; owner-gated (35)-(38) nay được anh ủy quyền qua lệnh pipeline này.
|
||||
- [x] h24-signal-write.ps1 header — khuôn máy nhà: exit {0,2,3}, enum đọc LIVE cấm hardcode, atomic temp+move, -RepoRoot fault-seam, pure-ASCII. (session-counter-tick.ps1 SKIP đọc — khuôn đã nắm từ 3 máy cùng họ; khai.)
|
||||
- [x] **Truy vấn đề bài "máy đọc ts của SE là script nào":** grep scripts/ = **KHÔNG có reader nội-dung `^ts:` nào đang sống** (session_ctx.py dùng git-ts + FS-mtime `_snapshot-*`; C10 tự khai thiếu nguồn ts để đo LATENESS). Marker `_pause/_tiep/_snapshot` đều mang `ts:` đầu dòng by-design ⇒ reader "mốc gần nhất" TƯƠNG LAI (C10-LATENESS gap) sẽ quét `_*` ⇒ rào-2 giữ, canonical regex `_TS_KEY_RE` đặt MỘT chỗ trong session_ctx.py, mind-check dùng nó, reader tương-lai bắt buộc dùng cùng hằng.
|
||||
- [x] PHẦN A (spec 3-mục) — dưới
|
||||
- [x] PHẦN B (check-list 24 phép) — dưới
|
||||
|
||||
---
|
||||
|
||||
# PHẦN A — PROPOSED-SPEC 3-mục (khuôn H21) — adopt TRỌN thư `0df10df4`
|
||||
|
||||
## Mục 1 — Mục-tiêu + 4 quyết định RESOLVED
|
||||
|
||||
**Mục-tiêu:** cứu 4 lớp trí-nhớ MỀM (gói-turn · hướng-tiếp · kế-hoạch-suy-nghĩ · đang-thảo-luận) qua mỗi `/pause`→`/tiep` bằng: tệp `_mind-s-<N>.md` trong `.claude/sessions/session-<N>/` (block `## MIND-<k>` 5 mục A-E, **mới-nhất-ở-TRÊN**, block cũ bất biến) + 4 nhịp ghi-ra-đĩa (block-0 @cuối bootstrap · refresh @pause · đối-chiếu+nạp-lại-rút-gọn @tiep · mục E gom dòng-sống MỌI spawn/engine-run) + máy-$0 `mind-check` (extend `session_ctx.py`) + 1 vai `ctx-audit` @2 bookend + trần trỏ-khoá `mind_ctx_kb`. Sàn 7-khoản: khoản 6+7 SE đạt sẵn (hook 4-path :13 + single-writer⟂monitor); khoản 1-5 = spec này. BINDING "điểm dừng phải RẺ" giữ nguyên: pause/tiep thêm ~0.3-0.6s máy + 0 spawn.
|
||||
|
||||
**Nhãn ủy quyền chung (ghi vết bắt buộc — tiền lệ `hmw_width._ratified_by`):** 4 quyết định dưới = **OWNER-DELEGATED → ENGINE-PROPOSED → LEAD-DECIDED @S153** (lời anh: "Cho /fable-real đọc kỹ và invest sau đó ra spec… Sau đó cho hwm Opus 5 MAX xử lý" = ủy quyền pipeline; KHÔNG PHẢI "owner chốt từng số"). **Anh veto 1 edit bất cứ lúc nào.** CẤM về sau tự nâng thành "owner chốt" (bài C8b @S149).
|
||||
|
||||
- **(35) RESOLVED: `mind_ctx_kb = 32` (KB).** Đo được: 1 block A-E ước 1-2KB; SE 1 phiên-logic p=1-3 pause (S147-S152) ⇒ file điển hình <10KB ⇒ 32KB = ≥3× headroom; khớp hub O-4 (so-fleet được; hub tự khai 32 không rút từ dữ liệu — SE cũng khai vậy, đổi sau khi có số đo dogfood). `_context` giữ cap RIÊNG 64. Khoá đặt `memory-budget.json` cạnh `session_ctx_kb`, kèm `_mind_ctx_kb_set` vết ủy quyền. Lệnh CHỈ trỏ khoá (B1).
|
||||
- **(36) RESOLVED: (b) — máy-$0 chạy MỖI pause (draft + full), vai kiểm CHỈ spawn @2 bookend.** Lý do đo được: 1 spawn = floor 100K tok (`harness_floor.rounded_up_tokens=100000`) + phút-cấp, còn pause hiện = dò 5ms + machine-block 140ms + sweep 64ms — spawn-mỗi-pause làm điểm dừng đắt lên bậc-độ-lớn = vi phạm BINDING `goi-chot §3` (ràng hub đặt riêng SE); hub-owner chọn (a-nguyên) cho NHÀ HUB nhưng chính thư §7 dặn "chuẩn bị sẵn núm hạ tần suất phóng vai phụ, vì đó là chỗ tốn nhất". **Hệ quả đẹp: KHÔNG cần carve-out O-1** — `pause.md §1 "NGỪNG spawn"` giữ NGUYÊN VẸN (hub phải carve-out (a) vì họ spawn mỗi pause; SE không spawn ở pause thì không có gì phải carve). O-2-ARM (đo per-layer $0) giữ làm phép-KIỂM trong dogfood đúng ghi chú hub.
|
||||
- **(37) RESOLVED: (b) — nạp-lại NỀN RÚT-GỌN mặc định @tiep, danh sách trỏ khoá MỚI `tiep_reload`.** Số: nền-full SE đo tươi @S153 = **596.316B ≈ 149-199K tok** (`instrument-backfill.txt`) — nặng hơn nền hub (439.328B ≈ ~110K) 1.36×; ràng mềm hub-owner = ~150K/cửa ⇒ full-reload nuốt trọn budget một cửa chỉ để nạp. Rút gọn = {STATUS đoạn CURRENT · HANDOFF segment mới nhất · WAL ≤40 dòng · `_mind-s-<N>.md` · `_context-s-<N>.md`} ≈ 40-60K tok (input one-shot, cache-được). Khai lệch-hub-có-lý-do trong thư hồi đáp (hub §8 xin đúng số này). Phạm-vi từng mục khoanh trong `_note` của khoá (khuôn hub "đo theo phạm-vi từng mục đã khoanh trong cấu-hình").
|
||||
- **(38) RESOLVED: (a) — 1 vai `ctx-audit` gộp 3 nhịp hub thành 2 lượt chạy (@open + @close, kiểm HỒI-TỐ mọi block/cửa của phiên).** Sàn khoản 7 chỉ đòi GHI ≠ KIỂM: GHI = lead (single-writer `_mind`) ⟂ KIỂM = ctx-audit (+ máy $0 mỗi cửa). Sàn khoản 5 đạt: vòng soi độc lập 2 đầu phiên, quyền phán TRƯỢT (verdict trong return; KHÔNG tự bắn cờ hệ-thống — lead hợp nhất, mirror hub vai-3). 3-vai hub = FORM (thư §6 liệt "số vai" vào phần tự-quyết). Roster 20→21: **hmw_width.cap=20 ⇒ full-roster sweep tương lai sẽ LOUD-skip 1 lane — NÊU OWNER như câu hỏi riêng, KHÔNG tự đổi số** (O-7 là điểm ký của owner).
|
||||
|
||||
**Khoá/số mới (đặt ở `memory-budget.json`):**
|
||||
1. `"mind_ctx_kb": 32` + `"_mind_ctx_kb_set"`: vết OWNER-DELEGATED @S153 + nguồn số (hub O-4) + đơn vị KB reader ×1024 + "anh veto 1 dòng thì đổi".
|
||||
2. `"tiep_reload": { "mode": "rut-gon", "sources": [ "docs/STATUS.md :: đoạn CURRENT STATE", "docs/HANDOFF.md :: segment mới nhất", ".claude/WAL.md", ".claude/sessions/session-<N>/_mind-s-<N>.md", ".claude/sessions/session-<N>/_context-s-<N>.md" ], "_note": <lý-do + số 596KB vs ~40-60K + reader = nghi-thức /tiep (AI) — khai thẳng chưa có script-consumer, khác class ghost-wire vì hành-vi tiêu thụ mỗi tiep + dogfood đo> }`.
|
||||
3. SỬA `"_session_ctx_kb_honest_caveat"` → `"_session_ctx_kb_reader"`: reader THẬT đầu tiên = `mind-check` phép-phụ-8 (stat `_context` vs 64×1024, cờ khi vượt) — làm đúng 3 điều note cũ tự dặn {(a) đọc khoá (b) ×1024 (c) gỡ dòng khi có reader}. Số 64 KHÔNG đổi (owner-set @S146).
|
||||
|
||||
## Mục 2 — SPEC-LIST từng file (task chia cho hmw + lead)
|
||||
|
||||
> **Ranh cứng:** T1-T5 = wave hmw (worker). **T6-T7-T8 = LEAD-SOLO** — command `.md` + `memory-budget.json` + docs canonical là governance-authoring single-writer (`session-start.md` BƯỚC 0.5 H6.1; hub §7 "lời lệnh là quản-trị, chỉ một người ghi"). Wave vẫn 1 run-folder chung; lead làm T6-T8 song song lane. **Restart chia 2 đợt:** phiên này land FILE; nghi-thức mới + vai mới ĂN từ phiên sau restart CLI (command no-hot-reload + agent-file-mới cần restart — SE đo S120/S121; hmw.js thì re-invoke ăn ngay). T9 = phiên sau.
|
||||
|
||||
### T1 — MÁY `mind-check` (extend `scripts/session_ctx.py`) — role: implementer-backend · effort M · depends: —
|
||||
**Vì sao extend python thay vì .ps1 mới (trả lời đề bài "tái dụng được không?": ĐƯỢC, và NÊN):** (i) rào-3 tái dụng ĐÚNG `_SECRET_RES` compiled sẵn — máy .ps1 mới phải cài bản regex thứ 2 = 2-sự-thật, đúng thứ rào-2 cấm; (ii) hằng `_TS_KEY_RE` đặt cùng module với mọi parser session-file hiện có ⇒ reader-mốc tương-lai (C10-LATENESS) buộc dùng chung; (iii) session-dir resolution + khuôn CLI có sẵn; (iv) module header tự cho phép "add one ONLY when a ritual actually needs it" — 3 nghi-thức sắp gọi thật; (v) cùng runtime đã trả 140ms machine-block ⇒ ước wall-clock tin được. `.ps1` #30 không áp (không sinh .ps1); python giữ ASCII-only-source (unicode qua `\uXXXX` escape cho nhãn "[đã che …]").
|
||||
**Nội dung:** module-level `_TS_KEY_RE = re.compile(r'^[ \t]*ts[ \t]*:', re.I | re.M)` (+comment canonical-single-truth); subcommand `mind-check --session N [--draft FILE] [--closed] [--root PATH]`:
|
||||
- **7 phép chuẩn:** (1) rào-1 `^[ \t]*>[ \t]*anh[ \t]*:` trong vùng nội-dung ⇒ TRƯỢT (verbatim lời anh chỉ sống ở `_context` FLOW) · (2) rào-2 `_TS_KEY_RE` ⇒ TRƯỢT · (3) rào-3 `_SECRET_RES` ⇒ TRƯỢT, ngoại lệ nhãn che `[đã che <8-hex>]` ⇒ ĐẠT · (4) con-trỏ E block TRÊN CÙNG 3-trạng-thái {giải-được=đạt · đang-chờ (cha có)=CỜ khi mở / TRƯỢT khi đóng · hỏng (cha không)=TRƯỢT mọi chế-độ}; kẽ chép nguyên văn thư §4: TÊN-TỆP-SAI-trong-thư-mục-thật đọc thành đang-chờ, tới closed mới siết — KHAI, không tả thành tính năng · (5) số-hiệu: duy nhất + block top ≥ mọi số dưới (KHÔNG neo công-thức đếm — nhà đổi công-thức vẫn kiểm được, đúng hub §3) · (6) bất-biến |block| ∈ {p, p+1}, p = ĐẾM ĐĨA `_pause-*.md` + `pause-*.md` (dual-accept mirror ORPHAN-L); CẤM lấy p từ `markers:`/`mind-blocks:` tự khai — dòng tự khai CHỈ để cross-check ⇒ lệch = cờ-INFO (hub đo khai-THIẾU thật; đĩa là nguồn duy nhất) · (7) trần/nén: `size(_mind)` vs `mind_ctx_kb`×1024 đọc LIVE từ memory-budget.json (thiếu khoá ⇒ **exit 3 fail-loud**, khuôn H24-2 cấm default); vượt ⇒ CỜ + in hướng dẫn "nén block CŨ NHẤT trừ block-0 + top; <3 block ⇒ TỪ-CHỐI nén, giương cờ vượt trần".
|
||||
- **2 phép phụ (khai riêng, không tính vào 7):** (8) `size(_context-s-<N>.md)` vs `session_ctx_kb`×1024 ⇒ cờ — reader THẬT đóng ghost-wire H18 · (9) cấu trúc block: 5 mục A-E hiện diện hoặc `(trống — khai)`; mục D mỗi ý mang nhãn `{mới-nêu|đang-cãi|gần-chốt|treo-chờ-anh}` ⇒ thiếu = trượt-cấu-trúc.
|
||||
- **Enclosure use⟂mention:** chỉ quét DƯỚI `<!-- MIND-RULES-END -->` (khối luật đầu tệp CHỨA chuỗi cấm để giải thích — grep trần tự đỏ oan, thư §3 + feedback citation-trap).
|
||||
- **4 mức {đạt·trượt·cờ·bỏ-qua-có-khai}** per-phép; exit 0 = 0 trượt · 1 = ≥1 trượt · 3 = config/state. **Chế-độ:** draft (kiểm nháp TRƯỚC chèn: rào 1-3 + số-hiệu-draft PHẢI == count-on-disk; bỏ phép 6/7) · closed AUTO khi `_end` tồn tại (`--closed` chỉ để fault-inject) · `--session` BẮT BUỘC KHÔNG default-latest (thư §3 "input chỉ đích danh — 2 cửa sổ song song sẽ đua") · `--root` = seam fault-inject (mirror `-RepoRoot`). **Tên-sai-phải-NÊU-tên:** `_mind-s-<N>.md` vắng ⇒ glob `*mind*`; có ứng viên ⇒ in đúng tên sai trong lý-do bỏ-qua; closed-mode ⇒ TRƯỢT.
|
||||
- Ước wall-clock ~140-300ms/lượt (cùng runtime machine-block 140ms đã đo; T4 đo thật).
|
||||
|
||||
### T2 — TEMPLATE MỚI `.claude/templates/session-mind-template.md` — role: implementer-frontend · effort S · depends: —
|
||||
Ruột: header sID + `<!-- MIND-RULES-START -->` khối luật {3 rào MỖI RÀO KÈM LÝ-DO ĐO ĐƯỢC (rào-1: lời anh = nguồn-duy-nhất ở `_context` FLOW, tệp mềm chỉ trỏ `PAUSE-<k>` · rào-2: marker SE `_pause/_tiep/_snapshot` mang `ts:` đầu dòng by-design, reader-mốc tương-lai quét `_*` không lọc tên — regex canonical = `session_ctx.py:_TS_KEY_RE`, cấm cài bản 2 · rào-3: block bất biến ⇒ secret lọt là vĩnh viễn; ngoại lệ duy nhất `[đã che <8-hex>]`; quét nháp TRƯỚC chèn) + luật mới-nhất-ở-TRÊN chèn dưới `<!-- MIND-TOP -->` (🔴 khai to: NGƯỢC chiều `_context` FLOW mới-nhất-ở-CUỐI — đừng chép khuôn bên kia) + số-hiệu = ĐẾM block hiện có TRƯỚC khi chèn, block-0 chiếm số 0 + block cũ BẤT BIẾN, ngoại lệ DUY NHẤT nén-vượt-trần (block giữa, verbatim còn trong git) + việc-ĐÃ-CHỐT chỉ con-trỏ WAL/HANDOFF CẤM chép + mục trống ghi `(trống — khai)`}` + <!-- MIND-RULES-END -->` + `<!-- MIND-TOP -->` + skeleton block-0 (`## MIND-0 — {{TS}} @ {{HEAD}} (window 1)` + 5 heading A-E). Schema block trong khối luật dùng placeholder `<k>` để parser `^## MIND-\d+` không false-match (mirror trick template `_context` :32). Header block CHỨA ts trong dòng heading (sau em-dash) — KHÔNG phải key `ts:` ⇒ không phạm rào-2.
|
||||
|
||||
### T3 — PERSONA MỚI `.claude/agents/ctx-audit.md` — role: implementer-backend · effort M · depends: —
|
||||
INFORM-only · propose-only · **read-only đúng khuôn monitor nhà (KHÔNG Write/Edit — chặn-bằng-thiếu-tool)**; frontmatter `model: opus` + `effort: max` (worker-tier-pin S124). **Hình-B từ lúc sinh** (datum M-1 ring2 @S153: persona lead-*-auditor còn dạy cadence cũ — CẤM chép các khuôn retired: consent-gate / OVERDUE-per-phiên / "không chạy mỗi phiên"). Nhiệm-vụ: **@open** {block-0 tồn tại + content-thật (≥1 nội-dung máy-khuôn-không-tự-sinh: tên 1 ý D / 1 E-verdict — metadata ts/hash KHÔNG tính, thư §6) + carry: block D của `_mind` phiên trước có ý `treo-chờ-anh`/`gần-chốt` nào bị rơi? + đọc output `mind-check` (KHÔNG re-implement máy) + gieo MỒI-NGẦM: chọn 1 ý chưa-chốt, trả trong return để lead scribe ra đĩa TRƯỚC pause đầu (khai kẽ: single-lead ⇒ tính mù chỉ đạt xuyên-cửa-sổ)} / **@close** {kiểm HỒI-TỐ 5-khoản MỌI block (mục đủ/trống-có-khai · mục E phủ đủ mọi spawn/run của phiên — đối chiếu `runs/` + WAL `wf:` · đã-chốt-chỉ-con-trỏ · 3 rào sạch · nhãn D đủ) + 4-khoản đối-chiếu (hướng-tiếp khớp WAL `next:`? lệch ⇒ TIN SỔ MÁY + cờ · kế-hoạch khớp bản-đồ việc? · ý D nào đã định-đoạt mà chưa đổi nhãn? · con-trỏ giải được?) + bất-biến chuỗi (tự đếm đĩa, so với output máy) + chấm mồi-ngầm}. **Quyền phán TRƯỢT** (VERDICT dòng-1 return: `CTX-AUDIT: DAT|TRUOT|SKIP-CO-KHAI …`; schema-nhỏ 3-field chống #53); KHÔNG tự bắn cờ hệ-thống — lead hợp nhất (hub vai-3). **PIN đích danh fail-closed:** nhận path `_mind` + run-folder; pin missing ⇒ TỪ-CHỐI (CẤM tự tìm "mới nhất"). Fail-safe NO-OP khi phiên không có `_mind` (in 1 dòng, cấm ĐẠT-ảo). Lead scribe return → `sub-ctx-audit-open.md` / `sub-ctx-audit-close.md` trong run-folder bookend NGAY khi trả (khuôn §2.1.9(c)) — tên `sub-ctx-audit-*` khớp lưới C11(b) `sub-*.md` hiện hành (và filter `(sub|harness)-*` queue #8) ⇒ vai mới NẰM TRONG lưới diary-delta ngay từ đầu, không lặp kẽ trio.
|
||||
|
||||
### T4 — FAULT-INJECT máy (scratch-tree) — role: test-specialist · effort M · depends: T1+T2
|
||||
Dựng cây tạm ở scratchpad (`--root` seam): render template THẬT (mẫu sạch = "đúng cái lời-lệnh THẬT sinh ra", thư §6 — CẤM tự chế mẫu dễ-xanh) + fixtures hỏng từng phép + đột-biến + mồi-ngầm-đĩa (`markers:` giả). Chạy trọn PHẦN B #1-#17 + #21; ghi bảng PASS/FAIL vào sub-file lane; số wall-clock thật (Measure-Command ×3) trả cho T6a điền vào pause.md.
|
||||
|
||||
### T5 — ENGINE `.claude/workflows/hmw.js` — role: implementer-frontend · effort XS · depends: T3 (tên vai chốt)
|
||||
+`'ctx-audit'` vào VALID_ROLES (comment 1 dòng: `+S153 ctx soft-memory 0df10df4 — vai KIỂM lớp mềm, INFORM-only, @2 bookend`) + thêm `ctx-audit` vào danh-sách read-only trong writeGuard (:233). KHÔNG đụng WIDTH_CAP (owner-số — chỉ NÊU câu hỏi roster-21 trong report).
|
||||
|
||||
### T6 — LEAD-SOLO: wire 4 lệnh (governance single-writer) · effort M · depends: T1 (lệnh gọi máy phải có máy)
|
||||
- **a. `pause.md` +§2.6-bis** (đặt SAU (C) machine-derive, TRƯỚC (D) auto-snapshot — để secrets-sweep của (D) quét luôn block vừa chèn = lưới-2 sau máy-draft lưới-1): *"Refresh lớp MỀM `_mind-s-<N>.md`: (1) soạn NHÁP block 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 đang-thảo-luận + nhãn · E 1 dòng/spawn {verdict + con-trỏ}}; mục trống ghi `(trống — khai)`; việc ĐÃ-CHỐT = con-trỏ WAL/HANDOFF, CẤM chép. (2) `python scripts/session_ctx.py mind-check --session <N> --draft <file-nháp-scratchpad>` — TRƯỢT ⇒ sửa nháp, CẤM chèn (rào quét dịch-trái). (3) Chèn TOP dưới `<!-- MIND-TOP -->`, số hiệu = ĐẾM block TRƯỚC chèn. (4) mind-check full. Trần = khoá `mind_ctx_kb` (B1 — CẤM chép số vào đây); vượt ⇒ nén block CŨ NHẤT trừ block-0+top, <3 block ⇒ TỪ-CHỐI nén + cờ. File `_mind` chưa có (ca vào giữa) ⇒ tạo từ template + khai trễ. **Chi phí đo/ước: +~0.3-0.6s máy (2 lượt ~140-300ms, cùng cỡ machine-block 140ms) + 1 Edit + ~1-3K tok soạn — 0 spawn (giữ §1 NGỪNG-spawn nguyên vẹn).**"*
|
||||
- **b. `tiep.md`** §2.6 +bullet đọc: *"Có `_mind-s-<N>.md` ⇒ đọc TỪ TRÊN XUỐNG (block trên cùng giàu nhất) + `mind-check --session <N>` (~140-300ms)"*; §3-bis +khối: *"**Bản NẠP-LẠI ≤15 dòng** trong báo-cáo đầu — BẮT BUỘC nhắc ≥1 TÊN ý-D + ≥1 E-verdict từ block trên cùng (bằng-chứng NỘI DUNG — sàn khoản 3; câu 'đã nạp' suông KHÔNG tính); đối-chiếu 4-khoản: hướng-tiếp vs `next:` (LỆCH ⇒ TIN SỔ MÁY + giương cờ) · kế-hoạch vs bản-đồ · ý D đã định-đoạt mà chưa đổi nhãn ⇒ cờ (đổi nhãn = việc lead, ghi ở block kế) · con-trỏ (máy đã chấm); + nạp NỀN RÚT-GỌN theo khoá `tiep_reload` (B1 — CẤM chép danh sách tệp vào đây; ước ~40-60K tok input cache-được)."*
|
||||
- **c. `session-start.md`**: BƯỚC 0.8 (a-bis) +1 row `_mind-s-<N>.md` | lớp MỀM 4-tầng, block MIND-<k> mới-nhất-ở-TRÊN | ghi block-0 @Phase 3.5 (lead) · refresh @`pause.md §2.6-bis` · đọc @`tiep.md §2.6`; +section **"Phase 3.5 — Ctx soft-memory (adopt `0df10df4` @S153)"** sau Phase 3: *"(i) Lead Write `_mind-s-<N>.md` từ template — block-0 nội dung THẬT {A bootstrap-findings · B hướng phiên + vì-sao · C delta bản-đồ · D carry ý-treo từ `_mind` phiên trước + ý mới anh vừa nêu · E dòng-sống wave @open}; 'trước tiên' = trước pause đầu (hub §2: đặt CUỐI nghi-thức mở vì nội dung giàu nhất chỉ có sau các vòng kiểm). (ii) mind-check. (iii) Spawn `ctx-audit` @open (AUTO, INFORM-only — máy TRƯỚC vai: bắt lỗi rẻ trước, đốt tiền sau) — PIN path `_mind` + run-folder bookend; lead scribe `sub-ctx-audit-open.md` NGAY khi trả + M9 diary-seed on-behalf."* + §2.1 roster list +1 dòng 🔎 ctx-audit.
|
||||
- **d. `session-end.md`**: §L.b **+(l)**: *"🔎 ctx-audit @close (AUTO, sau các vòng đo, trước §L.c): PIN `_mind` + run-folder bookend-close; kiểm hồi-tố 5-khoản + đối-chiếu 4-khoản + bất-biến chuỗi + chấm mồi-ngầm; lead scribe `sub-ctx-audit-close.md` + diary-seed."*; §6.3-bis +2 ý: `markers:` thêm `mind-blocks=<n>` (chụp cân-sổ — máy KHÔNG BAO GIỜ đọc nó làm nguồn đếm, đĩa thắng) + *"SAU khi ghi `_end` ⇒ `mind-check --session <N>` (closed-mode tự siết: con-trỏ đang-chờ → TRƯỢT) — TRƯỢT ⇒ xử lý TRƯỚC commit chốt."*
|
||||
- Restart-note in đậm ở cả 4 chỗ sửa: nghi-thức ăn từ PHIÊN SAU restart CLI.
|
||||
|
||||
### T7 — LEAD-SOLO: `memory-budget.json` 3 khoản (Mục 1) · effort S · depends: T1 land (reader có thật rồi mới gỡ caveat)
|
||||
|
||||
### T8 — LEAD: docs + hậu-cần · effort S-M · depends: T1-T7
|
||||
`docs/STATUS.md` §Sub-agents 20→21 (+1 dòng ctx-audit — canonical count); `.claude/agents/README.md` +row (INFORM-only, @2 bookend, decision-tree "không delegate việc ghi `_mind`"); `docs/governance/ctx-soft-memory-se-draft.md` — append khối "RESOLVED @S153 qua pipeline /fable-real→hmw (vết ủy quyền); 4 câu chốt (35)32 · (36)b · (37)b · (38)a" GIỮ draft làm vết; `docs/governance/adap-reports/2026-07-25-…-vong-ctx.md` — nấc agreed→**executed** (điều kiện: T1-T7 land + acceptance PASS; ghi rõ **kiểm-chứng = CHƯA, chờ dogfood T9** — thư §7 cấm khai quá nấc); thư outbox → hub (khuôn §8): số nền SE 596.316B ≈ 149-199K + form SE (1-vai/2-bookend + máy-mỗi-pause, lệch hub-form có lý do BINDING) + 2 datum #53 (return-only hết miễn nhiễm ×2 @S153 · C11(b) trio-blind + fix filter) + kẽ T4 lòi thêm (nếu có) — gộp thư queue #10 bookend S153 được.
|
||||
|
||||
### T9 — PHIÊN SAU (sau restart): registry-probe `ctx-audit` (BƯỚC 0.6b spawn-probe ALIVE) + dogfood 1 vòng THẬT 4 cửa + mồi-ngầm + đo wall-clock pause thật → điền số đo vào pause.md §2.6-bis nếu lệch ước >2× + báo hub kết quả dogfood (đóng vòng "lỗi gửi về hub").
|
||||
|
||||
## Mục 3 — ACCEPTANCE per-task (lệnh chạy được + kỳ vọng)
|
||||
|
||||
| Task | Lệnh | Kỳ vọng |
|
||||
|---|---|---|
|
||||
| T1 | `python scripts/session_ctx.py mind-check --session 6` | session-6 chưa có `_mind` ⇒ `bỏ-qua-có-khai` + exit 0 (KHÔNG xanh-im: in lý-do + kết quả glob `*mind*`) |
|
||||
| T1 | `python scripts/session_ctx.py mind-check --session 6 --root <cây-tạm-thiếu-khoá-mind_ctx_kb>` | exit 3 fail-loud "missing key" (CẤM default) |
|
||||
| T1 | `python -c "open('scripts/session_ctx.py','rb').read().decode('ascii')"` | không exception (ASCII-source giữ) |
|
||||
| T2 | `grep -c 'MIND-RULES-START\|MIND-RULES-END\|MIND-TOP' .claude/templates/session-mind-template.md` | 3 marker đủ; khối luật chứa đủ 3 rào + lý-do |
|
||||
| T3 | `grep -n 'INFORM-only\|effort: max\|model: opus' .claude/agents/ctx-audit.md` + grep khuôn-retired (`consent`, `OVERDUE.*mỗi phiên`) | 3 hit đầu; 0 hit khuôn-retired trong phần nhiệm-vụ |
|
||||
| T4 | bảng PHẦN B #1-#17+#21 trong sub-file lane | từng phép PASS, fixture-hỏng TRƯỢT thật, đột-biến ĐỎ thật |
|
||||
| T5 | `grep -n "ctx-audit" .claude/workflows/hmw.js` | ≥2 hit (VALID_ROLES + writeGuard read-only list) |
|
||||
| T6 | `grep -n "mind-check" .claude/commands/{pause,tiep,session-start,session-end}.md` | 4/4 file có call-site; pause có "§2.6-bis" + số wall-clock; tiep có `tiep_reload` + "≤15 dòng"; session-end có `mind-blocks=` |
|
||||
| T7 | `python -c "import json;d=json.load(open('.claude/agent-memory/memory-budget.json',encoding='utf-8'));print(d['mind_ctx_kb'],d['tiep_reload']['mode'])"` | `32 rut-gon`; grep `_session_ctx_kb_honest_caveat` = 0 hit (đã thay `_session_ctx_kb_reader`) |
|
||||
| T8 | grep STATUS §Sub-agents "21"; adap-report chứa "executed" + "chờ dogfood" | đúng nấc, không khai quá |
|
||||
| T9 | spawn-probe + dogfood + Measure-Command | ALIVE; vòng 4-cửa exit 0; mốc wall-clock ghi lại |
|
||||
|
||||
---
|
||||
|
||||
# PHẦN B — CHECK-LIST KIỂM-TRA-LẠI (lead + anh chạy SAU khi hmw xong)
|
||||
|
||||
> Mỗi phép = {lệnh · kỳ-vọng · loại}. Cây tạm = scratchpad qua `--root` (fault-inject seam, mirror `-RepoRoot`). #1-#17+#21 chạy được NGAY sau wave (T4 đã chạy 1 lượt — lead re-chạy chọn mẫu); #18-#20+#22-#23 cần restart/phiên-sau.
|
||||
|
||||
1. **[happy]** Fixture SẠCH sinh từ template THẬT (render `session-mind-template.md` + block-0 + 1 refresh đúng số) → `mind-check --session <N> --root <cây-tạm>` → exit 0, 0 trượt 0 cờ. (Mẫu sạch PHẢI từ lời-lệnh-thật sinh ra — thư §6, cấm mẫu dễ-xanh tự chế.)
|
||||
2. **[fault-inject]** Rào-1: block dưới RULES-END chứa dòng `> anh: ...` → TRƯỢT exit 1 + in đúng file:line.
|
||||
3. **[anti-Goodhart]** Rào-1 enclosure: chuỗi `> anh:` CHỈ nằm TRONG khối luật START/END → KHÔNG trượt (use⟂mention — chính khối luật chứa chuỗi cấm để giải thích).
|
||||
4. **[fault-inject + anti-Goodhart]** Rào-2 biến-thể: 4 fixture {`ts:` · ` TS :` · `Ts:` · tab-thụt} → 4/4 TRƯỢT; đối-chứng heading `## MIND-1 — 2026-07-26T...` → KHÔNG trượt (ts trong heading ≠ key đầu dòng).
|
||||
5. **[đột-biến]** Rào-2 single-truth: sửa `_TS_KEY_RE` trong session_ctx.py (vd bỏ nhánh khoảng-trắng) → chạy lại #4 → hành-vi đổi THEO (chứng mind-check import chính hằng, không cài regex bản 2); grep đếm định-nghĩa regex ts trong scripts/ = đúng 1 nơi.
|
||||
6. **[fault-inject 2-chiều]** Rào-3: fixture chứa `sk-test123...` → TRƯỢT; fixture chứa `[đã che a1b2c3d4]` → ĐẠT (ngoại-lệ nhãn che 8-hex).
|
||||
7. **[anti-Goodhart]** 2-lưới độc lập: inject `sk-` vào `_mind` cây tạm → `session_ctx.py secrets-sweep --session <N>` CŨNG exit 1 (mind-check KHÔNG thay sweep; sweep rglob trọn dir vốn đã phủ `_mind` — 2 net cùng kêu).
|
||||
8. **[fault-inject + F-1]** Con-trỏ 3-trạng-thái ma trận: {path tồn tại → đạt} · {cha có, file chưa → CỜ (open) / TRƯỢT (closed)} · {cha không có → TRƯỢT cả 2 mode} · {TÊN-TỆP-SAI trong thư-mục thật → đang-chờ (open — kẽ khai nguyên văn thư §4) → TRƯỢT (closed)}. 4 ca × 2 mode đúng bảng.
|
||||
9. **[anti-Goodhart]** F-1 anti-xoá-con-trỏ: ca đang-chờ ở open-mode — đọc message máy: PHẢI nói "chờ file sinh ở cửa đóng" chứ KHÔNG gợi ý xoá con-trỏ (đường-rẻ-nhất-để-xanh phải là đường đúng).
|
||||
10. **[fault-inject + anti-đóng-cứng]** Số-hiệu: {MIND-2 xuất hiện ×2 → TRƯỢT} · {top nhỏ hơn số dưới → TRƯỢT} · {dãy 0,1,5 với 5 ở top → ĐẠT} (chỉ đòi duy-nhất + mới-hơn — không neo công-thức, đúng hub §3).
|
||||
11. **[fault-inject + mồi-ngầm-đĩa]** Bất-biến chuỗi: {p=2, blocks=3}→đạt · {p=2, blocks=2}→đạt · {p=2, blocks=4}→TRƯỢT · {p=2, blocks=1}→TRƯỢT; rồi thêm dòng `markers: _pause=9` GIẢ vào `_end` → kết quả KHÔNG ĐỔI (máy đếm đĩa, tự-khai chỉ sinh cờ-INFO lệch — chống đúng bẫy khai-THIẾU hub đo được).
|
||||
12. **[đột-biến ×2]** Trần/nén: fixture 33KB → CỜ vượt trần + hướng dẫn nén (KHÔNG trượt — nợ hiển thị); fixture 2-block 33KB → CỜ "TỪ-CHỐI nén"; đặt `mind_ctx_kb=1` ở cây tạm → mọi fixture CỜ (chứng đọc khoá LIVE); XOÁ khoá → exit 3 fail-loud.
|
||||
13. **[fault-inject + đóng-nợ H18]** Phép-phụ-8: `_context` 65KB cây tạm → CỜ vượt `session_ctx_kb`; đối chứng 10KB → im. Sau T7: grep `_session_ctx_kb_honest_caveat` trong memory-budget.json = 0 hit (caveat đã thay bằng note reader — đúng 3 điều note cũ tự dặn).
|
||||
14. **[fault-inject]** Draft-mode dịch-trái: draft số-hiệu ≠ count-on-disk → TRƯỢT trước-chèn; draft chứa `ts:` → TRƯỢT trước-chèn (lỗi KHÔNG BAO GIỜ vào tệp); draft sạch → đạt.
|
||||
15. **[fault-inject — kẽ tên-sai]** Xanh-im: dir có `_mind-s6.md` (thiếu `-` trước 6), canonical vắng → output PHẢI NÊU đúng chuỗi `_mind-s6.md` trong lý-do bỏ-qua (pipe grep tên sai → hit); closed-mode → TRƯỢT. (Không nêu tên = lỗi chính tả đi qua cửa dưới vỏ "chưa có gì để kiểm".)
|
||||
16. **[happy — đo BINDING]** Wall-clock: `Measure-Command { python scripts/session_ctx.py mind-check --session 6 }` ×3 → tb ≤ ~0.5s; tổng pause-thêm (draft + chèn + full) ước ≤ ~1 phút wall / 0 spawn — so mốc pause hiện hành (dò 5ms + machine-block 140ms + sweep 64ms). Lệch ước >2× ⇒ điền số THẬT vào pause.md §2.6-bis (T9).
|
||||
17. **[đột-biến + khai]** Immutability: sửa 1 byte block cũ trong `_mind` đã commit → `git diff` HIỆN đúng dòng. KHAI: máy KHÔNG canh bất-biến per-run (cần git-history diff — ngoài tầm $0); lưới = luật + git + ctx-audit @close so-git khi nghi.
|
||||
18. **[happy end-to-end — T9]** Dogfood 1 vòng THẬT: session-start ghi block-0 (≥1 nội-dung máy-khuôn-không-tự-sinh — TÊN 1 ý D thật; metadata KHÔNG tính) → /pause refresh (MIND-1) → /tiep: báo-cáo có bản nạp-lại ≤15 dòng nhắc ≥1 tên-ý-D + 1 E-verdict → /session-end: closed-check exit 0 + `_end` có `mind-blocks=<n>` khớp đĩa.
|
||||
19. **[mồi-ngầm — T9]** ctx-audit @open gieo 1 ý CHƯA-chốt (vết trên đĩa `sub-ctx-audit-open.md` TRƯỚC pause) → cửa-sổ SAU (/tiep) nêu lại đúng ý → ĐẠT. KHAI kẽ: single-lead ⇒ "bên bị chấm không biết" chỉ đạt xuyên-cửa-sổ (fresh window không nhớ ý nào là mồi) — chép vào phần khai, không tả thành tính năng.
|
||||
20. **[happy + đối-chứng dương — T9]** Restart-verify: TRƯỚC restart spawn `ctx-audit` phải FAIL/absent (chứng no-hot-reload agent-file-mới — số đo SE S120/S121 thắng quan-sát hub §7); SAU restart spawn-probe trả `ALIVE|ctx-audit` (BƯỚC 0.6b).
|
||||
21. **[happy — verify claim đề bài]** Sàn-3 ⑤ không cần tín-hiệu mới: commit `_mind` qua hook → `git log --name-only --format='%s' origin/main..HEAD | grep -q '.claude/sessions/'` → hit (⑤ sẵn phủ — `_mind` nằm TRONG path-4 hiện có, KHÔNG path hook mới ⇒ đúng luật "path mới = tín-hiệu mới" mà không kích hoạt nó).
|
||||
22. **[fault-inject 2-chiều — sau wave]** Lưới C11(b): lead scribe `sub-ctx-audit-open.md` mà CHƯA seed diary `agent-memory/ctx-audit/` → `governance-detectors.ps1` C11(b) FLAG diary-0-delta (vai mới NẰM TRONG lưới `sub-*.md` — không lặp kẽ trio `harness-*-return.md`); seed xong → im.
|
||||
23. **[đột-biến + owner-note]** hmw STOP-HARD: wave thử `role:'ctx-audit'` TRƯỚC T5 → throw STOP-HARD (đối-chứng dương); SAU T5 → chạy. NÊU OWNER (không tự đổi): roster 21 > `hmw_width.cap` 20 ⇒ full-roster sweep sẽ LOUD-skip 1 lane — quyết định số là của anh (O-7).
|
||||
24. **[khai KHÔNG-KIỂM-ĐƯỢC — chép vào adap-report + thư hub]** (i) bằng-chứng-nội-dung @tiep không máy-kiểm được (transcript ngoài tầm máy — mirror hub §7(iii); lưới thay = #18 dogfood + #19 mồi-ngầm); (ii) 2-cửa-sổ-song-song = kẽ chấp nhận, chưa bịt (mirror hub §7(iv); PIN đích-danh `--session` giảm đua nhưng không đóng); (iii) máy không canh bất-biến-block per-run (#17 lưới git).
|
||||
|
||||
---
|
||||
|
||||
## Điểm lead PHẢI verify kỹ (trước khi ghi spec-file chính thức)
|
||||
|
||||
1. **Ranh LEAD-SOLO T6/T7/T8** — command .md + memory-budget.json + docs canonical = governance single-writer (H6.1 + hub §7 "lời lệnh là quản-trị, chỉ một người ghi"). Wave CHỈ giao T1-T5. Nếu lead muốn wave đụng command ⇒ phải tự bác luật nhà đã viết — đề nghị KHÔNG.
|
||||
2. **Máy = extend session_ctx.py, KHÔNG .ps1 mới** — lý-do 1-nguồn (`_SECRET_RES` + `_TS_KEY_RE`); .ps1 mới = cài regex bản 2 = 2-sự-thật (đúng thứ rào-2 cấm). Nếu lead nghiêng PS1-khuôn ⇒ phải trả lời được "secret-patterns sống ở đâu, 1 hay 2 chỗ?". (Đây là điểm em ĐỀ KHÁC draft lead `ctx-mind-check.ps1` — lý-do mạnh hơn ghi rõ tại T1.)
|
||||
3. **(36)(b) ⇒ O-1 carve-out KHÔNG cần** — pause.md §1 "NGỪNG spawn" giữ nguyên. Đừng ai "adopt verbatim" carve-out (a) của hub vào pause SE (bài S138 chép-khuôn-kế-thừa-lỗi).
|
||||
4. **Vết ủy quyền (35)-(38)** = OWNER-DELEGATED→LEAD-DECIDED, anh veto 1 edit — CẤM ghi "owner chốt" (tái phạm C8b S149 nếu ghi sai).
|
||||
5. **Chiều chèn NGƯỢC nhau:** `_mind` mới-nhất-ở-TRÊN ⟂ `_context` FLOW mới-nhất-ở-CUỐI — T2/T6 phải khai to ở cả 2 chỗ.
|
||||
6. **Restart 2-đợt:** wave land FILE; nghi-thức + vai ĂN từ phiên sau restart (T9). hmw.js là ngoại lệ ăn-ngay (re-invoke).
|
||||
7. **Đừng trùng việc queue @closeout S153:** C11(b) filter fix = queue #8 (lane tooling) — spec này KHÔNG làm lại, chỉ đặt tên artifact khớp cả 2 đời filter.
|
||||
|
||||
**Token cost estimate (lượt invest này):** ~90-110K in / ~14-16K out.
|
||||
|
||||
<!-- END sub-fable-invest-S153 · TOTAL=9 task -->
|
||||
@ -0,0 +1,87 @@
|
||||
# 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 -->
|
||||
|
||||
@ -0,0 +1,69 @@
|
||||
# sub-implementer-backend-2 — T3: TẠO MỚI `.claude/agents/ctx-audit.md` (persona vai KIỂM lớp mềm)
|
||||
|
||||
> ĐANG GHI TRONG LÚC LÀM (chống #53). Wave hmw-1 · run `2026-07-26-S153-ctx-adopt` · role implementer-backend (lane 2/2).
|
||||
> Vết ủy quyền: **OWNER-DELEGATED qua lệnh pipeline 26-07** — file này KHÔNG ghi "owner chốt" ở bất kỳ đâu.
|
||||
|
||||
## 0. Nguồn đã đọc (trước khi ghi 1 dòng nào)
|
||||
|
||||
| # | File | Lấy gì |
|
||||
|---|---|---|
|
||||
| 1 | `.claude/workflows/runs/2026-07-26-S153-ctx-adopt/spec-ctx-adopt-26-07-2026.md:9` | **CHỈNH-1 của lead** — câu `tools:` phải viết đúng nấc: *"khai KHÔNG Write/Edit (mô-tả ý-định — carry `tools-whitelist-no-teeth`: runtime vẫn cấp, backstop THẬT = git-diff commit-gate)"*; CẤM khai thành cơ-chế chặn (bài S143 4-site) |
|
||||
| 2 | `sub-fable-invest-S153.md:67-68` (§T3) | nhiệm-vụ @open 4-khoản / @close 5-khoản + 4-đối-chiếu + bất-biến + chấm-mồi · PIN fail-closed · NO-OP · VERDICT dòng-1 · schema-nhỏ 3-field · lead scribe `sub-ctx-audit-{open,close}.md` · tên khớp lưới C11(b) `sub-*.md` |
|
||||
| 3 | `sub-fable-invest-S153.md:44` ((38)) + `:37` (Mục 1) | (38)(a) 1 vai · 2 lượt @open+@close kiểm HỒI-TỐ · sàn khoản 5+7: GHI (lead) ⟂ KIỂM (vai) · máy-$0 mỗi cửa ⟂ vai chỉ 2 bookend |
|
||||
| 4 | `sub-fable-invest-S153.md:98` (Mục 3 T3) | ACCEPTANCE: grep `INFORM-only\|effort: max\|model: opus` ≥3 hit · grep khuôn-retired = 0 hit |
|
||||
| 5 | `.claude/agents/ring2-audit.md` (form CHÍNH) | AUTO-fire-after-measure · PIN + fail-safe → NO-OP · no-self-exempt · propose-only + backstop git-diff · `## Ranh-trục` · `## N caveat (khai thẳng)` · CONTRACT nghĩa-vụ số-thứ-tự |
|
||||
| 6 | `.claude/agents/harness-eval.md:3-9` (form frontmatter) | description dài 1 block `|` kết bằng câu **"PHẢI dùng khi/PHẢI dùng SAU…"** + liệt ranh "KHÔNG X (đó là vai Y)" |
|
||||
| 7 | `.claude/agents/harvest-curator.md:57-63` · `tooling-auditor` · `database-agent` · `office-document` | khuôn khối **`## 🚫 Anti-patterns (NEVER)`** (owner (31) S152) — bản MỚI NHẤT của nhà (4/21 vai đã đổi; `## Anti-pattern` là bản cũ ring-family) |
|
||||
| 8 | `.claude/agents/lead-stale-auditor.md:51-54` | 🔴 ĐỌC ĐỂ **TRÁNH** — khối `## Nhịp — mày KHÔNG chạy mỗi phiên` = khuôn STALE (M-1, ring2 bắt @S153). KHÔNG chép 1 chữ nào từ khối này |
|
||||
|
||||
**Quyết định form (khai để lead veto 1 edit nếu muốn):**
|
||||
- Heading anti-pattern dùng bản **MỚI** `## 🚫 Anti-patterns (NEVER)` (đúng task + owner (31) S152), KHÔNG dùng `## Anti-pattern` của ring2 — ring2 là form CHÍNH cho *cấu-trúc*, không phải cho *heading đã bị owner thay*.
|
||||
- Thêm `memory: project` + `maxTurns: 16` (không có trong danh sách frontmatter tối thiểu của spec) — **theo khuôn nhà**: 100% vai read-only hiện hữu (ring1/ring2/ring4/harness-*/lead-*) đều có 2 khoá này. Additive, dễ gỡ.
|
||||
- KHÔNG thêm `color:` (chỉ `lead-stale-auditor` có; ring-family + harness-family không).
|
||||
|
||||
## 1. Ràng buộc TỰ-ÁP khi soạn (checklist trước khi Write)
|
||||
|
||||
1. 0 hit `consent` · 0 hit `OVERDUE` · 0 hit `không chạy mỗi phiên` — **toàn file**, không chỉ phần nhiệm-vụ (siết hơn acceptance để khỏi tranh chấp ranh "phần nhiệm-vụ").
|
||||
2. 0 hit `chặn-bằng-thiếu-tool` (CHỈNH-1) — `harness-eval.md:60` có cụm này, KHÔNG carry sang.
|
||||
3. Hình-B phát biểu ở dạng **KHẲNG ĐỊNH** ("chạy MỖI phiên, CẢ HAI bookend, vô-điều-kiện"), không dùng dạng phủ-định của khuôn cũ.
|
||||
4. Vết ủy quyền ghi đúng nấc **OWNER-DELEGATED → ENGINE-PROPOSED → LEAD-DECIDED @S153**, cấm chữ "owner chốt".
|
||||
5. Con-trỏ khoá/số: trỏ khoá (`mind_ctx_kb`), CẤM chép số 32 vào persona (B1).
|
||||
6. Pure-text MD; gotcha #30 (ASCII) KHÔNG áp (không sinh `.ps1`).
|
||||
|
||||
## 2. Đã ghi (kết quả)
|
||||
|
||||
- `.claude/agents/ctx-audit.md` — **TẠO MỚI** (0 file cũ bị đụng; `ls` trước khi ghi = NO).
|
||||
- Cấu trúc landed: frontmatter 6 khoá → `# ctx-audit` → `## Vì sao mày TỒN-TẠI + TÁCH RIÊNG` → `## Vì sao AUTO vô-điều-kiện 2 bookend (hình-B từ lúc sinh)` → `## CONTRACT — 6 nghĩa-vụ` ((0) PIN · (i) @open 4 khoản · (ii) @close hồi-tố 5 khoản · (iii) @close đối-chiếu 4 khoản · (iv) bất-biến chuỗi · (v) chấm mồi-ngầm) → `## VERDICT + return` → `## File-đọc` → `## Ranh-trục` → `## 3 caveat (khai thẳng)` → `## 🚫 Anti-patterns (NEVER)` 6 mục.
|
||||
|
||||
## 3. ACCEPTANCE (Mục 3 §T3) — số đo THẬT, lệnh dán được
|
||||
|
||||
| # | Lệnh | Kỳ vọng | Đo được | Verdict |
|
||||
|---|---|---|---|---|
|
||||
| A1 | `grep -n 'INFORM-only\|effort: max\|model: opus' .claude/agents/ctx-audit.md` | ≥3 hit | **3 hit / 3 dòng** — `:4` INFORM-only · `:5` `model: opus` · `:6` `effort: max` | **ĐẠT** |
|
||||
| A2 | `grep -o -i 'consent' …` | 0 | **0** | **ĐẠT** |
|
||||
| A2 | `grep -o -i 'OVERDUE.*mỗi phiên' …` (+ `OVERDUE` trần) | 0 | **0 / 0** (không dùng chữ OVERDUE ở đâu cả) | **ĐẠT** |
|
||||
| A2 | `grep -o 'không chạy mỗi phiên' …` | 0 | **0** | **ĐẠT** |
|
||||
| A3 | `grep -c 'chặn-bằng-thiếu-tool'` (CHỈNH-1 lead — cấm) | 0 | **0** (`harness-eval.md:60` có cụm này; KHÔNG carry) | **ĐẠT** |
|
||||
| A3 | `grep -c 'tools-whitelist-no-teeth'` + `grep -c 'git-diff commit-gate'` | ≥1 mỗi | **2** + **1** (description `:4` + caveat 1) | **ĐẠT** |
|
||||
| B1 | `python` yaml.safe_load frontmatter | parse OK | keys = `[name, description, model, effort, tools, memory, maxTurns]` · name=`ctx-audit` · tools_n=**8** (Read/Grep/Glob/Bash + 4 RAG) · desc=**1754 ký-tự** · file=**14.347B** | **ĐẠT** |
|
||||
| B2 | `grep -n '^#\{1,3\} '` | có đủ 2 khối bookend + CONTRACT + anti-pattern | 15 heading: `:29 ## CONTRACT — 6 nghĩa-vụ` với `(0)`PIN·`(i)`@open-4·`(ii)`@close-hồi-tố-5·`(iii)`đối-chiếu-4·`(iv)`bất-biến·`(v)`mồi-ngầm+thách-CLEAN | **ĐẠT** |
|
||||
| B3 | `awk` đếm mục dưới `## 🚫 Anti-patterns (NEVER)` | ≥5 | **7** | **ĐẠT** |
|
||||
| B3b | đếm mục `## 3 caveat` | 3 | **3** | **ĐẠT** |
|
||||
| B4 | `git status --porcelain` | chỉ 2 file của lane này | `?? .claude/agents/ctx-audit.md` + `?? …/sub-implementer-backend-2.md` — mọi entry khác thuộc lane khác (`sub-implementer-backend-1.md` = T1 · `session-mind-template.md` + `sub-implementer-frontend-1.md` = T2) hoặc có TRƯỚC wave (session-counter / broadcasts / adap-reports) | **ĐẠT (containment)** |
|
||||
|
||||
## 4. Phát hiện thêm (verify vs MÁY, không suy đoán) — 2 khớp lưới đã kiểm bằng chính script
|
||||
|
||||
1. **`ctx-audit` AUTO nhập danh sách INFORM-only của detector NGAY khi file land** — `scripts/governance-detectors.ps1:1721-1742` đọc **LIVE** frontmatter mọi `.claude/agents/*.md`, lấy vai nào có chuỗi `INFORM-only` **trong khối frontmatter** (`:1734`) → `name:` (`:1737`). Persona này có `INFORM-only` ở `:4` (trong frontmatter) ⇒ nhập list, **không cần ai wire tay**.
|
||||
2. **Tên artifact `sub-ctx-audit-{open,close}.md` LỌT lưới C11(b) — xác nhận bằng regex thật:** `:1783` `^sub-<role>[-.]` với `$role='ctx-audit'` ⇒ `sub-ctx-audit-open.md` **match**. ⇒ PHẦN B **#22 sẽ FIRE thật**: lead scribe artifact mà chưa có commit trong `.claude/agent-memory/ctx-audit/` ở/sau mtime artifact ⇒ FLAG GAP-3 (`:1790-1793` `git log -1 --format=%cI -- <diary>`). **Việc phải làm của lead:** seed diary `ctx-audit` (M9 on-behalf) cùng lượt scribe.
|
||||
3. **Nuance 2 detector đọc CÙNG artifact KHÁC nhau (chống dự-đoán sai):**
|
||||
- `H25-role-notebook (GAP-3)` `:1098-1101` parse greedy `^sub-(.+)-\d+\.md$` → `sub-ctx-audit-open.md` KHÔNG khớp (`open` không phải số) → nhánh 2 `^sub-(.+)\.md$` → cand `ctx-audit-open` **không** trong roster ⇒ **UNMAPPED, KHÔNG flag** (đúng luật "no name-guessing" `:1068`).
|
||||
- `C11(a) FLAG-khuon` `:1754` `$roleNameRx='(?i)(lead-stale|lead-gap|ring2-audit)'` ⇒ **KHÔNG áp** cho ctx-audit ⇒ persona này **đúng** khi KHÔNG bắt vai gắn class-tag `## FLAG-<n> — <class> — SEV`: ctx-audit không có enum class ĐÓNG (khác 2 vai H24). Không có xung đột luật.
|
||||
4. **Hệ quả roster (KHÔNG tự sửa — T8 của lead):** `.claude/agents/*.md` trừ README nay = **21** file. `docs/STATUS.md` §Sub-agents + `agents/README.md` còn 20 ⇒ khoảng lệch tồn tại tới khi T8 land (spec đã giao). Và `hmw_width.cap=20` < 21 = câu hỏi owner O-7 (spec `:44` — CẤM tự đổi số).
|
||||
|
||||
## 5. Khai thẳng (không tô hồng)
|
||||
|
||||
- **KHÔNG kiểm được trong lane này:** vai chỉ SỐNG sau **restart CLI + spawn-probe** (`session-start` BƯỚC 0.6b) — file mới không hot-reload. PHẦN B #20 (đối-chứng dương trước/sau restart) + #23 (STOP-HARD `hmw.js` trước/sau T5) thuộc T9/T5, lane này không chạm.
|
||||
- **Đã ghi 1 file duy nhất ngoài sub-md:** `.claude/agents/ctx-audit.md` (đúng file task giao). KHÔNG đụng persona khác, KHÔNG đụng `agents/README.md`, KHÔNG đụng `hmw.js`, KHÔNG đụng MEMORY của vai nào, KHÔNG commit.
|
||||
|
||||
<!-- END sub-implementer-backend-2 · T3 · ACCEPTANCE 11/11 ĐẠT · 1 file mới `.claude/agents/ctx-audit.md` (14.347B) -->
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
# sub-implementer-frontend-1 — T2: TẠO MỚI `.claude/templates/session-mind-template.md`
|
||||
|
||||
> ĐANG GHI TRONG LÚC LÀM (chống #53). Run: `2026-07-26-S153-ctx-adopt` · task T2 (đợt hmw-1, song song T1/T3).
|
||||
> Ranh: chỉ 1 file MỚI trong `.claude/templates/` + sub-file này. KHÔNG đụng `scripts/` (T1 = implementer-backend), KHÔNG đụng `.claude/commands/**` (T6 lead-solo), KHÔNG đụng agent-memory.
|
||||
|
||||
## Progress-log (append-only)
|
||||
|
||||
- [x] Đọc spec CHỐT `spec-ctx-adopt-26-07-2026.md` (37 dòng) — T2 = implementer-frontend, effort S, depends: —; acceptance per-task = sub-fable-invest Mục 3.
|
||||
- [x] Đọc `sub-fable-invest-S153.md` Mục 2 §T2 (:64-65) = ruột đầy đủ + Mục 3 dòng T2 (:97) = acceptance + PHẦN B #1/#3/#4 (:112-115) = phép fault-inject sẽ dùng template THẬT làm fixture sạch.
|
||||
- [x] Đọc khuôn nhà `.claude/templates/session-context-template.md` (58 dòng) — trick :32 `ENTRY-SCHEMA` trong HTML-comment + placeholder `<k>` chống parser false-match; SCAFFOLD-META :3; khối luật đầu file :5-8.
|
||||
- [x] Kiểm `_SECRET_RES` — khối luật viết lý-do rào-3 KHÔNG chứa literal khớp mẫu (verify: secrets-sweep + mind-check phép-3 đều 0-hit trên fixture render — xem acceptance-d T1).
|
||||
- [x] Write template + verify 3 acceptance.
|
||||
|
||||
## ACCEPTANCE *(lead on-behalf @S153 — lane mất return [schema-fail #53-biến-thể], template ĐÃ LAND 8.819B; lead verify độc lập)*
|
||||
|
||||
| # | Phép | Đo được | Verdict |
|
||||
|---|---|---|---|
|
||||
| 1 | grep 3 marker `MIND-RULES-START/END/MIND-TOP` | **3** | ĐẠT |
|
||||
| 2 | `^[ \t]*ts[ \t]*:` key-line | **0** (ts sống trong heading sau em-dash) | ĐẠT |
|
||||
| 3 | 3 rào kèm lý-do trong khối luật | **6 hit** `rào-` (3 rào × tên+lý-do) | ĐẠT |
|
||||
| 4 | render fixture từ template THẬT → mind-check full | 8 đạt/0 trượt/2 khai · exit 0 (mẫu-sạch-từ-lời-lệnh-thật — thư §6) | ĐẠT |
|
||||
|
||||
<!-- END sub-implementer-frontend-1 · TOTAL=4 acceptance -->
|
||||
|
||||
@ -0,0 +1,138 @@
|
||||
# sub-implementer-frontend-2 — T5: `hmw.js` +VALID_ROLES `ctx-audit` +writeGuard read-only
|
||||
|
||||
> RUN: `2026-07-26-S153-ctx-adopt` · wave `hmw-2` · vai `implementer-frontend` · ĐỢT-2 adopt thư `0df10df4`.
|
||||
> Vết uỷ-quyền: **OWNER-DELEGATED** (CẤM ghi "owner chốt").
|
||||
> File này ghi **TRONG LÚC LÀM** (anti-#53) — có END-line ở cuối. Nếu thiếu END-line ⇒ lane chết giữa đường, đọc phần đã ghi làm ground-truth.
|
||||
> 🔸 **Vết tự-sửa (honesty):** bản đầu của §4/§5 được ghi TRƯỚC khi Edit (dự-đoán số dòng để chống #53). Sau khi đo thật, §4/§5 đã bị **thay bằng số ĐO ĐƯỢC** — 2 chỗ dự-đoán lệch: dòng template-literal thật là **:235** (dự-đoán :234) và comment writeGuard thật **tách 2 dòng** (:228+:229, dự-đoán gộp 1 dòng). Không để số dự-đoán đứng như số đo.
|
||||
|
||||
## 0. Cờ NAMING (khai NGAY, không chôn)
|
||||
|
||||
Prompt harness (writeGuard `hmw.js:235`) bơm `subMdPath = .../sub-implementer-frontend-1.md` (index GLOBAL theo `taskList` — S134), NHƯNG:
|
||||
|
||||
- `sub-implementer-frontend-1.md` **ĐÃ TỒN-TẠI** từ ĐỢT-1 (T2 template, 2020 B, mtime 2026-07-26 14:23) — bằng chứng `ls` run-folder.
|
||||
- TASK text của lead ghi rõ: "RUN-TRACE: ghi `sub-implementer-frontend-2.md`".
|
||||
- ⇒ Ghi vào `-1` = **đè mất evidence đợt-1** (vi-phạm B6 isolation "KHÔNG ghi sub-MD agent khác"). Chọn `-2` theo TASK. `subMdPath` return = `-2` (file THẬT tôi ghi); lệch với writeGuard-injected là **CÓ Ý**, khai ở đây + trong findings.
|
||||
- Nguyên-nhân gốc: `hmw.js:225` đánh index theo `i` trong **taskList của invocation hiện tại**, KHÔNG biết đợt trước đã dùng `-1`. Đợt-2 = invocation MỚI ⇒ `i` reset ⇒ collision. Cùng lớp S133/S134 nhưng **kẽ CÒN LẠI**: S134 chỉ vá ca "2 role KHÁC nhau cùng invocation"; đây là **CÙNG role, 2 invocation khác nhau** ⇒ vẫn đụng. (Đề-xuất cho lead, KHÔNG tự làm: cho `run-id` + số đợt vào tên, hoặc lead truyền `startIndex`.)
|
||||
|
||||
## 1. Pre-state (đo TRƯỚC khi sửa)
|
||||
|
||||
```
|
||||
$ grep -n "ctx-audit" .claude/workflows/hmw.js → 0 hit
|
||||
$ grep -c "" .claude/workflows/hmw.js → 287 dòng
|
||||
$ ls -la .claude/agents/ctx-audit.md → 14347 B, Jul 26 14:13 (T3 đã land ⇒ tên vai chốt = 'ctx-audit')
|
||||
```
|
||||
|
||||
`VALID_ROLES` = `hmw.js:22-41` (trước sửa), đếm phần tử = **20**:
|
||||
investigator-codebase · investigator-api · implementer-backend · implementer-frontend · test-specialist · reviewer · cicd-monitor · frontend-designer · database-agent · office-document · tooling-auditor · harvest-curator · lead-stale-auditor · lead-gap-auditor · harness-eval · harness-refine · harness-audit · ring1-audit · ring2-audit · ring4-audit.
|
||||
|
||||
Vùng writeGuard đọc `hmw.js:226-242` (trước sửa). Cấu-trúc = **2 nơi** liệt vai read-only theo TÊN, phải sửa CẢ 2 (chính comment `:226-227` tự khai luật "thêm vai = sửa CẢ 2 chỗ"):
|
||||
|
||||
1. **JS comment `:226-227`** — dòng doc "SE read-only sub (KHÔNG Write tool): …" + "Write sub: …". Đây là chỗ DUY NHẤT đặt được **comment JS** (mục 2 nằm trong template-literal ⇒ không nhét `//` vào được, sẽ thành text đi vào prompt).
|
||||
2. **Template-literal `:233`** (nay `:235`) — bullet `• NẾU mày CHỈ có Bash (read-only sub: … — KHÔNG Write tool)` = **prose đi VÀO PROMPT sub** ⇒ đây là điểm có RĂNG runtime.
|
||||
|
||||
Xác nhận `ctx-audit` THUỘC nhóm read-only: `.claude/agents/ctx-audit.md:7` → `tools: [Read, Grep, Glob, Bash, mcp__rag-unified__*]` — **KHÔNG Write/Edit**. (Persona tự khai đây là "mô-tả ý-định", carry `tools-whitelist-no-teeth`; backstop THẬT = git-diff commit-gate.)
|
||||
|
||||
## 2. Ràng buộc CẤM (đã tuân thủ, có đo)
|
||||
|
||||
- ❌ KHÔNG đụng `WIDTH_CAP` (nay `hmw.js:152`, = 20). Roster 21 > cap 20 là **câu hỏi owner đã NÊU** ở `spec-ctx-adopt-26-07-2026.md:36` ("roster 21 > hmw_width.cap 20 → NÊU owner (câu hỏi riêng, KHÔNG tự đổi)"). Số canonical ở `.claude/agent-memory/memory-budget.json → hmw_width.cap` (B1) ⇒ sửa 1 nơi = tạo drift. KHÔNG chạm.
|
||||
- ❌ KHÔNG đụng `TIER2_EXPECTED_FULL_ID` (nay `:64`, = `'claude-opus-5'`).
|
||||
- ❌ KHÔNG sửa gì khác trong hmw.js · KHÔNG chạm `agent-memory/*` · KHÔNG chạm MD canonical · KHÔNG chạm sub-MD người khác · KHÔNG RAG-write.
|
||||
|
||||
## 3. Sửa đã thực hiện (đúng 2 vùng, 3 Edit)
|
||||
|
||||
### Vùng A — `VALID_ROLES` :41 (phần tử cuối mảng)
|
||||
|
||||
```js
|
||||
'ctx-audit', // +S153 ctx soft-memory 0df10df4 — vai KIỂM lớp mềm _mind, INFORM-only, @2 bookend (OWNER-DELEGATED pipeline 26-07)
|
||||
```
|
||||
|
||||
Comment 1 dòng **đúng nguyên-văn** lead giao. Đặt SAU dòng `'ring2-audit', 'ring4-audit',` (và sau comment của chúng) = append cuối, giữ trật-tự lịch-sử "vai mới append cuối". Dấu `,` cuối giữ trailing-comma style hiện hành.
|
||||
|
||||
### Vùng B — writeGuard, 2 điểm (gộp 1 hunk vì cách nhau < 6 dòng)
|
||||
|
||||
- `:228-229` (JS comment) — thêm `(+S153 ctx-audit — KIỂM lớp mềm _mind, tools: KHÔNG Write/Edit).` vào cuối danh-sách read-only; dòng "Write sub: …" tách xuống dòng riêng (giữ độ dài dòng đọc được, KHÔNG đổi nội dung).
|
||||
- `:235` (template-literal đi vào prompt) — thêm `, ctx-audit` SAU `harness-audit`, giữ đúng syntax hiện hành (dấu `,` + đuôi `— KHÔNG Write tool`).
|
||||
|
||||
**Vì sao PHẢI cả 2:** chỉ sửa `:235` ⇒ doc-comment `:228` nói sai (drift NỘI-BỘ cùng file, đúng lớp bẫy mà chính comment đó cảnh báo); chỉ sửa comment ⇒ **prompt runtime KHÔNG đổi** ⇒ ctx-audit được hướng-dẫn như write-sub ⇒ nó Bash-write MD ⇒ mojibake G-009. Điểm `:235` mới là điểm có răng; điểm `:228` giữ doc khỏi lệch.
|
||||
|
||||
## 4. Post-state — SỐ ĐO THẬT (verbatim)
|
||||
|
||||
```
|
||||
$ grep -n "ctx-audit" .claude/workflows/hmw.js
|
||||
41: 'ctx-audit', // +S153 ctx soft-memory 0df10df4 — vai KIỂM lớp mềm _mind, INFORM-only, @2 bookend (OWNER-DELEGATED pipeline 26-07)
|
||||
228: // reviewer, cicd-monitor (+ monitor tooling-auditor/harvest-curator) (+S153 ctx-audit — KIỂM lớp mềm _mind, tools: KHÔNG Write/Edit).
|
||||
235: ` • NẾU mày CHỈ có Bash (read-only sub: … harness-refine, harness-audit, ctx-audit — KHÔNG Write tool): …`
|
||||
$ grep -c "ctx-audit" .claude/workflows/hmw.js → 3 ✅ ≥2 (VALID_ROLES + writeGuard ×2)
|
||||
```
|
||||
|
||||
Đếm `VALID_ROLES` **bằng lệnh KHÁC** grep-đơn (trích block rồi đếm string quoted — né bẫy "grep -c đếm DÒNG" vì `'ring2-audit', 'ring4-audit',` là 2 phần tử TRÊN CÙNG 1 DÒNG):
|
||||
|
||||
```
|
||||
$ awk 'NR>=22 && NR<=43' .claude/workflows/hmw.js | grep -o "'[a-z0-9-]*'" | wc -l
|
||||
21 ✅ = 21 (thứ tự 1..21, ctx-audit ở vị-trí 21 — danh sách đầy đủ đã in, xem §1 + ctx-audit)
|
||||
```
|
||||
|
||||
Diff-scope:
|
||||
|
||||
```
|
||||
$ git diff --stat -- .claude/workflows/hmw.js
|
||||
.claude/workflows/hmw.js | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
$ git diff -U3 | grep "^@@"
|
||||
@@ -38,6 +38,7 @@ const VALID_ROLES = [ ← vùng A
|
||||
@@ -224,13 +225,14 @@ const results = await parallel(...) ← vùng B (2 điểm gộp 1 hunk)
|
||||
⇒ ĐÚNG 2 hunk, KHÔNG có hunk thứ 3.
|
||||
```
|
||||
|
||||
Cân sổ +4/−2: vùng A = +1/−0 · comment `:228` 1 dòng → 2 dòng = +2/−1 · literal `:235` = +1/−1. Tổng +4/−2, net +2 dòng ⇒ 287 → **289** dòng (khớp `grep -c ""`).
|
||||
|
||||
Vùng CẤM còn nguyên (đo, không phải khẳng định):
|
||||
|
||||
```
|
||||
$ git diff -- .claude/workflows/hmw.js | grep -c 'WIDTH_CAP' → 0
|
||||
$ git diff -- .claude/workflows/hmw.js | grep -c 'TIER2_EXPECTED_FULL_ID' → 0
|
||||
$ grep -n "^const WIDTH_CAP" hmw.js → 152:const WIDTH_CAP = 20 (giá trị NGUYÊN)
|
||||
$ grep -n "^const TIER2_EXPECTED_FULL_ID" hmw.js → 64:const TIER2_EXPECTED_FULL_ID = 'claude-opus-5' (NGUYÊN)
|
||||
```
|
||||
|
||||
## 5. Syntax-check — làm ĐÚNG cách (KHÔNG lấy `node --check` file thô làm acceptance)
|
||||
|
||||
Memory-pack cảnh báo: `hmw.js` = body được runtime **wrap async fn**, có top-level `await`/`return` ⇒ `node --check` file thô SẼ fail. Đo thật đúng như vậy, và **đã chứng là pre-existing bằng đối-chứng HEAD**:
|
||||
|
||||
```
|
||||
$ node --check <copy .mjs cua ban DA SUA> → SyntaxError: Illegal return statement (:289 `return results.filter(Boolean)`)
|
||||
$ node --check <copy .mjs cua ban HEAD> → SyntaxError: Illegal return statement (CÙNG lỗi, CÙNG chỗ)
|
||||
⇒ fail này là BASELINE, KHÔNG phải regression của tôi.
|
||||
```
|
||||
|
||||
Tín-hiệu DƯƠNG (3 phép, đều PASS):
|
||||
|
||||
```
|
||||
1) Isolated parse VALID_ROLES block (awk 22-42 → .mjs) → PARSE-OK (mảng 21 phần tử, nháy/phẩy cân)
|
||||
2) Isolated parse writeGuard assign (awk 229-245 → .mjs) → PARSE-OK (template-literal cân, backtick/${} không vỡ)
|
||||
3) Wrapped-parse TOÀN FILE (mô phỏng runtime: bọc `async function __wrap(){…}` + de-export `meta`):
|
||||
ban DA SUA → PARSE-OK toan file
|
||||
ban HEAD → PARSE-OK toan file
|
||||
⇒ 2 bản CÙNG trạng-thái hợp-lệ ⇒ edit KHÔNG đổi tính hợp-lệ cú-pháp.
|
||||
```
|
||||
|
||||
*(2 lượt wrap đầu của tôi fail vì LỖI CỦA WRAPPER, không phải của hmw.js: `export const meta` không đặt được trong function, và param `A`/`SCHEMA` của wrapper trùng `const` trong file. Ghi lại để người sau khỏi đọc nhầm thành "hmw.js lỗi".)*
|
||||
|
||||
`npm run build` ×2 app = **N/A, khai thẳng**: task này KHÔNG chạm `fe-admin/src` hay `fe-user/src` (file là governance-script **single-copy**, không có bản mirror 2 app) ⇒ sàn thường-lệ "mirror SHA ×2 + build ×2" **không áp-dụng được**; sàn thay-thế đã dùng = grep-count + đếm-bằng-lệnh-khác + diff-scope 2-hunk + 3 phép parse có đối-chứng HEAD.
|
||||
|
||||
## 6. Containment (git status)
|
||||
|
||||
Tôi chạm ĐÚNG 2 path: `.claude/workflows/hmw.js` (3 Edit) + `.claude/workflows/runs/2026-07-26-S153-ctx-adopt/sub-implementer-frontend-2.md` (Write, file này). Các entry khác trong `git status` (`memory-budget.json`, `commands/pause.md`, `commands/tiep.md`, `.session-counter.json`, `broadcasts/*`, `adap-reports/*`, `scripts/session_ctx.py`, `docs/governance/ctx-soft-memory-se-draft.md`, `.claude/agents/ctx-audit.md`, `.claude/templates/session-mind-template.md`, sub-MD backend) = của **đợt-1 / lane khác / lead**, KHÔNG phải tôi.
|
||||
|
||||
🔸 **Cờ cho lead (ngoài scope tôi, KHÔNG tự xử):** `?? scripts/__pycache__/` đang untracked — artifact chạy Python của lane T1, đừng để lọt vào commit (kiểm `.gitignore`).
|
||||
|
||||
## 7. Đã KHÔNG làm (khai để lead không đọc thành đã-phủ)
|
||||
|
||||
- KHÔNG đổi `WIDTH_CAP` 20 → 21. **Hệ-quả THẬT phải biết:** roster nay 21 > cap 20 ⇒ sweep TOÀN-ROSTER sẽ bị `:153-161` **LOUD-skip lane thứ 21** (chạy 20 lane đầu, bỏ lane cuối, log 🔴). Lane bị bỏ = lane **cuối theo thứ-tự taskList**, KHÔNG cố-định là ctx-audit. Cần owner trả lời câu hỏi spec `:36`; nếu owner đồng ý nâng thì phải đổi **2 nơi cùng lúc** (`hmw.js:152` mirror + `memory-budget.json → hmw_width.cap` canonical) — B1.
|
||||
- KHÔNG wire ctx-audit vào `session-start.md` Phase 3.5(iii) / `session-end.md` §L.b(l) (= T6 lead-solo, governance single-writer H6.1).
|
||||
- KHÔNG cập-nhật `docs/STATUS.md §Sub-agents` (= T8 lead-solo).
|
||||
- KHÔNG chạm `memory-budget.json`, KHÔNG ghi `agent-memory/implementer-frontend/MEMORY.md` (lead harvest @P3 từ `memoryDelta`).
|
||||
- KHÔNG dogfood/spawn thử ctx-audit (= T9 phiên sau, cần restart CLI để registry nhận agent MỚI — lesson: agent-MỚI cần restart, khác hot-reload sửa hmw.js).
|
||||
|
||||
END sub-implementer-frontend-2 — T5 HOÀN TẤT · 3 hit grep (:41/:228/:235) · VALID_ROLES=21 · 2 hunk (+4/−2) · WIDTH_CAP=20 & TIER2 NGUYÊN · parse PASS đối-chứng HEAD.
|
||||
@ -0,0 +1,266 @@
|
||||
# sub-test-specialist-1 — T4 FAULT-INJECT trọn PHẦN B #1-#17 + #21 (máy `mind-check`)
|
||||
|
||||
> GHI TRONG LÚC LÀM, từng phép một (chống #53). END-line ở cuối khi xong.
|
||||
> Task: T4 spec `spec-ctx-adopt-26-07-2026.md` + `sub-fable-invest-S153.md` PHẦN B (24 phép; T4 chạy #1-#17 + #21).
|
||||
> Vết ủy quyền: OWNER-DELEGATED qua lệnh pipeline 26-07 — KHÔNG ghi "owner chốt" ở bất kỳ đâu.
|
||||
|
||||
## ⚠️ Lệch tên file (khai ngay, mirror lane backend-1)
|
||||
|
||||
TASK-block chỉ định `sub-test-specialist-1.md` + END-line `<!-- END sub-test-specialist-1 · TOTAL=<n> phép -->`;
|
||||
footer RUN-TRACE chung nói `-0`. Theo chỉ-thị task-specific (nêu 2 lần + END-line khớp) ⇒ ghi `-1`. KHÔNG có `-0`.
|
||||
*(Bối cảnh S133: 2 invocation cùng role/cùng index ĐÃ từng ghi đè nhau — dùng `-1` cũng tránh trùng slot.)*
|
||||
|
||||
## Ranh scope đã giữ
|
||||
|
||||
- **0 file repo thật bị sửa.** Mọi mutation nằm trong scratchpad `…/scratchpad/t4/**` (seam `--root`).
|
||||
- Phép #5 (đột-biến `_TS_KEY_RE`) sửa **BẢN COPY** `t4/mut/scripts/session_ctx.py`, KHÔNG chạm `scripts/session_ctx.py` của repo.
|
||||
- Phép #17 · #21 · #13c chỉ **ĐỌC** repo thật (`git diff` read-only, grep) — 0 commit.
|
||||
- KHÔNG đụng production code (`src/Backend`, `fe-*`), KHÔNG đụng `tests/**` (task này không phải test C#).
|
||||
|
||||
## Fixture provenance (điều kiện thư §6)
|
||||
|
||||
| Thứ | Giá trị đo |
|
||||
|---|---|
|
||||
| Mẫu SẠCH | **render từ `.claude/templates/session-mind-template.md` THẬT** (8.845B) — thay `{{N}}`→6 · `{{TS}}`→`2026-07-26T14:07:30+07:00` · `{{HEAD}}`→`d503f57` (lấy từ `git log -1 --format='%cI|%h'` repo thật) |
|
||||
| Mẫu sạch sau chèn 1 refresh | 9.548B (`MIND-1` chèn ngay dưới dòng marker điểm-chèn + `MIND-0` của template giữ nguyên) |
|
||||
| Builder | `…/scratchpad/t4_fixtures.py` (27 cây + 3 draft + 1 bản mutant) |
|
||||
| session id cây tạm | **N = 6** — cố ý khớp literal PHẦN B (`_mind-s6.md` ở #15, `--session 6` ở #16) |
|
||||
| Cây cũ | `mtree-ok-1340` / `mtree-nokey-1340` / `t-*` (lane trước) **KHÔNG xoá, KHÔNG tái dùng** — mẫu sạch của lane đó hand-roll từ SPEC marker, không phải từ template THẬT ⇒ T4 dựng bộ mới |
|
||||
|
||||
---
|
||||
|
||||
## BẢNG PHÉP (đang append từng phép)
|
||||
|
||||
> Lệnh gốc mọi dòng (chạy từ repo root, `$T` = `…/scratchpad/t4`):
|
||||
> `python scripts/session_ctx.py mind-check --session 6 --root $T/<fixture> [--closed] [--draft <f>]`
|
||||
|
||||
### #1 [happy] mẫu SẠCH render từ template THẬT — **PASS**
|
||||
|
||||
| Trường | Giá trị |
|
||||
|---|---|
|
||||
| fixture | `t4/01-clean` — template THẬT (8.845B) + `MIND-1` refresh chèn dưới marker điểm-chèn ⇒ 9.548B; p=1 (`_pause-1.md`); `_context-s-6.md` 2.995B; budget `{mind_ctx_kb:32, session_ctx_kb:64}` |
|
||||
| kỳ-vọng | exit 0, 0 trượt, 0 cờ |
|
||||
| THỰC-ĐO | **exit 0** · `verdict: dat=10 TRUOT=0 co=0 bo-qua-co-khai=0` · phép-6 `\|block\|=2 ; p (DEM DIA)=1 [_pause-*.md=1 + pause-*.md=0 dual-accept]` · phép-7 `9548B vs mind_ctx_kb x1024 = 32768B (doc LIVE, 0 hardcode)` · phụ-8 `2995B vs 65536B` · phụ-9 `2 block: 5 muc A-E du + moi y muc D co nhan` |
|
||||
| loại | happy — **và là bằng chứng mẫu sạch không phải mẫu-dễ-xanh tự chế** (thư §6) |
|
||||
|
||||
### #2 [fault-inject] rào-1: `> anh:` DƯỚI RULES-END — **PASS (trượt thật)**
|
||||
|
||||
| Trường | Giá trị |
|
||||
|---|---|
|
||||
| fixture | `t4/02-rao1` = 01-clean + chèn `> anh: lam tiep di, dung hoi lai` vào mục A của block `MIND-1` (dòng 72, DƯỚI RULES-END dòng 62) |
|
||||
| kỳ-vọng | TRƯỢT exit 1 + in đúng file:line |
|
||||
| THỰC-ĐO | **exit 1** · `(1) rao-1 loi-anh-verbatim : TRUOT` · detail `- _mind-s-6.md:72 > anh: lam tiep di, dung hoi lai` — số dòng khớp đếm độc lập (python enumerate = dòng 72) |
|
||||
| loại | fault-inject |
|
||||
|
||||
### #3 [anti-Goodhart] enclosure use⟂mention — **PASS**
|
||||
|
||||
| Trường | Giá trị |
|
||||
|---|---|
|
||||
| fixture | `t4/01-clean` — chuỗi `> anh:` CÓ THẬT trong mẫu sạch, tại **dòng 28** = TRÊN `MIND-RULES-END` (dòng 62). Đây là dòng của **template THẬT** (`session-mind-template.md:28`, phần giải thích rào-1), không phải do tôi thêm |
|
||||
| kỳ-vọng | KHÔNG trượt (khối luật được phép chứa chuỗi cấm để giải thích) |
|
||||
| THỰC-ĐO | `(1) rao-1 : dat` + `0 hit '> anh:' duoi RULES-END` — **trong khi cùng chuỗi ở dòng 72 thì trượt (#2)** ⇒ discriminator là **vị trí so marker**, không phải khớp-mẫu-trần. Đối chứng 2 chiều trên CÙNG 1 chuỗi |
|
||||
| loại | anti-Goodhart (citation-trap class) |
|
||||
|
||||
### #4 [fault-inject + anti-Goodhart] rào-2 4 biến-thể + đối-chứng heading — **PASS 4/4 + contrast**
|
||||
|
||||
| fixture | dòng inject (dòng 72, dưới RULES-END) | kỳ-vọng | THỰC-ĐO |
|
||||
|---|---|---|---|
|
||||
| `04a-ts-plain` | `ts: 2026-07-26T15:00:00+07:00` | TRƯỢT | **exit 1** · `(2) rao-2 : TRUOT` · `_mind-s-6.md:72 key-line 'ts:' (canonical regex session_ctx.py:_TS_KEY_RE)` |
|
||||
| `04b-ts-space` | `··TS·:·2026-07-26T15:00:00` (thụt 2 space + space TRƯỚC dấu hai chấm + HOA) | TRƯỢT | **exit 1** · `(2) TRUOT` |
|
||||
| `04c-ts-case` | `Ts: 2026-07-26T15:00:00` | TRƯỢT | **exit 1** · `(2) TRUOT` |
|
||||
| `04d-ts-tab` | `\tts:\t2026-07-26T15:00:00` (thụt TAB) | TRƯỢT | **exit 1** · `(2) TRUOT` |
|
||||
| đối-chứng `01-clean` | heading `## MIND-1 — 2026-07-26T14:07:30+07:00 @ d503f57 (window 2)` (dòng 69) — ts NẰM TRONG heading | KHÔNG trượt | `(2) rao-2 : dat` + `0 key-line 'ts:' (heading-embedded ts is NOT a key line -- by design)` |
|
||||
|
||||
⇒ 4/4 trượt thật, ts-trong-heading không đỏ oan. Loại: fault-inject + anti-Goodhart.
|
||||
|
||||
### #5 [đột-biến] single-truth `_TS_KEY_RE` — **PASS (ĐỎ thật, hành-vi đổi THEO)**
|
||||
|
||||
Đột-biến trên **BẢN COPY** `t4/mut/scripts/session_ctx.py:59` (repo thật KHÔNG bị sửa):
|
||||
`_TS_KEY_RE = re.compile(r'^[ \t]*ts[ \t]*:', re.I | re.M)` → `re.compile(r'^ts:', re.I | re.M)` (bỏ nhánh khoảng-trắng/thụt-đầu-dòng).
|
||||
|
||||
| fixture | máy THẬT (`scripts/session_ctx.py`) | máy ĐỘT-BIẾN (`t4/mut/…`) | đổi? |
|
||||
|---|---|---|---|
|
||||
| `04a-ts-plain` (`ts:` sát lề) | TRƯỢT · exit 1 | TRUOT · exit 1 | không (đúng — mutant vẫn khớp dạng này) |
|
||||
| `04b-ts-space` (thụt + space trước `:`) | TRƯỢT · exit 1 | **dat · exit 0** | ✅ **ĐỔI** |
|
||||
| `04c-ts-case` (`Ts:`) | TRƯỢT · exit 1 | TRUOT · exit 1 | không (`re.I` giữ ở cả 2 bản) |
|
||||
| `04d-ts-tab` (thụt TAB) | TRƯỢT · exit 1 | **dat · exit 0** | ✅ **ĐỔI** |
|
||||
| `01-clean` | dat · exit 0 | dat · exit 0 | không (đúng — không đỏ oan) |
|
||||
|
||||
⇒ **2/4 ca flip đúng hướng đột-biến** ⇒ `mind-check` **tiêu thụ chính hằng canonical**, không cài regex bản-2 nội bộ (nếu có bản-2 thì đột-biến hằng sẽ KHÔNG đổi được hành vi).
|
||||
|
||||
**Đếm định-nghĩa regex ts trong `scripts/` repo THẬT = ĐÚNG 1:**
|
||||
- `grep -rniE "re\.compile\(.*\bts\b" scripts/ --include=*.py --include=*.ps1` → **1 hit**: `scripts/session_ctx.py:59`
|
||||
- `grep -rn "_TS_KEY_RE" scripts/` → 1 định-nghĩa (:59) + 2 điểm tiêu-thụ (:391 finditer, :393 chuỗi thông báo)
|
||||
- `.ps1` trong `scripts/`: **0 hit** regex bắt dòng `ts:` ⇒ chưa có máy nào cài bản-2.
|
||||
|
||||
Loại: đột-biến (mutation-must-be-RED).
|
||||
|
||||
### #6 [fault-inject 2-chiều] rào-3 secret + ngoại-lệ nhãn che — **PASS 2/2**
|
||||
|
||||
| fixture | dòng 72 | kỳ-vọng | THỰC-ĐO |
|
||||
|---|---|---|---|
|
||||
| `06a-secret` | `- token sk-test123abcdef con trong log` | TRƯỢT | **exit 1** · `(3) rao-3 secret Category-5 : TRUOT` · `_mind-s-6.md:72 [sk-] (snippet KHONG in -- chong ro-ri log)` — **in pattern-name + file:line, KHÔNG in snippet** (gate không tự rò ra log) |
|
||||
| `06b-masked` | `- khoa voyage [đã che a1b2c3d4] da xu ly` | ĐẠT | **exit 0** · `(3) : dat` · `0 hit / 4 pattern; ngoai-le nhan che 8-hex duoc mien` — dòng CÓ pattern `voyage` nhưng có nhãn che ⇒ miễn |
|
||||
|
||||
⇒ 2 chiều đều đúng: pattern trần thì đỏ, nhãn che 8-hex thì xanh. Loại: fault-inject 2-chiều.
|
||||
|
||||
### #7 [anti-Goodhart] 2 lưới ĐỘC LẬP cùng kêu — **PASS (kèm 1 phát hiện seam)**
|
||||
|
||||
fixture `07-2net` = 06a-secret + **bản copy `scripts/session_ctx.py` đặt TRONG cây tạm** (để `ROOT = Path(__file__).parent.parent` trỏ vào cây tạm).
|
||||
|
||||
| lưới | lệnh | THỰC-ĐO |
|
||||
|---|---|---|
|
||||
| Lưới-1 `mind-check` | `python scripts/session_ctx.py mind-check --session 6 --root $T/07-2net` | `(3) rao-3 : TRUOT` · `verdict: dat=9 TRUOT=1 co=0` · **exit 1** |
|
||||
| Lưới-2 `secrets-sweep` | `python $T/07-2net/scripts/session_ctx.py secrets-sweep --session 6` | `[secrets-sweep] session-6: 1 HIT -- CHAN commit` + `…/_mind-s-6.md:72 [sk-]` · **exit 1** |
|
||||
| đối-chứng dương lưới-2 | cùng lệnh trên cây `01-clean` | `0 hit (4 pattern, pattern-bounded -- KHONG phai chung-minh sach)` · **exit 0** ⇒ lưới-2 không phải "luôn đỏ" |
|
||||
|
||||
⇒ 2 net cùng kêu trên CÙNG 1 dòng; `mind-check` KHÔNG thay `secrets-sweep` (sweep `rglob` trọn session-dir nên vốn đã phủ `_mind`).
|
||||
|
||||
🔴 **PHÁT HIỆN (spec-drift, KHÔNG phải bug máy):** `secrets-sweep` **KHÔNG có `--root`** — chỉ `mind-check` có seam đó.
|
||||
`python scripts/session_ctx.py secrets-sweep --session 6 --root <cây>` → `error: unrecognized arguments: --root` · **exit 2** (argparse usage).
|
||||
Nguyên nhân: `secrets-sweep` hard-dùng `DEFAULT_SESSIONS_ROOT` (`session_ctx.py:717`) trong khi `mind-check` nhận `--root` (`:705-706`).
|
||||
⇒ Lệnh literal của PHẦN B #7 (và của TASK-block: *"chạy CẢ secrets-sweep (--root)"*) **không chạy được như viết**; T4 lách bằng bản-copy-trong-cây (ROOT tự trỏ cây tạm) và đo được ĐÚNG tính chất phép #7 muốn. Đề nghị em main 1 trong 2: (a) thêm `--root` cho `secrets-sweep` (đối xứng seam, ~2 dòng, lane implementer) — nhớ vẫn là `--session` bắt buộc; hoặc (b) sửa literal trong PHẦN B #7 sang khuôn bản-copy. **T4 KHÔNG tự sửa** (production/máy = lane khác).
|
||||
|
||||
### #8 [fault-inject + F-1] con-trỏ 3-trạng-thái — ma trận 4 ca × 2 mode — **PASS 8/8**
|
||||
|
||||
| ca | fixture (con-trỏ trong mục E) | open-mode | closed-mode (`--closed`) |
|
||||
|---|---|---|---|
|
||||
| a — path tồn tại | `01-clean` → `_pause-1.md` (có thật) | `dat` · **exit 0** | `dat` · **exit 0** |
|
||||
| b — cha CÓ, file chưa sinh | `08b-ptr-pending` → `_pause-77.md` | `co` · **exit 0** | `TRUOT` · **exit 1** |
|
||||
| c — cha KHÔNG có | `08c-ptr-broken` → `.claude/no-such-dir/x.md` | `TRUOT` · **exit 1** | `TRUOT` · **exit 1** |
|
||||
| d — TÊN-TỆP-SAI trong dir THẬT | `08d-ptr-typo` → `_paus-1.md` (thiếu `e`) | `co` · **exit 0** | `TRUOT` · **exit 1** |
|
||||
|
||||
8/8 khớp bảng PHẦN B. Ca (c) đúng "TRƯỢT mọi mode"; ca (d) đọc thành *đang-chờ* ở cửa mở rồi mới siết ở cửa đóng — **máy TỰ IN dòng khai** kẽ này (`KHAI (nguyen van thu SS4): TEN-TEP-SAI ... day la KE, khong phai tinh nang`) ⇒ kẽ được khai tại chỗ, không giấu thành tính năng. Loại: fault-inject + F-1.
|
||||
|
||||
### #9 [anti-Goodhart] F-1 anti-xoá-con-trỏ — **PASS (vế literal) + 🔴 1 GAP ĐO ĐƯỢC (report em main)**
|
||||
|
||||
**Vế literal (đọc message ca đang-chờ @open, `08b-open`) — ĐẠT:**
|
||||
`co .claude/sessions/session-6/_pause-77.md -- cha CO, file chua sinh => CHO file sinh o cua DONG; CAM xoa con-tro de lam xanh`
|
||||
⇒ đủ 2 vế: (i) nói ĐÚNG "chờ file sinh ở cửa đóng", (ii) cấm thẳng việc xoá con-trỏ. 0 câu nào gợi ý xoá/sửa con-trỏ cho xanh.
|
||||
|
||||
**Vế trong ngoặc ("đường-rẻ-nhất-để-xanh phải là đường đúng") — ĐO THÊM, và nó KHÔNG đạt.** Dựng fixture MỚI `09-noptr` = `01-clean` với con-trỏ backtick BỊ XOÁ (mục E vẫn còn nội dung, chỉ mất token path):
|
||||
|
||||
| hành-vi của người bị chấm | closed-mode | exit |
|
||||
|---|---|---|
|
||||
| GIỮ con-trỏ thật, chờ file sinh (`08b`) | `(4) TRUOT` | **1** |
|
||||
| **XOÁ con-trỏ** cho hết đỏ (`09-noptr`) | `(4) co` — `muc E co noi-dung ma 0 con-tro backtick-path` | **0** |
|
||||
|
||||
⇒ **Ở closed-mode, xoá con-trỏ RẺ HƠN giữ con-trỏ trung thực** (exit 1 → exit 0). Luật bằng CHỮ cấm, nhưng GRADIENT thưởng đúng hành-vi bị cấm — dạng Goodhart "rời tập-đo" (đổi hình-dạng thứ đang bị đo). Ở open-mode 2 ngả bằng nhau (`co`/`co`) nên chỉ cửa ĐÓNG mới hở.
|
||||
**REPORT em main (KHÔNG tự sửa — máy `session_ctx.py` = lane implementer):** đề nghị 1 nhánh trong `_check_pointer` — ca "mục E có nội dung mà 0 con-trỏ backtick" khi `closed=True` nên là `TRUOT` (hoặc chí ít ngang mức với pending) để 2 ngả cùng đỏ; hiện lưới còn lại chỉ là ctx-audit @close + mắt người.
|
||||
|
||||
### #10 [fault-inject + anti-đóng-cứng] số-hiệu — **PASS 3/3**
|
||||
|
||||
| fixture | dãy đọc được (trên→dưới) | kỳ-vọng | THỰC-ĐO |
|
||||
|---|---|---|---|
|
||||
| `10a-num-dup` | `2, 2, 0` | TRƯỢT | **exit 1** · `(5) TRUOT so-hieu TRUNG: 2` |
|
||||
| `10b-num-toplow` | `1, 5` | TRƯỢT | **exit 1** · `(5) TRUOT block top MIND-1 < so duoi MIND-5 (moi-nhat-o-TREN bi vi pham)` |
|
||||
| `10c-num-gap` | `5, 1, 0` (dãy HỞ) | ĐẠT | **exit 0** · `(5) dat` · `duy-nhat + top >= moi so duoi (khong neo cong-thuc dem)` |
|
||||
|
||||
⇒ chỉ đòi duy-nhất + mới-hơn; dãy hở `0,1,5` KHÔNG bị đỏ oan ⇒ nhà đổi công-thức cấp số vẫn kiểm được (đúng hub §3, không đóng cứng).
|
||||
|
||||
### #11 [fault-inject + mồi-ngầm-đĩa] bất-biến |block| ∈ {p, p+1} — **PASS 4/4 + mồi-ngầm PASS**
|
||||
|
||||
| fixture | p (đếm đĩa) | \|block\| | kỳ-vọng | THỰC-ĐO |
|
||||
|---|---|---|---|---|
|
||||
| `11a-p2-b3` | 2 | 3 | đạt | **exit 0** · `(6) dat` |
|
||||
| `11b-p2-b2` | 2 | 2 | đạt | **exit 0** · `(6) dat` |
|
||||
| `11c-p2-b4` | 2 | 4 | TRƯỢT | **exit 1** · `(6) TRUOT` |
|
||||
| `11d-p2-b1` | 2 | 1 | TRƯỢT | **exit 1** · `(6) TRUOT` |
|
||||
|
||||
**Mồi-ngầm-đĩa (`11e-fakedecl` = RUỘT `_mind` GIỐNG HỆT 11a + `_end` giả `markers: _pause=9`):** so bằng `diff` với `11a-closed` (dùng bản *closed* để khỏi lẫn biến-số mode — `_end` tự bật closed) → **chỉ 3 khác biệt:** (i) 2 dòng đường-dẫn root/target (khác cây, hiển nhiên), (ii) level phép-6 `dat`→`co`, (iii) 2 dòng cross-check. Dòng ĐO bất-biến `|block| = 3 ; p (DEM DIA) = 2 [_pause-*.md=2 + pause-*.md=0 dual-accept]` **BYTE-IDENTICAL**, `exit 0` cả hai.
|
||||
⇒ dòng tự-khai `_pause=9` **KHÔNG dịch được nguồn đếm 1 ly**, chỉ sinh `co-INFO lech tu-khai: _end _pause=9 vs DIA 2 (DIA THANG)`. Đúng thứ bẫy khai-THIẾU mà hub đo được. Loại: fault-inject + mồi-ngầm.
|
||||
|
||||
### #12 [đột-biến ×2] trần / nén / đọc-LIVE / fail-loud — **PASS 5/5**
|
||||
|
||||
| fixture | size | THỰC-ĐO |
|
||||
|---|---|---|
|
||||
| `12a-33kb-3blk` | 34.323B, 3 block | **exit 0** · `(7) co` · `=> VUOT` + `huong-dan: nen block CU NHAT (tru block-0 va block top); verbatim con o git` — **CỜ chứ không TRƯỢT** (nợ hiển thị, đúng spec) |
|
||||
| `12b-33kb-2blk` | 34.334B, 2 block | **exit 0** · `(7) co` · `TU-CHOI nen: chi 2 block (<3) => giuong co vuot tran, KHONG nen` |
|
||||
| `12c` cap=32 | 9.548B | **exit 0** · `(7) dat` · `vs mind_ctx_kb x1024 = 32768B` |
|
||||
| `12c` **cap=1** (CÙNG ruột) | 9.548B | **exit 0** · `(7) co` · `vs mind_ctx_kb x1024 = 1024B (doc LIVE, 0 hardcode) => VUOT` |
|
||||
| `12c` **XOÁ khoá** | — | **exit 3** · `CONFIG/STATE ERROR: missing key(s) mind_ctx_kb in <cây>/memory-budget.json -- CAM default (khuon H24-2 fail-loud)` |
|
||||
|
||||
⇒ cặp cap=32/cap=1 trên **CÙNG một tệp** = chứng đọc khoá LIVE (không hardcode 32); xoá khoá thì fail-loud + **NÊU ĐÚNG TÊN khoá thiếu** (không phải "config error" vô danh bắt người đi tìm).
|
||||
|
||||
### #13 [fault-inject + đóng-nợ H18] phép-phụ-8 `_context` — **PASS 3/3**
|
||||
|
||||
| ca | THỰC-ĐO |
|
||||
|---|---|
|
||||
| `13a-ctx65kb` (66.555B) | `[phu-8] co` · `_context-s-6.md = 66555B vs session_ctx_kb x1024 = 65536B => VUOT` · **exit 0** (cờ không gate — đúng thiết kế) |
|
||||
| `13b-ctx10kb` (10.235B) | `[phu-8] dat` · `10235B vs 65536B` — **im**, 0 cờ |
|
||||
| 13c grep repo THẬT | `_session_ctx_kb_honest_caveat` = **0 hit** · `_session_ctx_kb_reader` = **1 hit** (`memory-budget.json:8`, trỏ đúng reader `mind-check phép-phụ-8`) · `mind_ctx_kb=32` + `tiep_reload.mode=rut-gon` đọc được qua json.load |
|
||||
|
||||
⇒ T7 đã land; ghost-wire H18 class-2 (defined-but-unread, sống S146→S153) **ĐÓNG** — và đóng bằng reader THẬT, làm đúng cả 3 điều caveat cũ tự dặn.
|
||||
|
||||
### #14 [fault-inject] draft-mode dịch-trái — **PASS 3/3** (⚠️ 1 fixture phải DỰNG LẠI — xem bẫy dưới)
|
||||
|
||||
| draft | THỰC-ĐO |
|
||||
|---|---|
|
||||
| `draft-ok.md` (MIND-2, đĩa có 2 block) | **exit 0** · `(5) dat` · `draft MIND-2 vs count-on-disk 2` |
|
||||
| `draft-badnum.md` (MIND-7) | **exit 1** · `(5) TRUOT` · `draft MIND-7 vs count-on-disk 2 => LECH (so-hieu = DEM block TRUOC chen)` |
|
||||
| `draft-ts.md` (`ts:` đầu dòng trong mục A) | **exit 1** · `(2) rao-2 TRUOT` · `draft-ts.md:5 key-line 'ts:'` |
|
||||
|
||||
Cả 3 lượt: phép 6/7 = `bo-qua-co-khai` (`draft-mode: cham sau khi chen`) ⇒ draft-mode KHÔNG đòi `mind_ctx_kb` (khoá lượt này không đọc) nhưng VẪN đọc `session_ctx_kb` cho phụ-8 — đúng spec.
|
||||
|
||||
⚠️ **BẪY VACUOUS-PASS tôi tự bắt (ghi lại vì nó suýt lọt):** bản `draft-ts.md` do builder lane trước sinh bị **MALFORMED** — `inject_A` neo chuỗi `## MIND-1` NHƯNG `renum(REFRESH, 2)` đã đổi heading thành `## MIND-2` TRƯỚC đó ⇒ `str.find` trả `-1` ⇒ dòng `ts:` bị chèn **GIỮA heading**: `## MIND-2 — 20ts: 2026-07-26T15:00:00`. Không ở đầu dòng ⇒ máy (ĐÚNG thiết kế, cùng lẽ với đối-chứng heading ở #4) không bắt ⇒ **lượt chạy đầu ra exit 0**. Đó là **lỗi FIXTURE, KHÔNG phải lỗi máy**. Dựng lại đúng (ts ở ĐẦU DÒNG trong mục A = dòng 5) → exit 1 như kỳ vọng. **Bài học chép ra ngoài:** fixture-hỏng cho-xanh trông y hệt máy-đúng cho-xanh; phép fault-inject chỉ có răng khi đã soi RUỘT fixture, không chỉ đọc exit code. (Chỉ `draft-ts` bị — các fixture #2/#4/#6/#7 dùng `inject_A` trên `CLEAN` vốn CÓ `## MIND-1` nên neo đúng, và chúng đã TRƯỢT thật ở lane trước = bằng chứng ngược.)
|
||||
|
||||
### #15 [fault-inject — kẽ tên-sai] xanh-im — **PASS 2/2**
|
||||
|
||||
| mode | THỰC-ĐO |
|
||||
|---|---|
|
||||
| open | **exit 0** `bo-qua-co-khai` — in đủ: `thieu: <...>/_mind-s-6.md` · **`glob '*mind*' trong thu-muc: _mind-s6.md`** · `=> co ung vien TEN SAI o tren; canonical dung phai la _mind-s-6.md` · `open-mode => bo-qua CO KHAI (chua doc memory-budget.json: khong co gi de do)` |
|
||||
| closed | **exit 1** `(0) TRUOT` + `closed-mode (co '_end') => TRUOT: phien da dong ma khong co lop MEM` |
|
||||
|
||||
⇒ pipe grep chuỗi tên sai `_mind-s6.md` → **hit**. Lỗi chính tả KHÔNG đi qua cửa dưới vỏ "chưa có gì để kiểm"; và cửa đóng thì siết thành TRƯỢT.
|
||||
|
||||
### #16 [happy — đo BINDING] wall-clock `Measure-Command` ×3 — **PASS** (kèm 1 lệch-ước phải điền lại)
|
||||
|
||||
| lane | 3 lượt (ms) | tb |
|
||||
|---|---|---|
|
||||
| A — literal PHẦN B (`--session 6`, repo THẬT) | 83 / 52.8 / 52.3 | **62.7 ms** |
|
||||
| B — full-check fixture `01-clean` (9.548B) | 60.3 / 52.4 / 53.5 | **55.4 ms** |
|
||||
| C — draft-mode (`--draft draft-ok.md`) | 60.6 / 53.1 / 70.2 | **61.3 ms** |
|
||||
| D — full-check 34.323B / 3 block | 77.6 / 56 / 57.9 | **63.8 ms** |
|
||||
|
||||
- Ngưỡng `tb ≤ ~0.5s`: **ĐẠT dư ~8×**. Tổng pause-thêm THẬT = C (draft) + B (full) ≈ **117ms ≈ 0.12s**, 0 spawn.
|
||||
- 🔴 **Lệch ước >2× — theo hướng RẺ HƠN:** ước T1 = 140-300ms/lượt → đo 55-64ms/lượt (**2.2-5.4× cao hơn thực**); dòng "+~0.3-0.6s máy" trong `pause.md §2.6-bis` cũng cao hơn thực ~3-5×. Lý do đo được: mind-check thuần đọc tệp, **0 subprocess git** (machine-block 140ms có gọi git). Theo luật phép #16 ⇒ **T9 điền số THẬT** vào `pause.md §2.6-bis`. `pause.md` = LEAD-SOLO (T6a) ⇒ **tôi KHÔNG sửa**, chỉ giao số.
|
||||
- ⚠️ **KHAI về lane A (chống tự-đo-nhánh-rẻ):** repo THẬT `session-6` **CHƯA có** `_mind-s-6.md` (chỉ `_context-s-6.md`) ⇒ lệnh literal đi nhánh *canonical vắng* = early-exit, **không** đọc `memory-budget.json`, **không** parse block. Nếu chỉ báo lane A thì đang đo nhánh RẺ NHẤT rồi gọi nó là "chi phí pause". Vì vậy đo thêm B/C/D = nhánh full + draft có thật; chênh không đáng kể (55-64ms) nên kết luận không đổi.
|
||||
|
||||
### #17 [đột-biến + khai] immutability — **PASS (mức MÔ-TẢ + git read-only)** + KHAI 1 vế thay-thế
|
||||
|
||||
| vế | THỰC-ĐO |
|
||||
|---|---|
|
||||
| (a) máy **KHÔNG** canh bất-biến per-run | `17-oldblock` = `01-clean` sửa **1 byte** trong block CŨ (`(window 1)`→`(window 9)`) → mind-check **exit 0** · `verdict: dat=10 TRUOT=0 co=0` ⇒ đúng như T1 tự khai: cần git-history, ngoài tầm $0 |
|
||||
| (b) git THẤY đúng dòng | `git diff --no-index --unified=0 01-clean … 17-oldblock …` → hunk **`@@ -87 +87 @@`** với `-## MIND-0 — … (window 1)` / `+## MIND-0 — … (window 9)` |
|
||||
| (c) repo THẬT read-only | `git diff --stat -- .claude/sessions/` = **0 dòng thay đổi** · **0 commit** |
|
||||
|
||||
⚠️ **KHAI thay-thế-phép (không tả thành đã-làm-đủ):** literal #17 đòi "`_mind` **đã commit** rồi sửa 1 byte → `git diff` hiện" — **không chạy được nguyên văn lượt này** vì (i) repo THẬT chưa có `_mind-s-6.md` (T9 dogfood mới sinh) và (ii) lệnh cấm commit. Thay bằng `--no-index` trên 2 bản sao (**cùng cơ chế diff dòng, 0 commit**) + xác nhận thư-mục ĐANG được track (`git ls-files .claude/sessions/session-6/` → `_context-s-6.md`) ⇒ khi `_mind` sinh ra nó vào git đúng đường đó. Vế "git diff trên chính `_mind` đã commit" = **DEFER T9**. Lưới thật = luật (block bất biến) + git history + ctx-audit @close so-git khi nghi.
|
||||
|
||||
### #21 [happy — verify claim đề bài] Sàn-3 ⑤ không cần tín-hiệu mới — **PASS 2/2** (vế runtime DEFER T9)
|
||||
|
||||
| vế | THỰC-ĐO |
|
||||
|---|---|
|
||||
| hook path-4 | `.claude/hooks/wal-flush.ps1:13` → `$paths = @(".claude/WAL.md", ".claude/agent-memory/", ".claude/workflows/runs/", ".claude/sessions/")` — **hit**; `:14` comment tự khai path-4 = *thư-mục phiên-LOGIC* ⇒ `_mind-s-<N>.md` nằm **TRONG** path 4 sẵn có, **0 path mới** |
|
||||
| tín-hiệu ⑤ trong `tiep.md` §0 | **hit 5 chỗ** — `:27` (path-4 buộc đẻ kèm ⑤ CÙNG một lần sửa) · `:37` bảng tín-hiệu ⑤ với lệnh dò ĐÚNG literal `git log --name-only --format='%s' origin/main..HEAD \| grep -q '.claude/sessions/'` · `:78` block ORPHAN-L · `:129` luật bất-biến "mỗi path mới ⇒ mỗi tín-hiệu MẠNH mới" |
|
||||
| củng cố **không cần commit mới** | `git log --name-only -25` đã chứa `.claude/sessions/session-6/_context-s-6.md` + `session-5/{_end,_context-s-5.md,_pause-1.md,_snapshot-1.md,_tiep-1.md}` ⇒ đường-dẫn này THẬT đã đi qua hook → commit trong lịch sử |
|
||||
|
||||
⇒ claim đề bài **ĐÚNG về cấu-trúc**: `_mind` được ⑤ phủ sẵn, KHÔNG kích hoạt luật "path mới = tín-hiệu mới". Vế runtime literal (commit `_mind` MỚI rồi grep `origin/main..HEAD`) = **DEFER T9** (cấm commit + `_mind` chưa sinh).
|
||||
|
||||
> **Ghi bên lề (KHÔNG phải vi phạm của lane này):** `scripts/__pycache__/session_ctx.cpython-311.pyc` (mtime **14:19**, trước lượt T4) tồn tại và `.gitignore` **0 hit** `__pycache__` ⇒ sẽ hiện untracked trong git-status audit của em main. Không do T4 sinh (mọi lệnh của T4 chạy `python <file>` dạng script, mtime .pyc không đổi sau các lượt chạy).
|
||||
|
||||
> **Ghi bên lề 2 — `git status` KHÔNG sạch, và đây là vì sao (khai để em main không nghi lane T4):** `git status --porcelain` cho ` M scripts/session_ctx.py` + `?? scripts/__pycache__/`. Tệp máy là **của lane T1** (chưa commit): `git diff --stat` = **+528/-1 dòng** = đúng khối `mind-check`, mtime **14:21:21** = **TRƯỚC** lượt T4 này. Bằng chứng T4 không chạm: `grep -n "_TS_KEY_RE = re.compile"` repo → `:59` **bản canonical nguyên vẹn** (`r'^[ \t]*ts[ \t]*:'`), và `grep -c "MUTANT"` repo → **0 hit** ⇒ đột-biến phép #5 CHỈ sống ở `scratchpad/t4/mut/`. `.claude/sessions/` + `tests/` = **sạch tuyệt đối**.
|
||||
|
||||
---
|
||||
|
||||
## TỔNG KẾT 18 PHÉP
|
||||
|
||||
**18 PASS / 0 FAIL.** #1-#7 (lane trước) + #8-#17 + #21 (lượt này). Không phép nào bỏ trống; 2 vế literal không chạy được đã KHAI + DEFER đúng chỗ (#17 git-diff-trên-tệp-đã-commit · #21 vế runtime) — **DEFER ≠ PASS**, và cũng không tính là FAIL vì bị chặn bởi điều kiện ngoài máy (tệp chưa sinh + lệnh cấm commit).
|
||||
|
||||
**3 thứ giao ra ngoài (không tự sửa — ngoài ranh test-specialist):**
|
||||
1. 🔴 **GAP #9 (máy — lane implementer):** ở **closed-mode**, XOÁ con-trỏ → `co`/exit 0 còn GIỮ con-trỏ trung thực đang-chờ → `TRUOT`/exit 1 ⇒ đường-rẻ-nhất-để-xanh là đường SAI. Chữ luật cấm nhưng gradient thưởng. Đề nghị: ca "mục E có nội dung mà 0 con-trỏ backtick" khi `closed` nên `TRUOT`.
|
||||
2. 🔴 **Lệch ước #16 (`pause.md §2.6-bis` — LEAD-SOLO T6a):** ước 140-300ms/lượt & "+~0.3-0.6s máy" cao hơn thực **2.2-5.4×**. Số THẬT: draft **61.3ms** + full **55.4ms** ≈ **117ms**, file 34KB vẫn **63.8ms**. Điền ở T9.
|
||||
3. ⚠️ **Nhắc lại phát hiện #7 lane trước:** `secrets-sweep` **không có** `--root` ⇒ lệnh literal PHẦN B #7 không chạy được như viết (đã lách bằng bản-copy-trong-cây). Chọn (a) thêm seam cho đối xứng, hoặc (b) sửa literal.
|
||||
|
||||
**1 bài học nội bộ (đã chép vào MEMORY):** fixture-hỏng cho-xanh trông y hệt máy-đúng cho-xanh (#14 `draft-ts` — `inject_A` neo `## MIND-1` sau khi `renum` đã đổi thành `## MIND-2` ⇒ `find` = -1 ⇒ chèn giữa heading). Phép fault-inject chỉ có răng khi soi RUỘT fixture, không chỉ đọc exit code.
|
||||
|
||||
<!-- END sub-test-specialist-1 · TOTAL=18 phép -->
|
||||
Reference in New Issue
Block a user