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. Each section starts with the symptom you’ll see, then walks you through the checks that resolve it.
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/health
curl http://localhost:8080/v1/submissions Epoch auto-detection failure
Error: Failed to fetch epoch from .../v1/status
submit auto-detects epoch via GET /v1/status. If that endpoint is unavailable on your target, pass --epoch explicitly:
python -m minotaur_subnet.miner.main submit \
--repo-url <url> \
--commit-hash <hash> \
--hotkey <wallet> \
--epoch 0 \
--validator-url http://localhost:8080 \
--poll 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__)" Running the exact same docker run invocation the validator uses locally is the fastest way to catch screening failures before you push.
Source submissions not adopted
/v1/submissions/source skips screening and goes straight to benchmarking. If your submission scores but isn’t adopted:
- Score may be lower than champion
- Challenger must beat champion by at least 0.5% (
DETHRONE_MARGIN = 0.005)
Use the status endpoint to inspect:
python -m minotaur_subnet.miner.main status \
--submission-id <id> \
--validator-url http://localhost:8080 Score is always zero
Common causes:
generate_plan()raises exceptions- Malformed
ExecutionPlan/ calldata - Invalid addresses, deadlines, or empty interaction list
Quick check by submitting source and reviewing benchmark / status details:
curl -X POST http://localhost:8080/v1/submissions/source \
-H "Content-Type: application/json" \
-d '{"solver_source":"<python source>","hotkey":"local-miner","epoch":0}' An exception inside generate_plan() results in a score of 0.0 for that intent — it does not crash the solver. Always check logs for silent failures.
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/source - 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 30 Useful commands
# API health
curl http://localhost:8080/health
# List submissions
curl http://localhost:8080/v1/submissions
# Poll one submission
python -m minotaur_subnet.miner.main status \
--submission-id <id> \
--validator-url http://localhost:8080