1import{j as e}from"./vendor-query-DJN3PFZQ.js";import{A as d,a as i,b as o,c as n}from"./accordion-BMHz2xBk.js";import{C as m,a as u,b as f,aj as p,d as h,g as x}from"./index-Bc7XsZxF.js";import{a as g,C as c,M as v}from"./modelVersions-KJ__LkdV.js";import"./vendor-react-Cbz8wLUo.js";import"./vendor-radix-BZn62lW2.js";import"./vendor-supabase--MomjbBX.js";import"./vendor-classnames-CYC2HZ_g.js";import"./vendor-date-BT9_t8_S.js";const r=g(),a=c[c.length-1],b="ladder-2026-08-19",j="2026-08-19",l=[{artifact:"Scoring model",version:r.version,effective:r.date,scope:"scoring",sourceOfTruth:"supabase/functions/ai-race-analysis/config/model-version.ts (VERSION_CUTOVERS)",mirrors:["src/config/modelVersions.ts","public.model_version_for_date()"],notes:r.label},{artifact:"Confidence star ladder",version:b,effective:j,scope:"presentation",sourceOfTruth:"src/utils/confidenceStars.ts",mirrors:["public.confidence_stars_v195()","public.confidence_stars_versioned() (cumulative dispatch)","public.apply_fts_cap()"],notes:"Field-scaled gap ladder. Independent of the scoring version â a scoring bump does NOT imply a ladder bump. Dispatch in Postgres is cumulative by version rank, so a new scoring version inherits this ladder automatically."},{artifact:"Weight profiles",version:"2026-08-11.v1.9-weights-revert",effective:"2026-08-11",scope:"scoring",sourceOfTruth:"supabase/functions/ai-race-analysis/config/ (weight profile JSON)",mirrors:["race_analysis.model_weights_used (stamped per race)"],notes:"v1.9 weights restored after the v1.9.1 J/T de-weighting underperformed."},{artifact:"Consensus prior alphas",version:"alpha-2026-06-03 (Stakes LOCKED 0.30)",effective:"2026-06-03",scope:"scoring",sourceOfTruth:"supabase/functions/ai-race-analysis/config/consensus-prior-alpha.json",mirrors:["docs/analysis/v1.7-changes.md (asserted by the parity suite)"],notes:"Per-segment ML anchor blend. Gated by usesConsensusPrior() â a cumulative predicate, never a literal version check."},{artifact:"Probability calibration",version:a.version,effective:a.date,scope:"scoring",sourceOfTruth:"src/config/modelVersions.ts (CALIBRATION_VERSIONS)",mirrors:["confidence threshold config consumed by confidenceStars.ts"],notes:a.label},{artifact:"Isotonic calibration fit",version:"v1.6-iso-2026-05-22",effective:"2026-05-22",scope:"scoring",sourceOfTruth:"supabase/functions/ai-race-analysis/config/ (isotonic fit)",mirrors:["p_win_calibrated on horse_predictions"],notes:"Maps raw model probability onto observed win frequency."},{artifact:"Race taxonomy",version:"v1.2",effective:"",scope:"data",sourceOfTruth:"supabase/functions/_shared/race-taxonomy.ts",mirrors:["src/utils/raceClassification.ts"],notes:"Routing key selects the weight profile. Full cross-product parity is asserted on every build."},{artifact:"International translator",version:"v0.1",effective:"",scope:"data",sourceOfTruth:"supabase/functions/_shared/intl/translator.ts",mirrors:["intl_figure_candidates.translator_version (stamped per candidate)"],notes:"Jurisdiction-specific RPR/OR/Timeform â BRIS conversion anchors."}],N=[...v].reverse(),y={scoring:"Scoring",presentation:"Presentation",data:"Data"},_={scoring:"default",presentation:"secondary",data:"outline"};function V(){return e.jsxs(m,{children:[e.jsxs(u,{children:[e.jsx(f,{children:"Version Manifest"}),e.jsx(p,{children:"Every versioned artifact currently in force. Values are read from the implementing code, so this cannot go stale. Parity between each artifact and its mirrors (Postgres functions, edge gates, client display) is asserted by the build-blocking parity suite."})]}),e.jsxs(h,{className:"space-y-6",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full min-w-[640px] text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b text-left text-xs uppercase tracking-wide text-muted-foreground",children:[e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Artifact"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Version"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Effective"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Scope"})]})}),e.jsx("tbody",{children:l.map(s=>e.jsxs("tr",{className:"border-b last:border-0 align-top",children:[e.jsx("td",{className:"py-2.5 pr-3 font-medium",children:s.artifact}),e.jsx("td",{className:"py-2.5 pr-3 font-mono text-xs",children:s.version}),e.jsx("td",{className:"py-2.5 pr-3 tabular-nums text-muted-foreground",children:s.effective||"â"}),e.jsx("td",{className:"py-2.5 pr-3",children:e.jsx(x,{variant:_[s.scope],children:y[s.scope]})})]},s.artifact))})]})}),e.jsxs(d,{type:"single",collapsible:!0,className:"w-full",children:[e.jsxs(i,{value:"details",children:[e.jsx(o,{className:"text-sm",children:"Sources of truth & mirrors that must move together"}),e.jsx(n,{children:e.jsx("div",{className:"space-y-4",children:l.map(s=>e.jsxs("div",{className:"rounded-md border p-3 text-sm",children:[e.jsxs("div",{className:"font-medium",children:[s.artifact," ",e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:s.version})]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:s.notes}),e.jsxs("p",{className:"mt-2 text-xs",children:[e.jsx("span",{className:"text-muted-foreground",children:"Edit here: "}),e.jsx("code",{className:"break-all",children:s.sourceOfTruth})]}),s.mirrors.length>0&&e.jsx("ul",{className:"mt-1 list-inside list-disc text-xs text-muted-foreground",children:s.mirrors.map(t=>e.jsx("li",{children:e.jsx("code",{className:"break-all",children:t})},t))})]},s.artifact))})})]}),e.jsxs(i,{value:"history",children:[e.jsx(o,{className:"text-sm",children:"Scoring version history"}),e.jsx(n,{children:e.jsx("ul",{className:"space-y-2 text-sm",children:N.map(s=>e.jsxs("li",{className:"flex gap-3",children:[e.jsx("span",{className:"mt-1.5 h-2 w-2 shrink-0 rounded-full",style:{backgroundColor:s.color},"aria-hidden":!0}),e.jsxs("span",{children:[e.jsxs("span",{className:"font-mono text-xs",children:["v",s.version]})," ",e.jsxs("span",{className:"tabular-nums text-muted-foreground",children:["(",s.date,")"]}),e.jsx("span",{className:"block text-muted-foreground",children:s.label})]})]},s.version))})})]})]})]})]})}export{V as VersionManifestPanel};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.