Grid at /:org/:repo/workflows: cards (name, enabled toggle, trigger
summary, updated-at), admin CRUD (create/rename/duplicate/delete with a
typed-confirm for LIVE workflows), empty state with face-up templates,
populated state demoting them into the create split-button; members read-
only. Editor at /workflows/:workflowId: full-screen react-flow with every
interaction on (drag/multi-select/delete-key/edge create/reconnect/
delete), dnd-kit sidebar drag-in (screenToFlowPosition), floating toolbox/
properties sidebar rendered purely from the new TRIGGER/GATE/ACTION
catalogs + RULE_CATALOG descriptions, schema-driven param editors (zod
introspection), live validation with node badges + issues panel, save-any-
state drafts, enable gated on validateWorkflowForEnable with surfaced
refusal reasons. Contract evolutions (additive): optional node position;
validateWorkflow moved core→contracts (re-exported) + strict enable
variant (reachable action, catalog config parse). CRUD service keys on the
row id; created/duplicated/template workflows start DISABLED; seeded
adjective-noun name generator with collision retry. 35 new tests
(16 invariant classes, 11 CRUD integration, 7 name-gen, round-trip incl.
positions). No DB migration — positions ride the definition jsonb.