Repository navigation
fix(bench-report): hold each host with quest gate --host, and measure macOS noise - #399
Conversation
ssh runs a non-login shell on macOS, so the run got the system python3 (3.9, no tomllib) and no brew, and kixtop never produced a result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macOS sampled top only before the build and the run, and recorded no load during it, so a run alongside other builds came back ok. Read host_statistics' CPU ticks instead, the counterpart of /proc/stat, so both platforms share one busy measure and flag a noisy run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Heads-up from #397: at about 17:45 UTC I ran
(Written by Claude Opus 5.5) |
…shell Two collections on one host clobbered each other: the second's copy replaced the first's source mid-build, and other gated builds ran alongside the benchmarks. Each collection now gets its own copy, and runs under `quest gate --host`, which keeps every other gated command off the host until it ends. macOS runs in the Nix dev shell too, which provides the pinned quest, so Homebrew and rustup are gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…still run Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Your OpenCode Go account is out of credit. Top it up, then re-trigger Pullfrog. OpenCode Go's response
|
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 54 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head: 566a050699c6bad634347d771845e798334accaf.
No actionable correctness findings in the reviewed changes. I checked the macOS CPU-tick sampling and wraparound arithmetic, the during-run subtraction of benchmark CPU time, unique source/result directories and cleanup, the collector's independently pinned Quest host gate, and the Nix/toolchain changes against the surrounding code and pinned Quest implementation.
Direction: no code revision requested by this review. Complete the required CI before merging.
Limits: static, GitHub-only review. I did not run tests, Nix builds, SSH commands, or benchmarks, and have not independently reproduced the host measurements reported in the PR. The existing bench-report tests cover rendering, not the new collection and CPU-accounting paths. CI was still in progress when checked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a2048-sign Resolves admin/bench-report against #399: every host runs one host script that extracts its own mktemp copy, runs, prints the result, and removes the copy. A host is held once, by its lease where it has one, otherwise by quest gate --host. The lease test follows the copy's new layout and gains an unleased case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#399 holds every host with quest gate --host. The merge held a leased host with its lease alone; it now takes both, so gated work on a VPS waits too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Problem
The macOS host never produced a trustworthy result, and collections collided:
collectran macOS's host side outside Nix over a non-login ssh session, so it got macOS's python3 (3.9, notomllib) and wrote nothing.runsampledtopfor 5 seconds before the build and the run, and measured nothing during it. kixtop came backoktwice while another session's gated cargo builds ran alongside (load 2 to 9; 177 of 357 timings differ by over 10% between the runs).rm -rf srcdeleted the first's source and build-cost scratch mid-build.Approach
quest gate --host(moq-dev/quest#526). That keeps every other gated command off the host until the benchmarks and build costs finish, and queues a second collection behind the first. The gate is the collector's own locked quest (nix shell github:moq-dev/quest/<rev>from its flake.lock), so a commit that pins an older quest still runs, in its own dev shell.mktemp -dcopy and removes it afterwards, so a second collection can't replace the first's source. The build directory stays shared, guarded by cargo's lock and the gate.collectrefuses to run underquest gate, since the local host's nested gate would run at once without holding the host.host_statistics(HOST_CPU_LOAD_INFO), the counterpart of/proc/stat, so one measure serves both platforms, andother_busy_cpus_during_run/noisynow cover macOS. Deltas wrap at 32 bits, as macOS's counters do after weeks of uptime.Impact
admin/bench-report, the README, and the flake's quest pin only.Validation
just cipasses.okwith 357 results. The during-run measure read 0.55 other busy CPUs (not noisy), and build cost wasok, a first for kixtop. The hold released when the gate exited.code=$?(zsh'sstatusis read-only) was checked under kixtop's zsh over ssh. The collector's gate was checked on kixtop, and on nixos with f95b91d's tree, whose own quest lacks--host: its dev shell came up, and a nested gate ran at once.Alternatives
runwith the old sharedsrc/: the copy step runs before any gate and would still wipe a running collection.Review
Codex (gpt-6.1-sol, high), 3 rounds; round 3 on head 566a050 reported no findings.
status=$?fails under zsh, wherestatusis read-only. Fixed:code=$?.nix shell.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code