Set up Commonwealth game project with complete agent team (18 agents), discussion archives (12 rounds), briefing system, ticketing database, Qdrant document search, and skill definitions. Establishes the documentation and tooling foundation for engine selection and implementation phases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
62 lines
2.4 KiB
SQL
62 lines
2.4 KiB
SQL
-- Commonwealth Project Ticketing Database Schema
|
|
-- Access via: python3 db/connectors/sqlite_connector.py <command>
|
|
-- DO NOT use sqlite3 CLI (crashes in Claude Code due to std::bad_alloc bug)
|
|
|
|
PRAGMA journal_mode=WAL;
|
|
PRAGMA foreign_keys=ON;
|
|
|
|
CREATE TABLE IF NOT EXISTS tickets (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
type TEXT NOT NULL CHECK(type IN ('initiative', 'epic', 'story', 'task', 'bug')),
|
|
parent_id INTEGER REFERENCES tickets(id),
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
status TEXT NOT NULL DEFAULT 'backlog' CHECK(status IN ('backlog', 'ready', 'in_progress', 'review', 'done', 'cancelled')),
|
|
priority TEXT DEFAULT 'medium' CHECK(priority IN ('critical', 'high', 'medium', 'low')),
|
|
assigned_to TEXT,
|
|
decision_ref TEXT, -- e.g. 'D-010' or 'Q-001'
|
|
sprint_id INTEGER REFERENCES sprints(id),
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS sprints (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
goal TEXT,
|
|
start_date TEXT,
|
|
end_date TEXT,
|
|
status TEXT NOT NULL DEFAULT 'planning' CHECK(status IN ('planning', 'active', 'completed', 'cancelled')),
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ticket_deps (
|
|
blocker_id INTEGER NOT NULL REFERENCES tickets(id),
|
|
blocked_id INTEGER NOT NULL REFERENCES tickets(id),
|
|
PRIMARY KEY (blocker_id, blocked_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ticket_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
ticket_id INTEGER NOT NULL REFERENCES tickets(id),
|
|
field TEXT NOT NULL,
|
|
old_value TEXT,
|
|
new_value TEXT,
|
|
changed_by TEXT,
|
|
changed_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ticket_labels (
|
|
ticket_id INTEGER NOT NULL REFERENCES tickets(id),
|
|
label TEXT NOT NULL,
|
|
PRIMARY KEY (ticket_id, label)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tickets_status ON tickets(status);
|
|
CREATE INDEX IF NOT EXISTS idx_tickets_type ON tickets(type);
|
|
CREATE INDEX IF NOT EXISTS idx_tickets_parent ON tickets(parent_id);
|
|
CREATE INDEX IF NOT EXISTS idx_tickets_sprint ON tickets(sprint_id);
|
|
CREATE INDEX IF NOT EXISTS idx_tickets_assigned ON tickets(assigned_to);
|
|
CREATE INDEX IF NOT EXISTS idx_tickets_decision ON tickets(decision_ref);
|
|
CREATE INDEX IF NOT EXISTS idx_history_ticket ON ticket_history(ticket_id);
|