simdispatch 0.2.0

Runtime SIMD backend detection and downgrade-only selection, shared across SIMD-accelerated crates
Documentation
# Changelog

All notable changes to this project are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and releases follow
[Semantic Versioning](https://semver.org/).

## [Unreleased]

### Added

- CI runs the crate validation gate, checks the minimum supported Rust
  toolchain, and exercises the scalar environment override on a hosted runner.

## [0.2.0] — 2026-09-28

### Added

- `V4x` and `V4` detection via their Archmage tokens when the `avx512`
  feature is enabled, including their override names and lane widths. Without
  the feature or a summoning token, selection degrades to the strongest
  supported lower tier. V4 does not prove GFNI; V4x requires additional
  extensions beyond AVX-512F/BW/GFNI.

### Changed

- **Breaking:** Adding `V4x` and `V4` to `Backend::ALL` changes the
  full-ladder resolution on capable hosts. Consumers using `backend()` for
  kernel dispatch must switch to `Selection::supports` with their implemented
  tiers, and enable `avx512` only when they implement V4 or V4x.

## [0.1.0] — 2026-09-09

### Added

- Name reservation and crate scaffold, renamed from `simdet` to
  `simdispatch`. The crate and its git repository now use the permanent name.
- `archmage` dependency pinned exactly at `=0.9.29` from crates.io — the
  first release carrying `X64V3GfniCryptoToken` (AVX2 + GFNI without
  AVX-512, `imazen/archmage#66`, merged upstream).
- Crate documentation set per the ecosystem ground rule: `AGENTS.md`,
  `CHANGELOG.md`, `CONTRIBUTING.md`, the AI-authorship warning header on
  `README.md`, and `LICENSE`.
- The backend selection degrade ladder design: `Backend` enum ordered by
  `archmage` tier priority, the single `resolve()` pipeline backing it, and
  the `SIMD_BACKEND` downgrade-only override.
- `Backend`: the initial degrade-ladder variants
  (`V3GfniCrypto` / `V3` / `V2` / `V1` / `NeonAes` / `Neon` / `Wasm128` /
  `Scalar`), named after the `archmage` tier they prove and ordered by that
  tier's dispatch priority. Weak `Ord` sorts greater (the fff convention, so
  `requested >= detected` downgrade checks port unchanged).
- `Backend::ALL: &'static [Backend]`; `name` / `from_name` / `Display` /
  `FromStr` / `ParseBackendError`; `lane_bytes()`; the arch-family mapping.
- `Selection`: declare the supported set with `supports(&[...])`, resolve for
  the host with `resolve()` — detection via the single `archmage` `summon()`
  probe, narrowed to the supported set, then adjusted by the downgrade-only
  `SIMD_BACKEND` override.
- The process-wide `static BACKEND` and `backend()` over the full ladder.
- The `SIMD_BACKEND` environment override (downgrade-only: a request is
  honored only when it is in the supported set, itself summons on this host —
  the request is re-probed with `archmage` `summon()` — and is at most as
  strong as the detected tier; otherwise ignored, never faked).
  `SIMD_BACKEND=scalar` forces the whole stack to portable code. A request
  for a backend the host cannot run — a different arch (`neon` on x86) or a
  tier the host lacks (`v2` on a V1-only host) — is refused (R10).
- Cargo features: `std` (default; runtime detection + override + `backend()`)
  and `internals` (unstable selection internals with an injectable host
  probe, per R8).
- Tests: ordering pinned to the `archmage` `tiers.rs` mirror, narrowing
  (including the cafft-rot regression), downgrade-only override, cross-family
  refusal, host-floor invariants (cfg-gated), and the real-environment
  `SIMD_BACKEND` override test.

## [0.0.0] — 2026-07-31

### Added

- Name reservation on crates.io and the `simdet` repository head. No library
  code.

[0.0.0]: https://github.com/nanithefkuc/simdispatch/commits/main
[0.1.0]: https://github.com/nanithefkuc/simdispatch/compare/b7c921f...f78b369
[0.2.0]: https://github.com/nanithefkuc/simdispatch/compare/f78b369...main