-- Harness v0 schema — migration 001 -- Durable layer for operational harness data. -- Policy docs (HARNESS.md, FEATURE_INTAKE.md, ARCHITECTURE.md) stay as -- human-readable references. This database stores the operational records -- that agents produce and query during work. PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON; ---------------------------------------------------------------------- -- Schema version ---------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS schema_version ( version INTEGER PRIMARY KEY, applied_at TEXT NOT NULL DEFAULT (datetime('now')) ); INSERT INTO schema_version (version) VALUES (1); ---------------------------------------------------------------------- -- Intake: classifying incoming work ---------------------------------------------------------------------- CREATE TABLE intake ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_at TEXT NOT NULL DEFAULT (datetime('now')), input_type TEXT NOT NULL CHECK(input_type IN ( 'new_spec','spec_slice','change_request', 'new_initiative','maintenance','harness_improvement' )), summary TEXT NOT NULL, risk_lane TEXT NOT NULL CHECK(risk_lane IN ('tiny','normal','high_risk')), risk_flags TEXT, -- JSON array, e.g. ["auth","data_model"] affected_docs TEXT, -- JSON array of doc paths story_id TEXT, -- links to story.id when one is created notes TEXT ); ---------------------------------------------------------------------- -- Story: work packets and their validation status -- Replaces hand-edited TEST_MATRIX.md rows. ---------------------------------------------------------------------- CREATE TABLE story ( id TEXT PRIMARY KEY, -- e.g. US-001 title TEXT NOT NULL, created_at TEXT NOT NULL DEFAULT (datetime('now')), risk_lane TEXT NOT NULL CHECK(risk_lane IN ('tiny','normal','high_risk')), contract_doc TEXT, -- path to product doc status TEXT NOT NULL DEFAULT 'planned' CHECK(status IN ( 'planned','in_progress','implemented','changed','retired' )), unit_proof INTEGER NOT NULL DEFAULT 0, integration_proof INTEGER NOT NULL DEFAULT 0, e2e_proof INTEGER NOT NULL DEFAULT 0, platform_proof INTEGER NOT NULL DEFAULT 0, evidence TEXT, notes TEXT ); ---------------------------------------------------------------------- -- Decision: durable records with optional verification ---------------------------------------------------------------------- CREATE TABLE decision ( id TEXT PRIMARY KEY, -- e.g. 0001 title TEXT NOT NULL, created_at TEXT NOT NULL DEFAULT (datetime('now')), status TEXT NOT NULL DEFAULT 'proposed' CHECK(status IN ( 'proposed','accepted','superseded','rejected' )), doc_path TEXT, -- path to the markdown ADR verify_command TEXT, -- optional check command last_verified_at TEXT, last_verified_result TEXT CHECK(last_verified_result IN ('pass','fail') OR last_verified_result IS NULL), predicted_impact TEXT, actual_outcome TEXT, notes TEXT ); ---------------------------------------------------------------------- -- Backlog: harness improvement proposals with evidence loop ---------------------------------------------------------------------- CREATE TABLE backlog ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_at TEXT NOT NULL DEFAULT (datetime('now')), title TEXT NOT NULL, discovered_while TEXT, current_pain TEXT, suggested_improvement TEXT, risk TEXT CHECK(risk IN ('tiny','normal','high_risk')), status TEXT NOT NULL DEFAULT 'proposed' CHECK(status IN ( 'proposed','accepted','implemented','rejected' )), predicted_impact TEXT, actual_outcome TEXT, implemented_at TEXT, notes TEXT ); ---------------------------------------------------------------------- -- Trace: agent task execution records (observability foundation) ---------------------------------------------------------------------- CREATE TABLE trace ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_at TEXT NOT NULL DEFAULT (datetime('now')), task_summary TEXT NOT NULL, intake_id INTEGER REFERENCES intake(id), story_id TEXT REFERENCES story(id), agent TEXT, actions_taken TEXT, -- JSON array files_read TEXT, -- JSON array files_changed TEXT, -- JSON array decisions_made TEXT, -- JSON array errors TEXT, -- JSON array outcome TEXT CHECK(outcome IN ( 'completed','blocked','partial','failed' )), duration_seconds INTEGER, token_estimate INTEGER, harness_friction TEXT, notes TEXT );