From a73b53b6cdc29209a1aea8a0ff00b6fff08ae2da Mon Sep 17 00:00:00 2001 From: os-zhuang Date: Wed, 24 Jun 2026 22:51:56 +0800 Subject: [PATCH] feat(spec): add the `back` edge style to the flow-builder canvas protocol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `FlowCanvasEdgeStyleSchema` gains a `back` value alongside solid/dashed/dotted/bold, marking an ADR-0044 declared back-edge (a `revise` loop's resubmit edge). Flow-builder-protocol consumers can render it as a distinct curved/dashed return arc, set apart from forward flow — matching the objectui designer's canvas (objectstack-ai/objectui#1954). Additive enum value: public API surface + factory signatures unchanged. Part of #2274 (ADR-0044 AI/designer parity). Co-Authored-By: Claude Opus 4.8 --- .changeset/flow-builder-back-edge-style.md | 7 +++++++ packages/spec/src/studio/flow-builder.test.ts | 2 +- packages/spec/src/studio/flow-builder.zod.ts | 7 +++++-- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 .changeset/flow-builder-back-edge-style.md diff --git a/.changeset/flow-builder-back-edge-style.md b/.changeset/flow-builder-back-edge-style.md new file mode 100644 index 0000000000..3cc9a338f6 --- /dev/null +++ b/.changeset/flow-builder-back-edge-style.md @@ -0,0 +1,7 @@ +--- +'@objectstack/spec': patch +--- + +feat(spec): add the `back` edge style to the flow-builder canvas protocol + +`FlowCanvasEdgeStyleSchema` gains a `back` value alongside `solid`/`dashed`/`dotted`/`bold`, marking an ADR-0044 declared back-edge (a `revise` loop's resubmit edge). Flow-builder-protocol consumers can now render it as a distinct curved/dashed return arc, set apart from forward flow — matching the objectui designer's hand-rolled canvas (objectstack-ai/objectui#1954). Part of #2274. diff --git a/packages/spec/src/studio/flow-builder.test.ts b/packages/spec/src/studio/flow-builder.test.ts index f680ff7334..9f84ea1cc0 100644 --- a/packages/spec/src/studio/flow-builder.test.ts +++ b/packages/spec/src/studio/flow-builder.test.ts @@ -128,7 +128,7 @@ describe('FlowCanvasEdgeSchema', () => { }); it('should accept all edge styles', () => { - const styles = ['solid', 'dashed', 'dotted', 'bold']; + const styles = ['solid', 'dashed', 'dotted', 'bold', 'back']; styles.forEach(s => { expect(FlowCanvasEdgeStyleSchema.parse(s)).toBe(s); }); diff --git a/packages/spec/src/studio/flow-builder.zod.ts b/packages/spec/src/studio/flow-builder.zod.ts index 40ed5711be..3568887beb 100644 --- a/packages/spec/src/studio/flow-builder.zod.ts +++ b/packages/spec/src/studio/flow-builder.zod.ts @@ -9,7 +9,7 @@ * within ObjectStack Studio. Covers: * - **Node Shape Registry**: Shape and visual style per FlowNodeAction type * - **Canvas Node**: Position, size, and rendering hints for each node on canvas - * - **Canvas Edge**: Visual properties for sequence flows (normal, default, fault) + * - **Canvas Edge**: Visual properties for sequence flows (normal, default, fault, back-edge) * - **Flow Builder Config**: Canvas settings, palette, minimap, and toolbar * * ## Architecture @@ -132,13 +132,16 @@ export type FlowCanvasNode = z.infer; // ─── Canvas Edge ───────────────────────────────────────────────────── /** - * Visual style for a sequence flow edge on the canvas. + * Visual style for a sequence flow edge on the canvas. The `back` style marks an + * ADR-0044 declared back-edge (a `revise` loop's resubmit edge): consumers render + * it as a distinct curved/dashed return arc, set apart from forward flow. */ export const FlowCanvasEdgeStyleSchema = lazySchema(() => z.enum([ 'solid', // Normal sequence flow 'dashed', // Default sequence flow (isDefault: true) 'dotted', // Conditional edge 'bold', // Fault / error edge + 'back', // ADR-0044 back-edge (revise loop) — curved dashed return arc ]).describe('Edge line style')); export type FlowCanvasEdgeStyle = z.infer;