-- ── Workflow approvals ──────────────────────────────────────────────────────── -- token-hash lookup scoped: approval token grants cannot act on another -- community's same hash (conformance). CREATE TABLE workflow_approvals ( community_id UUID NOT NULL REFERENCES communities(id), token BYTEA NOT NULL, workflow_id UUID NOT NULL, run_id UUID NOT NULL, step_id VARCHAR(64) NOT NULL, step_index INT NOT NULL, approver_spec TEXT NOT NULL, status approval_status NOT NULL DEFAULT 'pending', approver_pubkey BYTEA, note TEXT, granted_at TIMESTAMPTZ, denied_at TIMESTAMPTZ, expires_at TIMESTAMPTZ NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (community_id, token), FOREIGN KEY (community_id, workflow_id) REFERENCES workflows (community_id, id) ON DELETE CASCADE, FOREIGN KEY (community_id, run_id) REFERENCES workflow_runs (community_id, id) ON DELETE CASCADE ); CREATE INDEX idx_workflow_approvals_workflow ON workflow_approvals (community_id, workflow_id); CREATE INDEX idx_workflow_approvals_run ON workflow_approvals (community_id, run_id); CREATE INDEX idx_workflow_approvals_status ON workflow_approvals (community_id, status);