mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 07:40:42 -04:00
86b96b2125
TELLS QUOTA (Drew approved): a dedicated tells wave drew only 70-87 cards — a full 40-minute drafting slot at a quarter of a default wave — because the 5-80 size cap and the tells pool cannot fill more. Tells now ride inside ordinary waves with a 60-card quota, same as jtbl. The size cap moved into the draw itself: tell-lever members above --tells-max-ins (80) are not drawn at all, because the measured bank rate is 27-40% at 5-80, 10% at 81-120, 1% at 121-200 and 0% above — those 383 members / 51,941 ins are idiom_serial's work, and the skip counter names it (R45). A QUOTA IS A FLOOR UNLESS IT IS ALSO A CEILING. First test: putting the tell levers in the default list let them win the ranked fill too, and a 300-card wave came back 122 tells (41%). The size cap held; the mix did not. Tells now enter through the quota or not at all. GATE JOBS 24. The quotas deliberately pull cards from binaries outside the ranked gate groups, so a measured draw went from ~24 groups to 63 — 63 whole-binary rebuilds per wave, five serial batches at 12 jobs. The box is 32 cores at ~6% (load 3.1) with 39 GB free. Lands via restart_gater_when_idle.sh so no sweep is killed mid-flight. Correction to the record: the live draw already passed --max-bins 24 (plus --one-per-gid and --exclude-bins main). An earlier measurement of mine used the tool's default of 12 without those flags and read as 'max-bins is the cap' — it is not; --one-per-gid is, and deliberately: it defers same-skeleton siblings to the free deterministic remap instead of paying an agent twice.
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.