A `forced` row said which shortcut was taken, not how narrowly. The
search is fail soft, so each decision's own search leaves a score on the
far side of its bound, and its distance from that bound is the obvious
thing to read root flips against: a scout that came back just under
alpha, or a pass that just cleared beta, is the one a deeper search is
most likely to overturn.
Each row now carries `gap` after `alpha_gap`: for a trusted scout the
alpha less its scout's score, for the null move the pass's score less
beta, and for reverse futility the margin's floor less beta, each zero at
the bound. A skip searched nothing and prints `-`. The search is
unchanged and the bench is 11,088,536. The session test reads the new
column and checks that it is never negative and is `-` only on a skip.
Bench: 11088536
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A57SbXV3vACDuNUX5zSKPQ
A
forcedrow said which shortcut was taken, not how narrowly. The search is fail soft, so each decision's own search leaves a score on the far side of its bound. That distance is what root flips are read against.Each row now carries a
gapcolumn afteralpha_gap, zero at the bound:-, since it searched nothing.What a reviewer should know
scripts/parsesforcedrows.docs/INSTRUMENTS.mddescribes the new column.tests/forced_session.rsreads the column and checks that it is a non-negative integer on every kind but a skip, and-on a skip. Release and debug tests, clippy with and withoutmachine-test, and fmt are clean.🤖 Generated with Claude Code
https://claude.ai/code/session_01A57SbXV3vACDuNUX5zSKPQ
Generated by Claude Code