- compute_variant_hash: use refractor_tier key, json.dumps with sort_keys
instead of str(), add variant=0 remapping guard
- Section 5.3.1 step 3: scaling denominator is total_requested_addition,
not total_requested_reduction
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Section 5.3 of 05-rating-boosts.md described profile-based boost
distribution (power/contact/patient hitter profiles) that was never
built. Updated to document the actual shipped algorithms: fixed column
deltas for batters and TB-budget priority drain for pitchers, both in
database/app/services/refractor_boost.py.
Corrected the truncation behavior — the implementation scales positive
deltas proportionally rather than discarding them, preserving the
108-sum exactly in all cases.
Updated REFRACTOR_PHASE2_VALIDATION_SPEC.md T4-1 to reflect shipped
function signatures and marked the case as complete.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>