Ralph Loop 2026-03-16: Candidate Review Semantic Tie-Break
Why
Candidate review still had one attribution-quality gap after the unmatched-sleeve work: when two sleeves tied on hard blocker count, the tie-break could still fall through to alphabetical order even if one sleeve had a semantic mismatch and the other was category-valid but merely disabled.
That produced misleading live attribution on some Elections rows. The row was
already using politics priors, but candidate review could still label it as
economics_band_follow instead of a politics-family sleeve because both sleeves
had one hard blocker and two total blockers.
Change
- Updated candidate-review sleeve selection to prefer fewer semantic blockers before the existing hard-blocker / blocker-count / alphabetical tie-break.
- Added a focused regression test covering the disabled-politics-vs-mismatched- economics tie.
- Kept semantically unmatched rows out of disabled-sleeve concentration counts
so
no_semantic_sleeve_matchdoes not masquerade as a disabled sleeve family. - Documented the new attribution rule in the research lab README.
Validation
pytest tests/test_candidate_review.py -qpython3 research/candidate_review.py --db data/unicorn.db --recent-runs 6 --max-per-state 3
Result
Live review attribution is more faithful to the actual sleeve family that semantically covers the row. This improves PRD 003 candidate-review quality without changing any deployment threshold or promoting extra trades.