diff --git a/.claude/WAL.md b/.claude/WAL.md index b5bae581..d308b21a 100644 --- a/.claude/WAL.md +++ b/.claude/WAL.md @@ -1,5 +1,5 @@ # WAL — auto-generated, không sửa tay -updated: 2026-08-14 | session: S196 (phiên-LOGIC L17, window 1) | branch: main +updated: 2026-08-14 | session: S197 (phiên-LOGIC L17, window 2 — nối `/tiep` 16:41) | branch: main goal: bookend @open L17 chạy trọn 7 vai → owner YC-037 (chuẩn thuận + vá máy) & YC-038 (disposition) THI HÀNH XONG → dừng chờ chủ dự án. @@ -17,8 +17,9 @@ chain: - [ ] 2 nhãn chờ chủ dự án phán: `carry-age-vacuous` (thước tuổi đảo dấu) · `ctx-t9-dogfood` (đang thu-hẹp) - [ ] 17 slug ĐÓNG chưa gạch khỏi khối `HANDOFF:44` - [ ] nghi-thức RE-STAMP chưa nhận đủ 5 dạng dấu đóng ⇒ kỳ sau lại phình -- [ ] trio-memory (eval→refine→audit) CHƯA chạy — luật định vị giữa 2 bookend, cửa-sổ này chưa tới -- [ ] `harness-refine-return.md` MISSING (nợ từ S195) · `grep.exe.stackdump` + 2 dir rỗng chưa dọn +- [!] trio-memory AUTO đang chạy @S197 (giữa 2 bookend L17, đúng vị-trí luật §2.1.9) — run `runs/2026-08-14-S197-trio-memory/` +- [x] dọn `grep.exe.stackdump` (untracked, xóa @S197); "2 dir rỗng" đo lại = 1 (`.vs/sd` IDE-local, giữ — VS tự tái tạo) +- [ ] `harness-refine-return.md` nợ S195 — mất theo phiên chết, không tái tạo; trio @S197 scribe đủ 3 return MỚI next: CHỜ CHỦ DỰ ÁN — trả 2 nhãn ở trên, hoặc giao việc mới. KHÔNG tự mở việc. diff --git a/.claude/agent-memory/.mfe-state.json b/.claude/agent-memory/.mfe-state.json index 4516afdf..2d33df53 100644 --- a/.claude/agent-memory/.mfe-state.json +++ b/.claude/agent-memory/.mfe-state.json @@ -173,6 +173,11 @@ "strikes_total": 25, "rca_entries": 16, "at": "2026-08-14 10:32" + }, + { + "strikes_total": 25, + "rca_entries": 16, + "at": "2026-08-14 16:46" } ] } diff --git a/.claude/sessions/session-17/_tiep-1.md b/.claude/sessions/session-17/_tiep-1.md new file mode 100644 index 00000000..933aa0ed --- /dev/null +++ b/.claude/sessions/session-17/_tiep-1.md @@ -0,0 +1,5 @@ +ts: 2026-08-14T16:41:34+07:00 +head-sha: a01147e9dfabda342abee48e34d920b1457ec064 +window-ordinal: 2 +jsonl-hint: D--Dropbox-CONG-VIEC-SOLUTION-SOLUTION-ERP/5a3a0802-1e24-486c-854f-ba08ebcd7ebe +account-label: none diff --git a/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-archive-gate.txt b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-archive-gate.txt new file mode 100644 index 00000000..f91abe2d --- /dev/null +++ b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-archive-gate.txt @@ -0,0 +1,81 @@ +============================================================ + memory-archive-gate.ps1 - Harness-11 PART-A + mode : DRY-RUN (no writes at all) + cap : 25600 bytes (autoinject_cap) + low-water : 21760 bytes (A4 hysteresis drain target = ratio 0.85) + keep-floor : 5 newest entries (A5) + strike-need : 2 consecutive over-cap runs to PROPOSE (A6) +============================================================ + +### PASS 1 - hot-tier over-cap planner (FLAG ONLY, no moves) + +sub bytes over? entries strike after-est resolve +------------------------ --------- ----- ---------- ------- ------------ ------- +back-end-reviewer-style 7057 no 0 0 - ok +cicd-monitor 19120 no 20 0 - ok +ctx-audit 30150 YES 18 1 ~20190 WATCH (strike 1<2): re-run; propose only after 2 consecutive over-cap + [D3 value-gate] 2 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set (kept regardless of position/age); move-set = lowest-value only. NOTE: 9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set (paraphrase/spine leak remains). +ctx-curator 17484 no 0 0 - ok +ctx-verifier 26910 YES 5 1 ~26910 WARN keep-floor hit (5); cannot auto-drain - SPLIT/condense entries by hand + [D3 value-gate] 1 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set (kept regardless of position/age); move-set = lowest-value only. NOTE: 9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set (paraphrase/spine leak remains). +database-agent 9038 no 6 0 - ok +database-reviewer-style 5824 no 1 0 - ok +frontend-designer 21090 no 8 0 - ok +front-end-reviewer-style 5913 no 1 0 - ok +harness-audit 25343 no 11 0 - ok +harness-eval 23967 no 12 0 - ok +harness-refine 24098 no 12 0 - ok +harvest-curator 24796 no 10 0 - ok +implementer-backend 22710 no 27 0 - ok +implementer-frontend 20846 no 13 0 - ok +investigator-api 9021 no 10 0 - ok +investigator-codebase 24567 no 12 0 - ok +lead-gap-auditor 32875 YES 12 1 ~21833 WATCH (strike 1<2): re-run; propose only after 2 consecutive over-cap + [D3 value-gate] 2 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set (kept regardless of position/age); move-set = lowest-value only. NOTE: 9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set (paraphrase/spine leak remains). +lead-stale-auditor 30710 YES 11 1 ~20419 WATCH (strike 1<2): re-run; propose only after 2 consecutive over-cap + [D3 value-gate] 1 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set (kept regardless of position/age); move-set = lowest-value only. NOTE: 9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set (paraphrase/spine leak remains). +office-document 4518 no 4 0 - ok +reviewer 28804 YES 12 1 ~24633 WATCH (strike 1<2): re-run; propose only after 2 consecutive over-cap + [D3 value-gate] 6 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set (kept regardless of position/age); move-set = lowest-value only. NOTE: 9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set (paraphrase/spine leak remains). +ring1-audit 27606 YES 11 1 ~14022 WATCH (strike 1<2): re-run; propose only after 2 consecutive over-cap +ring2-audit 34510 YES 13 2 ~23390 PROPOSE archive (strike 2>=2): move 7 lowest-value (position tiebreak) -> curate L1->L2 by hand + [D3 value-gate] 1 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set (kept regardless of position/age); move-set = lowest-value only. NOTE: 9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set (paraphrase/spine leak remains). +ring4-audit 3349 no 2 0 - ok +ring5-audit 6299 no 4 0 - ok +score-count-auditor 5637 no 2 0 - ok +score-counter 5682 no 3 0 - ok +test-specialist 20521 no 8 0 - ok +tooling-auditor 23022 no 12 0 - ok + + [A6] DRY-RUN: strike counters NOT persisted (run with -Apply to advance strikes) + +### PASS 2 - A7 archive-integrity gate (NO-API: grep + measure only) + + [cicd-monitor] _INDEX.md + 14 archive file(s) + -> PASS pointers 112 resolved 112 failed 0 + [frontend-designer] _INDEX.md + 2 archive file(s) + -> PASS pointers 9 resolved 9 failed 0 + [harvest-curator] _INDEX.md + 5 archive file(s) + -> PASS pointers 48 resolved 48 failed 0 + [implementer-backend] _INDEX.md + 14 archive file(s) + -> PASS pointers 43 resolved 43 failed 0 + [implementer-frontend] _INDEX.md + 4 archive file(s) + -> PASS pointers 44 resolved 44 failed 0 + [investigator-codebase] _INDEX.md + 14 archive file(s) + -> PASS pointers 56 resolved 56 failed 0 + [lead-gap-auditor] _INDEX.md + 3 archive file(s) + -> PASS pointers 8 resolved 8 failed 0 + [lead-stale-auditor] _INDEX.md + 2 archive file(s) + -> PASS pointers 1 resolved 1 failed 0 + [reviewer] _INDEX.md + 10 archive file(s) + -> PASS pointers 57 resolved 57 failed 0 + [ring1-audit] _INDEX.md + 2 archive file(s) + -> PASS pointers 1 resolved 1 failed 0 + [test-specialist] _INDEX.md + 4 archive file(s) + -> PASS pointers 33 resolved 33 failed 0 + [tooling-auditor] _INDEX.md + 5 archive file(s) + -> PASS pointers 20 resolved 20 failed 0 + +------------------------------------------------------------ + A7 GATE PASS - total pointers 432, resolved 432, failed 0 +------------------------------------------------------------ diff --git a/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-crystallized.txt b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-crystallized.txt new file mode 100644 index 00000000..01f125d8 --- /dev/null +++ b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-crystallized.txt @@ -0,0 +1,45 @@ +============================================================ + crystallized-backfill.ps1 - measure-then-fill (DRY planner) + tier : lead + budget.json : D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP\.claude\agent-memory\memory-budget.json + cb config : present (target + hotload_sources read LIVE) +============================================================ + +### hot-load sources (LIVE byte-measure, UTF8) + +source bytes state +-------------------------------------------- ---------- -------- +docs/STATUS.md 256351 ok +docs/HANDOFF.md 246513 ok +.claude/governance/ACTIVE-MARKS.md 36153 ok +docs/changelog/migration-todos.md 90161 ok +docs/gotchas.md 137768 ok +.claude/agents/README.md 63637 ok +TOTAL 830583 + +### budget numbers (Upgrade-1) - ALL live-read, 0 hardcoded + +Tran tong (live cap) : 380000 tok +hotload measured : 830583 bytes +tok RANGE [low..high] : [207646 .. 276861] tok (bytes/4 .. bytes/3.0) +measured_headroom : 103139 tok (cap - tok_high, worst-case) +target (owner) : 210000 tok +expected_backfill : 103139 tok (min(target,headroom)=headroom => headroom binds (target exceeds room)) + +### value-gated backfill source-order (planner / DRY - no pour) + + precondition MET (target>0 AND headroom>0): would pull up to 103139 tok in order: + 1. gist  archive/*.gist.md (4-field distilled) + 2. value-marked  archive lines carrying gotcha# / anti-pattern / root-cause + 3. curated RAG  search_memory high-value hits + (each stage DEDUP vs the hot-load sources above; stop at expected_backfill) + +------------------------------------------------------------ + HONEST CAVEAT + char/4 is NOT a real token count; VN-diacritic hot-memory ~3.0-3.5 byte/tok. + Headroom is a RANGE [bytes/4 .. bytes/3.0]; this planner uses bytes/3.0 (worst). + backfill defaults to 0 = TAT until the OWNER sets target>0 AND measured headroom>0. + Every budget number is the OWNER's authority; this script is READ-ONLY (never tunes/writes). + HEADROOM is measured over a STABLE FILE-FLOOR (the configured hotload_sources) = an UPPER BOUND. + The PEAK hot-feed also loads session-variable task-context NOT in this list; real headroom is SMALLER. +------------------------------------------------------------ diff --git a/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-measure.txt b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-measure.txt new file mode 100644 index 00000000..5e19ee78 --- /dev/null +++ b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-measure.txt @@ -0,0 +1,239 @@ +{ + "measured_at_note": "run date stamped by caller (Date.now unavailable in workflow scripts)", + "soft_cap_l1_bytes": 30720, + "autoinject_cap_bytes": 25600, + "agents": [ + { + "agent": "back-end-reviewer-style", + "l1_hot_bytes": 7057, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "cicd-monitor", + "l1_hot_bytes": 19120, + "l2_verbatim_bytes": 277739, + "l2_index_bytes": 24568, + "l2_gist_bytes": 122471, + "l1_over_30kb": false + }, + { + "agent": "ctx-audit", + "l1_hot_bytes": 30150, + "l2_verbatim_bytes": 11521, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "ctx-curator", + "l1_hot_bytes": 17484, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "ctx-verifier", + "l1_hot_bytes": 26910, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "database-agent", + "l1_hot_bytes": 9038, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "database-reviewer-style", + "l1_hot_bytes": 5824, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "frontend-designer", + "l1_hot_bytes": 21090, + "l2_verbatim_bytes": 19050, + "l2_index_bytes": 2435, + "l2_gist_bytes": 3231, + "l1_over_30kb": false + }, + { + "agent": "front-end-reviewer-style", + "l1_hot_bytes": 5913, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "harness-audit", + "l1_hot_bytes": 25343, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "harness-eval", + "l1_hot_bytes": 23967, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "harness-refine", + "l1_hot_bytes": 24098, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "harvest-curator", + "l1_hot_bytes": 24796, + "l2_verbatim_bytes": 92239, + "l2_index_bytes": 8325, + "l2_gist_bytes": 20317, + "l1_over_30kb": false + }, + { + "agent": "implementer-backend", + "l1_hot_bytes": 22710, + "l2_verbatim_bytes": 94752, + "l2_index_bytes": 10487, + "l2_gist_bytes": 84345, + "l1_over_30kb": false + }, + { + "agent": "implementer-frontend", + "l1_hot_bytes": 20846, + "l2_verbatim_bytes": 47796, + "l2_index_bytes": 5844, + "l2_gist_bytes": 44764, + "l1_over_30kb": false + }, + { + "agent": "investigator-api", + "l1_hot_bytes": 9021, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "investigator-codebase", + "l1_hot_bytes": 24567, + "l2_verbatim_bytes": 171476, + "l2_index_bytes": 12448, + "l2_gist_bytes": 107741, + "l1_over_30kb": false + }, + { + "agent": "lead-gap-auditor", + "l1_hot_bytes": 32875, + "l2_verbatim_bytes": 23458, + "l2_index_bytes": 1362, + "l2_gist_bytes": 7112, + "l1_over_30kb": true + }, + { + "agent": "lead-stale-auditor", + "l1_hot_bytes": 30710, + "l2_verbatim_bytes": 9273, + "l2_index_bytes": 223, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "office-document", + "l1_hot_bytes": 4518, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "reviewer", + "l1_hot_bytes": 28804, + "l2_verbatim_bytes": 253991, + "l2_index_bytes": 13941, + "l2_gist_bytes": 69925, + "l1_over_30kb": false + }, + { + "agent": "ring1-audit", + "l1_hot_bytes": 27606, + "l2_verbatim_bytes": 6761, + "l2_index_bytes": 682, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "ring2-audit", + "l1_hot_bytes": 34510, + "l2_verbatim_bytes": 8771, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": true + }, + { + "agent": "ring4-audit", + "l1_hot_bytes": 3349, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "ring5-audit", + "l1_hot_bytes": 6299, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "score-count-auditor", + "l1_hot_bytes": 5637, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "score-counter", + "l1_hot_bytes": 5682, + "l2_verbatim_bytes": 0, + "l2_index_bytes": 0, + "l2_gist_bytes": 0, + "l1_over_30kb": false + }, + { + "agent": "test-specialist", + "l1_hot_bytes": 20521, + "l2_verbatim_bytes": 37615, + "l2_index_bytes": 6170, + "l2_gist_bytes": 33811, + "l1_over_30kb": false + }, + { + "agent": "tooling-auditor", + "l1_hot_bytes": 23022, + "l2_verbatim_bytes": 93802, + "l2_index_bytes": 3672, + "l2_gist_bytes": 18760, + "l1_over_30kb": false + } + ] +} diff --git a/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-mfe.txt b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-mfe.txt new file mode 100644 index 00000000..e10e471f --- /dev/null +++ b/.claude/workflows/runs/2026-08-14-S197-trio-memory/instrument-mfe.txt @@ -0,0 +1,60 @@ + +=== MFE (Memory-Fidelity-EVAL) - Harness-16 - 2026-08-14 === + (coverage/retention eval; NOT memoryDelta-routing-fidelity H6.7) + lead hot-feed cap (live) = 380000 tok | mem-sub cap = 60000 tok + +[LEAD] must-remember denominator (deduped, merge_guard_to_as=True): + marks(Active+High)=11 AS-classes=15 net-extra-guards=5 net-extra-recurring-gotchas=7 + => DENOMINATOR = 38 items (raw before dedup: marks 11 + AS 15 + guards 16 + recurring 8) + +[LEAD] Coverage-FIT (does the set FIT the hot-feed cap?): + span bytes=30945 => ~7736 - 10315 tok (RANGE, see caveat) / cap 380000 tok = 2.71% worst-case + FIT = PASS (worst-case fits; headroom huge - must-remember set is tiny vs cap) + CAVEAT: char/4 is NOT real tokens; VN-diacritic ~3.0-3.5 byte/tok => byte/4 = upper-bound headroom. + Reported as a RANGE [bytes/4 .. bytes/3.0]; FIT uses bytes/3.0 (worst). Real count inside the band. + +[LEAD] age-band (FLAG only - age=false-proxy, mark RC-...10-29-11): + marks with parseable date=11; >30d old but still Active=9 -> KEPT (status-driven, age-blind) + (guards/gotchas carry session-refs not dates -> age = status-driven only; drop on status-change, never by age) + +[LEAD] Goodhart anchor (NO self-grading - real recurring-error signal): + error-ledger: strikes_total=25 RCA_entries=16 AS-classes=15 + (rule: if strikes rise across runs while coverage stays high -> the score lies. warn-baseline=25 last_run_strikes=25) + +[SUB] per-role memory coverage (denominator = role-file anti-patterns/baseline; numerator = carried in diary): + match = exact-id OR >=2 distinct content-words after stop-list (leading-verb-only = false-max, defeated) + + back-end-reviewer-style N/A (no numbered anti-pattern / NEVER block in role-file to extract) + cicd-monitor 10/10 = 100% (MEASURED, not target-then-force) + ctx-audit 10/10 = 100% (MEASURED, not target-then-force) + ctx-curator 6/6 = 100% (MEASURED, not target-then-force) + ctx-verifier 7/7 = 100% (MEASURED, not target-then-force) + database-agent 7/7 = 100% (MEASURED, not target-then-force) + database-reviewer-style N/A (no numbered anti-pattern / NEVER block in role-file to extract) + front-end-reviewer-style N/A (no numbered anti-pattern / NEVER block in role-file to extract) + frontend-designer 2/2 = 100% (MEASURED, not target-then-force) + harness-audit 5/5 = 100% (MEASURED, not target-then-force) + harness-eval 5/5 = 100% (MEASURED, not target-then-force) + harness-refine 5/5 = 100% (MEASURED, not target-then-force) + harvest-curator 7/7 = 100% (MEASURED, not target-then-force) + implementer-backend 17/18 = 94% (MEASURED, not target-then-force) + implementer-frontend 12/13 = 92% (MEASURED, not target-then-force) + investigator-api 7/7 = 100% (MEASURED, not target-then-force) + investigator-codebase 8/8 = 100% (MEASURED, not target-then-force) + lead-gap-auditor 6/6 = 100% (MEASURED, not target-then-force) + lead-stale-auditor 6/6 = 100% (MEASURED, not target-then-force) + office-document 6/6 = 100% (MEASURED, not target-then-force) + reviewer 8/8 = 100% (MEASURED, not target-then-force) + ring1-audit 5/5 = 100% (MEASURED, not target-then-force) + ring2-audit 5/5 = 100% (MEASURED, not target-then-force) + ring4-audit 5/5 = 100% (MEASURED, not target-then-force) + ring5-audit N/A (no numbered anti-pattern / NEVER block in role-file to extract) + score-count-auditor N/A (no numbered anti-pattern / NEVER block in role-file to extract) + score-counter N/A (no numbered anti-pattern / NEVER block in role-file to extract) + test-specialist 6/6 = 100% (MEASURED, not target-then-force) + tooling-auditor 8/8 = 100% (MEASURED, not target-then-force) + +[SUB-WORKFLOW] N/A by design: fan-out workflow agents (hmw.js sub--) are EPHEMERAL + (no persistent diary; their only memory channel is the lead-injected memory-pack -> source-vs-cap is meaningless). + +=== MFE done (deterministic block; READ-ONLY on budget; exit 0) === diff --git a/.claude/workflows/runs/2026-08-14-S197-trio-memory/run.md b/.claude/workflows/runs/2026-08-14-S197-trio-memory/run.md new file mode 100644 index 00000000..a1bd0568 --- /dev/null +++ b/.claude/workflows/runs/2026-08-14-S197-trio-memory/run.md @@ -0,0 +1,18 @@ +# run — trio-memory AUTO @S197 (phiên-LOGIC L17, window 2) + +> Vòng AUTO 1-vòng/phiên GIỮA 2 bookend (owner @S151 "cứ đúng luật là tự làm"; nhà canonical `session-start.md §2.1.9`). L17 chưa chạy vòng nào → cửa sổ này đúng vị-trí. Dòng trạng-thái đã in @16:4x: `trio-memory: auto-vong @S197 (giua 2 bookend)`. + +## taskList snapshot + +1. script-arm: 4 instrument in số → `instrument-{measure,mfe,archive-gate,crystallized}.txt` — [x] 4/4 exit-0, 23.390 B +2. `harness-eval` (con ĐO) — PIN 4 instrument + memory-budget.json + NHIP-NO @S197 — [!] spawned +3. `harness-refine` (con ĐỀ-XUẤT) — PIN `harness-eval-return.md` + reinject-ledger — [ ] chờ nấc 1 +4. `harness-audit` (con KIỂM) — PIN run-folder này — [ ] chờ nấc 2 +5. Lead scribe return TỪNG con ngay khi trả (`harness-{eval,refine,audit}-return.md`) — 3 vai không Write/Edit +6. Post-wave assertion CÙNG TURN: `git status --short` kỳ vọng 0 tracked-change ngoài run-folder (§2.1.9(f) — lỡ boundary thì soát `git log --name-only` trên `wal:` commit) + +## Ràng buộc + +- TUẦN TỰ eval→refine→audit, CẤM song song (§2.1.9(b)). +- Mirror C1: bề-mặt-đo (agent-memory corpus) ĐÓNG BĂNG tới khi audit trả verdict; việc ghi phát sinh xếp hàng SAU. +- Nợ S195: `harness-refine-return.md` vòng trước MISSING (mất theo phiên chết) — vòng này scribe đủ 3 return MỚI, nợ cũ khai không-đòi-được.