### `wai.image.jpegai`'s scale path and entropy decodes through the integer operator set

- **The residual-variance bands start where the reference decoder's tables change.**
  The exact decoder put a block whose `likely` was exactly 1003, 1352 or 1937 in the
  next band, for its σ addition and for its dequantisation multiplier. The reference
  decoder's own tables (4352 entries per branch, indexed by `likely`) change value at
  1004, 1353 and 1938, and the reference sink's float decode path, which reads those
  tables, already followed them. The edges are now 1004, 1353 and 1938, in the decoder
  and in [integer-operators](extensions/integer-operators.md) §13.6.1 step 3 (§15.3
  item 4). `tests/jpegai_mans_golden.rs` holds both branches' additions and multipliers
  to the reference's tables at every index. No committed codestream has a block on an
  edge, so no output changes.
- **The lowering, from the bundle the decoder holds.** `wai-ops` gains
  `lower::parse_jpegai`, `lower::jpegai_net` and `lower::jpegai_net_loaded`
  (`jpegai-int/1`, [integer-operators](extensions/integer-operators.md) §13.6.1, of a
  bundle already parsed; the last loads both scale graphs without writing and parsing
  them again), `lower::jpegai::scale` (one plane's graph) and
  `stage::mans::decode_sgm_tables` (E8 with its tables built once). The committed graphs
  and certificates are unchanged.
- **The switch.** `jpegai_decode::{decode, decode_with_stages}` run the scale path and
  the two entropy decodes through the operator set (`jpegai_ops`): the bundle's scale
  graphs loaded under `acc32` with its tables (`jpegai_decode::load`, a
  `jpegai_ops::ScalePath`), then each plane's hyper-latent, scale, mask, `likely`, RVS
  addition, `σ_idx` and latent. Every committed and pinned output is unchanged: the
  decoded RGB of `jpegai/v1`, every stage hash of `tests/jpegai_cross_platform.rs`, and
  the reference decoder's symbols and scales. Each now returns a `Result`
  (`jpegai_decode::Refusal`); `decode_loaded` decodes with a scale path loaded once. The
  direct decode is `jpegai_decode::legacy` and `jpegai_ops::legacy`, test-only
  (`legacy_int`). `NormTables`' bounds and CDF rows are `i64`, so a load check sees the
  value the file gives. The float decode path decodes its scale path and entropy through
  the same driver, from its own bundle's members.
- **`ops` member.** `wai.image.jpegai` registers `{ wai-ops/1, acc32, full,
  jpegai-int/1 }` (SPEC §5, §7).
- **No silent fallback.** The neural sink lowers and loads the scale path from the
  members' bytes through the store of loaded sets (keyed by the listing of `norm.json`
  and `weights/hs_{y,uv}.json`). A refusal of the exact decode is the decode's result
  (`model_mismatch`, `stream_exhausted`, or `set_incomplete` for a member the set
  lacks); only a sink without the bundle, or a thread or target that cannot run the
  float stages, decodes through the float path ([determinism-tiers](extensions/determinism-tiers.md) §5).
- **The browser crate.** `decodeJpegAiMans` decodes through E8 and throws on a refusal;
  `decodeJpegAiFull` reports the decode's refusal.
- **One implementation.** The float path's own ports of the mANS decoder and of the
  hyper-scale network (`neural::jpegai_mans`, `neural::jpegai_hyper`) are deleted: that
  path runs the shared driver. The exact decoder's direct pieces (the crate-root mANS
  port, `jpegai_synthesis::decode_hyper_scale`, and the pipeline's `skip_mask`,
  `rvs_additive`, `rvs_likely` and `sigma_index`) are test-only (`legacy_int`), the
  reference the differential (`tests/int_ops_differential.rs`) and the refusal-parity
  tests hold the operator set to.
- **Planned breaks** (integer-operators §15.3 item 4, SPEC §8): a bundle that fails a
  load check of §13.6.1 (a bound above 255 or a shift outside `0..=127`, which the loader
  wrapped, among them) or whose scale graphs do not meet `acc32` (a sum past `i32`, a
  shift past 63) is refused (`model_mismatch`); a substream that ends before the decode
  it carries is refused (`stream_exhausted`) where the decoder panicked. No committed
  bundle or codestream is affected.

