-- 017_nomos_plan_executions.up.sql -- Links a gated execution back to the chat session that initiated it, so the -- Nomos auto-continuation worker can re-invoke the agent for that session when -- the (asynchronous) execution finishes. This is the "the system is the event -- loop, not the human" foundation: the human no longer types "continue" after -- every async step — the worker feeds each execution's result back into the -- agent automatically. -- -- Owned by the nomos process. execution_id references the execution entity by -- UUID but intentionally without a hard FK — nomos records the link from the -- tool-result text it gets back, and we don't want a race between the API -- creating the execution entity and nomos linking it to break the insert. CREATE TABLE IF NOT EXISTS nomos_plan_executions ( execution_id UUID PRIMARY KEY, session_id UUID NOT NULL, -- when the worker fed this execution's result back to the agent (NULL = not yet) continued_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- Worker query: find terminal executions not yet fed back. Partial index on the -- not-yet-continued rows keeps the poll cheap as history accumulates. CREATE INDEX IF NOT EXISTS idx_nomos_plan_exec_pending ON nomos_plan_executions (created_at) WHERE continued_at IS NULL;