===== analyse (baseline) =====
verify rows: 3649   drafted/row: 7.00   accepted/row: 4.158   committed/step-row: 5.158

accepted-length distribution (accepted drafts per row)
   0      367   10.1%  ######
   1      450   12.3%  #######
   2      418   11.5%  ######
   3      336    9.2%  #####
   4      309    8.5%  #####
   5      262    7.2%  ####
   6      216    5.9%  ###
   7     1291   35.4%  #####################

first rejection position (2358 rows rejected something, 64.6%)
  slot  0      367   15.6% of rejections
  slot  1      450   19.1% of rejections
  slot  2      418   17.7% of rejections
  slot  3      336   14.2% of rejections
  slot  4      309   13.1% of rejections
  slot  5      262   11.1% of rejections
  slot  6      216    9.2% of rejections

the four cases, over 17531 TESTED slots (slots past a rejection are excluded)
  drafter right, draw kept it      -> no loss     14190   80.9%
  drafter right, draw REJECTED it  -> SAMPLING loss      342    2.0%
  drafter wrong, draw rejected it  -> DRAFTER loss     2016   11.5%
  drafter wrong, draw kept it      -> no loss       983    5.6%
  -> of all rejections, 14.5% were tokens the drafter got RIGHT (sampling) and 85.5% were drafter misses

per-slot decomposition  (hit = draft token IS target argmax)
  hit%(all) is over every DRAFTED slot: unbiased drafter quality.
  hit%(tested) is over slots the prefix reached: conditioned on surviving,
  so it runs HIGH at depth and its n shrinks. Read the trend off hit%(all).

slot   n_all hit%(all)  tested hit%(tst)   E[p'top1|hit]    E[p'draft|miss]  alpha_obs
   0    3649     84.1     3649     84.1     0.9292+-0.0053     0.1588+-0.0115     0.899
   1    3649     79.1     3282     81.9     0.9387+-0.0053     0.1299+-0.0109     0.863
   2    3649     76.8     2832     82.0     0.9401+-0.0057     0.1184+-0.0120     0.852
   3    3649     73.9     2414     83.2     0.9511+-0.0054     0.1129+-0.0137     0.861
   4    3649     70.1     2078     82.1     0.9572+-0.0057     0.1093+-0.0139     0.851
   5    3649     66.4     1769     82.7     0.9641+-0.0055     0.0973+-0.0152     0.852
   6    3649     63.9     1507     84.7     0.9671+-0.0058     0.0852+-0.0168     0.857

reading: hit%(all) falling with slot = the DRAFTER degrades with depth.
         hit%(all) flat and high but alpha_obs low = SAMPLING rejects tokens
         the drafter got right; the bucket table above says so directly.

value of one more accepted token per row: +19.4% tok/s at the measured accept length (5.16 committed), 40 us/token commit cost assumed

===== miss census =====
rows: 3649   rows that rejected something: 2358   of those, DRAFTER misses: 2016 (85.5%)

MISS CENSUS -- the first rejection of a row, when the drafter missed it.
  count  = how often the drafter fails this way
  slots  = drafted slots discarded (K_row - k), the raw upper bound
  disc.  = the same, discounted by this drive's own per-slot pass rates

bucket                   count      %    slots      %    disc.      %
different_word            1075  53.3%     4955  56.6%   3659.6  55.9%
punct_vs_word              392  19.4%     1705  19.5%   1276.7  19.5%
numeric                    199   9.9%      682   7.8%    539.3   8.2%
punctuation_swap           130   6.4%      530   6.1%    402.4   6.1%
draft_structural            79   3.9%      333   3.8%    250.4   3.8%
boundary_prefix             66   3.3%      286   3.3%    213.5   3.3%
target_structural           41   2.0%      154   1.8%    117.8   1.8%
both_structural             17   0.8%       50   0.6%     40.7   0.6%
whitespace_variant          10   0.5%       34   0.4%     26.5   0.4%
case_variant                 7   0.3%       31   0.4%     23.1   0.4%
TOTAL                     2016 100.0%     8760 100.0%   6550.3 100.0%

miss count by slot, per bucket
bucket                       0      1      2      3      4      5      6
different_word             181    232    207    155    121     99     80
punct_vs_word               58     72     64     61     62     42     33
numeric                      9     22     31     28     35     41     33
punctuation_swap            15     19     24     22     19     15     16
draft_structural            13     11     14      9     13     12      7
boundary_prefix             13     10      9      8     10     12      4
target_structural            4      8      4      4      8      5      8
both_structural              0      2      2      2      2      5      4
whitespace_variant           1      1      1      2      0      3      2
case_variant                 0      4      0      0      1      2      0

where the drafted token sat in the target's ranking (misses only)
  draft is target #2                     724   35.9%
  draft outside target top-5             667   33.1%
  draft is target #3                     325   16.1%
  draft is target #4                     181    9.0%
  draft is target #5                     119    5.9%

when in the request the miss happened
  verify step 6 or later                1800   89.3%
  verify steps 2-5                       187    9.3%
  verify step 1 of the request            29    1.4%

could the drafter have proposed the target's token AT ALL?
  (--draft-vocab-prefix narrows the drafter head, so any id at or above
   the window is structurally unproposable and its miss is not a quality one)
  target id is inside the drafter head window     1882  93.4%  slots   8216  93.8%  disc.  6134.5  93.7%
  target id is OUTSIDE the drafter head window     134   6.6%  slots    544   6.2%  disc.   415.8   6.3%

how PEAKED the target was AT the missed slot (its own p'(top1))
  a near-miss on a flat target is a token a wider draft could carry;
  on a sharp target the drafter simply proposed the wrong token
  draft in target top-5              n=  1349  E[p'top1|miss] = 0.7508
  draft outside top-5                n=   667  E[p'top1|miss] = 0.7031

most frequent (drafted -> target argmax) pairs, per bucket
  different_word:
        10  ' check'                 -> ' test'
         7  '1'                      -> '</think>'
         7  ' Ensure'                -> '</think>'
         6  ' '                      -> '</think>'
         5  ' up'                    -> ' by'
         5  ' '                      -> '1'
         5  'Need'                   -> '</think>'
         5  ' divisible'             -> ' even'
         5  ' the'                   -> ' a'
         5  ' O'                     -> ' Θ'
  punct_vs_word:
        10  '.'                      -> '</think>'
         7  '\\('                    -> 'To'
         7  ' \\('                   -> ' '
         6  '.'                      -> ' but'
         5  ' '                      -> ':'
         5  ' Is'                    -> ' "'
         5  '.'                      -> ' maybe'
         4  '.'                      -> ' '
         3  ','                      -> ' and'
         3  ' "'                     -> ' Compute'
  numeric:
        14  '1'                      -> '2'
        13  '2'                      -> '1'
        12  '0'                      -> '1'
         8  '3'                      -> '2'
         7  '1'                      -> '0'
         6  '2'                      -> '4'
         5  '1'                      -> '5'
         5  '1'                      -> '3'
         4  '4'                      -> '8'
         4  '0'                      -> '9'
  punctuation_swap:
        15  '.'                      -> ','
        11  '.'                      -> ':'
         8  ','                      -> '.'
         5  '.'                      -> '?'
         5  ':'                      -> '.'
         3  ' ~'                     -> '('
         3  ','                      -> '?'
         2  ' \\'                    -> ' ×'
         2  '?'                      -> ':'
         2  '**,'                    -> '**.'
  draft_structural:
        22  '\n\n'                   -> '<|im_end|>'
         3  '*'                      -> '*('
         3  '\n'                     -> ' Let'
         2  '\n'                     -> '</think>'
         2  '\n'                     -> '<|im_end|>'
         2  '\n'                     -> ' Could'
         2  '+'                      -> '='
         1  '  \n'                   -> ':'
         1  ' *'                     -> '%'
         1  '  \n'                   -> '<|im_end|>'
  boundary_prefix:
        18  '**'                     -> '**.'
         4  ' primes'                -> ' prime'
         2  ' deg'                   -> ' degrees'
         2  ' off'                   -> ' of'
         1  ' factor'                -> ' factors'
         1  ' no'                    -> ' not'
         1  ')'                      -> ').'
         1  ' Tests'                 -> ' Test'
         1  '?'                      -> '?\\'
         1  '.\\'                    -> '.'
  target_structural:
         2  ','                      -> '*'
         2  '.'                      -> '+'
         2  ' Provide'               -> '\n'
         1  '9'                      -> '*'
         1  '4'                      -> '+'
         1  ')='                     -> '+'
         1  ','                      -> ' +'
         1  ' minus'                 -> '-'
         1  ' price'                 -> ' *'
         1  ')'                      -> '-'
  both_structural:
         3  '\n\n'                   -> '\n'
         3  '\n'                     -> '\n\n'
         3  '+'                      -> ' +'
         2  ' +'                     -> '+'
         1  '-'                      -> '+'
         1  '-'                      -> ' -'
         1  '-'                      -> '##'
         1  '\n'                     -> '  \n'
         1  '+'                      -> '-'
         1  '-'                      -> '*'
  whitespace_variant:
         4  '='                      -> ' ='
         3  ' ='                     -> '='
         1  ' ]'                     -> ']'
         1  '.'                      -> ' .'
         1  '/'                      -> ' /'
  case_variant:
         1  ' Compute'               -> ' compute'
         1  ' a'                     -> ' A'
         1  ' C'                     -> ' c'
         1  ' probability'           -> ' Probability'
         1  'insert'                 -> 'Insert'
         1  ' Sort'                  -> ' sort'
         1  'FUNCTION'               -> 'function'
