Flows YAML — shadow mode, per-flow cutover, legacy + canvas deletion #1078
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#1078
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As the platform operator, I want to run the YAML executor in shadow mode alongside the legacy JSON node engine, validate behaviour parity per flow, cut flows over one at a time, and finally delete the legacy server code + React Flow canvas, so that the migration is incremental and reversible at every step.
Acceptance criteria
Shadow mode
service_settings.flows_yaml.mode∈"off" | "shadow" | "live", with per-flow override.shadow, both engines see the event; YAML engine writes toflow_runs_yaml(separate table) and runs no real dispatches (opdispatchbecomes a no-op recorder; same for label/comment ops).flow_runs_yamlagainstflow_runsfor the same triggers; mismatch report surfaced in dashboard.Per-flow cutover
just flows-yaml-cutover <name>flips one flow toliveafter operator review.--forceoverride for emergencies).--offreverts that flow to legacy engine.Legacy server deletion (after all 9 cut over)
apps/server/src/domain/flows/{executor,registry,validation,flow-dispatch}.ts.apps/server/src/http/webhook.ts:296–341.defaultArgInjectionsfromflow-dispatch.ts.flowstable; renameflow_node_runs.node_*→step_*(Drizzle migration with backfill).flow_runs_yamlshadow table.specs/node-flows.md+specs/node-flows-ui.md(note in spec).Canvas UI cutover
/flows.?legacy=1for one release.apps/web/src/features/flows/(canvas, palette, inspector) deleted; React Flow dep removed;?legacy=1redirects to/flows.Tests / safety
--force.Out of scope
flow_runs+task_historyinto a single events table (separate spec).References
docs/specs/flows-yaml.md§11 (all phases).Inherited acceptance criteria from #1075
The engine PR (#1079) defers every column rename to this cutover so the legacy NF-2 dispatch path keeps reading + writing its existing schema unchanged. Track explicitly:
flow_runs.flow_id→flow_nameflow_node_runs.node_id→step_idand any othernode_*→step_*columns the wave executor readsflows-yaml/hooks-impl.tsadapters tagged// #1078to drop the legacy column-name aliasesAlready covered in this ticket's body, restated here so #1075's "Schema rename" AC bullet has a concrete forward link.