spb/autoscholar
Public
1import { boolean, index, jsonb, pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core";2import { researchRuns } from "./runs.js";34export const qualityPolicies = pgTable("quality_policies", {5 id: uuid("id").primaryKey().defaultRandom(),6 version: text("version").notNull().unique(),7 active: boolean("active").notNull().default(false),8 profiles: jsonb("profiles").$type<Record<string, unknown>>().notNull(),9 createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),10});1112export const qualityGateResults = pgTable(13 "quality_gate_results",14 {15 id: uuid("id").primaryKey().defaultRandom(),16 runId: uuid("run_id")17 .notNull()18 .references(() => researchRuns.id, { onDelete: "cascade" }),19 evaluationId: uuid("evaluation_id").notNull(),20 policyVersion: text("policy_version").notNull(),21 mode: text("mode").notNull(),22 gate: text("gate").notNull(),23 severity: text("severity").notNull(),24 status: text("status").notNull(),25 message: text("message").notNull(),26 evidence: jsonb("evidence").$type<Record<string, unknown>>().notNull().default({}),27 createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),28 },29 (t) => [index("qgr_run_idx").on(t.runId, t.evaluationId)],30);3132export const publicationDecisions = pgTable(33 "publication_decisions",34 {35 id: uuid("id").primaryKey().defaultRandom(),36 runId: uuid("run_id")37 .notNull()38 .references(() => researchRuns.id, { onDelete: "cascade" }),39 evaluationId: uuid("evaluation_id"),40 decision: text("decision").notNull(), // publish | hold | reject41 decidedBy: text("decided_by").notNull(), // system | admin:<uuid>42 rationale: text("rationale").notNull(),43 override: boolean("override").notNull().default(false),44 overrideRationale: text("override_rationale"),45 gateSummary: jsonb("gate_summary").$type<Record<string, unknown>>().notNull().default({}),46 createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),47 },48 (t) => [index("pub_decisions_run_idx").on(t.runId, t.createdAt)],49);50