### `wai.neural.int_mlicpp` through the integer operator set

- **Its `ops` member in the registry** ([integer-operators](extensions/integer-operators.md)
  §11). `registry/capabilities.json` gives `wai.neural.int_mlicpp` the member `{"set":
  "wai-ops/1", "profile": "acc64", "subset": "full", "lowering": "wmb1/1", "stage":
  {"rans64": {"table": "t2", "escape": "lenient", "end": "final_only"}, "bucket":
  "ceil"}}`. SPEC §5's row cites the payload and bundle
  ([integer-payloads](extensions/integer-payloads.md) §14) and the lowering
  (integer-operators §13.4), and SPEC §7 names the capability among those that decode
  through the operator set.
- **The decode.** `int_mlicpp::decode`, and so `int_payload::decode_int`, the neural sink
  and every sink that decodes through them, now runs the bundle's three networks through
  their lowering `wmb1/1` ([integer-operators](extensions/integer-operators.md) §13.4):
  each lowered by `whm1/1` and loaded under `acc64` with its certificate, then planned on
  the payload's shapes, before either stream. The stage steps are unchanged, with the
  `t2` table rule and the `final_only` end rule kept: a symbol decoded after a stream ran
  out is still decoded and fed to the passes after it, and the refusal comes at the end.
  The committed vector decodes to the same image, with the same bucket and symbol for
  every element; every committed refusal keeps its code. The direct decode is kept,
  test-only, behind the `legacy_int` feature. The store of loaded sets keeps the three
  loaded networks under the SHA-256 of `model.wmb`.
- **Planned breaks**
  ([integer-operators](extensions/integer-operators.md) §15.3 item 3, SPEC §8). A bundle
  is refused before either stream (`model_mismatch`) for the rules of the other `WHM1`
  decoders: a bias of magnitude `2^63 − 1` or more, a `check` range its producer cannot
  meet, a network with no layer of tag 0, 1 or 2, a header `shift` or `gf` of 128 or more
  that no layer uses. Four checks the decoder made only when a network ran now come
  before the streams with the same code: a layer that does not fit the channels before
  it, a network that does not read the payload's channel count, a header `shift` or `gf`
  of 128 or more that a layer uses, and a leaky ReLU's shift of 64 or more. A convolution
  whose padded side exceeds `2^26` is refused.
- **The direct guard is test-only.** With this decode on its lowering, no production
  decode calls `int_hyper_synth::run_net_checked`, its per-layer checks or its IGDN check:
  the `check` ranges of every lowered network make them. They move into the test-only
  `int_hyper_synth::legacy` (feature `legacy_int`), beside the direct decodes that call
  them for the tests that hold the two to each other. `run_net` and `decode`, the
  unchecked path the integer world renderer uses, stay.
- **The refusal codes, written down.**
  [integer-payloads](extensions/integer-payloads.md) §14 said that every refusal of this
  capability is `payload_malformed`. The decoder reports `model_mismatch` for a bundle
  that breaks its rules or does not fit the payload, as it did before this revision and
  as its tests pin; §14 and integer-operators §4 now say so.

