Skip to content

[One Workflow][Bug] Toggling workflow enabled state corrupts YAML conten#252676

Merged
rosomri merged 2 commits intoelastic:mainfrom
rosomri:preserve_yaml_content_when_toggeling
Feb 11, 2026
Merged

[One Workflow][Bug] Toggling workflow enabled state corrupts YAML conten#252676
rosomri merged 2 commits intoelastic:mainfrom
rosomri:preserve_yaml_content_when_toggeling

Conversation

@rosomri
Copy link
Copy Markdown
Contributor

@rosomri rosomri commented Feb 11, 2026

Summary

Fixes a bug where toggling a workflow's enabled state (or updating name/description/tags) would corrupt the stored YAML. The server was performing a full YAML → JSON → YAML roundtrip just to update metadata fields, which:

  • Dropped all YAML comments and blank lines
  • Corrupted template expressions like {{ inputs.comment }} into "{ inputs.comment }": null

Before

Screen.Recording.2026-02-11.at.10.49.58.mov

After

Screen.Recording.2026-02-11.at.11.55.05.mov

Fix

Replaced the parse-modify-stringify approach in workflows_management_service.ts with updateWorkflowYamlFields(), which edits fields in-place on the YAML AST (using parseDocument with keepSourceTokens: true), preserving all comments, formatting, and template expressions.

Test plan

  • Added unit tests for updateYamlField and updateWorkflowYamlFields covering comment/blank line/template expression preservation
  • Added CRUD-level test in workflows_management_service.test.ts verifying the full update flow preserves YAML integrity when toggling enabled

…iption/tags) would corrupt the stored YAML. The server was performing a full YAML > JSON > YAML roundtrip just to update metadata fields
…iption/tags) would corrupt the stored YAML. The server was performing a full YAML > JSON > YAML roundtrip just to update metadata fields
@rosomri rosomri requested a review from a team as a code owner February 11, 2026 09:53
@rosomri rosomri added release_note:skip Skip the PR/issue when compiling release notes backport:version Backport to applied version labels Team:One Workflow Team label for One Workflow (Workflow automation) v9.3.0 v9.3.1 labels Feb 11, 2026
@rosomri rosomri marked this pull request as draft February 11, 2026 09:57
@rosomri rosomri marked this pull request as ready for review February 11, 2026 09:57
@rosomri rosomri changed the title Preserve yaml content when toggeling [One Workflow][Bug] Toggling workflow enabled state corrupts YAML conten Feb 11, 2026
Copy link
Copy Markdown
Contributor

@skynetigor skynetigor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@elasticmachine
Copy link
Copy Markdown
Contributor

💚 Build Succeeded

Metrics [docs]

✅ unchanged

@rosomri rosomri merged commit 32773f8 into elastic:main Feb 11, 2026
31 checks passed
@kibanamachine
Copy link
Copy Markdown
Contributor

Starting backport for target branches: 9.3

https://github.com/elastic/kibana/actions/runs/21904391570

@kibanamachine
Copy link
Copy Markdown
Contributor

💔 All backports failed

Status Branch Result
9.3 Backport failed because of merge conflicts

You might need to backport the following PRs to 9.3:
- feat: add bulk workflow creation API endpoint (#252214)
- perf: use refresh:true instead of wait_for for workflow CRUD APIs (#252213)

Manual backport

To create the backport manually run:

node scripts/backport --pr 252676

Questions ?

Please refer to the Backport tool documentation

@kibanamachine kibanamachine added the backport missing Added to PRs automatically when the are determined to be missing a backport. label Feb 12, 2026
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

9 similar comments
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

25 similar comments
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

rkernutt added a commit to rkernutt/cloud-to-elastic-load-generator that referenced this pull request May 5, 2026
The bundled YAML, the Setup wizard, and the CLI installer all set
`enabled: true` on create, which made it possible for a fresh install
to start running the moment a user attached it to a rule — before they
had a chance to review the notification step. The user-facing design
calls out three manual follow-up steps (review notification, attach to
rules, enable); the third one was effectively skipped because the
workflow was already enabled.

Now every install path persists `enabled: false`:

  - workflows/data-pipeline-alert-enrichment.yaml top-level flag
  - assets/workflows/ mirror (regenerated by export-standalone-assets)
  - Bulk POST /api/workflows envelope in the wizard + CLI
  - Update-existing PUT path in the wizard + CLI

Working around elastic/kibana#252676:

Kibana 9.5's Workflows API silently drops the `enabled` field when it's
sent inside a full PUT body alongside `yaml`. After the regular update,
both installers now follow up with a *partial* PUT containing just
`{ enabled: false }` — that path is unaffected by the bug. Verified end
to end on Observability Serverless 9.5.0:

  PUT /api/workflows/workflow/<id>  (full body) → 200, enabled: true (bug)
  PUT /api/workflows/workflow/<id>  ({enabled: false}) → 200, enabled: false

Post-install messaging in the wizard, CLI, and docs (workflow-deployment,
SETUP-WIZARD-AND-UNINSTALL, SetupPage description, YAML header comment)
now lists three manual steps — review notification, attach to rules,
flip the Enabled toggle — and explains that the install is intentionally
a no-op until all three are complete.

Co-authored-by: Cursor <cursoragent@cursor.com>
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

2 similar comments
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252676 locally
cc: @rosomri

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport missing Added to PRs automatically when the are determined to be missing a backport. backport:version Backport to applied version labels release_note:skip Skip the PR/issue when compiling release notes Team:One Workflow Team label for One Workflow (Workflow automation) v9.3.0 v9.3.1 v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[One Workflow][Bug] Toggling workflow enabled state corrupts YAML content

4 participants