diff --git a/docs/analysis/cryptanalysis/report-acceptance-rule.md b/docs/analysis/cryptanalysis/report-acceptance-rule.md index 5bb1d22aa..d1e0bc10d 100644 --- a/docs/analysis/cryptanalysis/report-acceptance-rule.md +++ b/docs/analysis/cryptanalysis/report-acceptance-rule.md @@ -5,7 +5,7 @@ internal adversarial pass, not an independent review - Target commit: 017e70376489251e18564c0abce7e466e606c8b3 (class v4 sub-version 3, object byte 7). - Crate built: igneum-pow at the frozen commit (this worktree's igneum-pow/ is reset to it; build/master diverged by 635 deletions and is not used). Harness: tools/attack/adv-accept (depends on igneum-pow by path). -- Re-base (19:3x BST): build/master moved to 7a7caa34 whose igneum-pow IS the frozen object; merged at +- Re-base (18:3x UTC): build/master moved to 7a7caa34 whose igneum-pow IS the frozen object; merged at 8748e955ceb48be5a6cbf7f8718a4884d3de9828; `git diff --quiet 017e7037 HEAD -- igneum-pow` prints IDENTICAL. Nothing measured here was on a stale tree: igneum-pow/ had been reset to the frozen object before the first build. - Binary sha256 (first build, box 2): e3d35f4464937f91aac0648e2ee7134f33c85c7aa314b87b33f91059dedc6682 (adv-accept @@ -15,10 +15,10 @@ internal adversarial pass, not an independent review nice 10 on every idle core, the capacity layer's yield (run-box.sh). Logs under /srv/builds/igneum-wt-adv-accept/adv/ on each box (spared from the checkout clean by .igneum-scratch-spare; the first 10k log on box 2 was wiped by a rebuild before the spare existed and is void anyway: old labels, old binary). -- Lane scope since 19:2x BST: THE BYPASS (Q1, Q2, Q5). Q3 is lane adv-accept-3's, Q4 lane adv-accept-2's. +- Lane scope since 18:2x UTC: THE BYPASS (Q1, Q2, Q5). Q3 is lane adv-accept-3's, Q4 lane adv-accept-2's. - Seed space: the attack-pass F8 label space (program k = seed_words("igneum-attack-f8/program/k"), era ".../era/k"), so `adv-live warps --program k` measures the live hot set of exactly the program the sweep reports. -- rustc 1.99.0 both sides. First results by 8 October 2026 18:00 BST. GPU: not available, so any per-card +- rustc 1.99.0 both sides. First results by 8 October 2026 18:00 UTC. GPU: not available, so any per-card hash-rate confirmation of a gain is BLOCKED and said so. - Box-hours spent so far: about 0.1 (one 7 s build, three short runs). Budget 8. @@ -77,7 +77,7 @@ set (the memory-hard cache, items derived into a table, the cross-hash histogram test) is the next run and is what the chip model prices; the closed-form distinct mean is a cheap upper bound on how concentrated an accepted program can be on the stand-in. -Numbers land here when the run finishes (first results by 8 October 18:00 BST). +Numbers land here when the run finishes (first results by 8 October 18:00 UTC). ## Running notes diff --git a/tools/attack/adv-accept/run-box.sh b/tools/attack/adv-accept/run-box.sh index 2c6f238f2..660a27693 100644 --- a/tools/attack/adv-accept/run-box.sh +++ b/tools/attack/adv-accept/run-box.sh @@ -1,10 +1,9 @@ #!/usr/bin/env bash -# Start a long adv-accept run on a build box under this lane's rules (coordinator, 7 October 2026, 19:2x UK): -# nice 10 on every idle core (no core band), and the capacity layer's yield: a 5 s poll of /srv/builds/_locks -# SIGSTOPs the run's own process group while any build-, measure or quiet lock is held and SIGCONTs it when -# they clear (infra/build-server/capacity/run.sh). The run never takes a build slot. Pid files beside the log: -# .pid (the run), .pgid (its process group), .yield.pid (the yield loop). Kill ONLY by pid file: -# kill -- -"$(cat .pgid)"; kill "$(cat .yield.pid)" +# Start a long adv-accept run on a build box under this lane's rules (build-server lane and coordinator, 7 October +# 2026, 18:4x UTC): nice 10 on cores 8 to 95 only (cores 0 to 7 belong to release builds, the seed and the observer), +# no SIGSTOP yield (the ruling of 18:4x UTC replaced the capacity layer's yield: the scheduler shares the cores), no build +# slot taken. Pid files beside the log: .pid (the run) and .pgid (its process group). Kill ONLY by pid file: +# kill -- -"$(cat .pgid)" # Run ON the box, from anywhere: # run-box.sh set -euo pipefail @@ -13,35 +12,8 @@ dir=/srv/builds/igneum-wt-adv-accept/adv mkdir -p "$dir" log="$dir/$tag.log" [ -x "$bin" ] || { echo "no binary at $bin" >&2; exit 1; } -# own process group via setsid so STOP/CONT reach every thread and child -setsid nice -n 10 "$bin" "$@" > "$log" 2>&1 < /dev/null & +setsid nice -n 10 taskset -c 8-95 "$bin" "$@" > "$log" 2>&1 < /dev/null & pid=$! pgid=$(ps -o pgid= -p "$pid" 2>/dev/null | tr -d ' '); [ -n "$pgid" ] || pgid="$pid" echo "$pid" > "$log.pid"; echo "$pgid" > "$log.pgid" -locks=/srv/builds/_locks -held() { # 0 when any build slot, measure or quiet lock is held - local f - for f in "$locks"/build-[0-9]* "$locks"/measure "$locks"/quiet; do - [ -e "$f" ] || continue - exec 9>>"$f" - if ! flock -n 9; then exec 9>&-; return 0; fi - exec 9>&- - done - return 1 -} -( - paused=0 - while kill -0 "$pid" 2>/dev/null; do - if held; then - if [ "$paused" = 0 ]; then kill -STOP -- "-$pgid" 2>/dev/null && paused=1; echo "$(date -u +%FT%TZ) pause (a build slot or hold is taken)" >> "$log.yield"; fi - else - if [ "$paused" = 1 ]; then kill -CONT -- "-$pgid" 2>/dev/null; paused=0; echo "$(date -u +%FT%TZ) resume" >> "$log.yield"; fi - fi - sleep 5 - done - [ "$paused" = 1 ] && kill -CONT -- "-$pgid" 2>/dev/null - echo "$(date -u +%FT%TZ) run ended" >> "$log.yield" -) > /dev/null 2>&1 < /dev/null & -disown $! 2>/dev/null || true -echo $! > "$log.yield.pid" -echo "started pid $pid pgid $pgid yield-loop pid $(cat "$log.yield.pid"); log $log" +echo "$(date -u +%FT%TZ) started pid $pid pgid $pgid nice 10 cores 8-95; log $log" | tee -a "$log.start"