Feat v0.3.0 workflow schema redesign + stage CRUD modernization
Some checks failed
CI/CD / detect-changes (pull_request) Successful in 4s
CI/CD / test-frontend (pull_request) Successful in 5s
CI/CD / test-go-pg (pull_request) Failing after 1m56s
CI/CD / test-sqlite (pull_request) Successful in 2m47s
CI/CD / build-and-deploy (pull_request) Has been skipped

Drop chat-era columns (persona_id, history_mode) from workflow_stages.
Rename transition_rules → stage_config. Add audience, stage_type,
starlark_hook, branch_rules columns. Update stage_mode CHECK to
(form, review, delegated, automated). All Go stores, handlers,
routing engine, Starlark module, and frontend editors updated.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-27 17:48:14 +00:00
parent 8580e1d93e
commit 1b08769f09
16 changed files with 414 additions and 161 deletions

View File

@@ -2,8 +2,9 @@
-- Switchboard Core — 007 Workflows
-- ==========================================
-- Workflow definitions, stages, version snapshots.
-- persona_id kept as nullable TEXT (no FK — personas are extensions now).
-- workflow_assignments dropped (channel-dependent, rebuild as needed).
-- v0.3.0: persona_id + history_mode dropped (chat vestiges).
-- transition_rules → stage_config, stage_mode modernized.
-- Added: audience, stage_type, starlark_hook, branch_rules.
-- ==========================================
CREATE TABLE IF NOT EXISTS workflows (
@@ -44,15 +45,18 @@ CREATE TABLE IF NOT EXISTS workflow_stages (
workflow_id UUID NOT NULL REFERENCES workflows(id) ON DELETE CASCADE,
ordinal INTEGER NOT NULL,
name TEXT NOT NULL,
persona_id TEXT,
assignment_team_id UUID REFERENCES teams(id) ON DELETE SET NULL,
form_template JSONB NOT NULL DEFAULT '{}',
stage_mode TEXT NOT NULL DEFAULT 'form_only'
CHECK (stage_mode IN ('form_only', 'form_chat', 'review', 'custom')),
history_mode TEXT NOT NULL DEFAULT 'full'
CHECK (history_mode IN ('full', 'summary', 'fresh')),
stage_mode TEXT NOT NULL DEFAULT 'form'
CHECK (stage_mode IN ('form', 'review', 'delegated', 'automated')),
audience TEXT NOT NULL DEFAULT 'team'
CHECK (audience IN ('team', 'public', 'system')),
stage_type TEXT NOT NULL DEFAULT 'simple'
CHECK (stage_type IN ('simple', 'dynamic', 'automated')),
auto_transition BOOLEAN NOT NULL DEFAULT false,
transition_rules JSONB NOT NULL DEFAULT '{}',
stage_config JSONB NOT NULL DEFAULT '{}',
branch_rules JSONB NOT NULL DEFAULT '[]',
starlark_hook TEXT,
surface_pkg_id TEXT REFERENCES packages(id) ON DELETE SET NULL,
sla_seconds INTEGER,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()