Pack active hidden rows before the tied vocabulary projection.
Reuse the existing int8 AVX2 kernel when the CPU supports it.
Keep the original scalar path for other CPUs and float weights.
The projection and complete scoring both run faster with locked models.
Reuse each widened weight chunk across up to four activation rows.
Use a scalar path when the CPU lacks AVX2 or FMA.
The blocked kernel reduces scoring time for both locked models.
Keep a focused test for row blocks, input tails, and optional bias.
Reuse temporary vectors across Transformer blocks within one forward call.
The keyboard model uses 76 allocations per scoring call, down from 135.
The desktop model uses 76 allocations per scoring call, down from 157.
Scores match the original implementation for both models.
Skip vocabulary projection for positions without targets.
Remove the final unused Transformer position from each candidate row.
Add coverage for empty candidates in mixed batches. Refs #593.