Release 4.9.0
Incentive Mechanism: Burn Eliminated, Audio Activated
The emission split changes for the first time since audio entered the exam
pipeline (#412):
| Category | 4.8.x | 4.9.0 |
|---|---|---|
| Burn | 0.20 | 0.00 |
| Image discriminators | 0.30 | 0.40 |
| Video discriminators | 0.35 | 0.40 |
| Audio discriminators | 0.00 | 0.04 |
| Generators | 0.15 | 0.16 |
Audio detection models now earn live incentive for the first time.
Security Hardening
A full dependency audit against the repo's 120 open Dependabot alerts
(#411). Fixes the one critical (h11 malformed chunked-encoding, unblocked
by bumping our stale httpcore pin) and ~22 of 27 unique high-severity
alerts, including:
- pillow 10.4 → 12.2 — out-of-bounds writes parsing malformed images.
Validators parse miner-submitted media, so this was the bump that mattered
most. - diffusers 0.36 → 0.38 —
trust_remote_codebypass via custom pipeline
components. - Transitive fixes across the board: GitPython (command injection / RCE
chain), urllib3, cryptography, msgpack, protobuf, and ~150 others via a
full lockfile upgrade.
Also in #407: media store queries hardened with fully parameterized SQL,
and epistula timestamp validation tightened (future-dated timestamps now
rejected).
Alerts deliberately left open: aiohttp/starlette/setuptools (hard-blocked by
bittensor 9.9.0's own pins) and torch/transformers (major-version jumps not
worth the GPU-stack risk for medium-severity alerts).
Much Leaner Validator Installs
- gasbench packaging split (#413, gasbench#123): the subnet now installs
only gasbench's dataset registry (pyyaml) instead of its full inference
stack. Drops onnxruntime-gpu, torchaudio, torchcodec, timm, fvcore,
decord, modelscope, scikit-image, open-clip-torch and more from validator
environments. - Web scraper subsystem deleted (#407) — it had zero callers and took
selenium, Chrome, and the xvfb runtime stack with it. - 10 unused direct dependencies removed (#411) — onnx, asyncpg,
python-multipart, and a set of cargo-culted transitive pins. Verified
zero imports before removal.
Smaller installs mean faster validator auto-update cycles and less exposure
to the reinstall timeout.
Reliability & Correctness
Proactive hardening across the validator and shared libraries (#405–#411):
- Thread safety: score mutation now behind the validator state lock,
webhook stats behind an RLock, instance-level (not class-level) neuron
state (#408). - Autoupdater hardening:
git pull --ff-onlywith return-code checking,
repo-root discovery that can't infinite-loop, deterministic model hash in
discriminator pushes (#407, #408). - Prompt cache writes incrementally; validators can set an explicit
callback IP (#406). Mask paths persist throughadd_media_entry(#405). - Exception hygiene: no bare
except:anywhere (CI-enforced), silent
failure paths now log (#411).
Developer Experience
- CI introduced: ruff lint gates (error rules + no-print, no-bare-except,
no-tabs) and pytest on every PR (#407, #411). - Logging unified on
bt.logging— libraryprint()calls eliminated, so
errors actually reach pm2/Docker logs (#410). gascli d perfrebuilt model-centric with entrance-exam status and
failure reasons, plus base/aug score breakdown;aug_weight = 0.2
(#402, #403).content_manager.pyconverted from tabs to 4-space indentation with
.git-blame-ignore-revsso blame stays useful (#411).