import { boolean, index, jsonb, pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core"; import { researchRuns } from "./runs.js"; export const qualityPolicies = pgTable("quality_policies", { id: uuid("id").primaryKey().defaultRandom(), version: text("version").notNull().unique(), active: boolean("active").notNull().default(false), profiles: jsonb("profiles").$type>().notNull(), createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(), }); export const qualityGateResults = pgTable( "quality_gate_results", { id: uuid("id").primaryKey().defaultRandom(), runId: uuid("run_id") .notNull() .references(() => researchRuns.id, { onDelete: "cascade" }), evaluationId: uuid("evaluation_id").notNull(), policyVersion: text("policy_version").notNull(), mode: text("mode").notNull(), gate: text("gate").notNull(), severity: text("severity").notNull(), status: text("status").notNull(), message: text("message").notNull(), evidence: jsonb("evidence").$type>().notNull().default({}), createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(), }, (t) => [index("qgr_run_idx").on(t.runId, t.evaluationId)], ); export const publicationDecisions = pgTable( "publication_decisions", { id: uuid("id").primaryKey().defaultRandom(), runId: uuid("run_id") .notNull() .references(() => researchRuns.id, { onDelete: "cascade" }), evaluationId: uuid("evaluation_id"), decision: text("decision").notNull(), // publish | hold | reject decidedBy: text("decided_by").notNull(), // system | admin: rationale: text("rationale").notNull(), override: boolean("override").notNull().default(false), overrideRationale: text("override_rationale"), gateSummary: jsonb("gate_summary").$type>().notNull().default({}), createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(), }, (t) => [index("pub_decisions_run_idx").on(t.runId, t.createdAt)], );