165 lines
8.9 KiB
SQL
165 lines
8.9 KiB
SQL
-- Durable cross-domain work graph, completion contract, saved views and diagnostics.
|
|
-- Existing domain records remain authoritative for their domain; these tables provide
|
|
-- the shared operating-system projection and its durable dependency/audit edges.
|
|
|
|
CREATE TABLE "WorkGraphNode" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"stableKey" TEXT NOT NULL,
|
|
"source" TEXT NOT NULL,
|
|
"sourceId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"canonicalLifecycle" TEXT NOT NULL DEFAULT 'ready',
|
|
"domainLifecycle" TEXT NOT NULL DEFAULT 'pending',
|
|
"scope" TEXT NOT NULL DEFAULT 'committed',
|
|
"priority" INTEGER NOT NULL DEFAULT 50,
|
|
"phase" TEXT,
|
|
"risk" TEXT NOT NULL DEFAULT 'normal',
|
|
"blockingStatus" TEXT NOT NULL DEFAULT 'open',
|
|
"executionEligibility" TEXT NOT NULL DEFAULT 'blocked',
|
|
"blockReason" TEXT,
|
|
"owner" TEXT,
|
|
"leaseToken" TEXT,
|
|
"leaseExpiresAt" TIMESTAMP(3),
|
|
"attemptCount" INTEGER NOT NULL DEFAULT 0,
|
|
"consecutiveFailureCount" INTEGER NOT NULL DEFAULT 0,
|
|
"recoveryStartedAt" TIMESTAMP(3),
|
|
"lastMeaningfulProgressAt" TIMESTAMP(3),
|
|
"completionEvidenceJson" JSONB,
|
|
"metadataJson" JSONB,
|
|
"supersededById" TEXT,
|
|
"completedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "WorkGraphNode_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "WorkGraphDependency" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"nodeId" TEXT NOT NULL,
|
|
"dependsOnNodeId" TEXT NOT NULL,
|
|
"dependencyType" TEXT NOT NULL DEFAULT 'blocks',
|
|
"createdBy" TEXT NOT NULL DEFAULT 'system',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "WorkGraphDependency_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "WorkGraphAuditEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"nodeId" TEXT,
|
|
"eventType" TEXT NOT NULL,
|
|
"actor" TEXT NOT NULL,
|
|
"summary" TEXT NOT NULL,
|
|
"payloadJson" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "WorkGraphAuditEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "WorkGraphEvidence" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"nodeId" TEXT NOT NULL,
|
|
"kind" TEXT NOT NULL,
|
|
"referenceType" TEXT NOT NULL,
|
|
"referenceId" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'observed',
|
|
"summary" TEXT NOT NULL,
|
|
"metadataJson" JSONB,
|
|
"verifiedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "WorkGraphEvidence_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "ProjectDefinitionOfDone" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"requirementsJson" JSONB NOT NULL,
|
|
"scopePolicyJson" JSONB NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'incomplete',
|
|
"satisfiedCount" INTEGER NOT NULL DEFAULT 0,
|
|
"requirementCount" INTEGER NOT NULL DEFAULT 0,
|
|
"lastEvaluatedAt" TIMESTAMP(3),
|
|
"lastEvidenceAt" TIMESTAMP(3),
|
|
"evaluationJson" JSONB,
|
|
"createdBy" TEXT NOT NULL DEFAULT 'system',
|
|
"updatedBy" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "ProjectDefinitionOfDone_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "ProjectSavedView" (
|
|
"id" TEXT NOT NULL,
|
|
"ownerKey" TEXT NOT NULL,
|
|
"projectId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"scope" TEXT NOT NULL DEFAULT 'portfolio',
|
|
"filtersJson" JSONB NOT NULL,
|
|
"isPinned" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "ProjectSavedView_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "DiagnosticRun" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT,
|
|
"scope" TEXT NOT NULL DEFAULT 'platform',
|
|
"status" TEXT NOT NULL DEFAULT 'running',
|
|
"summary" TEXT,
|
|
"checksJson" JSONB NOT NULL,
|
|
"repairPlanJson" JSONB,
|
|
"startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"completedAt" TIMESTAMP(3),
|
|
"createdBy" TEXT NOT NULL DEFAULT 'system',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "DiagnosticRun_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "WorkGraphNode_projectId_stableKey_key" ON "WorkGraphNode"("projectId", "stableKey");
|
|
CREATE UNIQUE INDEX "WorkGraphNode_projectId_source_sourceId_key" ON "WorkGraphNode"("projectId", "source", "sourceId");
|
|
CREATE INDEX "WorkGraphNode_projectId_executionEligibility_priority_idx" ON "WorkGraphNode"("projectId", "executionEligibility", "priority");
|
|
CREATE INDEX "WorkGraphNode_projectId_canonicalLifecycle_idx" ON "WorkGraphNode"("projectId", "canonicalLifecycle");
|
|
CREATE INDEX "WorkGraphNode_projectId_scope_idx" ON "WorkGraphNode"("projectId", "scope");
|
|
CREATE INDEX "WorkGraphNode_projectId_leaseExpiresAt_idx" ON "WorkGraphNode"("projectId", "leaseExpiresAt");
|
|
CREATE INDEX "WorkGraphNode_projectId_updatedAt_idx" ON "WorkGraphNode"("projectId", "updatedAt");
|
|
CREATE INDEX "WorkGraphNode_projectId_supersededById_idx" ON "WorkGraphNode"("projectId", "supersededById");
|
|
|
|
CREATE UNIQUE INDEX "WorkGraphDependency_nodeId_dependsOnNodeId_key" ON "WorkGraphDependency"("nodeId", "dependsOnNodeId");
|
|
CREATE INDEX "WorkGraphDependency_projectId_nodeId_idx" ON "WorkGraphDependency"("projectId", "nodeId");
|
|
CREATE INDEX "WorkGraphDependency_projectId_dependsOnNodeId_idx" ON "WorkGraphDependency"("projectId", "dependsOnNodeId");
|
|
|
|
CREATE INDEX "WorkGraphAuditEvent_projectId_createdAt_idx" ON "WorkGraphAuditEvent"("projectId", "createdAt");
|
|
CREATE INDEX "WorkGraphAuditEvent_projectId_nodeId_createdAt_idx" ON "WorkGraphAuditEvent"("projectId", "nodeId", "createdAt");
|
|
CREATE INDEX "WorkGraphAuditEvent_projectId_eventType_idx" ON "WorkGraphAuditEvent"("projectId", "eventType");
|
|
|
|
CREATE UNIQUE INDEX "WorkGraphEvidence_nodeId_kind_referenceType_referenceId_key" ON "WorkGraphEvidence"("nodeId", "kind", "referenceType", "referenceId");
|
|
CREATE INDEX "WorkGraphEvidence_projectId_nodeId_idx" ON "WorkGraphEvidence"("projectId", "nodeId");
|
|
CREATE INDEX "WorkGraphEvidence_projectId_status_idx" ON "WorkGraphEvidence"("projectId", "status");
|
|
|
|
CREATE UNIQUE INDEX "ProjectDefinitionOfDone_projectId_key" ON "ProjectDefinitionOfDone"("projectId");
|
|
CREATE INDEX "ProjectDefinitionOfDone_status_lastEvaluatedAt_idx" ON "ProjectDefinitionOfDone"("status", "lastEvaluatedAt");
|
|
|
|
CREATE UNIQUE INDEX "ProjectSavedView_ownerKey_scope_name_key" ON "ProjectSavedView"("ownerKey", "scope", "name");
|
|
CREATE INDEX "ProjectSavedView_ownerKey_scope_updatedAt_idx" ON "ProjectSavedView"("ownerKey", "scope", "updatedAt");
|
|
CREATE INDEX "ProjectSavedView_projectId_updatedAt_idx" ON "ProjectSavedView"("projectId", "updatedAt");
|
|
|
|
CREATE INDEX "DiagnosticRun_projectId_createdAt_idx" ON "DiagnosticRun"("projectId", "createdAt");
|
|
CREATE INDEX "DiagnosticRun_scope_status_createdAt_idx" ON "DiagnosticRun"("scope", "status", "createdAt");
|
|
|
|
ALTER TABLE "WorkGraphNode" ADD CONSTRAINT "WorkGraphNode_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphNode" ADD CONSTRAINT "WorkGraphNode_supersededById_fkey" FOREIGN KEY ("supersededById") REFERENCES "WorkGraphNode"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphDependency" ADD CONSTRAINT "WorkGraphDependency_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphDependency" ADD CONSTRAINT "WorkGraphDependency_nodeId_fkey" FOREIGN KEY ("nodeId") REFERENCES "WorkGraphNode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphDependency" ADD CONSTRAINT "WorkGraphDependency_dependsOnNodeId_fkey" FOREIGN KEY ("dependsOnNodeId") REFERENCES "WorkGraphNode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphAuditEvent" ADD CONSTRAINT "WorkGraphAuditEvent_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphAuditEvent" ADD CONSTRAINT "WorkGraphAuditEvent_nodeId_fkey" FOREIGN KEY ("nodeId") REFERENCES "WorkGraphNode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphEvidence" ADD CONSTRAINT "WorkGraphEvidence_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "WorkGraphEvidence" ADD CONSTRAINT "WorkGraphEvidence_nodeId_fkey" FOREIGN KEY ("nodeId") REFERENCES "WorkGraphNode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "ProjectDefinitionOfDone" ADD CONSTRAINT "ProjectDefinitionOfDone_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "ProjectSavedView" ADD CONSTRAINT "ProjectSavedView_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "DiagnosticRun" ADD CONSTRAINT "DiagnosticRun_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|