pam ▸ docs/generated/ralph_loop_2026-03-16_candidate_review_semantic_tiebreak.md
updated 2026-03-28

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

  1. Updated candidate-review sleeve selection to prefer fewer semantic blockers before the existing hard-blocker / blocker-count / alphabetical tie-break.
  2. Added a focused regression test covering the disabled-politics-vs-mismatched- economics tie.
  3. Kept semantically unmatched rows out of disabled-sleeve concentration counts so no_semantic_sleeve_match does not masquerade as a disabled sleeve family.
  4. Documented the new attribution rule in the research lab README.

Validation

  1. pytest tests/test_candidate_review.py -q
  2. python3 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.