fix(workflows): use n8n public activation contract - #2964
Open
tang-vu wants to merge 1 commit into
Open
Conversation
This was referenced Aug 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
POST /api/v1/workflows/{id}/activateWhy this matters
ODS pins
n8nio/n8n:2.6.4. Its Public API create operation returns a workflow object, while activation is a dedicated POST endpoint. The dashboard currently readsdata.idand sends a PATCH to/workflows/{id}; thereforePOST /api/workflows/{workflow_id}/enablecan import a workflow but leaves it inactive while claiming it is active.Root cause: the router test encoded a response shape and activation method that do not match n8n's Public API. The invariant is that a successful ODS enable request must use the ID returned by create and invoke n8n's activation operation for that exact ID.
Provider contract:
Overlap check
Searched open and closed PR titles for
n8n workflow activate,n8n activate, andworkflow activation, and inspected every open PR touchingrouters/workflows.py. No PR covers the create-response/activation contract. Related open PRs are independent: #2114/#2749 change installed-workflow name matching, #2748 bounds execution pagination, #2469 validates workflow-list payloads, and #2187 resolves dependency aliases.Regression test
test_workflow_enable_successexercises the authenticatedPOST /api/workflows/ok-wf/enableboundary. It now supplies n8n's top-level create response and asserts the second upstream call isPOST .../workflows/n8n-99/activate.Pre-fix evidence: the test failed because the endpoint returned
n8nId: null. Post-fix validation:pytest tests/test_workflows.py -q— 45 passedpython -m py_compile routers/workflows.py tests/test_workflows.py— passedgit diff --check— passedTradeoffs and rollback
This keeps the existing ODS response shape and accepted create status codes. It does not change import rollback behavior when n8n activation itself rejects a workflow. Reverting commit
028af113restores the old behavior; no persisted ODS schema or configuration changes are involved.Generated with Codex
Batch compatibility
Validated as an independent ten-PR batch from upstream
main6ff9b4fc5190099705043acaab7e9b6ad9c8b8f1. The final PR heads merged without conflicts in this order: #2964 -> #2965 -> #2967 -> #2969 -> #2970 -> #2971 -> #2972 -> #2973 -> #2974 -> #2975. The resulting local synthetic merge head is4ae60eadad9696a9accb735aad71af87d2be802d.Combined validation on that exact tree:
git diff --check: passed.The scopes are behaviorally independent. The stated order is the tested rollback/merge sequence for shared-file changes; each PR remains individually useful and revertible.