423 lines
22 KiB
Markdown
423 lines
22 KiB
Markdown
# script-arm @bookend-close S185 — SAU-harvest (f-bis re-measure)
|
|
|
|
## 1. measure-agent-memory (f-bis — số SAU-append)
|
|
{
|
|
"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": 3908,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "cicd-monitor",
|
|
"l1_hot_bytes": 23798,
|
|
"l2_verbatim_bytes": 264257,
|
|
"l2_index_bytes": 23588,
|
|
"l2_gist_bytes": 122471,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "ctx-audit",
|
|
"l1_hot_bytes": 24924,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "ctx-curator",
|
|
"l1_hot_bytes": 13340,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "ctx-verifier",
|
|
"l1_hot_bytes": 19205,
|
|
"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": 4376,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "frontend-designer",
|
|
"l1_hot_bytes": 19869,
|
|
"l2_verbatim_bytes": 19050,
|
|
"l2_index_bytes": 2435,
|
|
"l2_gist_bytes": 3231,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "front-end-reviewer-style",
|
|
"l1_hot_bytes": 3857,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "harness-audit",
|
|
"l1_hot_bytes": 16622,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "harness-eval",
|
|
"l1_hot_bytes": 15469,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "harness-refine",
|
|
"l1_hot_bytes": 15126,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "harvest-curator",
|
|
"l1_hot_bytes": 28071,
|
|
"l2_verbatim_bytes": 78576,
|
|
"l2_index_bytes": 8325,
|
|
"l2_gist_bytes": 20317,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "implementer-backend",
|
|
"l1_hot_bytes": 25515,
|
|
"l2_verbatim_bytes": 86134,
|
|
"l2_index_bytes": 10487,
|
|
"l2_gist_bytes": 84345,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "implementer-frontend",
|
|
"l1_hot_bytes": 16441,
|
|
"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": 18199,
|
|
"l2_verbatim_bytes": 171476,
|
|
"l2_index_bytes": 12448,
|
|
"l2_gist_bytes": 107741,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "lead-gap-auditor",
|
|
"l1_hot_bytes": 24241,
|
|
"l2_verbatim_bytes": 22645,
|
|
"l2_index_bytes": 1234,
|
|
"l2_gist_bytes": 7112,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "lead-stale-auditor",
|
|
"l1_hot_bytes": 30852,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": true
|
|
},
|
|
{
|
|
"agent": "office-document",
|
|
"l1_hot_bytes": 3323,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "reviewer",
|
|
"l1_hot_bytes": 31341,
|
|
"l2_verbatim_bytes": 243035,
|
|
"l2_index_bytes": 13941,
|
|
"l2_gist_bytes": 69925,
|
|
"l1_over_30kb": true
|
|
},
|
|
{
|
|
"agent": "ring1-audit",
|
|
"l1_hot_bytes": 23874,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "ring2-audit",
|
|
"l1_hot_bytes": 31781,
|
|
"l2_verbatim_bytes": 0,
|
|
"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": "score-count-auditor",
|
|
"l1_hot_bytes": 2330,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "score-counter",
|
|
"l1_hot_bytes": 2366,
|
|
"l2_verbatim_bytes": 0,
|
|
"l2_index_bytes": 0,
|
|
"l2_gist_bytes": 0,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "test-specialist",
|
|
"l1_hot_bytes": 18914,
|
|
"l2_verbatim_bytes": 37615,
|
|
"l2_index_bytes": 6170,
|
|
"l2_gist_bytes": 33811,
|
|
"l1_over_30kb": false
|
|
},
|
|
{
|
|
"agent": "tooling-auditor",
|
|
"l1_hot_bytes": 30981,
|
|
"l2_verbatim_bytes": 72498,
|
|
"l2_index_bytes": 3672,
|
|
"l2_gist_bytes": 18760,
|
|
"l1_over_30kb": true
|
|
}
|
|
]
|
|
}
|
|
|
|
## 2. mfe-eval
|
|
|
|
=== MFE (Memory-Fidelity-EVAL) - Harness-16 - 2026-08-09 ===
|
|
(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=4 -> 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 18/18 = 100% (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)
|
|
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-<role>-<i>) 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) ===
|
|
|
|
## 3. memory-archive-gate DRY
|
|
============================================================
|
|
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 3908 no 0 0 - ok
|
|
cicd-monitor 23798 no 19 0 - ok
|
|
ctx-audit 24924 no 3 0 - ok
|
|
ctx-curator 13340 no 0 0 - ok
|
|
ctx-verifier 19205 no 2 0 - ok
|
|
database-agent 9038 no 6 0 - ok
|
|
database-reviewer-style 4376 no 0 0 - ok
|
|
frontend-designer 19869 no 7 0 - ok
|
|
front-end-reviewer-style 3857 no 0 0 - ok
|
|
harness-audit 16622 no 7 0 - ok
|
|
harness-eval 15469 no 7 0 - ok
|
|
harness-refine 15126 no 7 0 - ok
|
|
harvest-curator 28071 YES 9 1 ~27224 WARN value-floor hit: over-cap but every drainable entry is value-protected/keep-floor - condense high-value BY HAND (do NOT age-archive)
|
|
[D3 value-gate] 5 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).
|
|
implementer-backend 25515 no 24 0 - ok
|
|
implementer-frontend 16441 no 11 0 - ok
|
|
investigator-api 9021 no 10 0 - ok
|
|
investigator-codebase 18199 no 10 0 - ok
|
|
lead-gap-auditor 24241 no 7 0 - ok
|
|
lead-stale-auditor 30852 YES 6 1 ~30214 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).
|
|
office-document 3323 no 3 0 - ok
|
|
reviewer 31341 YES 8 1 ~30982 WARN value-floor hit: over-cap but every drainable entry is value-protected/keep-floor - condense high-value BY HAND (do NOT age-archive)
|
|
[D3 value-gate] 5 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 23874 no 6 0 - ok
|
|
ring2-audit 31781 YES 7 2 ~23102 PROPOSE archive (strike 2>=2): move 2 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
|
|
score-count-auditor 2330 no 0 0 - ok
|
|
score-counter 2366 no 0 0 - ok
|
|
test-specialist 18914 no 7 0 - ok
|
|
tooling-auditor 30981 YES 11 1 ~30134 WARN value-floor hit: over-cap but every drainable entry is value-protected/keep-floor - condense high-value BY HAND (do NOT age-archive)
|
|
[D3 value-gate] 4 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).
|
|
|
|
[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 + 4 archive file(s)
|
|
-> PASS pointers 48 resolved 48 failed 0
|
|
[implementer-backend] _INDEX.md + 13 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 + 2 archive file(s)
|
|
-> PASS pointers 7 resolved 7 failed 0
|
|
[reviewer] _INDEX.md + 10 archive file(s)
|
|
-> PASS pointers 57 resolved 57 failed 0
|
|
[test-specialist] _INDEX.md + 4 archive file(s)
|
|
-> PASS pointers 33 resolved 33 failed 0
|
|
[tooling-auditor] _INDEX.md + 4 archive file(s)
|
|
-> PASS pointers 20 resolved 20 failed 0
|
|
|
|
------------------------------------------------------------
|
|
A7 GATE PASS - total pointers 429, resolved 429, failed 0
|
|
------------------------------------------------------------
|
|
|
|
## 4. crystallized-backfill
|
|
============================================================
|
|
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 234644 ok
|
|
docs/HANDOFF.md 196350 ok
|
|
.claude/governance/ACTIVE-MARKS.md 36153 ok
|
|
docs/changelog/migration-todos.md 88151 ok
|
|
docs/gotchas.md 120260 ok
|
|
.claude/agents/README.md 60723 ok
|
|
TOTAL 736281
|
|
|
|
### budget numbers (Upgrade-1) - ALL live-read, 0 hardcoded
|
|
|
|
Tran tong (live cap) : 380000 tok
|
|
hotload measured : 736281 bytes
|
|
tok RANGE [low..high] : [184070 .. 245427] tok (bytes/4 .. bytes/3.0)
|
|
measured_headroom : 134573 tok (cap - tok_high, worst-case)
|
|
target (owner) : 210000 tok
|
|
expected_backfill : 134573 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 134573 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.
|
|
------------------------------------------------------------
|
|
|
|
## 5. nhip-no-probe
|
|
NHIP-NO: kiem light 3/6 deep 19/15 OVERDUE:deep | tran-bo-nho 5 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 4 ngay | so-yc treo 5 / nhac2+ 2 (muc 13, gop 5 dong nhac-lai)
|