72 lines
2.9 KiB
MySQL
72 lines
2.9 KiB
MySQL
|
|
-- Migration 003: Create prompt runs and manifests tables
|
||
|
|
-- Implements FR-4: PromptRun Lifecycle and FR-5: RunManifest Persistence
|
||
|
|
-- Date: 2026-02-08
|
||
|
|
|
||
|
|
-- Prompt runs table
|
||
|
|
CREATE TABLE IF NOT EXISTS prompt_runs (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
template_id TEXT NOT NULL REFERENCES prompt_artifacts(id),
|
||
|
|
input_bundle_hash TEXT NOT NULL,
|
||
|
|
status TEXT NOT NULL,
|
||
|
|
stage TEXT NOT NULL,
|
||
|
|
parent_run_id TEXT REFERENCES prompt_runs(id),
|
||
|
|
depth INTEGER DEFAULT 0,
|
||
|
|
config JSON,
|
||
|
|
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
completed_at TIMESTAMP,
|
||
|
|
error_message TEXT,
|
||
|
|
metadata JSON
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Run manifests table
|
||
|
|
CREATE TABLE IF NOT EXISTS run_manifests (
|
||
|
|
run_id TEXT PRIMARY KEY REFERENCES prompt_runs(id),
|
||
|
|
template_metadata JSON NOT NULL,
|
||
|
|
resolved_inputs JSON NOT NULL,
|
||
|
|
compiled_prompt_digest TEXT NOT NULL,
|
||
|
|
model_config JSON NOT NULL,
|
||
|
|
output_artifacts JSON,
|
||
|
|
dependency_edges JSON,
|
||
|
|
validation_results JSON,
|
||
|
|
impact_debt JSON,
|
||
|
|
timing_metadata JSON,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes for performance
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_runs_template ON prompt_runs(template_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_runs_bundle_hash ON prompt_runs(input_bundle_hash);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_runs_parent ON prompt_runs(parent_run_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_runs_status ON prompt_runs(status);
|
||
|
|
|
||
|
|
-- Unique constraint for idempotency (FR-4.4)
|
||
|
|
-- Note: Allows multiple failed runs, but only one successful run per hash
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_runs_successful_hash
|
||
|
|
ON prompt_runs(input_bundle_hash)
|
||
|
|
WHERE status = 'success';
|
||
|
|
|
||
|
|
-- Comments (for documentation)
|
||
|
|
-- prompt_runs.id: Unique UUID for this run
|
||
|
|
-- prompt_runs.template_id: Template being executed
|
||
|
|
-- prompt_runs.input_bundle_hash: SHA-256 hash for idempotency
|
||
|
|
-- prompt_runs.status: pending, running, success, failed, skipped
|
||
|
|
-- prompt_runs.stage: pending, analysis, compilation, processing, complete, failed
|
||
|
|
-- prompt_runs.parent_run_id: Parent run for nested generators
|
||
|
|
-- prompt_runs.depth: Nesting depth (0 for top-level)
|
||
|
|
-- prompt_runs.config: RunConfig JSON
|
||
|
|
-- prompt_runs.started_at: Execution start time
|
||
|
|
-- prompt_runs.completed_at: Execution completion time
|
||
|
|
-- prompt_runs.error_message: Error message if failed
|
||
|
|
-- prompt_runs.metadata: Additional metadata
|
||
|
|
|
||
|
|
-- run_manifests.run_id: Associated run ID
|
||
|
|
-- run_manifests.template_metadata: Template info (id, name, digest)
|
||
|
|
-- run_manifests.resolved_inputs: Array of resolved input artifacts
|
||
|
|
-- run_manifests.compiled_prompt_digest: Digest of compiled prompt
|
||
|
|
-- run_manifests.model_config: Model configuration used
|
||
|
|
-- run_manifests.output_artifacts: Array of produced artifacts
|
||
|
|
-- run_manifests.dependency_edges: Dependency graph edges
|
||
|
|
-- run_manifests.validation_results: Quality validation results
|
||
|
|
-- run_manifests.impact_debt: Suppressed recomputation records
|
||
|
|
-- run_manifests.timing_metadata: Stage timing information
|