Repository navigation
Support solo daemon pools and report node health - #645
Draft
pithead-developer[bot] wants to merge 1 commit into
Draft
pithead-developer[bot] wants to merge 1 commit into
pithead-developer[bot] wants to merge 1 commit into
Conversation
Part of #528. Implemented by an operator-run GPT session at the owner's request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9 tasks
Contributor
Author
|
Operator: this stays a held draft until RigForge 1.18.1 is tagged (due Fri 2026-11-06, Sat 11-07 at the latest). 1.18.1 is cut from develop, so merging this first would widen that release. After the tag: rebase on develop, run the agent review, and request the owner's approval. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's the problem
RigForge drops XMRig's daemon pool settings, rejects daemon URL schemes, and describes every connection as Stratum. Operators cannot configure solo mining or get useful node health information.
How I fixed it
daemon: trueflag from a daemon URL; reject explicit false and incompatible settings before apply changes anything.get_infowith bounded curl timeouts and report height and sync state. Addconnection.mode: "daemon"to the sister feed while retaining the existing Stratum behavior.socks5andtls-fingerprint: the pinned miner ignores them. Document its unauthenticated HTTPS transport, the separate CA verification in doctor's probe, node ownership, and the unsupportedself-select,submit-to-originandspend-secret-keyfields.Here is the proof
timeout -k 10 900 bash tests/test-daemon-pools.sh <(git show HEAD:rigforge.sh)— exit 1; 66 passed, 72 failed.timeout -k 10 900 bash tests/test-daemon-pools.sh— exit 0; 138 passed, 0 failed on jq 1.8.2.timeout -k 10 900 env PATH="/private/tmp/rigforge528-jq16-path:$PATH" bash tests/test-daemon-pools.sh— exit 0; 138 passed, 0 failed on official jq 1.6. The temporary PATH shim selected that binary and was removed afterward. Tests verify exact emitted timer integers, including the portable upper bound.PARITY_DIR=/private/tmp/rigforge528-parity.P9BktE, withgit show HEAD:rigforge.sh >"$PARITY_DIR/head.sh". Bothbash /private/tmp/rigforge528-stratum-parity.sh "$PWD" "$PARITY_DIR/head.sh" "$PARITY_DIR/head" "$PARITY_DIR/work"andbash /private/tmp/rigforge528-stratum-parity.sh "$PWD" "$PWD/rigforge.sh" "$PARITY_DIR/current" "$PARITY_DIR/work"passed.cmp -s "$PARITY_DIR/head.$surface" "$PARITY_DIR/current.$surface"passed for each ofrender,doctor,applyandfeed. All four outputs were raw byte-identical; the clock was fixed before feed generation with no JSON post-processing. The temporary harness and scratch directory were removed afterward.timeout -k 10 180 shellcheck --severity=warning util/daemon-pools.sh tests/daemon-pools.sh tests/test-daemon-pools.shand/private/tmp/rigforge528-tools.fKGzli/shfmt -i 4 -d rigforge.sh util/daemon-pools.sh tests/daemon-pools.sh tests/test-daemon-pools.sh— passed.FILE_BUDGET_REQUIRE_BASE=1 bash scripts/lint-file-budget.shandgit diff --check— passed. No existing file ceiling increased.timeout -k 5 120 bash -c 'shellcheck --severity=warning rigforge.sh util/daemon-pools.sh && shfmt -i 4 -d rigforge.sh util/daemon-pools.sh'— timed out; the longer aggregate run completed ShellCheck before reaching the formatter mismatch below.timeout -k 30 5400 make test— exit 2 before unit tests: installed shfmt 3.13.1 disagreed with untouched tests. The repository pins 3.14.1. Its official binary was checked against its release asset digest;/private/tmp/rigforge528-tools.fKGzli/shfmt -i 4 -d $(git ls-files '*.sh') util/daemon-pools.sh tests/daemon-pools.sh tests/test-daemon-pools.shpassed.timeout -k 30 5400 make test-suite— exit 2; 2552 passed, 19 failed. It caught the reference key-set and new-module setup problems, both fixed, plus two failures from GNUstatshadowing macOSstat.PATH="/private/tmp/rigforge528-tools.fKGzli:$PATH" timeout -k 30 5400 make test— exit 2; 2566 passed, one existing legacy-upgrade assertion failed. The isolated fixture subsequently passed with both default and accelerated sampling; the original one-off failure did not reproduce.PATH="/private/tmp/rigforge528-tools.fKGzli:$PATH" AUTOTUNE_WARMUP=0 AUTOTUNE_INTERVAL=0 AUTOTUNE_SAMPLES=1 timeout -k 30 3600 make test— exit 0; 2569 main-suite checks passed, zero failed, and all five auxiliary suites passed. The temporary tool directory selects the pinned formatter and native macOSstat; the timing overrides skip sampling delays, not an asserted timing contract.PATH="/private/tmp/rigforge528-tools.fKGzli:$PATH" timeout -k 10 620 python3 -B /private/tmp/rigforge528-legacy-appliance-default.py— exit 0 in 268 seconds. This isolated the existing legacy appliance fixture, explicitly unset all three autotune timing overrides, passed all six setup assertions and returned zero from the exact upgrade invocation. Fixture data was removed; the temporary extraction wrapper remains available.timeout -k 5 120 npx --offline --yes --logs-max=0 markdownlint-cli2@0.23.3 AI_RULES.md docs/configuration.md docs/pithead-integration.md— unavailable: the pinned package was not cached (ENOTCACHED). Markdown lint is not claimed as passed.The pinned source is XMRig v6.26.0 at
b2ca72480c58d197e18c885d9fc1a0c8d517e60a, built natively with HTTP, TLS, RandomX and hwloc. Unrelated algorithms, GPU backends, MSR and DMI were disabled for the local proof; the donation minimum/default received RigForge's normal zero patch.XMRIG_BIN=/private/tmp/rigforge528-xmrig-source/build/xmrig timeout -k 10 180 python3 -B tests/prove-daemon.py --runtime 120passed again on the final numeric mapper: all three URL forms passed config checks, three jobs were fetched and accepted, doctor reported height 2286447 as synced, and a slow node produced the bounded warning in six seconds. The helper checks effective zero donation before launching, verifies the exact local stub connection, and cleans up its own processes and temporary directories.Container e2e and coverage were not run because Docker's shared disk lacked capacity. Bench and hardware jobs were not submitted; the worker-to-coordinator hardware contract remains unrun. No KVM proof is required for this change. HTTPS and bare daemon URLs received config acceptance checks; the actual job and doctor proof used HTTP against a disposable local stub.
Closes #528
Draft from an operator-run GPT session (owner request, 2026-11-02). The operator gates it before it leaves draft.
🤖 Generated with Claude Code