Caller-owned serial two-stage decomposition — Harrier-1024 shape (SYNTHETIC corpus)
Reproduce:
  cargo run --release --example two_stage_bench -- --dim 1024 --n 50000 --queries 200 --m 256 --k 10 --reps 15
Host: AMD Ryzen 9 9950X (Zen5), AVX-512 VPOPCNTDQ, single core (taskset -c 12), single-thread.

  dim=1024 n=50000 queries=200 m=256 k=10 bits=2 out_k=10 candidates=51200 reps=15
  1. stage-1 candidate gen (CSR)        31.920 ms      6265.59 q/s      159.60 us/query
  2. single-query rerank loop            2.086 ms     95858.02 q/s       10.43 us/query
  3. batched rerank _into                2.031 ms     98463.67 q/s       10.16 us/query
  4. full two-stage (1+3)               34.485 ms      5799.70 q/s      172.42 us/query
  rerank speedup (batched _into vs single-query loop): 1.03x

Interpretation (no-fiction): at dim=1024 the rerank stage is a small slice
(~10 us/query) of an already-stage-1-dominated two-stage cost (~160 us/query);
the batched _into form is on par with the single-query loop SINGLE-THREADED
(~1.03x). The caller-owned serial primitives are NOT a single-thread speedup —
their value is (a) allocation-free steady state (tests/alloc_free.rs proves 0
heap allocations on a warmed _into call) and (b) caller-owned parallelism: no
internal rayon, so a DB/runtime can drive the _into form across its own bounded
pool (GIL released) one query-range per worker. This dim=1024 result is its own
mechanism; it is NOT explained by the SignBitmap AVX-tail dim=768 result.
