proving/prover-floor/sp1-gpu-6.8.1-floor.patch and tools/fleet/floor.patch are now byte-equal to tools/fleet/floor-v5.patch (the complete patch: the key buffer grown for the main traces, the pool release threshold, the stage hook on a panic). Measured 8 October 2026 20:5x UK: the server built from the old canonical copy (floor-build.py's input; sha 75d0b4be) panicked at sp1-gpu/crates/jagged_tracegen/src/lib.rs:240 "range end index 37428736 out of range for slice of length 36700160" on the first recursion prove (the RTX 4060, chain mode); the server built from floor-v5 (db37c38b) proves. box-setup.sh re-pinned to the one sha.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Master review R1 residual V6-07 (the floor patch picked limits from total VRAM, defaulted small cards to 2^27 where the passing rows used 2^26, and returned one recursion constant in both branches).
- proving/prover-floor/sp1-gpu-6.8.1-floor.patch (and the fleet's two copies, box-setup.sh re-pinned): gpu_memory_gb() reads the device's FREE memory once per process (OnceLock; SP1_GPU_MEMORY_BUDGET_GB when the host leases it), never the total; the small tier's element threshold is 2^26 (the alone-comp-26-v1 rows of 6 October on the 3060, 3080, 4060, 4060 Ti, 4070, 5070 and the 8 October proof_alone rows on the 3060 at 7,525 MiB and the 4060 at 7,532 MiB); recursion_trace_allocation_for_budget returns upstream's 2^27 on the 24 GB tier and RECURSION_TRACE_ALLOCATION_SMALL = 2^26 + 2^25 under it (a recursion key or shard uses 90,177,536 elements); floor_tests pin the small tier and that the two branches differ; the FLOOR opts line carries free_mib and total_mib.
- host/src/memory_profile.rs: the pinned table (full, 24gb, 16gb, small by free MiB; floors per workload shard, aggregate, chain) with tests pinning every value; the row is chosen from the engine's lease (IGNEUM_PROVE_MEM_BUDGET_MB, else IGNEUM_PROVE_MEM_FREE_MB, with IGNEUM_PROVE_DEVICE, IGNEUM_PROVE_WORKLOAD, IGNEUM_PROVE_DEADLINE_S: the app lane's device coordinator interface) or, with no engine, from nvidia-smi memory.free on the device; applied to the floor server by environment before the SP1 client spawns it; a hand override is kept and named; under the floor the host refuses with one line and exit 78 before any setup.
- tools/fleet/box-prover.py: the default path names its workload (IGNEUM_PROVE_WORKLOAD=chain, IGNEUM_PROVE_DEVICE) and closes a refused segment as cancelled/memory.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>