Gate 5's fault (a grouped convolution finished with its neighbour channel's
requantisation on the fast kernel) left the unit test green: every committed
vector of rec_y, rec_uv, syn_y and syn_uv refused past A32, because the synthetic
networks' multipliers grew each convolution's output by up to 2^6 per product, so
no decode of those graphs ran its operators end to end.
- The generator now sets each synthetic convolution's multiplier so that a weight
of 32767 times its products keeps the input's magnitude (and halves the biases):
every rec_y, rec_uv, syn_y and syn_uv vector of graphs/lower_jpegai.jsonl now
decodes, and only the vectors one past an input's range refuse. The set's digest
is 1bc0daae…; its graphs, certificate and vectors are regenerated, and both
certifiers reproduce them (wai-verify vectors verify; wai_ops_check.py
ops-conformance), with the tests naming the new digest.
- jpegai_ops::fast_kernels::the_jpegai_networks_run_their_convolutions_on_the_fast_kernel
requires a completed decode of each of the four graphs, not of any one.
Co-Authored-By: Claude Opus 5.5 <[email protected]>