Files
BFM-decomp/tools/lanes/README.md
T
Drew T 433c7cd8ef feat(resolver): the integration-resolver lane — zero-token re-judging of the ledgers' shape-correct stock at the real TU (P31 S61 T10+/S61-1)
frontier-analysis-s60 §4 measured that ~571 open functions had FINISHED drafting (closeness-0 backlog
rows / reloc shape-MATCH rejects) and were being re-drafted wave after wave. tools/integration_resolver.py
treats those ledgers as an index: still-open? -> rtu_match at the real split TU (CC1: the gate ladder's
draft-side transforms, one retry) -> reloc_identity as the disagreeing oracle (rtu masks reloc fields)
-> aprop_symfix on MISMATCH/shape-MATCH -> stage -> sweep_parallel (whole-binary SHA, sole arbiter)
-> commit at once (R42). Refuses main by name (gate_main owns it), //@EDIT drafts, dirty trees, collapsed
registries; every drop is counted (R32); a negative control over recently-banked functions must pass
N/N before any verdict is trusted (R35/R39 — its first form picked carve moves as banks, 9/12 FAIL,
and was fixed before a single stock verdict was read). Ledger .run/resolver/verdicts.jsonl keyed by
(binary, fn, draft-sha, split-TU-sha) so unchanged rejects are never re-judged.

First pass (commit:2991): 1,352 nominated -> 901 already banked, 27 main -> 424 judged in 41 s ->
245 staged (57.8%; 242 raw, 3 via transforms) -> 63 banked (net INCLUDE_ASM delta; that commit's
subject says 72 = gross incl. 9 carve moves), 182 gate-refused, zero model tokens, ~10 min total.
Lane wrapper tools/lanes/resolver_lane.sh (holds .run/auto/draw.lock for judge+gate: rtu reads the
TUs a gate splices into).
2026-08-25 23:50:26 -06:00

21 lines
1.5 KiB
Markdown

# Autonomous lanes (P31 S58)
The unattended campaign architecture. These are the RUNNING copies' source of truth — the live
lanes execute from `.run/`, which is gitignored, so a fresh clone would otherwise have none of it.
Copy back with `cp tools/lanes/*.sh .run/` before launching.
| lane | role | rule |
|---|---|---|
| `drafter.sh` | draw → shard → draft → queue a ready marker, forever | **NEVER stop it to ship a code change.** Measured 2026-08-23: 139 of 162 idle minutes were exactly that |
| `gater.sh` | reloc pre-filter → gate → commit → harvest → ledger | safe to kill/restart at will |
| `maintenance.sh` | the free A-prop sibling lane | triggers on 150+ newly banked functions, not a timer |
| `stallguard.sh` | 60s: revive dead lane shells, kill agents silent >20min, kill gates >90min | the only thing that works at 3am |
| `resolver_lane.sh` | **(P31 S61)** the integration-resolver lane: re-judges the ledgers' closeness-0 / shape-MATCH stock at the real TU (`tools/integration_resolver.py`), stages, gates, commits — zero tokens | holds `.run/auto/draw.lock` for judge+gate (rtu reads TUs a gate splices into); not yet in stallguard's revive list — restart by hand |
Start: `setsid nohup .run/<lane>.sh >> .run/<lane>.log 2>&1 </dev/null &`
Stop everything: `touch .run/ox_campaign.stop`
**Editing a lane requires replacing its SHELL, not just its python** — bash has the loop body
parsed, so killing the python restarts it with the old arguments. Verify from the startup banner,
never from the file.