### A decode reports the path that ran, and no tier lies between the two

- **The reference dispatch reports the decode path** ([extensions/determinism-tiers.md](extensions/determinism-tiers.md)
  §5). `neural::decode_envelope`, `decode_envelope_strict`, `decode_multi`, `decode_multi_strict` and `decode_payload`
  return a `Dispatched`: the output, the capability the payload decoded through (its own or the fallback) and the path
  of it that ran, `DecodePath::Sole`, `Exact` or `Float`. `wai.image.jpegai`'s float decode through ONNX Runtime and its
  exact decoder now say which ran. The C ABI's `wai_decoded_t` carries the path (`WAI_DECODE_PATH_SOLE`, `_EXACT`,
  `_FLOAT`) and whether a `WAI1` envelope decoded through its `fallback`, so a native sink states them in its receipt.
  `neural::check_reconstruction_binding` reads the path and the binding's descriptor
  ([extensions/reconstruction-binding.md](extensions/reconstruction-binding.md) §2): over a `decode-equivalence`
  capability or the exact decoder it reports whether the hash holds; over the float decode it reports the binding as not
  checked, and under a descriptor naming another reconstruction (another `decoderId`, format or size) as another
  reconstruction, never as failed. The notes that the dispatch did not report the path are gone from both texts.
- **Where the decode path is tested.** `tests/jpegai_decode_path.rs` requires the result, the session claim and the
  binding check to state the path. Its cases with one path run on committed inputs in `wai-neural-gates.yml`; a job
  there fetches the pinned `jpegai/v1` bundle and runs the exact decoder with `WAI_REQUIRE_SOTA_VECTORS=1`. The float
  decode needs the JPEG-AI reference-software assets, which are not in the repository, so its test runs locally only,
  on a host that holds them, as `tests/jpegai_live.rs` does.
- **No tier between the two** (determinism-tiers §3, normative). A pin's tier vocabulary stays closed. A decode of a
  `NeuralIntegerExact` capability in reduced precision or floating point is not a decode of it; a capability whose
  payload holds several frame types takes the class of its weakest; and a clip digest, a stage hash or a reconstruction
  binding over a sequence covers only frames each decoded at `decode-equivalence`, which a receipt checks per object.
  These rules govern decoded media; generation-equivalence carries its own digest of the frames generated.
- **A session claim states its decode path** ([extensions/jwp-receipts.md](extensions/jwp-receipts.md) §2.4.12). A
  decoder entry's `variant` is `exact`, `float`, or `null` for a capability with one path; a `NeuralIntegerExact`
  capability's integer path may also be named by the lowering its registration names, as opus-dred §7.2 names
  `dred-int/1`. Those three are the exact paths. Rule 13 refuses a `NeuralIntegerExact` capability named with a path
  that is not exact (`session_variant_not_exact`); rule 14 refuses any path that is not exact under a pin of
  `decode-equivalence` (`session_tier_exceeds_variant`); and against the stage claims, a stage hash over a base an entry
  decoded at a weaker step, or over a base or layer an entry decoded by a path that is not exact, is refused
  (`session_stage_hash_not_exact`), whichever units that entry presented. `claim-conformance/` gains vectors for each,
  beside accepted ones for both `wai.image.jpegai` paths and for a registered lowering, appended after the earlier
  vectors, which a test pins by digest; `claim_verify.py` and `differential.py` read the same rules.
- **determinism-tiers §1** records the five published routes to a reproducible stage, from the paper sections read, and
  a line that reaches no tier: float synchronised on a tested hardware class (arXiv 2608.00483). **§7.1** cites the two
  published records of float decode across devices (arXiv 2608.00483, 2606.28027) beside WAI's record. The research
  notes `syfai-input.md` §5 and `2026-09-global-sweep.md` (its row of arXiv 2608.00483, G7, G9 and F5) are corrected
  against the papers' bodies and the dispatch.
- **A catalogue-prior record** ([research/catalogue-prior.md](research/catalogue-prior.md)): a linear basis learned on
  openly licensed films of one studio, measured against AV1, with its readings, its procedure, its decision rule
  and when that rule was fixed. The rule refutes a linear or spectral catalogue basis and exact recurrence across titles
  for a studio's catalogue; a learned prior is not measured. `tools/wai_catalogue_prior_verify.py` recomputes every
  BD-rate and verdict from the readings and checks every figure the page quotes, in the conformance workflow.

- **Breaking:** `api:rust:wai::claim_receipt::Reason::SessionVariantNotExact`,
  `api:rust:wai::claim_receipt::Reason::SessionTierExceedsVariant` and
  `api:rust:wai::claim_receipt::Reason::SessionStageHashNotExact`: new variants of an exhaustive enum, which an
  exhaustive match over `Reason` needs.
- **Breaking:** `api:rust:wai::neural::decode_envelope`, `api:rust:wai::neural::decode_envelope_strict`,
  `api:rust:wai::neural::decode_multi`, `api:rust:wai::neural::decode_multi_strict` and
  `api:rust:wai::neural::decode_payload` return a `Dispatched` in place of a `Decoded`; the output is its `output`.
  The `neural` feature is outside the checked API, so the check does not report these.
- **Breaking:** `api:c:wai_decoded_t`: two fields after `fps_x_1000`, `path` and `fallback`, so the struct is larger. A
  caller built against the old header is rebuilt against the new one.

