Files
buzz/migrations/0035_workflow_owner_commands.sql
Logan Johnson 9ca9d8ccbc fix(workflow): complete managed owner updates
Co-authored-by: Larry <larry@buzz.local>

Signed-off-by: Logan Johnson <loganj@squareup.com>
2026-08-24 12:26:25 -04:00

32 lines
1.3 KiB
SQL

-- Owner-authored commands for managed-agent workflow control state.
CREATE TYPE workflow_owner_command_status AS ENUM ('pending_agent', 'applied', 'rejected');
CREATE TABLE workflow_owner_commands (
community_id UUID NOT NULL REFERENCES communities(id),
command_id UUID NOT NULL,
event_id BYTEA NOT NULL,
owner_pubkey BYTEA NOT NULL,
agent_pubkey BYTEA NOT NULL,
workflow_id UUID NOT NULL,
expected_revision BYTEA NOT NULL,
operation TEXT NOT NULL CHECK (operation IN ('update', 'enable', 'disable', 'retire')),
proposed_yaml TEXT,
status workflow_owner_command_status NOT NULL,
resulting_revision BYTEA,
receipt_event_id BYTEA,
terminal_reason TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (community_id, command_id),
UNIQUE (community_id, event_id),
FOREIGN KEY (community_id, workflow_id) REFERENCES workflows (community_id, id) ON DELETE CASCADE,
CHECK ((operation = 'update') = (proposed_yaml IS NOT NULL)),
CHECK ((status = 'applied') = (resulting_revision IS NOT NULL))
);
CREATE INDEX idx_workflow_owner_commands_agent_pending
ON workflow_owner_commands (community_id, agent_pubkey, created_at)
WHERE status = 'pending_agent';
SELECT attach_community_write_fence('workflow_owner_commands');