langgenius/dify · error · CreateReleaseSubmissionBlockedError

unsupportedDslMode

unsupportedDslMode

Error message

unsupportedDslMode

What it means

Thrown by the create-release submission atom when releaseSourceMode is 'dsl' but createReleaseIsWorkflowDslContentAtom is false. The release DSL import path only accepts workflow DSL content; if the parsed/provided DSL does not validate as workflow DSL, submission is blocked with the 'unsupportedDslMode' reason via CreateReleaseSubmissionBlockedError.

Source

Thrown at web/features/deployments/create-release/state/index.ts:534

  const submittedReleaseName = value.releaseName.trim()

  if (get(isCheckingCreateReleaseContentAtom) || !submittedReleaseName) return undefined

  if (get(createReleaseHasNameConflictAtom)) return undefined

  if (!canCheckReleaseSourceContent(get) || !get(createReleaseContentReadyAtom)) return undefined

  const appInstanceId = requiredAppInstanceId(get)
  const commonCreateReleaseRequest = {
    appInstanceId,
    displayName: submittedReleaseName,
    description: value.releaseDescription.trim() || undefined,
    createAppInstance: false,
  }

  if (releaseSourceMode === 'dsl') {
    if (!get(createReleaseIsWorkflowDslContentAtom))
      throw new CreateReleaseSubmissionBlockedError('unsupportedDslMode')

    return await get(createReleaseMutationAtom).mutateAsync({
      body: {
        ...commonCreateReleaseRequest,
        dsl: get(createReleaseEncodedDslContentAtom),
      },
    })
  }

  if (!sourceAppId) return undefined

  return await get(createReleaseMutationAtom).mutateAsync({
    body: {
      ...commonCreateReleaseRequest,
      sourceAppId,
    },
  })
})

View on GitHub (pinned to ef8544b173)

Solutions

  1. Confirm the DSL file being imported is a workflow app export (check the 'mode' or 'app' field in the DSL JSON).
  2. If importing a chatflow, route through the chatflow-compatible release path instead.
  3. Pre-validate the DSL content type before enabling submit, and show a clear 'workflow DSL required' message.
  4. Ensure createReleaseContentReadyAtom and createReleaseIsWorkflowDslContentAtom are derived from the same parsed payload to avoid divergence.

Example fix

// before
if (releaseSourceMode === 'dsl') {
  if (!get(createReleaseIsWorkflowDslContentAtom))
    throw new CreateReleaseSubmissionBlockedError('unsupportedDslMode')

// after - gate the UI and give a reason
if (releaseSourceMode === 'dsl' && !get(createReleaseIsWorkflowDslContentAtom)) {
  set(createReleaseDslModeErrorAtom, 'workflow-dsl-required')
  return undefined
}
Defensive patterns

Strategy: validation

Validate before calling

// Validate DSL is workflow-type before enabling submit
const isWorkflowDsl = useAtomValue(createReleaseIsWorkflowDslContentAtom)
const canSubmit = releaseSourceMode !== 'dsl' || isWorkflowDsl

Type guard

function isWorkflowDslContent(parsed: unknown): boolean {
  return !!parsed && typeof parsed === 'object'
    && (parsed as { app?: { mode?: string } }).app?.mode === 'workflow'
}

Try / catch

try {
  await submitCreateRelease(value)
} catch (e) {
  if (e instanceof CreateReleaseSubmissionBlockedError && e.reason === 'unsupportedDslMode') {
    setDslError('Only workflow DSL is supported for release import.')
    return
  }
  throw e
}

Prevention

When it happens

Trigger: Triggered when the user selects DSL import mode but supplies a chatflow DSL, agent DSL, or malformed/non-workflow DSL file, so createReleaseIsWorkflowDslContentAtom resolves false.

Common situations: User exports a chatflow app DSL and tries to import it through the release flow that only accepts workflow DSL, the DSL version is incompatible with the current parser, or the content readiness atom passed but the workflow-type check did not.

Related errors


AI-assisted analysis of langgenius/dify@ef8544b173 (2026-08-12). Data as JSON: /api/errors/9c6be54745dcbd6d. Report an issue: GitHub.