@@ -67,8 +67,8 @@ CREATE TABLE edges (
6767 kind TEXT NOT NULL,
6868 PRIMARY KEY (project_id, from_graph, from_id, to_graph, to_id, kind)
6969);
70- CREATE INDEX idx_edges_target ON edges(to_graph, to_id);
71- CREATE INDEX idx_edges_source ON edges(from_graph, from_id);
70+ CREATE INDEX idx_edges_target ON edges(project_id, to_graph, to_id);
71+ CREATE INDEX idx_edges_source ON edges(project_id, from_graph, from_id);
7272
7373-- =============================================
7474-- Knowledge (notes)
@@ -88,6 +88,7 @@ CREATE TABLE knowledge (
8888 UNIQUE(project_id, slug)
8989);
9090CREATE INDEX idx_knowledge_project ON knowledge(project_id);
91+ CREATE INDEX idx_knowledge_updated ON knowledge(project_id, updated_at);
9192
9293CREATE VIRTUAL TABLE knowledge_fts USING fts5(
9394 title, content, content=knowledge, content_rowid=id
@@ -123,8 +124,8 @@ CREATE TABLE tasks (
123124 slug TEXT NOT NULL,
124125 title TEXT NOT NULL,
125126 description TEXT NOT NULL DEFAULT '',
126- status TEXT NOT NULL DEFAULT 'backlog',
127- priority TEXT NOT NULL DEFAULT 'medium',
127+ status TEXT NOT NULL DEFAULT 'backlog' CHECK(status IN ('backlog','todo','in_progress','review','done','cancelled')) ,
128+ priority TEXT NOT NULL DEFAULT 'medium' CHECK(priority IN ('critical','high','medium','low')) ,
128129 "order" REAL NOT NULL DEFAULT 0,
129130 due_date INTEGER,
130131 estimate INTEGER,
@@ -139,6 +140,8 @@ CREATE TABLE tasks (
139140);
140141CREATE INDEX idx_tasks_project ON tasks(project_id);
141142CREATE INDEX idx_tasks_status ON tasks(project_id, status, "order");
143+ CREATE INDEX idx_tasks_assignee ON tasks(assignee_id);
144+ CREATE INDEX idx_tasks_updated ON tasks(project_id, updated_at);
142145
143146CREATE VIRTUAL TABLE tasks_fts USING fts5(
144147 title, description, content=tasks, content_rowid=id
@@ -174,8 +177,8 @@ CREATE TABLE epics (
174177 slug TEXT NOT NULL,
175178 title TEXT NOT NULL,
176179 description TEXT NOT NULL DEFAULT '',
177- status TEXT NOT NULL DEFAULT 'open',
178- priority TEXT NOT NULL DEFAULT 'medium',
180+ status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open','in_progress','done','cancelled')) ,
181+ priority TEXT NOT NULL DEFAULT 'medium' CHECK(priority IN ('critical','high','medium','low')) ,
179182 "order" REAL NOT NULL DEFAULT 0,
180183 version INTEGER NOT NULL DEFAULT 1,
181184 created_by_id INTEGER REFERENCES team_members(id) ON DELETE SET NULL,
@@ -185,6 +188,7 @@ CREATE TABLE epics (
185188 UNIQUE(project_id, slug)
186189);
187190CREATE INDEX idx_epics_project ON epics(project_id);
191+ CREATE INDEX idx_epics_updated ON epics(project_id, updated_at);
188192
189193CREATE VIRTUAL TABLE epics_fts USING fts5(
190194 title, description, content=epics, content_rowid=id
@@ -224,8 +228,8 @@ CREATE TABLE skills (
224228 triggers_json TEXT NOT NULL DEFAULT '[]',
225229 input_hints_json TEXT NOT NULL DEFAULT '[]',
226230 file_patterns_json TEXT NOT NULL DEFAULT '[]',
227- source TEXT NOT NULL DEFAULT 'user',
228- confidence REAL NOT NULL DEFAULT 1.0,
231+ source TEXT NOT NULL DEFAULT 'user' CHECK(source IN ('user','learned')) ,
232+ confidence REAL NOT NULL DEFAULT 1.0 CHECK(confidence >= 0.0 AND confidence <= 1.0) ,
229233 usage_count INTEGER NOT NULL DEFAULT 0,
230234 last_used_at INTEGER,
231235 version INTEGER NOT NULL DEFAULT 1,
@@ -236,6 +240,7 @@ CREATE TABLE skills (
236240 UNIQUE(project_id, slug)
237241);
238242CREATE INDEX idx_skills_project ON skills(project_id);
243+ CREATE INDEX idx_skills_updated ON skills(project_id, updated_at);
239244
240245CREATE VIRTUAL TABLE skills_fts USING fts5(
241246 title, description, content=skills, content_rowid=id
0 commit comments