@@ -17,6 +17,18 @@ post-deployment state.
1717 access configuration.
1818- Never create, rotate, or reveal an API key unless the user separately asked for key management.
1919
20+ ## What a stored version is not
21+
22+ A stored workflow version nulls out ` credential ` , ` oauthCredential ` , resource selectors, and
23+ related binding fields. Two consequences:
24+
25+ - A diff against a version document is not a change report. Blocks whose only delta is a nulled
26+ field show as changed, and selector changes do not show at all - the diff overstates and
27+ understates simultaneously. Diff live state against live state instead.
28+ - A revert restores the nulled document, stripping every credential and selector in the workflow.
29+ Never present revert as a safe rollback; the reverted draft needs its bindings re-established
30+ before it can run.
31+
2032## Choose one surface
2133
2234- ** API:** for software calling a workflow as a pipeline. Publish with
@@ -42,6 +54,31 @@ Do not choose a surface from convenience. Ask when the intended caller does not
4254- Reuse an existing MCP server when it is the intended tool collection; do not create duplicates by
4355 default.
4456
57+ ## Promoting across workspaces with fork sync
58+
59+ When a workflow moves between workspaces via a fork push, the sync has its own semantics; do not
60+ reason about it as a copy.
61+
62+ - The push creates resources that are missing in the target and rebinds selector-bound references
63+ to them. Do not pre-create tables in the target as a promotion prerequisite - pre-creating
64+ defeats the mapping and leaves references pointing at the source.
65+ - A table the push creates arrives holding the source's rows. Re-seed environment-specific values,
66+ feature flags and configuration especially, immediately after the push, before anything reads
67+ them. Where possible design flag rows so the source's value is also the safe value in every
68+ target.
69+ - Deployment state travels. A workflow deployed in the source is live in the target as soon as the
70+ sync completes, and a schedule trigger starts firing there on its own - there is no separate
71+ deploy step in the target. Before syncing anything scheduled or triggered, state plainly what
72+ will start running where and when.
73+ - Bind every resource through its selector and leave the manual id fields empty. The push remaps
74+ selectors but carries a hardcoded manual id verbatim, silently pointing the promoted workflow at
75+ the source workspace's resource - and a cross-workspace read succeeds, so no error surfaces.
76+ - The push does not preserve a block's basic/advanced mode: some blocks arrive rebound and working,
77+ others arrive carrying the source's manual id and broken, with nothing surfacing which is which.
78+ "Works in the source workspace" is therefore never the completion condition. Verify each target
79+ environment after promotion - run its workflows or audit its bindings - rather than inferring
80+ health from the source.
81+
4582## Verify and report
4683
4784After publishing, read the deployment again. Confirm its active status and version and return the
0 commit comments