ci / fmt (pull_request) Successful in 20s
bench / build (pull_request) Successful in 57s
ci / doc (pull_request) Successful in 1m46s
ci / clippy (pull_request) Successful in 2m16s
bench / measure (pull_request) Successful in 2m49s
ci / test (pull_request) Successful in 10m33s
quantus/miner#2. The measurement gate every kernel and submission change passes before merge. crates/bench-harness (lair-owned, never touched by origin merges): - drives GpuEngine through MinerEngine, one worker thread per card, with fixed timed windows after a warm-up; reports per-worker median MH/s and spread and refuses (exit 5) when spread exceeds 2% - captures nvidia-smi state (driver, power limit, draw, clock, temperature) before and after, and refuses to run (exit 3) when the enforced power limit is not the expected one, since that is the largest confound on these cards - GPU/CPU parity on random jobs, same shape as engine-gpu's gpu_cpu_parity example, exit 4 on any mismatch - one JSON record per run (schema 1) plus a markdown summary on stdout - build.rs embeds the commit like miner-cli's .gitea/workflows/bench.yaml: - runner containers on the GPU hosts have no device passthrough, so the binary is built on cuda-13.0 (Fedora 43, matching the hosts; the rust image is Fedora 44 and its binaries need a newer glibc) and executed on the host over ssh as gitea_ci - stops quantus-miner.service for the window and starts it again under a trap; refuses to measure a card that is busy with the miner stopped - benjy (4090, dedicated) by default; host, duration, runs, batch size and workers are dispatch inputs; PRs touching engine or service crates trigger it and get the summary as a comment - one measurement per host at a time (concurrency group) The stop/start sudoers grants were added to lair/quantus infra-setup.sh (lair/quantus#5) and applied to benjy and quadbrat. Origin coupling: one line in the workspace members list, marked. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CBgs2nSi4H2mdh8kD8vMX5