-- 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;
