Found in a fresh-eyes live walkthrough on miner-0 (v1.14.0), reproduced in a fully healthy, correctly-mining state — always-on, not situational.
_status_api_summary() (rigforge.sh ~3684-3697) builds its stats row with jq -r '[..., (.hugepages // "")] | @tsv'. XMRig's /2/summary reports "hugepages": [0, 0] — always an array — and @tsv refuses nested arrays: jq: error: array ([0,0]) is not valid in a csv row, exit 5. The failure is swallowed by svc_status()'s || true, but the ERR trap still prints [ERROR] rigforge aborted while starting up (exit 5). and the whole Hashrate/Pool/Uptime/Shares block silently never renders.
Net effect: rigforge.sh status — the first command an operator reaches for — always shows a scary error instead of live stats, on every install with the API enabled.
Repro without a rig: echo '{"hugepages":[0,0]}' | jq -r '[(.hugepages // "")] | @tsv' → exit 5.
Fix shape: serialize the pair ((.hugepages // []) | join("/")) or pick the fields explicitly before @tsv.
Found in a fresh-eyes live walkthrough on miner-0 (v1.14.0), reproduced in a fully healthy, correctly-mining state — always-on, not situational.
_status_api_summary()(rigforge.sh ~3684-3697) builds its stats row withjq -r '[..., (.hugepages // "")] | @tsv'. XMRig's/2/summaryreports"hugepages": [0, 0]— always an array — and@tsvrefuses nested arrays:jq: error: array ([0,0]) is not valid in a csv row, exit 5. The failure is swallowed bysvc_status()'s|| true, but the ERR trap still prints[ERROR] rigforge aborted while starting up (exit 5).and the whole Hashrate/Pool/Uptime/Shares block silently never renders.Net effect:
rigforge.sh status— the first command an operator reaches for — always shows a scary error instead of live stats, on every install with the API enabled.Repro without a rig:
echo '{"hugepages":[0,0]}' | jq -r '[(.hugepages // "")] | @tsv'→ exit 5.Fix shape: serialize the pair (
(.hugepages // []) | join("/")) or pick the fields explicitly before@tsv.