Skip to content

test(core): Add E2E coverage for Instance AI workflow setup apply actions (no-changelog)#28907

Open
aalises wants to merge 4 commits intomasterfrom
ins-113-e2e-coverage-for-instance-ai-workflow-setup
Open

test(core): Add E2E coverage for Instance AI workflow setup apply actions (no-changelog)#28907
aalises wants to merge 4 commits intomasterfrom
ins-113-e2e-coverage-for-instance-ai-workflow-setup

Conversation

@aalises
Copy link
Copy Markdown
Contributor

@aalises aalises commented Apr 22, 2026

Summary

Adds end-to-end Playwright coverage for the Instance AI workflow-setup confirmation UI — the confirm-mode apply, confirm-mode defer, full-wizard apply, and full-wizard Later / partial apply flows triggered from the setup card. Also pins the backend contract at the unit layer so a future regression in resumeDataapplyNodeChanges → persisted workflow is caught outside of e2e.

Both specs run in the sqlite:e2e container project and stay green across 10 consecutive sequential runs (--repeat-each=5 --workers=1).

Test cases

# Spec Test Flow What it proves
1 instance-ai-workflow-setup.spec.ts should render confirm mode when a single valid credential auto-applies Seed workflow with a Slack node + one matching credential → AI opens setup → review details → Apply Confirm mode renders when a single valid credential can auto-apply, the "review details" link expands the full card, and Apply persists the auto-resolved credential to the workflow
2 instance-ai-workflow-setup.spec.ts should defer the whole setup when Later is clicked in confirm mode Same confirm-mode seed → AI opens setup → Later Later in confirm mode transitions to the deferred state and does NOT mutate the workflow — the Slack node still carries no credential
3 instance-ai-workflow-setup-actions.spec.ts should apply parameter and credential edits and persist them to the workflow Seed workflow with an empty HTTP URL + Slack node pre-credentialed → AI opens setup → user fills URL → Apply Filling the required param flips the card to the "Complete" step-check badge, and Apply persists both the parameter edit (HTTP url) and the existing credential assignment to the workflow JSON
4 instance-ai-workflow-setup-actions.spec.ts should partially apply completed cards when Later is clicked on the last step Seed same workflow without a Slack cred → AI opens setup → user fills HTTP URL → Next → Prev → Next → Later on Slack card Prev navigation returns to the HTTP card with the filled value intact (wizard keeps paramValues as the source of truth across step changes), and partial apply persists the completed card's edits (HTTP url) while the untouched Slack node keeps its empty credentials

All four specs exercise the real workflows(setup) suspend/resume contract end-to-end — the orchestrator LLM, the POST /instance-ai/confirm endpoint, applyNodeChangesworkflowService.update, the SSE tool-result stream back to the FE, and the post-apply workflow GET.

Behind the scenes

A few things had to line up to make the apply path observable and deterministic from a Playwright harness:

  • Wait on the applying spinner, not the setup-card. The wizard template in InstanceAiWorkflowSetup.vue unmounts synchronously the moment isApplying flips true, so waiting for the setup card to hide resolves before the backend save — the subsequent workflow GET would race the commit. The instance-ai-workflow-setup-applying spinner stays visible for the full apply window (POST → tool-result SSE → save commit), so watching it appear and disappear guarantees persistence before we assert.
  • Debounced parameter commits. ParameterInput debounces @update:model-value by 200 ms, so a short waitForTimeout(300) after .fill() lets the value propagate into paramValues before Apply fires.
  • Per-test unique workflow + credential names. The orchestrator's list-workflows tool is sensitive to same-named workflows across parallel workers during recording — unique names prevent the LLM from slipping into a disambiguation response.
  • Slack users.profile.get success mock in the fixture. The FE's buildNodeCredentials intentionally excludes any credential whose test has failed. Seed tokens in these tests are fake, so the fixture installs a success mock on mockserver before loading recordings — mockserver's FIFO matching serves it ahead of any recorded Slack response. Same shape as the existing LLM mocks.

Regression tests

Two unit tests pin the tool-layer contract:

  • applyNodeChanges — merged nodeParameters values land on the saved workflow JSON.
  • workflows(setup) resume path — resumeData.nodeParameters is forwarded to applyNodeChanges unchanged.

Plus three credGroupKey cases covering same-credential-type node grouping, HTTP Request distinct-URL splits, and cross-type isolation.

Related Linear tickets

https://linear.app/n8n/issue/INS-113

Review / Merge checklist

  • I have seen this code, I have run this code, and I take responsibility for this code.
  • PR title and summary are descriptive.
  • Tests included.

aalises added 2 commits April 22, 2026 16:30
…ions (no-changelog)

Adds two Playwright specs under `@capability:proxy` that exercise the full
workflow-setup confirmation UI end-to-end:

- Full-wizard apply: user fills an empty HTTP Request URL, applies, and
  both the parameter edit and the pre-attached Slack credential persist
  to the workflow JSON.
- Later / partial apply: completing one card and clicking Later on the
  last step partial-applies — the completed card's edits stick, the
  untouched node stays untouched.

Supporting changes:

- `InstanceAiWorkflowSetup.vue`: data-test-ids for the step counter,
  applying spinner, listening callout, error banner, and the
  applied / partial / deferred submit states.
- `InstanceAiPage.ts`: page-object locators for every setup-card
  affordance used by the new specs.
- `workflow-api-helper.ts`: `getWorkflow(id)` helper to fetch a
  workflow via the REST API for persistence assertions.
- `fixtures.ts`: Slack `users.profile.get` success mock installed
  before each instance-ai test so the FE's background credential test
  passes during replay (existing recordings hit real Slack and
  returned `invalid_auth`).

https://linear.app/n8n/issue/INS-113
…-changelog)

Pins the contract between the confirmation payload and the saved
workflow JSON so a future change to `resumeData` handling or to the
`applyNodeChanges` merge logic is caught at the unit layer:

- `applyNodeChanges` — asserts that merged `nodeParameters` values
  survive into the saved workflow JSON (HTTP URL filled in via the
  apply path ends up on the persisted node).
- `workflows.tool` setup action — asserts that `resumeData.nodeParameters`
  is forwarded to `applyNodeChanges` unchanged on the apply path.
- `credGroupKey` — three new cases covering same-credential-type node
  grouping, HTTP Request distinct-URL splits, and credential-type
  isolation when node types differ.
@aalises aalises marked this pull request as ready for review April 22, 2026 14:34
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 22, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 22, 2026

Performance Comparison

Comparing currentlatest master14-day baseline

Memory consumption baseline with starter plan resources

Metric Current Latest Master Baseline (avg) vs Master vs Baseline Status
memory-heap-used-baseline 114.74 MB 114.27 MB 114.47 MB (σ 0.24) +0.4% +0.2% ⚠️
memory-rss-baseline 276.90 MB 348.40 MB 289.80 MB (σ 40.90) -20.5% -4.5%

docker-stats

Metric Current Latest Master Baseline (avg) vs Master vs Baseline Status
docker-image-size-runners 388.00 MB 386.00 MB 392.13 MB (σ 11.18) +0.5% -1.1%
docker-image-size-n8n 1269.76 MB 1269.76 MB 1273.60 MB (σ 10.49) +0.0% -0.3%

Idle baseline with Instance AI module loaded

Metric Current Latest Master Baseline (avg) vs Master vs Baseline Status
instance-ai-rss-baseline 386.15 MB 392.12 MB 368.35 MB (σ 22.82) -1.5% +4.8%
instance-ai-heap-used-baseline 187.13 MB 186.50 MB 186.43 MB (σ 0.25) +0.3% +0.4% 🔴
How to read this table
  • Current: This PR's value (or latest master if PR perf tests haven't run)
  • Latest Master: Most recent nightly master measurement
  • Baseline: Rolling 14-day average from master
  • vs Master: PR impact (current vs latest master)
  • vs Baseline: Drift from baseline (current vs rolling avg)
  • Status: ✅ within 1σ | ⚠️ 1-2σ | 🔴 >2σ regression

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 14 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/testing/playwright/tests/e2e/instance-ai/instance-ai-workflow-setup.spec.ts">

<violation number="1" location="packages/testing/playwright/tests/e2e/instance-ai/instance-ai-workflow-setup.spec.ts:74">
P2: According to linked Linear issue INS-113, confirm mode should be seeded with one auto-applied valid credential. This test file creates a Slack credential in both tests, but the reset endpoint only clears workflows/threads, so the first credential persists into the second test and can make confirm-mode auto-apply non-deterministic.</violation>
</file>
Architecture diagram
sequenceDiagram
    participant Test as Playwright / User
    participant FE as Frontend (Vue/Pinia)
    participant BE as Backend (Tool Executor)
    participant LLM as Orchestrator LLM
    participant Mock as MockServer (Slack)
    participant DB as Workflow Service / DB

    Note over Test,DB: Workflow Setup Initiation
    Test->>FE: Send "Set up workflow" message
    FE->>BE: POST /instance-ai/messages
    BE->>LLM: Process request
    LLM-->>BE: tool_call: workflows(action: 'setup')
    BE->>DB: getAsWorkflowJSON()
    BE->>BE: analyzeWorkflow() (Identify missing params/creds)
    BE-->>FE: Return Setup Card UI metadata

    Note over Test,DB: Configuration Interaction
    alt User Edits Parameters
        Test->>FE: Fill parameter (e.g., HTTP URL)
        FE->>FE: CHANGED: Debounced (200ms) sync to paramValues
    else Credential Validation
        FE->>BE: POST /credentials/test
        BE->>Mock: NEW: Slack users.profile.get mock (E2E fixture)
        Mock-->>FE: Credential valid
    end

    Note over Test,DB: Apply / Persistence Flow
    alt Action: Apply (Full or Partial)
        Test->>FE: Click "Apply"
        FE->>FE: NEW: Mount applying-spinner (isApplying = true)
        FE->>BE: POST /instance-ai/confirm (resumeData with nodeParameters)
        
        Note over BE: NEW: resumeData.nodeParameters forwarded to tool
        BE->>BE: CHANGED: applyNodeChanges() merges edits into JSON
        BE->>DB: updateFromWorkflowJSON() (Persist to DB)
        
        BE-->>FE: SSE Tool Result Stream
        FE->>FE: NEW: Unmount spinner only after SSE result
    else Action: Later (Defer)
        Test->>FE: Click "Later"
        FE->>BE: POST /instance-ai/confirm (action: 'defer')
        BE-->>FE: SSE Tool Result Stream
        Note over FE,DB: Workflow remains unchanged in DB
    end

    Note over Test,DB: Verification
    FE->>DB: NEW: Refresh workflow via GET
    DB-->>FE: Updated Workflow JSON
    FE->>Test: Render success / deferred state
Loading

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

…hangelog)

The instance-ai reset endpoint wipes threads and workflows between tests
but leaves credentials in place. Both B2 tests were creating a Slack
credential with the same name, so by the second test two matching
credentials existed and confirm mode's "single valid credential auto-
applies" precondition was no longer guaranteed.
@n8n-assistant n8n-assistant Bot added the n8n team Authored by the n8n team label Apr 22, 2026
@aalises aalises requested a review from scdekov April 22, 2026 15:25
@github-actions
Copy link
Copy Markdown
Contributor

Instance AI Workflow Eval Results

8/8 built | 5 run(s) | pass@5: 70% | pass^5: 16%

Workflow Build pass@5 pass^5
Create a workflow that handles contact form submissions via a webhook. 5/5 60% 19%
Get all the Linear issues created in the last 2 weeks. Filter them for 5/5 40% 1%
Every day, get the posts made in the past day on 3 different Slack cha 4/5 60% 8%
Create a form that collects: name, email, company, and interest level 5/5 100% 100%
Every day, fetch all open GitHub issues from repository 'acme-corp/bac 5/5 50% 0%
Create a workflow that receives webhook notifications with a JSON body 5/5 100% 7%
Fetch the latest posts from the JSONPlaceholder API (GET https://jsonp 5/5 100% 22%
Every hour, check the current weather for London, New York, and Tokyo 5/5 100% 1%
Failure details

Create a workflow that handles contact form submissions via a webhook. / happy-path — 4/5 passed

Run [builder_issue]: The workflow execution failed with 'Node "Log to Google Sheets": Could not get parameter'. The error occurs in the Google Sheets node during the appendOrUpdate operation. The node uses 'appendOrUpdate

Create a workflow that handles contact form submissions via a webhook. / missing-fields — 4/5 passed

Run [builder_issue]: The workflow crashed at the 'Log to Google Sheets' node with 'Could not get parameter', causing it to produce no output and preventing 'Respond to Submitter' from running. While the email was sent suc

Create a workflow that handles contact form submissions via a webhook. / partial-action-failure — 0/5 passed

Run [builder_issue]: The workflow crashed when the Telegram node failed. The connections show a strictly linear chain: Contact Form Webhook → Send Auto-Reply Email → Telegram Team Notification → Log to Google Sheets → Res
Run [builder_issue]: The Telegram node returned a 400 error ('Bad Request: chat not found') and this caused the entire workflow to crash. The workflow has no error handling (e.g., no 'Continue on Error' setting on the Tel
Run [builder_issue]: The workflow crashed entirely when the Telegram node returned a 400 error ('Bad Request: chat not found'). The error propagated as a workflow-level failure, stopping execution. As a result, 'Log to Go
Run [builder_issue]: The workflow crashed when the Telegram Notification node received the mocked error response (400 Bad Request: chat not found). There is no error handling configured on the Telegram node (no 'Continue
Run [builder_issue]: The workflow crashed entirely when the Telegram node failed. The connections show all three action nodes (Send Auto-Reply Email, Send Telegram Notification, Log to Google Sheets) are wired in parallel

Create a workflow that handles contact form submissions via a webhook. / empty-message — 4/5 passed

Run [builder_issue]: The workflow failed with 'Could not get parameter' error on the 'Log to Google Sheets' node, and the 'Respond to Submitter' node never ran. While the Send Auto-Reply Email and Telegram Team Notificati

Create a workflow that handles contact form submissions via a webhook. / invalid-email — 0/5 passed

Run [builder_issue]: The workflow crashes entirely when the Send Auto-Reply Email node encounters the invalid email 'not-an-email'. The node throws 'Invalid email address (item 0)' and the entire workflow stops. Telegram
Run [builder_issue]: The workflow crashed at 'Send Auto-Reply Email' with 'Invalid email address (item 0)' because the Gmail node received 'not-an-email' as the recipient. This caused the entire workflow to halt — 'Notify
Run [builder_issue]: The workflow crashed at the 'Send Auto-Reply Email' node with 'Invalid email address (item 0)' because the Gmail node received 'not-an-email' as the recipient. Since all three downstream nodes (Send A
Run [builder_issue]: The workflow crashed entirely when the Auto-Reply Email node threw 'Invalid email address (item 0)' because 'not-an-email' is not a valid email. This error propagated up and halted the entire workflow
Run [builder_issue]: The workflow crashed entirely when the Gmail node ('Send Auto-Reply Email') encountered the invalid email 'not-an-email'. The error 'Invalid email address (item 0)' was thrown and propagated as a work

Get all the Linear issues created in the last 2 weeks. Filter them for / happy-path — 0/5 passed

Run [builder_issue]: The workflow fails the checklist on multiple points. First, 'Collect Results', 'Format Slack Message', and 'Post to Slack' nodes did not run, so no result was posted to Slack. Second, the 'Filter, Agg
Run [mock_issue]: The workflow executed without errors and the Slack post succeeded. The cross-team filter correctly identified Alice's 3 Backend issues and Bob's 1 Frontend issue as cross-team, and correctly excluded
Run [builder_issue]: The workflow executed without runtime errors, but the cross-team filtering logic produced completely wrong results. The 'Filter and Count Cross-Team Issues' code node output {creators: [], total_cross
Run [builder_issue]: The workflow built is a completely different workflow from what the scenario describes. The checklist requires a workflow that: fetches issues from a data source, filters to the last 2 weeks, identifi
Run [builder_issue]: The workflow fails partway through execution. 'Filter Last 2 Weeks' executed but produced no output (empty output), causing all downstream nodes — 'Filter Cross-Team Issues', 'Count Per Creator', 'For

Get all the Linear issues created in the last 2 weeks. Filter them for / multi-team-creator — 0/5 passed

Run [builder_issue]: The 'Filter, Aggregate and Sort' code node produced no output (empty). The root cause is in the node's JS code: it checks issue.team && issue.team.name to determine cross-team status, but the Linear
Run [builder_issue]: The scenario requires that Alice's AI team issue (issue-003, FRONT-201) be excluded because AI is one of her teams. However, the Filter Cross-Team Issues node uses a hardcoded TEAM_MAPPING of `{'alice
Run [builder_issue]: The Filter and Count Cross-Team Issues code node produced an empty result (creators: [], total_cross_team: 0) due to multiple builder issues in the code:

  1. The TEAM_MAPPING maps each person to a sin

Run [builder_issue]: The workflow is a simple webhook-to-switch routing workflow that does not contain any nodes for fetching issues, filtering cross-team assignments, counting violations per reporter, or sorting the resu
Run [builder_issue]: The workflow did not complete execution. Only 3 nodes ran: Daily Schedule (pinned), Fetch Linear Issues (mocked), and Filter Last 2 Weeks (real). The Filter Last 2 Weeks node produced no output (empty

Get all the Linear issues created in the last 2 weeks. Filter them for / no-cross-team-issues — 3/5 passed

Run [builder_issue]: The workflow executed without runtime errors, but it does not implement the cross-team filtering logic described in the scenario at all. The workflow consists of only: a Webhook trigger → a Switch nod
Run [builder_issue]: The workflow execution stopped at the 'Filter Last 2 Weeks' node, which produced no output (empty result). The mock returned 4 issues with createdAt dates of 2024-06-01, 2024-06-03, 2024-06-05, and 20

Get all the Linear issues created in the last 2 weeks. Filter them for / unknown-creator — 2/5 passed

Run [builder_issue]: The workflow did not crash and Dave's unknown issues were correctly excluded (the code checks if (!creatorEmail || !(creatorEmail in TEAM_MAPPING)) continue and since the mock response contains no `
Run [builder_issue]: The workflow is severely underbuilt. It consists of only a webhook trigger, a Switch node that routes by alert level, and three downstream notification nodes (Teams, Slack, Gmail) — none of which are
Run [builder_issue]: The workflow did not complete execution. After 'Filter Last 2 Weeks' ran, it produced no output (empty output), which prevented 'Filter Cross-Team Issues' and all subsequent nodes (Count Per Creator,

Get all the Linear issues created in the last 2 weeks. Filter them for / api-error — 0/5 passed

Run [builder_issue]: The workflow crashed with an unhandled error when the Linear node received a 401 authentication error. The error propagated as 'Authentication required. Invalid or missing API key.' and terminated the
Run [builder_issue]: The workflow does not handle the API error gracefully. When the Linear API returns an authentication error (errors array, data: null), the mock response is passed as output from the HTTP node. The Fil
Run [builder_issue]: The workflow has no error handling for the Linear API authentication error. When 'Fetch Linear Issues' received the 401 authentication error mock response, the workflow crashed with an unhandled error
Run [builder_issue]: The scenario tests how the workflow handles a Linear API authentication error. However, the workflow structure contains no Linear node at all — it consists only of a Webhook trigger, a Switch node (Ro
Run [builder_issue]: The workflow crashed with an unhandled authentication error from the Linear node. The error 'Authentication required: Invalid or expired API key' propagated as a workflow-level failure with no error h

Every day, get the posts made in the past day on 3 different Slack cha / happy-path — 4/5 passed

Run: Build failed — scenario not executed

Every day, get the posts made in the past day on 3 different Slack cha / empty-channel — 3/5 passed

Run [builder_issue]: The workflow executed end-to-end without crashing, and the empty #product channel was handled gracefully (merge completed with partial data, no errors). However, there is a critical data flow problem:
Run: Build failed — scenario not executed

Every day, get the posts made in the past day on 3 different Slack cha / high-volume — 2/5 passed

Run: Error: The operation was aborted due to timeout
Run: Build failed — scenario not executed
Run [builder_issue]: The workflow executed without crashing and all nodes ran successfully. The merge node correctly combined all 13 messages from 3 channels (4 from #general, 5 from #engineering, 4 from #product). The Gr

Every day, get the posts made in the past day on 3 different Slack cha / channel-not-found — 0/5 passed

Run [builder_issue]: The workflow crashed entirely when 'Get #product Messages' returned a channel_not_found error. There is no error handling configured — no 'Continue on Error' setting, no try/catch, no error branch, an
Run [builder_issue]: The workflow crashed entirely when Fetch #product returned a 404 error. The error propagated as 'Request failed with status code 404' and halted execution, causing Merge All Channels, Aggregate Messag
Run: Build failed — scenario not executed
Run [builder_issue]: The workflow crashed entirely when 'Get #product History' returned a channel_not_found error. The error propagated as a workflow-level failure ('Workflow error: Slack error response: "channel_not_foun
Run [builder_issue]: The workflow crashed entirely when 'Get #product Messages' received a 400 error response (channel_not_found). Because there is no error handling configured on that node (no 'Continue on Error' setting

Every day, get the posts made in the past day on 3 different Slack cha / insufficient-permissions — 0/5 passed

Run [builder_issue]: The workflow crashes entirely when 'Get #product Messages' returns a 'not_in_channel' error. The error propagates and halts the entire workflow execution — 'Merge Channel Messages', 'Aggregate Message
Run [builder_issue]: The workflow crashed when 'Fetch #product' received a 403 error (mock returned {ok: false, error: 'not_in_channel'}). There is no error handling configured on the 'Fetch #product' node (no 'Continue o
Run: Build failed — scenario not executed
Run [builder_issue]: The workflow crashes when Get #product History returns a 'not_in_channel' error. The error propagates and halts the entire workflow — Merge All Messages, Aggregate Messages, and Post to #daily-digest
Run [builder_issue]: The workflow crashed entirely when 'Get #product Messages' received a 403 error. There is no error handling configured on that node (no 'Continue on Error' setting, no try/catch branch, no fallback pa

Every day, fetch all open GitHub issues from repository 'acme-corp/bac / happy-path — 0/5 passed

Run [builder_issue]: The workflow failed to execute due to a misconfigured 'Split Issues' node. The 'fieldToSplitOut' parameter is empty (required field missing), causing n8n to reject execution entirely. As a result, 'Fe
Run [builder_issue]: The workflow has a critical data flow issue. The Fetch GitHub Bug Issues node returned a Buffer (raw binary data) instead of parsed JSON items. The output shows {"type": "Buffer", "data": [...]} rat
Run [builder_issue]: The workflow failed to execute due to a misconfigured 'Split Issues' node. The 'fieldToSplitOut' parameter is empty (required field missing), causing the execution to fail with 'The workflow has issue
Run [builder_issue]: The workflow did not complete successfully. The 'Create Notion Page' node never ran. The root cause is that the 'Fetch GitHub Bug Issues' HTTP node returned the response as a raw Buffer (binary data)
Run [builder_issue]: The workflow failed to execute. The 'Split Issues' node has a misconfigured 'fieldToSplitOut' parameter — it is empty string when it requires a valid field name (e.g., the array field returned by the

Every day, fetch all open GitHub issues from repository 'acme-corp/bac / no-bugs — 1/5 passed

Run [builder_issue]: The workflow failed to execute cleanly. The 'Split Issues' node has a misconfigured 'fieldToSplitOut' parameter (empty string), which caused n8n to reject execution entirely with: 'The workflow has is
Run [builder_issue]: The workflow did not handle the empty result cleanly. The GitHub API returned an empty array [], but the Fetch GitHub Bug Issues node output a Buffer object ({type:'Buffer',data:[91,93]}) instead of a
Run [builder_issue]: The workflow failed to execute cleanly. The 'Split Issues' node has a misconfigured 'fieldToSplitOut' parameter (empty string), which caused the execution to fail with 'The workflow has issues and can
Run [builder_issue]: The workflow failed to execute cleanly. The 'Split Issues' node has a misconfigured 'fieldToSplitOut' parameter (empty string), which caused an execution failure: 'The workflow has issues and cannot b

Create a workflow that receives webhook notifications with a JSON body / high-priority — 3/5 passed

Run [builder_issue]: The Switch node ('Route by Level') correctly matched the 'high' level condition and output the data on its first (high) output. However, the connections JSON shows that 'Route by Level' has an empty '
Run [builder_issue]: The Route by Level switch node correctly matched 'high' and produced output on its first (high) branch. However, the connections JSON shows that 'Route by Level' has "main": [] — meaning its output

Create a workflow that receives webhook notifications with a JSON body / medium-priority — 3/5 passed

Run [builder_issue]: The Switch node ('Route by Level') correctly identified the 'medium' level and output data on its medium output. However, the connections JSON shows 'Route by Level' has an empty 'main' array — none o
Run [builder_issue]: The Switch node ('Route by Level') correctly matched the 'medium' level and produced output on its medium branch. However, the connections JSON shows 'Route by Level' has an empty 'main' array — meani

Create a workflow that receives webhook notifications with a JSON body / low-priority — 3/5 passed

Run [builder_issue]: The Send Gmail node did not run. While the Route by Level Switch node correctly matched 'low' on its third output, the connections JSON shows that 'Route by Level' has an empty 'main' array: `"main":
Run [builder_issue]: The Switch node ('Route by Level') correctly routed the low-priority notification to its third output (index 2, 'low'), but the Send Gmail node never executed. The connections JSON shows that 'Route b

Fetch the latest posts from the JSONPlaceholder API (GET https://jsonp / happy-path — 4/5 passed

Run [builder_issue]: The workflow executed without errors and the Slack message was posted to #api-digest. However, there is a problem with the Filter node's output. The Filter node (which filters out titles containing 'q

Fetch the latest posts from the JSONPlaceholder API (GET https://jsonp / empty-response — 4/5 passed

Run [:]: The Fetch Posts node received an empty array [] as the mock response and produced no output items. As a result, the Filter and Summarize node and Post to Slack node did not run. The workflow stopped s

Fetch the latest posts from the JSONPlaceholder API (GET https://jsonp / all-filtered — 2/5 passed

Run [builder_issue]: The Filter Out qui Titles node was configured to keep items whose titles do NOT contain 'qui', but its output shows all 3 items still passing through — all of which contain 'qui' in their titles. Exam
Run [builder_issue]: The Filter Out qui Titles node is configured to filter OUT items whose titles contain 'qui' (using 'notContains' operator), but its output shows all 3 items still passing through — including 'qui est
Run [builder_issue]: The checklist requires that when all items are filtered out, the workflow does NOT send an empty message to Slack. However, the execution trace shows that the Filter and Summarize node produced {filte

Every hour, check the current weather for London, New York, and Tokyo / happy-path — 2/5 passed

Run [mock_issue]: Multiple criteria fail:

  1. New York weather API call did not succeed: The 'Get New York Weather' node received a mock generation failure (_evalMockError: true), meaning its response contained n

Run [builder_issue]: The workflow failed to execute properly. The pre-analysis flags two builder issues: both 'Log to Airtable (Alert)' and 'Log to Airtable (No Alert)' have an invalid Airtable Table ID — the table value
Run [builder_issue]: The workflow failed to execute. The 'Log to Airtable' node has a builder configuration issue: the table ID value is set to 'Weather Logs' (a display name string) instead of a valid Airtable Table ID (

Every hour, check the current weather for London, New York, and Tokyo / no-alerts — 2/5 passed

Run [mock_issue]: The workflow executed without errors and no Telegram alert was sent (all isHot values are false, Build Alert Message and Send Telegram Alert did not run, No Hot Cities node executed instead). However,
Run [builder_issue]: The workflow execution failed with 'The workflow has issues and cannot be executed for that reason.' Both Airtable nodes ('Log to Airtable (Alert)' and 'Log to Airtable (No Alert)') have a builder iss
Run [builder_issue]: The workflow failed to execute due to a builder misconfiguration. The 'Log to Airtable' node has an invalid Airtable Table ID — the value 'Weather Logs' is a human-readable name, not a valid Airtable

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

Labels

n8n team Authored by the n8n team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant