Summary
The Windows headless miner retries the same rejected signed header every 10 seconds for the entire eligible slot, while its console output only reports FAIL and omits the response diagnostic stored in last_header_error.
Steps to reproduce
- Run
miners/windows/rustchain_windows_miner.py --headless against a node where the wallet becomes eligible but signed-header ingestion rejects the request.
- Wait for an eligible slot.
- Observe the process log and incoming requests until the slot changes.
Live reproduction on June 11, 2026:
- Eligibility returned
eligible: true, slot 27455.
POST /headers/ingest_signed returned HTTP 403: {"error":"no pubkey registered for miner","ok":false}.
- The miner submitted 108 rejected headers for that same slot at ten-second intervals.
- Headless output showed only increasing
submitted counts and FAIL, without the HTTP 403 reason.
Expected behavior
A miner should attempt a given slot at most once, whether the node accepts or rejects the header. A failed headless event should include the safe response diagnostic so an operator can fix registration or node configuration.
Actual behavior
Deduplication uses _last_submitted_slot, which is updated only after success. Rejections therefore remain eligible for another attempt on every polling cycle. _format_headless_event() also discards last_header_error.
Impact
This creates unnecessary request load during a failed eligible slot and obscures the actionable cause from operators. The observed failure generated 108 redundant submissions before the slot rotated.
A focused fix with regression coverage is ready on lazyGPT07:fix/windows-header-attempt-diagnostics.
Summary
The Windows headless miner retries the same rejected signed header every 10 seconds for the entire eligible slot, while its console output only reports
FAILand omits the response diagnostic stored inlast_header_error.Steps to reproduce
miners/windows/rustchain_windows_miner.py --headlessagainst a node where the wallet becomes eligible but signed-header ingestion rejects the request.Live reproduction on June 11, 2026:
eligible: true, slot27455.POST /headers/ingest_signedreturned HTTP 403:{"error":"no pubkey registered for miner","ok":false}.submittedcounts andFAIL, without the HTTP 403 reason.Expected behavior
A miner should attempt a given slot at most once, whether the node accepts or rejects the header. A failed headless event should include the safe response diagnostic so an operator can fix registration or node configuration.
Actual behavior
Deduplication uses
_last_submitted_slot, which is updated only after success. Rejections therefore remain eligible for another attempt on every polling cycle._format_headless_event()also discardslast_header_error.Impact
This creates unnecessary request load during a failed eligible slot and obscures the actionable cause from operators. The observed failure generated 108 redundant submissions before the slot rotated.
A focused fix with regression coverage is ready on
lazyGPT07:fix/windows-header-attempt-diagnostics.