2026-05-07 10:16:46 +08:00
|
|
|
-- Migration 0002: Admission Testing & Model Candidates
|
|
|
|
|
-- Adds model_candidates table and supply_packages draft support
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS supply_intelligence_model_candidates (
|
|
|
|
|
candidate_id TEXT PRIMARY KEY,
|
|
|
|
|
account_id BIGINT NOT NULL,
|
|
|
|
|
platform TEXT NOT NULL,
|
|
|
|
|
model TEXT NOT NULL,
|
|
|
|
|
status TEXT NOT NULL DEFAULT 'pending_admission',
|
|
|
|
|
source TEXT NOT NULL DEFAULT 'official_api',
|
|
|
|
|
reason_code TEXT DEFAULT '',
|
|
|
|
|
failure_summary TEXT DEFAULT '',
|
|
|
|
|
discovered_at TIMESTAMPTZ NOT NULL,
|
|
|
|
|
last_test_at TIMESTAMPTZ,
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL,
|
|
|
|
|
version BIGINT NOT NULL DEFAULT 1,
|
|
|
|
|
UNIQUE(platform, model)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE INDEX idx_candidates_status ON supply_intelligence_model_candidates(status);
|
|
|
|
|
CREATE INDEX idx_candidates_platform ON supply_intelligence_model_candidates(platform);
|
|
|
|
|
CREATE INDEX idx_candidates_discovered ON supply_intelligence_model_candidates(discovered_at DESC);
|
|
|
|
|
|
2026-05-12 18:49:52 +08:00
|
|
|
CREATE SEQUENCE IF NOT EXISTS admission_test_id_seq;
|
|
|
|
|
|
2026-05-07 10:16:46 +08:00
|
|
|
CREATE TABLE IF NOT EXISTS supply_intelligence_admission_test_logs (
|
|
|
|
|
test_id BIGINT PRIMARY KEY DEFAULT nextval('admission_test_id_seq'),
|
|
|
|
|
candidate_id TEXT NOT NULL REFERENCES supply_intelligence_model_candidates(candidate_id),
|
|
|
|
|
status TEXT NOT NULL,
|
|
|
|
|
failure_code TEXT,
|
|
|
|
|
failure_summary TEXT,
|
|
|
|
|
tested_at TIMESTAMPTZ NOT NULL,
|
|
|
|
|
version BIGINT NOT NULL DEFAULT 1
|
|
|
|
|
);
|
|
|
|
|
|
2026-05-12 18:49:52 +08:00
|
|
|
CREATE SEQUENCE IF NOT EXISTS supply_package_id_seq;
|
2026-05-07 10:16:46 +08:00
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS supply_intelligence_supply_packages (
|
|
|
|
|
package_id BIGINT PRIMARY KEY DEFAULT nextval('supply_package_id_seq'),
|
|
|
|
|
platform TEXT NOT NULL,
|
|
|
|
|
model TEXT NOT NULL,
|
|
|
|
|
status TEXT NOT NULL DEFAULT 'draft',
|
|
|
|
|
source TEXT NOT NULL DEFAULT 'si_auto',
|
|
|
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
|
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
|
|
|
version BIGINT NOT NULL DEFAULT 1,
|
|
|
|
|
UNIQUE(platform, model)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- New fields to extend routing states (via migration, not replacement)
|
|
|
|
|
-- routing_states already has account_id as PK; add probe_execution_logs
|
2026-05-12 18:49:52 +08:00
|
|
|
CREATE SEQUENCE IF NOT EXISTS probe_log_id_seq;
|
|
|
|
|
|
2026-05-07 10:16:46 +08:00
|
|
|
CREATE TABLE IF NOT EXISTS supply_intelligence_probe_execution_logs (
|
|
|
|
|
log_id BIGINT PRIMARY KEY DEFAULT nextval('probe_log_id_seq'),
|
|
|
|
|
account_id BIGINT NOT NULL,
|
|
|
|
|
platform TEXT NOT NULL,
|
|
|
|
|
probe_result TEXT NOT NULL,
|
|
|
|
|
failure_class TEXT,
|
|
|
|
|
http_status INTEGER,
|
|
|
|
|
latency_ms INTEGER,
|
|
|
|
|
risk_score INTEGER NOT NULL,
|
|
|
|
|
evaluated_transition TEXT NOT NULL,
|
|
|
|
|
executed_at TIMESTAMPTZ NOT NULL,
|
|
|
|
|
request_id TEXT NOT NULL,
|
|
|
|
|
version BIGINT NOT NULL DEFAULT 1
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE INDEX idx_probe_logs_account_time ON supply_intelligence_probe_execution_logs(account_id, executed_at DESC);
|