Repository navigation
Verify XMRig benchmarks and add bounded stress checks - #610
Conversation
Part of #533. Implemented by an operator-run gpt-6-astra session at the owner's request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Operator: released to the runner (owner 2026-11-06). New work goes to the local Flash-Next model first; Claude only after three local rounds or for sensitive work. |
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Review return addressed at d2708b4: deleted the 10 listed added comment lines (tests/coverage.sh:3 and :52, tests/e2e-real.sh:1251, tests/run.sh:2471/2490/5364/5374/5379/5454, util/benchmark.sh:85) and lowered the run.sh and e2e-real.sh budget ceilings to the new line counts. Checks: |
… check failure Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… under set -u Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ss error paths Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Required-check return addressed at a0744b6. Lint failed because my local shfmt reformatted tests/run.sh differently from CI's; I reverted that. Coverage failed for two reasons. First, the benchmark test drivers ran as |
|
FAIL What I investigatedPR #610 (head a0744b6) for rigforge#533: it adds RandomX hash-verdict checking to bench and tune, a bounded
Reviewed head: What are the gaps
|
…533) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The base branch was changed.
|
develop-v1.19.0 was folded back into develop (#664, squash 🤖 Generated with Claude Code |
# Conflicts: # Makefile # docs/benchmarks.md # docs/operations.md # rigforge.sh # tests/README.md # tests/coverage.sh # tests/e2e-pithead.sh # tests/run.sh
Co-Authored-By: Claude Code <noreply@anthropic.com>
# Conflicts: # tests/coverage.sh # tests/test-coverage-cache.sh
|
PASS What I investigatedRe-review of PR #610 (issue #533) at head b03f2a0. The last reviewed head, a0744b6, is in this clone. I reviewed what changed since it: the worker's commits 20e9da2, 80707ad, 0382a35 and 75917b8, plus the conflict resolutions in merges 03bcea4, 6208531 and b03f2a0. The round-2 blocking finding is fixed: tier4-e2e selftest job 3672 ran on the exact head and succeeded with 3/3 rows. Both notes are closed. GitHub CI is green, and the merges kept develop's shared_host refusal for every offline-benchmark caller.
Reviewed head: |
Owner brief for
|
What's the problem
Issue #533:
benchaccepted speed without checking RandomX correctness, offline tuning could select an incorrect candidate, and BIOS changes had no sustained stability check. Release baselines also lacked an optional verifiable submission ID, and support bundles omitted benchmark diagnostics.Priority: post-GA diagnostics and correctness hardening. Corrupt output can cause rejected work or a bad tuning choice; no security or data-loss claim is established by this issue.
How I fixed it
stress --minutes Nwith a 30-minute default, the existing temperature source and cutoff, owned-process cleanup, and restoration of prior miner/timer state. A thermal trip leaves the miner stopped for watchdog recovery. Preserve existing hold markers and report restoration failures. BIOS confirmation points to stress before retuning.bench --submitfollowed by verification, plusbench --verify ID. Save validated benchmark diagnostics for support bundles and optional submission IDs in release baseline/history records. Document publication and hardware-proof requirements.selftestphase to the tier4-e2e harness (tests/e2e-selftest.sh, kept out ofall). It runs the realbenchand requires a verified RandomX hash and record. It then runsstress --minutes 1and requires a pass, with thexmrig,rigforge-autotune.timerandrigforge-watchdog.timerstates the same as before.tests/test-e2e-selftest.shcovers it with stubs.util/benchmark.shandutil/stress.sh, because kcov cannot attribute multi-line program strings;rigforge.shfollows the same convention. The benchmark test drivers run as script files, because kcov's trace prompt breaksbash -cchildren underset -u.util/benchmark.shrepeat the same scaffolding. Upgrade to jq/awk program files underutil/when either is next changed.Here is the proof
Ponytail review: the new e2e phase and its stub test are the minimum the reviewer's hardware-proof finding asks for. Nothing was cut.
Bench (tier4-e2e, real rig, real XMRig v6.26.0):
Head
80707ad: the realbenchverified its RandomX hash and recorded the verdict. The 1-minutestressfailed with "XMRig's latest speed report was not a positive hashrate", and the miner and timers were restored. The log carried no XMRig output, so the cause is not yet known; the likely one is that no speed report was printed within the minute (XMRig's defaultprint-timeis 60 s). That is a guess.bench-ci job 523@80707ad3d460e1e427911f5ba80edca2835b9f6f · rigforge · tier4-e2e
stressverb afterbios, andbenchnever checks the hash it computed (--seed/--hash/--submit/--verify) #533) (XMRig self-test modes are not surfaced: nostressverb afterbios, andbenchnever checks the hash it computed (--seed/--hash/--submit/--verify) #533)Generated by
bench-ci evidence 523@80707ad3d460e1e427911f5ba80edca2835b9f6f; re-run it to check.Head
03bcea4:stressnow asks XMRig for a speed report every 10 s and prints the last 15 lines of XMRig's output when it fails. Theselftestphase passed on the real rig: the bench verified its hash, the 1-minute stress hashed, and the miner and timer states matched before and after (the autotune timer was inactive both before and after).bench-ci job 3540@03bcea4c8587f9ca426ceb720fe7b86c6b4d6fa5 · rigforge · tier4-e2e
Generated by
bench-ci evidence 3540@03bcea4c8587f9ca426ceb720fe7b86c6b4d6fa5; re-run it to check.GitHub CI: the PR base is now
develop; the branch mergedorigin/developtwice to get there (the 1.19.0 fold, then #605). The first merge dropped the executable bit onrigforge.shandtests/coverage.sh—75917b8restored it. All ten checks pass at headb03f2a0(gh pr checks 610), including Coverage (kcov + diff-cover), Lint (shellcheck + shfmt), Test suite and End-to-end (Docker). Local atb03f2a0: the four regression suites plustests/test-randomx-mode.shandtests/test-coverage-cache.shall pass, and the lint gates are clean.On the current head
b03f2a0(rig restored, checkout preserved): the realbenchverified its RandomX hash and recorded the verdict, the 1-minutestresshashed, and the miner and timer states matched before and after.bench-ci job 3672@b03f2a03127331793a0fe65117d5dd034b6a9f39 · rigforge · tier4-e2e
Generated by
bench-ci evidence 3672@b03f2a03127331793a0fe65117d5dd034b6a9f39; re-run it to check.Local at
03bcea4(macOS):bash tests/test-benchmark-verification.sh→ 49 passed, 0 failed.bash tests/test-benchmark-support.sh,bash tests/test-stress.sh,bash tests/test-perf-submission.shandbash tests/test-e2e-selftest.sh→ PASS.FILE_BUDGET_REQUIRE_BASE=1 bash scripts/lint-file-budget.sh→ OK. Six mutations oftests/e2e-selftest.sheach maketests/test-e2e-selftest.shfail: dropping the bench marker check, the record verdict check, the stale-record removal, theStress PASScheck, the unit-state comparison, or the unreadable-state guard.Red before the fix (first draft session): the same four regression suites, run against the pre-change
rigforge.shandtests/e2e-real.sh, all exited 1. Benchmark verification had 8 passing and 30 failing checks, the support bundle omitted the record, stress was absent, and perf did not submit.Not covered: the 30-minute default stress window, and online submission and verification against the public XMRig benchmark service (
bench --submit/--verify) has no bench run. A real returned ID belongs in the published baseline after an authorized hardware run. The bench phase uses a one-minute window.Closes #533
🤖 Generated with Claude Code