diff --git a/internal/store/migrations/103-index-discard-attention.sql b/internal/store/migrations/103-index-discard-attention.sql new file mode 100644 index 0000000..e9e6d25 --- /dev/null +++ b/internal/store/migrations/103-index-discard-attention.sql @@ -0,0 +1,2 @@ +DROP INDEX events_attention; +CREATE INDEX events_attention ON events(task_id) WHERE kind IN ('inbox.created', 'task.ready', 'session.error', 'session.rate_limited', 'task.discard_suggested'); diff --git a/internal/store/store.go b/internal/store/store.go index 004a0db..3acabb6 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -1688,7 +1688,8 @@ const taskColumns = `id, project_id, title, merge_title, branch, worktree_path, // Keep the child lookup separate from the task itself so SQLite can use tasks_parent. const backgroundExpr = `(audit != '' OR EXISTS (SELECT 1 FROM tasks r WHERE r.id = tasks.parent_task_id AND tasks.workflow_stage != '' AND r.audit != '')) AND NOT EXISTS (SELECT 1 FROM events WHERE events.task_id IN (SELECT tasks.id UNION ALL SELECT c.id FROM tasks c WHERE c.parent_task_id = tasks.id AND c.parent_task_id != '' AND tasks.workflow_name != '') - AND (kind IN ('inbox.created', 'task.ready', 'session.error', 'session.rate_limited') + AND kind IN ('inbox.created', 'task.ready', 'session.error', 'session.rate_limited', 'task.discard_suggested') + AND (kind != 'task.discard_suggested' OR (kind = 'task.discard_suggested' AND NOT EXISTS (SELECT 1 FROM tasks r JOIN workflow_definitions d ON d.id = r.workflow_definition_id WHERE r.id IN (tasks.id, tasks.parent_task_id) AND d.auto_discard))))` const sessionColumns = `id, coalesce(task_id, ''), owner, vendor, model, vendor_session_id, state, role, member, created_by, created_at, forked_from, forked_at, subagents`