mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-08 09:43:04 -04:00
75bfb04226
.run/maintenance.sh (what runs) and tools/lanes/maintenance.sh (a pre-S59 copy) had diverged. The 150->50 threshold tune landed on the stale copy and was then copied over the live one, silently reverting five S59 fixes: * the R47 shape filter (staging fell back to status=='AGREE' alone — the exact defect that staged 82 hopeless drafts every 45 minutes) * the R48 (binary, fn) keying (bare-fn keys collide across overlays) * reloc --fix MISMATCH auto-repair (measured 4/4 repaired to AGREE) * rtu_second_chance (re-judges standalone COMPILE-FAILs against the real TU) * fix_tu_ret_decls (the return-type half of the stale-decl wall) Rebuilt from the S59 lineage with the 150->50 threshold and the periodic fleet R22 re-applied, both paths now byte-identical, `bash -n` clean, and the two-path hazard documented in the header so the next edit cannot repeat it. Also: relaunch_drafter_shell.sh 30s -> 5s ready-marker poll; regenerated backlog and fleet progress artifacts.
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 |
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.