1. train_example_model → hope-miner integration
Trained models were never persisted; runner only accepted "baseline".
- scripts/train_example_model.py: --save-model PATH (joblib bundle)
- hope/miner/models/feature_extraction.py: shared extractor used by
both training and inference (so what the model learns is what it
sees in production)
- hope/miner/models/trained.py: TrainedXGBoostModel implementing
PredictionEngine.predict(); loads the saved bundle
- hope/miner/runner.py: --model {baseline,trained} + --model-file
- Round-trip verified: train → save → load → predict on real episode
2. HOPE_API_KEY undocumented + silent dead-end
- scripts/score_predictions.py: --training-data flag (offline path)
- Auto-fallback to bundled training_episodes.json when --release given
without HOPE_API_KEY (with a clear notice; never silent)
- Docs (miner_quickstart §7, §9, README): canonical command now uses
--training-data; HOPE_API_KEY clearly framed as operator-only,
not a "miner upgrade" path
3. hope-miner 403 → raw httpx traceback
- hope/miner/episode_client.py: translate 401/403/404/422 into
RuntimeError with actionable next-steps (e.g., "Hotkey not
registered on subnet — run btcli subnet register ...")
- hope/miner/runner.py: catch RuntimeError, print "❌ <msg>", exit 1
4. verify_epoch.py defaults to mainnet
- scripts/verify_epoch.py: warn when --network/--netuid not passed
explicitly ("Using default mainnet ... For testnet pass ...")
- docs/miner_quickstart.md Step 7 example now includes
--network test --netuid 466
5. Hidden btcli prompts in Step 2
- docs/miner_quickstart.md: 4-row table documenting each prompt
(wallets dir, word count, password, retype) with the safe answer
- Explicit "save mnemonic to password manager / clear scrollback"
guidance — same habit for testnet and mainnet, no footgun
Discord: added the SN21 community channel link
(discord.com/channels/799672011265015819/1489651673944297472) alongside
the Bittensor faucet link.
.gitignore: scoped exception so hope/miner/models/ tracks (the global
"models/" ignore was hiding the new files).
832 tests pass, ruff clean. End-to-end smoke verified:
- train_example_model.py --save-model produces a loadable bundle
- score_predictions.py --training-data scores cleanly (no API key)
- hope-miner --help shows --model {baseline,trained}