Why
RigForge (the worker kit) and Pithead (the stack) share a real contract — mining on the proxy's
:3333, stats on the worker's :8080, and now optional stratum auth (#152). But each repo
only tests its own side in isolation (Pithead's live harness checks proxy/dashboard posture;
RigForge's suite checks its config render with fakes). Nothing exercises the two together —
a real worker against a real proxy — so a contract drift on either side (a header, a port, the
pass/auth handshake, the Bearer <rig name> token rule) would ship undetected.
This issue tracks an end-to-end integration suite that provisions a real RigForge worker against
a running Pithead stack and asserts every flow between the worker and the proxy/dashboard.
Flows to cover
Mining connection (:3333)
Stratum authentication (#152 / #207 / #208, RigForge #113)
Stats connection — the Worker API (:8080)
Dev-fee independence (#173)
Resilience
Where it could run
Refs
Why
RigForge (the worker kit) and Pithead (the stack) share a real contract — mining on the proxy's
:3333, stats on the worker's:8080, and now optional stratum auth (#152). But each repoonly tests its own side in isolation (Pithead's live harness checks proxy/dashboard posture;
RigForge's suite checks its config render with fakes). Nothing exercises the two together —
a real worker against a real proxy — so a contract drift on either side (a header, a port, the
pass/auth handshake, theBearer <rig name>token rule) would ship undetected.This issue tracks an end-to-end integration suite that provisions a real RigForge worker against
a running Pithead stack and asserts every flow between the worker and the proxy/dashboard.
Flows to cover
Mining connection (
:3333)(discovered via the stratum
userlabel — nothing registered stack-side).pools[]) works.Stratum authentication (#152 / #207 / #208, RigForge #113)
pass: "x"mines (open stack).p2pool.stratum_password; a worker whosepools[].passmatches mines.Permission denied; neverappears in the dashboard). ← the regression that Expose two xmrig-proxy config knobs: stratum access-password (#152) + dev-fee donate-level (#173) #207's empty-flag bug would have caused.
applyon both sides; stale-pass rigs are rejected until updated.Stats connection — the Worker API (
:8080)GET http://<rig>:8080/1/summaryasBearer <rig name>and shows per-rig stats.ACCESS_TOKENdecoupled from the rig name breaks thedashboard read (the documented failure mode).
:8080on0.0.0.0, reachable from the stack host over the LAN.Dev-fee independence (#173)
--donate-level(stack-side) and RigForge'sDONATION(rig-side) are independentand both honored — neither silently overrides the other.
Resilience
pithead apply→ the worker reconnects and resumes mining.Where it could run
tests/integration/) against the self-hosted box, provisioninga real RigForge worker via
rigforge.sh setup; gated like the release gate (Comprehensive end-to-end infrastructure test matrix on a real Ubuntu server (full Monero + Tari node) #54).xmrig/xmrig-proxylogin probe (thetechnique used to validate Optional stratum access-password: require miners to authenticate to xmrig-proxy #152 against xmrig-proxy 6.26.0) can assert accept/reject deterministically.
flags the other.
Refs
tests/integration/run.sh(Comprehensive end-to-end infrastructure test matrix on a real Ubuntu server (full Monero + Tari node) #54)