-- Phase A #2 — CONTACT-QUALITY CHALLENGER (contact-v1). -- A SECOND challenger retained beside the champion (p_win) and the archetype -- challenger (p_win_challenger / arch-v1). Kept in its OWN columns so each -- challenger's marginal contribution is measurable independently — folding it -- into p_win_challenger would contaminate a clean A/B. -- -- null p_win_contact = HONEST ABSTENTION (no coverage / thin sample / unmapped -- stat) — a real datum, distinct from a no-lean projection equal to the -- champion. Segmentable by prop type via the existing ledger_entries.stat. -- -- Additive + forward-only: existing rows get null contact_version (pre-nomination); -- new rows carry 'contact-v1'. Champion and settled/locked grades are untouched. -- -- NOTE: migrations 023-029 were applied directly to prod and are not in this -- repo; this file resumes tracked migrations and is idempotent so it is safe to -- (re)run against the live schema. alter table ledger_entries add column if not exists p_win_contact numeric null, add column if not exists contact_delta numeric null, add column if not exists contact_adjustments jsonb null, add column if not exists contact_version text null;