mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 23:52:03 -04:00
fix(lanes): tells draws a SMALL band — the lane gap was a card-SIZE gap
Joined the campaign ledger to each wave's cards and to the functions its own commit banked (removed INCLUDE_ASM lines), pooled over bb/bg (tells) vs bc/bf (default): nins default tells 0-50 303/528 57% 27/ 67 40% 50-80 43/145 30% 20/ 73 27% 80-120 9/ 41 22% 10/100 10% 120-200 1/ 30 3% 1/ 68 1% 200+ 2/ 35 6% 0/ 30 0% At equal size the lanes are close below 80 instructions and both collapse above it. What separated them is the card size MIX: default's cards are median 37-39 ins, the tells pool median 89-95 (2.4x), so 'the tells lane is broken' measured the population, not the lever. Tells now draws 5-80. This also refutes the S58 handoff's one live hypothesis for tells (235, the phantom symbol). Checked the recorded reloc_identity verdicts first (R38): among MISMATCH? rows, the fraction whose instruction SHAPE already matched — the symbol-only class 235 describes — is 25/87, 16/79, 17/66, 13/57 on default waves but 6/66, 4/81, 5/47 on tells. Tells drafts fail because the BODY is wrong, not the symbols, which is what a 2.4x larger median predicts. Also adds tools/lanes/relaunch_drafter_shell.sh. bash parses a while...done body in full before running it, so a lane-ARG change is invisible to the running shell and a python bounce re-runs the OLD command line — measured at 11:02, when the bounced python came back on the pre-S59 lane list 18 minutes after the file changed.
This commit is contained in:
+18
-4
@@ -22,9 +22,23 @@
|
||||
# name symbols the target .s never references, i.e. cookbook §235 (the phantom symbol), which is a
|
||||
# BRIEF fix, not a lane deletion. R40: exonerate the instrument before blaming the subject.
|
||||
#
|
||||
# The rotation below pins the arithmetic: lane = index%4, band = index%4, so slot 1 (tells) always
|
||||
# draws the full band and slot 3 (the large band) is always default. Changing the length of either
|
||||
# list breaks that alignment — change both together.
|
||||
# S59 REFINEMENT, from the same ledger joined to the wave cards and to the BANKED FUNCTIONS the
|
||||
# wave's own commit names (bank rate by size, cards->banked, pooled over waves bb/bg vs bc/bf):
|
||||
# nins default tells
|
||||
# 0-50 303/528 57% 27/ 67 40%
|
||||
# 50-80 43/145 30% 20/ 73 27%
|
||||
# 80-120 9/ 41 22% 10/100 10%
|
||||
# 120-200 1/ 30 3% 1/ 68 1%
|
||||
# 200+ 2/ 35 6% 0/ 30 0%
|
||||
# At EQUAL SIZE the two lanes are close below 80 instructions and both collapse above it. What
|
||||
# actually separated them is the card SIZE MIX: default's cards are median 37-39 ins, the tells
|
||||
# pool is median 89-95 — 2.4x larger — so "the tells lane is broken" was measuring the population,
|
||||
# not the lever. Tells therefore draws a SMALL band (5-80), where its yield is within a few points
|
||||
# of default's; widen it only when that stratum is worked out.
|
||||
#
|
||||
# The rotation pins the arithmetic: lane = index%4, band = index%4, so slot 1 (tells) always draws
|
||||
# the small band and slot 3 (the large band) is always default. Changing the length of either list
|
||||
# breaks that alignment — change both together.
|
||||
#
|
||||
# NOTE: do NOT assume aprop_autodraft is the answer for tells. Its input population overlaps the
|
||||
# 1,040 tells member functions by only 44 (4.2%) — checked, after asserting the opposite three
|
||||
@@ -45,7 +59,7 @@ while [ ! -e .run/ox_campaign.stop ]; do
|
||||
--workers 2000 \
|
||||
--models 'stealth/ox-alpha:1720,deepseek/deepseek-v4-flash-0731:280:REASON_EFFORT=high' \
|
||||
--lanes 'default:,tells:extend-tell;swaprepeat-tell;s16-div-tell,default:,default:' \
|
||||
--bands '5-2000,5-2000,5-2000,120-2000' \
|
||||
--bands '5-2000,5-80,5-2000,120-2000' \
|
||||
--cards-per-wave 3000 --queue-depth 2 2>&1
|
||||
echo "[$(date +%H:%M:%S)] [drafter] exited; restarting in 20s"
|
||||
sleep 20
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# Wait for the in-flight wave to QUEUE, then restart the drafter SHELL (not just its python).
|
||||
#
|
||||
# WHY THE SHELL. bash parses a `while … done` compound command in full before executing it, so the
|
||||
# loop body — including the python command line — is fixed in memory for the life of that shell.
|
||||
# Editing .run/drafter.sh, or bouncing only the python, therefore re-runs the OLD arguments: at
|
||||
# 11:02 the bounced python came back on the pre-S59 lane/band list even though the file on disk had
|
||||
# been updated 18 minutes earlier (it logged `lane tells, band (5, 2000)`, which only the old list
|
||||
# produces at rotation index 36). A lane-ARG change needs a fresh shell; only a lane-CODE change
|
||||
# (tools/*.py) is picked up by a python bounce.
|
||||
#
|
||||
# Cost is one shell exec, taken at the moment a wave has just queued, so no drafts are lost.
|
||||
set -u
|
||||
cd /home/musashi/bfm-decomp
|
||||
BEFORE=$(ls .run/ready/ 2>/dev/null | wc -l)
|
||||
DEADLINE=$(( $(date +%s) + 5400 ))
|
||||
say(){ echo "[$(date +%H:%M:%S)] [relaunch] $*"; }
|
||||
say "waiting for a new ready marker (have $BEFORE)"
|
||||
while [ "$(ls .run/ready/ 2>/dev/null | wc -l)" -le "$BEFORE" ]; do
|
||||
[ "$(date +%s)" -ge "$DEADLINE" ] && { say "deadline passed — NOT restarting"; exit 1; }
|
||||
[ -e .run/ox_campaign.stop ] && { say "campaign stopped"; exit 0; }
|
||||
sleep 30
|
||||
done
|
||||
say "a wave queued; restarting the drafter shell"
|
||||
pkill -f 'bash .run/drafter.sh' 2>/dev/null || true
|
||||
pkill -f 'ox_campaign.py --drafter' 2>/dev/null || true
|
||||
sleep 3
|
||||
setsid nohup .run/drafter.sh >> .run/drafter.log 2>&1 < /dev/null &
|
||||
sleep 20
|
||||
say "new rotation line:"; grep 'resuming rotation' .run/drafter.log | tail -1
|
||||
Reference in New Issue
Block a user