Skip to content

[SDK] Generated workflow JSON has structural differences that prevent direct deployment parity with JSON-authored workflows #1545

Description

@CamyDee

Describe the Bug

Describe the bug

When comparing SDK-generated workflow JSON against an existing
JSON-authored production workflow (deployed via EV2/Geneva), there
are several structural differences that would require
post-processing before the SDK output can be deployed through the
same pipeline.

This is filed as a low-priority awareness item — these may be
intentional design choices for the new SDK runtime, but they
create friction for teams migrating existing workflows to codeful
authoring.

Structural differences observed

  1. RunAfter uses integer enum values instead of strings

SDK output:

"RunAfter": { "PreviousAction": [4] }

Expected (JSON-authored):

"runAfter": { "PreviousAction": ["Succeeded"] }

4 appears to be the integer value of a FlowStatus enum. The
Logic Apps runtime may accept both forms, but JSON-authored
workflows consistently use string values.

  1. PascalCase vs camelCase property names

SDK output: "Actions", "Triggers", "Type", "Inputs"
JSON-authored: "actions", "triggers", "type", "inputs"

  1. Schema URL variant

SDK: https://schema.management.azure.com/schemas/2016-06-01/workflowdefinition.json#
JSON-authored: https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#

  1. Missing contentVersion and outputs

JSON-authored includes:

"contentVersion": "1.0.0.0",
"outputs": {}

SDK omits both fields entirely.

  1. Missing $connections parameters block

JSON-authored includes:

"parameters": {
  "$connections": {
    "type": "Object",
    "defaultValue": {}
  }
}

SDK omits entirely. Typed connectors use
Host.Connection.ReferenceName instead.

  1. Wrapper structure

JSON-authored wraps in:

{
  "properties": {
    "state": "Enabled",
    "metadata": { "templateId": "..." },
    "definition": { ... },
    "runtimeConfiguration": { ... }
  }
}

SDK emits a flat structure:

{ "Kind": "Stateful", "Definition": { ... } }

Plan Type

Standard

Steps to Reproduce the Bug or Issue

  1. Take a JSON-authored production workflow
  2. Generate an SDK-generated workflow JSON (deployed via EV2/Geneva)
  3. Compare

Workflow JSON

Screenshots or Videos

No response

Additional context

Questions for the team

  1. Are these differences intentional for the new codeful runtime
    (i.e., the SDK-generated format is the new canonical form)?
  2. If so, does the codeful deployment pipeline handle the
    differences transparently?
  3. If not, is there a recommended post-processing step or will
    the SDK be updated to emit the traditional format?

Impact

Teams that deploy via existing EV2/Geneva pipelines expecting the
traditional JSON structure will need a transformation layer.
Understanding whether this is by-design helps us plan accordingly.

Environment

  • Microsoft.Azure.Workflows.Sdk: 1.0.0-preview.1
  • .NET: net8.0
  • OS: Windows 11
  • Compared against: Production workflow deployed via Geneva
    Automation EV2 pipeline

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions