-- +goose Up -- Register scoring model version v1.1.0 in the AEDT model registry. v1.1.0 recalibrates the engine -- semantic skill match threshold (DefaultSemanticThreshold) from 0.80 to 0.62 on the production -- bge-small-en-v1.5 embedder; the six component weights and the green/yellow band cuts are unchanged -- from v1.0.0. The engine now stamps v1.1.0 onto every candidate_evaluations and slate_members -- decision, so the registry MUST carry a matching row or an audited decision would reference a model -- version the model card and the governance surface cannot describe. The app role has SELECT only on -- this table, so only the migrator can register a version, which is why this is a migration. This is -- migration 0019 on the v18 head. It names no eeo column and touches no tenant data: it inserts one -- global registry row. Idempotent (ON CONFLICT DO NOTHING) so a re run is a no op. INSERT INTO aedt_model_versions (version, weights, band_cuts, notes) VALUES ( 'v1.1.0', '{"clearance":0.25,"skills":0.25,"certifications":0.15,"customer_experience":0.15,"experience":0.10,"location_availability":0.10}', '{"green":90,"yellow":75}', 'Recalibrated the semantic skill match threshold from 0.80 to 0.62 on the bge-small-en-v1.5 embedder. The 0.80 cutoff was tuned for a different embedder and silently discarded real synonym matches (a clear synonym scored 0.74 cosine, under the old cutoff). 0.62 was chosen from a calibration of known synonym pairs (cosine 0.68 to 0.94) against known unrelated pairs (cosine at or below 0.57), sitting in the separating gap with margin. Weights and band cuts are unchanged from v1.0.0. Clearance remains a self reported indicator, never an input proxy for a protected attribute.' ) ON CONFLICT (version) DO NOTHING; -- +goose Down DELETE FROM aedt_model_versions WHERE version = 'v1.1.0';