mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-05 00:47:54 -04:00
31 lines
2.3 KiB
Markdown
31 lines
2.3 KiB
Markdown
# L1 — offline-tooling-first
|
|
id: L1 · group: - · status: active · tags: legacy,memory · origin: legacy memory offline-tooling-first.md · added: 2026-09-29
|
|
|
|
**Standing goal (Drew, 2026-07-21): get as much as possible working as offline tooling.** When a
|
|
recovery, diagnosis, or integration step is *computable*, it belongs in a deterministic tool that runs
|
|
with zero tokens on every future draft — not in an agent prompt, and not in a search.
|
|
|
|
**Why:** the measured economics keep pointing the same way. Phase 15: a 50-agent wave added +0.36% while
|
|
deterministic recovery added +2.67% for ~0 agent tokens. Phase 29 (2026-07-21): the permuter's problem was
|
|
*targeting*, not a missing transform — ~92% of its CPU was aimed at residuals a search provably cannot
|
|
close, fixed for free by a deterministic classifier ([[matching-is-solved-integration-is-the-bottleneck]]).
|
|
Every hour of agent drafting is spent once; every ladder stage is spent once and paid forever.
|
|
|
|
**The two engines — keep them separate:**
|
|
1. **Deterministic recovery** (`tools/gate_stage.py`'s ladder): computable fixes — decl/arity/cast
|
|
reconciliation, type-lift, jtbl isolate+re-carve. Applied always, free, byte-gate arbitrated.
|
|
2. **Search** (decomp-permuter / ILS): only for residuals that are NOT computable — regalloc and
|
|
schedule permutations where the answer must be explored.
|
|
Putting a computable fix into the search is a category error: it burns CPU rediscovering a derivable
|
|
answer. And per cookbook §60b, raising a search-closer's yield is at least as often about *refusing it
|
|
unreachable work* as widening its mutation set.
|
|
|
|
**How to apply:** when a draft fails to bank, ask "is this residual computable?" before reaching for
|
|
agents or the permuter. If yes → a ladder stage (and check whether the logic already exists elsewhere —
|
|
`normalize_self_decls` and jtbl auto-isolate both existed in `family_sweep`/`jtbl_family_bank` while
|
|
`gate_stage` lacked them; R33 says one implementation, two callers). Any ladder stage that mutates SHARED
|
|
state must undo by snapshot-restore, never an inverse transform, and be verified fleet-wide (R22) — a
|
|
single-binary gate cannot validate a fleet-wide edit (cookbook §61; it cost 138 broken binaries once).
|
|
Track the LLM-free fraction and make raising it the objective (`docs/hindsight-study.md` §7,
|
|
`tools/burndown.py`).
|