# Protocol change tracker

Every Bittensor runtime change with the date its pull request opened, merged, reached testnet and went live on mainnet.

_Source: https://beta.taostats.io/docs/concepts/protocol-changes/change-tracker_

_Last reviewed: 2026-10-15_

This page tracks every change to the Bittensor chain runtime in [subtensor](https://github.com/RaoFoundation/subtensor), from pull request to production. For each change it shows when the pull request opened, when it merged, which runtime spec it shipped in, and when testnet and mainnet (Finney) first ran that spec. The data refreshes from the chains and GitHub every four hours.

> [!NOTE]
> **Where the dates come from**
>
> - **Opened** and **merged** come from the pull request on GitHub.
> - **Release** is the first subtensor release (`vNNN`) cut after the merge, which is the runtime spec that contains the change.
> - **Testnet** and **mainnet** are the dates each chain first ran that spec or a later one, read on-chain. Git branch dates are not used.
> - **Days to mainnet** counts from the pull request opening to the mainnet upgrade.
> - Only pull requests that change chain code (pallets, runtime, precompiles, node) are listed. SDK, CLI, CI, test and docs changes are left out.

## Status at a glance

- **Mainnet (Finney):** spec 478, live since 2026-10-13
- **Testnet:** spec 479, live since 2026-10-14
- **Merged chain-code changes:** 46, 46 live on mainnet; median 1 days from pull request to mainnet, longest 11

_Snapshot of 2026-10-14. The web page refreshes every four hours._

## Days to mainnet

The last 20 runtime releases that reached mainnet.

| Release spec | Mainnet | Days to mainnet | Changes |
| --- | --- | --- | --- |
| 445 | 2026-08-12 | 6 | 3 |
| 446 | 2026-08-14 | 2 | 1 |
| 447 | 2026-08-14 | 0 | 1 |
| 448 | 2026-08-21 | 3 | 1 |
| 450 | 2026-08-27 | 6 | 2 |
| 452 | 2026-08-29 | 1 | 3 |
| 453 | 2026-09-03 | 0 | 1 |
| 454 | 2026-09-04 | 0 | 1 |
| 459 | 2026-09-15 | 8 | 4 |
| 464 | 2026-09-17 | 6 | 4 |
| 466 | 2026-09-18 | 1 | 3 |
| 467 | 2026-09-18 | 0 | 1 |
| 468 | 2026-09-21 | 1 | 1 |
| 469 | 2026-09-22 | 0 | 1 |
| 470 | 2026-09-24 | 2 | 1 |
| 472 | 2026-10-02 | 9 | 1 |
| 473 | 2026-10-05 | 3 | 1 |
| 475 | 2026-10-07 | 7 | 2 |
| 477 | 2026-10-12 | 4 | 4 |
| 478 | 2026-10-13 | 1 | 1 |

## Runtime upgrades

Every spec either chain has run since spec 437, newest first. **Never on testnet**: mainnet ran a spec that testnet skipped. **Testnet only**: a newer spec replaced it before it reached mainnet. **In testing**: testnet runs a spec newer than mainnet's. **Mainnet first**: mainnet upgraded before testnet.

| Spec | Mainnet | Testnet | Days on testnet first |
| --- | --- | --- | --- |
| 479 | — | 2026-10-14 | in testing |
| 478 | 2026-10-13 | 2026-10-13 | 0 |
| 477 | 2026-10-12 | 2026-10-08 | 4 |
| 476 | — | 2026-10-08 | testnet only |
| 475 | 2026-10-07 | 2026-10-07 | 0 |
| 473 | 2026-10-05 | 2026-10-05 | 0 |
| 472 | 2026-10-02 | 2026-10-02 | 0 |
| 471 | — | 2026-09-24 | testnet only |
| 470 | 2026-09-24 | 2026-09-23 | 1 |
| 469 | 2026-09-22 | 2026-09-22 | 0 |
| 468 | 2026-09-21 | 2026-09-21 | 0 |
| 467 | 2026-09-18 | 2026-09-18 | 0 |
| 466 | 2026-09-18 | 2026-09-18 | 0 |
| 465 | — | 2026-09-17 | testnet only |
| 464 | 2026-09-17 | 2026-09-17 | 0 |
| 463 | — | 2026-09-16 | testnet only |
| 461 | — | 2026-09-16 | testnet only |
| 460 | — | 2026-09-15 | testnet only |
| 459 | 2026-09-15 | 2026-09-15 | 0 |
| 458 | 2026-09-14 | 2026-09-14 | 0 |
| 457 | 2026-09-14 | — | never on testnet |
| 456 | 2026-09-14 | — | never on testnet |
| 455 | 2026-09-07 | 2026-09-08 | mainnet first |
| 454 | 2026-09-04 | 2026-09-04 | 0 |
| 453 | 2026-09-03 | 2026-09-03 | 0 |
| 452 | 2026-08-29 | 2026-08-29 | 0 |
| 451 | — | 2026-08-28 | testnet only |
| 450 | 2026-08-27 | 2026-08-27 | 0 |
| 449 | — | 2026-08-25 | testnet only |
| 448 | 2026-08-21 | 2026-08-21 | 0 |
| 447 | 2026-08-14 | 2026-08-14 | 0 |
| 446 | 2026-08-14 | 2026-08-14 | 0 |
| 445 | 2026-08-12 | 2026-08-12 | 0 |
| 443 | 2026-08-04 | 2026-08-04 | 0 |
| 442 | 2026-08-04 | 2026-08-04 | 0 |
| 441 | 2026-08-03 | 2026-08-03 | 0 |
| 440 | 2026-07-27 | 2026-07-27 | 0 |
| 439 | 2026-07-27 | 2026-07-24 | 3 |
| 438 | 2026-07-23 | 2026-07-23 | 0 |
| 437 | 2026-07-22 | 2026-07-22 | 0 |

## Merged changes

Newest merge first. **Release** is the runtime spec the change shipped in. A dash under testnet or mainnet means that chain has not yet run a runtime containing it.

| PR | Change | Release | Opened | Merged | Testnet | Mainnet | Days to mainnet |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [#3237](https://github.com/RaoFoundation/subtensor/pull/3237) | Release 478 | 478 | 2026-10-12 | 2026-10-13 | 2026-10-13 | 2026-10-13 | 1 |
| [#3221](https://github.com/RaoFoundation/subtensor/pull/3221) | Bump runtime spec to 477 and Python release versions | 477 | 2026-10-08 | 2026-10-08 | 2026-10-08 | 2026-10-12 | 4 |
| [#3218](https://github.com/RaoFoundation/subtensor/pull/3218) | fix logs | 477 | 2026-10-08 | 2026-10-08 | 2026-10-08 | 2026-10-12 | 4 |
| [#3219](https://github.com/RaoFoundation/subtensor/pull/3219) | Fix oversized testnet root claim weight reservation | 477 | 2026-10-08 | 2026-10-08 | 2026-10-08 | 2026-10-12 | 4 |
| [#3217](https://github.com/RaoFoundation/subtensor/pull/3217) | Allow subnet owners to configure PoW difficulty | 476 | 2026-10-08 | 2026-10-08 | 2026-10-08 | 2026-10-12 | 4 |
| [#3214](https://github.com/RaoFoundation/subtensor/pull/3214) | Make basket minimum trade amount sudo-adjustable | 475 | 2026-10-06 | 2026-10-07 | 2026-10-07 | 2026-10-07 | 1 |
| [#3206](https://github.com/RaoFoundation/subtensor/pull/3206) | feat: add Null consensus, precise emissions and PoW registration | 475 | 2026-09-30 | 2026-10-06 | 2026-10-07 | 2026-10-07 | 7 |
| [#3208](https://github.com/RaoFoundation/subtensor/pull/3208) | release-473 | 473 | 2026-10-02 | 2026-10-03 | 2026-10-05 | 2026-10-05 | 3 |
| [#3198](https://github.com/RaoFoundation/subtensor/pull/3198) | Prevent Fee-Draining Basket Swaps and Clean Up Stale Staking Hotkeys | 471 | 2026-09-23 | 2026-09-24 | 2026-09-24 | 2026-10-02 | 9 |
| [#3196](https://github.com/RaoFoundation/subtensor/pull/3196) | Add swap_basket_many extrinsic | 470 | 2026-09-22 | 2026-09-23 | 2026-09-23 | 2026-09-24 | 2 |
| [#3192](https://github.com/RaoFoundation/subtensor/pull/3192) | spec 469: v468 bug fixes + failed-call fee refunds | 469 | 2026-09-22 | 2026-09-22 | 2026-09-22 | 2026-09-22 | 0 |
| [#3184](https://github.com/RaoFoundation/subtensor/pull/3184) | spec 468: enable basket trading + skip dust rows on root claims | 468 | 2026-09-20 | 2026-09-21 | 2026-09-21 | 2026-09-21 | 1 |
| [#3183](https://github.com/RaoFoundation/subtensor/pull/3183) | spec 467: halve transaction fees (native + EVM) | 467 | 2026-09-18 | 2026-09-18 | 2026-09-18 | 2026-09-18 | 0 |
| [#3182](https://github.com/RaoFoundation/subtensor/pull/3182) | Spec 466: fee cap only — restore 4s block budget | 466 | 2026-09-18 | 2026-09-18 | 2026-09-18 | 2026-09-18 | 0 |
| [#3181](https://github.com/RaoFoundation/subtensor/pull/3181) | Spec 466: cap staking scan fees at four hotkeys | 466 | 2026-09-18 | 2026-09-18 | 2026-09-18 | 2026-09-18 | 0 |
| [#3179](https://github.com/RaoFoundation/subtensor/pull/3179) | spec 465: safer-only hotfix pack | 466 | 2026-09-17 | 2026-09-17 | 2026-09-18 | 2026-09-18 | 1 |
| [#3178](https://github.com/RaoFoundation/subtensor/pull/3178) | Unify runtime on spec 464 (baskets + 463 security + torsion) | 464 | 2026-09-17 | 2026-09-17 | 2026-09-17 | 2026-09-17 | 0 |
| [#3169](https://github.com/RaoFoundation/subtensor/pull/3169) | Hotfix 2 (spec 462): nonce persistence, fee-exempt call pricing, staking bookkeeping | 464 | 2026-09-16 | 2026-09-16 | 2026-09-17 | 2026-09-17 | 1 |
| [#3155](https://github.com/RaoFoundation/subtensor/pull/3155) | feat: swap_basket — validator basket trading (consolidated) | 464 | 2026-09-11 | 2026-09-16 | 2026-09-17 | 2026-09-17 | 6 |
| [#3164](https://github.com/RaoFoundation/subtensor/pull/3164) | share-pool: start a pool epoch on open so pre-upgrade leftover rows are retired | 464 | 2026-09-15 | 2026-09-15 | 2026-09-17 | 2026-09-17 | 2 |
| [#3162](https://github.com/RaoFoundation/subtensor/pull/3162) | share-pool: keep denominator consistent with stored shares; reconcile root pot | 459 | 2026-09-15 | 2026-09-15 | 2026-09-15 | 2026-09-15 | 0 |
| [#3160](https://github.com/RaoFoundation/subtensor/pull/3160) | release 458 | 459 | 2026-09-14 | 2026-09-14 | 2026-09-15 | 2026-09-15 | 1 |
| [#3158](https://github.com/RaoFoundation/subtensor/pull/3158) | release-v446 | 459 | 2026-09-14 | 2026-09-14 | 2026-09-15 | 2026-09-15 | 1 |
| [#3146](https://github.com/RaoFoundation/subtensor/pull/3146) | release-455 | 459 | 2026-09-07 | 2026-09-07 | 2026-09-15 | 2026-09-15 | 8 |
| [#3143](https://github.com/RaoFoundation/subtensor/pull/3143) | release-454 | 454 | 2026-09-04 | 2026-09-04 | 2026-09-04 | 2026-09-04 | 0 |
| [#3138](https://github.com/RaoFoundation/subtensor/pull/3138) | release-453 | 453 | 2026-09-03 | 2026-09-03 | 2026-09-03 | 2026-09-03 | 0 |
| [#3131](https://github.com/RaoFoundation/subtensor/pull/3131) | Bump spec_version to 452 | 452 | 2026-08-29 | 2026-08-29 | 2026-08-29 | 2026-08-29 | 0 |
| [#3130](https://github.com/RaoFoundation/subtensor/pull/3130) | Align precompile execution with the current call frame | 452 | 2026-08-29 | 2026-08-29 | 2026-08-29 | 2026-08-29 | 0 |
| [#3126](https://github.com/RaoFoundation/subtensor/pull/3126) | Runtime 451 hotfix: harden Root Reborn basket claims | 452 | 2026-08-28 | 2026-08-28 | 2026-08-29 | 2026-08-29 | 1 |
| [#3117](https://github.com/RaoFoundation/subtensor/pull/3117) | Release 450: canonical on-chain beta pricing, display units, and curated beta | 450 | 2026-08-26 | 2026-08-27 | 2026-08-27 | 2026-08-27 | 1 |
| [#3109](https://github.com/RaoFoundation/subtensor/pull/3109) | Release 449: enable root weight setting with a 1/16 concentration cap | 450 | 2026-08-21 | 2026-08-25 | 2026-08-27 | 2026-08-27 | 6 |
| [#3089](https://github.com/RaoFoundation/subtensor/pull/3089) | Release spec 448: live root-claim fee quotes and SDK 11.2.0.dev0 | 448 | 2026-08-18 | 2026-08-21 | 2026-08-21 | 2026-08-21 | 3 |
| [#3083](https://github.com/RaoFoundation/subtensor/pull/3083) | Conviction Normalization: single-hotkey 18% takeover gate (spec 447) | 447 | 2026-08-14 | 2026-08-14 | 2026-08-14 | 2026-08-14 | 0 |
| [#3077](https://github.com/RaoFoundation/subtensor/pull/3077) | Release 446 | 446 | 2026-08-12 | 2026-08-13 | 2026-08-14 | 2026-08-14 | 2 |
| [#3071](https://github.com/RaoFoundation/subtensor/pull/3071) | Restore miner-burn emission scaling | 445 | 2026-08-11 | 2026-08-12 | 2026-08-12 | 2026-08-12 | 1 |
| [#3076](https://github.com/RaoFoundation/subtensor/pull/3076) | reduce bloat | 445 | 2026-08-12 | 2026-08-12 | 2026-08-12 | 2026-08-12 | 0 |
| [#3058](https://github.com/RaoFoundation/subtensor/pull/3058) | Release v444: remove miner-burn scaling from subnet emission shares | 445 | 2026-08-06 | 2026-08-10 | 2026-08-12 | 2026-08-12 | 6 |
| [#3042](https://github.com/RaoFoundation/subtensor/pull/3042) | chore(subtensor): gate stake_into_basket pending state-growth review | 443 | 2026-08-04 | 2026-08-04 | 2026-08-04 | 2026-08-04 | 0 |
| [#3035](https://github.com/RaoFoundation/subtensor/pull/3035) | hotfix: stop ineligible root stake diverting into ALPHA dividends | 442 | 2026-08-04 | 2026-08-04 | 2026-08-04 | 2026-08-04 | 0 |
| [#2968](https://github.com/RaoFoundation/subtensor/pull/2968) | release-root-reborn | 441 | 2026-07-23 | 2026-08-03 | 2026-08-03 | 2026-08-03 | 11 |
| [#2990](https://github.com/RaoFoundation/subtensor/pull/2990) | release-v440: emission gate | 440 | 2026-07-27 | 2026-07-27 | 2026-07-27 | 2026-07-27 | 0 |
| [#2985](https://github.com/RaoFoundation/subtensor/pull/2985) | Fix claim root weight accounting | 440 | 2026-07-25 | 2026-07-27 | 2026-07-27 | 2026-07-27 | 2 |
| [#2984](https://github.com/RaoFoundation/subtensor/pull/2984) | Release v439 | 439 | 2026-07-24 | 2026-07-24 | 2026-07-24 | 2026-07-27 | 3 |
| [#2970](https://github.com/RaoFoundation/subtensor/pull/2970) | V438 Release | 438 | 2026-07-23 | 2026-07-23 | 2026-07-23 | 2026-07-23 | 0 |
| [#2960](https://github.com/RaoFoundation/subtensor/pull/2960) | Runtime 437: collateral, key lineage, and bonded swap hardening | 437 | 2026-07-22 | 2026-07-22 | 2026-07-22 | 2026-07-22 | 0 |
| [#2953](https://github.com/RaoFoundation/subtensor/pull/2953) | The v435 upgrade: miner registration collateral | 437 | 2026-07-21 | 2026-07-21 | 2026-07-22 | 2026-07-22 | 1 |

## Open proposals

Open, non-draft pull requests against subtensor `main` that change chain code. None of them is on testnet or mainnet, and some will never merge.

| PR | Proposal | Opened | Open for (days) |
| --- | --- | --- | --- |
| [#3254](https://github.com/RaoFoundation/subtensor/pull/3254) | etao: per-subnet emission weight vector [burn, recycle, owner, validator, miner] with TAO-weight multiplier (spec 479) | 2026-10-14 | 0 |
| [#3239](https://github.com/RaoFoundation/subtensor/pull/3239) | Keep coldkeys locked after sudo swap reset | 2026-10-13 | 1 |
| [#3231](https://github.com/RaoFoundation/subtensor/pull/3231) | Run a due Null epoch first so earlier subnets cannot starve it | 2026-10-11 | 3 |
| [#3225](https://github.com/RaoFoundation/subtensor/pull/3225) | test(runtime): add ±20% fee regression snapshots and EVM transaction coverage | 2026-10-09 | 5 |
| [#3223](https://github.com/RaoFoundation/subtensor/pull/3223) | fix warnings | 2026-10-09 | 5 |
| [#3220](https://github.com/RaoFoundation/subtensor/pull/3220) | Introduce experimental hashed accounts with mnemonic-derived key rotation | 2026-10-08 | 6 |
| [#3212](https://github.com/RaoFoundation/subtensor/pull/3212) | test(runtime): move fee baseline pins to rstest cases with insta snapshots | 2026-10-05 | 9 |
| [#3211](https://github.com/RaoFoundation/subtensor/pull/3211) | Add superellipse pools, reserve-funded lending and price-impact controls | 2026-10-05 | 9 |
| [#3210](https://github.com/RaoFoundation/subtensor/pull/3210) | Migrate dynamic subnet pools to fixed translated superellipses | 2026-10-02 | 12 |
| [#3207](https://github.com/RaoFoundation/subtensor/pull/3207) | Preserve stake and dividends during alpha migration | 2026-10-02 | 12 |
| [#3190](https://github.com/RaoFoundation/subtensor/pull/3190) | Refund the StakingHotkeys walk on unstake-side failure and prune ghost hotkeys | 2026-09-21 | 23 |
| [#3180](https://github.com/RaoFoundation/subtensor/pull/3180) | Cap staking scan fees at four hotkeys | 2026-09-17 | 27 |
| [#3137](https://github.com/RaoFoundation/subtensor/pull/3137) | Extend linked orders expiration to 180 days | 2026-09-03 | 41 |
| [#3135](https://github.com/RaoFoundation/subtensor/pull/3135) | Add pallet-derivatives: longs and shorts on subnet alpha (spec 455) | 2026-09-02 | 42 |
| [#3110](https://github.com/RaoFoundation/subtensor/pull/3110) | Canonical rails: buy staked subnet alpha from MetaMask with USDC | 2026-08-21 | 54 |
| [#3101](https://github.com/RaoFoundation/subtensor/pull/3101) | Add continuous stake reporting throughout subnet dissolution lifecycle | 2026-08-20 | 55 |
| [#3041](https://github.com/RaoFoundation/subtensor/pull/3041) | Add Validate proxy support to runtime and Python SDK | 2026-08-04 | 71 |
| [#3038](https://github.com/RaoFoundation/subtensor/pull/3038) | fix: sum emission across mechanisms instead of weighting it | 2026-08-04 | 71 |
| [#3029](https://github.com/RaoFoundation/subtensor/pull/3029) | 1τ/1α pool seed + depth-graduated emission price cap | 2026-08-03 | 72 |
| [#3023](https://github.com/RaoFoundation/subtensor/pull/3023) | Subnet owner right of first refusal over eviction | 2026-07-31 | 75 |
| [#3009](https://github.com/RaoFoundation/subtensor/pull/3009) | Release v441 - Add childkey cooldown in subnet tempos | 2026-07-28 | 78 |
| [#2997](https://github.com/RaoFoundation/subtensor/pull/2997) | Refund Unused Extrinsic Weight (fee) | 2026-07-27 | 79 |

## Shipped is not always switched on

Some features ship in a runtime upgrade with a switch that is off. They do nothing until a root (sudo) call turns them on, so the mainnet date is the date the code arrived, not the date users could use it. Each feature's explainer page says when its switch is on.
