ONLY-12: score matches from profile signals, not handles
Commit

Replace the v0 scorer (language overlap plus a hash of the two handles) with a weighted additive model over eight profile signals: stack, working hours and chronotype, timezone gap, review tone, PR size, pairing, indentation and commit cadence, plus a small bonus for a shared favourite error. Hard clashes (tabs vs spaces, opposite chronotypes, a 4x PR-size gap) carry a flat cost.
Every match now reports up to three reasons, strongest first, and one deal-breaker: the signal that cost the most points. The score is symmetric and independent of names and handles.
Two approaches were prototyped against eval/couples.json. A gated model (soft signals multiplied by an hours-and-timezone gate) plateaued at 17 of 20 and made reasons depend on each other; the additive model puts all 20 labelled couples in the expected band and is kept.
Tests cover bounds, symmetry, handle independence, explanation content and a 17-of-20 floor on the labelled couples.
Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com Entire-Checkpoint: 01M38W4A58ZX8QPWMRGG6QQJ8S