Miner Troubleshooting
Common issues when submitting and iterating on solver code — submission endpoints, screening failures, scoring zeros, and the agent loop.
Common issues when submitting and iterating on solver code.
Submission endpoint errors
Error: cannot reach /v1/submissions*
Typical causes:
- Wrong base URL (using validator
:9100when submissions are served by API:8080in local testnet) - API service not running
Checks:
curl http://localhost:8080/healthcurl http://localhost:8080/v1/submissionsNo open solver round
Error: Cannot submit: solver round unavailable / Cannot submit: no open solver round
submit discovers the active round via GET /v1/solver/round and requires one that is open and accepting submissions — there is no epoch fallback. Check the round:
curl http://localhost:8080/v1/solver/roundIf there’s no round_id, or accepting_submissions is false, wait for the next open round (on local testnet, ensure the API has opened one). --epoch is no longer required — the epoch is read from the round.
Signature or hotkey issues (git submission)
Error: HTTP 400/401 on POST /v1/submissions
Checks:
--hotkeypoints to a real Bittensor wallet name- wallet exists under
BT_WALLET_PATH(or default~/.bittensor/wallets) - commit hash and repo URL match the signed message payload
Screening failures
For git submissions, failures often come from:
- Missing required files in repo root (
Dockerfile,solver.py,README.md) - Invalid
Dockerfilebase image CMD/ENTRYPOINTpresent inDockerfileSOLVER_CLASSimport/init issues
Local checks:
docker build --network=none --memory=4g -t test-solver .docker run --rm --network=none --read-only --tmpfs=/tmp:size=64m --memory=2g --cpus=1.0 --entrypoint python test-solver -c "from solver import SOLVER_CLASS; print(SOLVER_CLASS.__name__)"Submission not adopted
The inline source path (
/v1/submissions/source) was removed (PR #599). All submissions now go through the git PR path.
Check the outcome_code on your submission status first — it names the exact
reason. Common non-adoption cases:
- Tied on output. You matched the champion on every order (within the ±0.1%
band) and lost or tied every tie-break rung — the incumbent is kept. To win an
all-matched tie you must be cheaper on total metered gas (≥200 bps),
better factored (
max_region_nodessmaller by ≥100), or carry less dead code (unproductive_nodessmaller by ≥2000). Your report names the target. - Not net-better on output. Your regressions were not outnumbered by wins:
adoption needs
(wins + blind_spot_covers) − regressions ≥ 1. - Hard veto. You cut at least one order by more than 1% (
n_catastrophic), or you dropped an order the champion serves (n_dropped) — either vetoes adoption regardless of how many other orders you won. - Screening reject (
too_entangled/dynamic_code). Stage 1 now rejects a solver whose largest AST region exceeds 4,200 nodes (too_entangled) or that uses bareexec()/eval()(dynamic_code). The reject still reports yourmax_region_nodesso you can see the number to get under. waitlisted, not rejected. If youroutcome_codeisrotation_not_selectedorwindow_elapsed, you were not benchmarked this round through no fault of your own — you keep a next-round priority. Resubmitting an identical solver does not help (see below).fingerprint_repeat. A comment-only / nonce-only resubmit of an identical code tree is rejected pre-build — “comments don’t make code new”. Change at least one semantic byte. (Cross-hotkey resubmit quota is operator-gated and off by default.)
Use status endpoint to inspect:
python -m minotaur_subnet.miner.main status \ --submission-id <id> \ --validator-url http://localhost:8080Score is always zero
Common causes:
generate_plan()raises exceptions- malformed
ExecutionPlan/ calldata - invalid addresses, deadlines, or empty interaction list
Quick check: submit through the git PR path and review the benchmark/status
details on your submission (python -m minotaur_subnet.miner.main status --submission-id <id>), or reproduce locally against the testnet, which runs the
same screening → benchmark → scoring pipeline.
Agent loop does not generate submissions
Checks:
- Claude CLI is installed and available in
PATH - API URL points to a reachable server exposing
/v1/apps/manifestsand/v1/submissions - strategy directory is writable
Run with explicit options:
python -m minotaur_subnet.miner.main agent \ --validator-url http://localhost:8080 \ --strategy-dir ./strategies \ --loop-interval 30Useful commands
# API healthcurl http://localhost:8080/health
# List submissionscurl http://localhost:8080/v1/submissions
# Poll one submissionpython -m minotaur_subnet.miner.main status --submission-id <id> --validator-url http://localhost:8080See also: Quickstart, Configuration, Custom Solver.