Sessions 5-7a: 955 tests, deployment ready
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
-- ---------------------------------------------------------------
|
||||
-- 018 — Engine 2 + learning loop tables (Session 6c).
|
||||
--
|
||||
-- grade_history retrofit : Engine 2 analysis columns
|
||||
-- engine1_weights : versioned factor weights for Engine 1
|
||||
-- accuracy_tracking : per-grade-tier hit rates with baseline lock
|
||||
--
|
||||
-- All three are service-role-only. The Ledger surface reads grade_history
|
||||
-- directly (it already had RLS configured in earlier migrations); the new
|
||||
-- engine2_* columns inherit that policy.
|
||||
-- ---------------------------------------------------------------
|
||||
|
||||
ALTER TABLE public.grade_history
|
||||
ADD COLUMN IF NOT EXISTS engine2_grade text,
|
||||
ADD COLUMN IF NOT EXISTS engine2_confidence numeric,
|
||||
ADD COLUMN IF NOT EXISTS engine2_narrative text,
|
||||
ADD COLUMN IF NOT EXISTS engine2_agrees boolean,
|
||||
ADD COLUMN IF NOT EXISTS engine2_key_factor text,
|
||||
ADD COLUMN IF NOT EXISTS engine2_trap_concern text,
|
||||
ADD COLUMN IF NOT EXISTS engine2_model text,
|
||||
ADD COLUMN IF NOT EXISTS engine2_latency_ms integer,
|
||||
ADD COLUMN IF NOT EXISTS engine2_analyzed_at timestamptz;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_grade_history_engine2_pending
|
||||
ON public.grade_history (id) WHERE engine2_analyzed_at IS NULL;
|
||||
|
||||
-- Session 7a additions: store Engine 1 factors (for the learning loop's
|
||||
-- weight adjuster) and the quantile-based P(Over) (for the UI + Engine 2).
|
||||
ALTER TABLE public.grade_history
|
||||
ADD COLUMN IF NOT EXISTS factors jsonb,
|
||||
ADD COLUMN IF NOT EXISTS p_over numeric;
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.engine1_weights (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
sport text NOT NULL,
|
||||
stat_type text NOT NULL,
|
||||
factor_name text NOT NULL,
|
||||
weight numeric NOT NULL,
|
||||
previous_weight numeric,
|
||||
adjustment_reason text,
|
||||
resolved_grade_id uuid,
|
||||
version integer NOT NULL DEFAULT 1,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_weights_sport_stat
|
||||
ON public.engine1_weights (sport, stat_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_weights_version
|
||||
ON public.engine1_weights (sport, stat_type, factor_name, version DESC);
|
||||
|
||||
ALTER TABLE public.engine1_weights ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.accuracy_tracking (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
sport text NOT NULL,
|
||||
grade text NOT NULL,
|
||||
period text NOT NULL DEFAULT 'all_time',
|
||||
total_graded integer NOT NULL DEFAULT 0,
|
||||
total_hit integer NOT NULL DEFAULT 0,
|
||||
total_miss integer NOT NULL DEFAULT 0,
|
||||
total_push integer NOT NULL DEFAULT 0,
|
||||
total_void integer NOT NULL DEFAULT 0,
|
||||
hit_rate numeric,
|
||||
baseline_hit_rate numeric,
|
||||
baseline_locked boolean NOT NULL DEFAULT false,
|
||||
clv_avg numeric,
|
||||
engine2_agree_rate numeric,
|
||||
last_updated timestamptz NOT NULL DEFAULT now(),
|
||||
UNIQUE (sport, grade, period)
|
||||
);
|
||||
|
||||
ALTER TABLE public.accuracy_tracking ENABLE ROW LEVEL SECURITY;
|
||||
Reference in New Issue
Block a user