Bug Reproduction Framework
Given a Linear ticket context ($ARGUMENTS), systematically reproduce the bug
with a failing regression test.
Step 1: Parse Signals
Extract the following from the provided ticket context:
Error message / stack trace
(if provided)
Reproduction steps
(if provided)
Workflow JSON
(if attached)
Affected area
(node, execution engine, editor, API, config, etc.)
Version where it broke / last working version
Step 2: Route to Test Strategy
Based on the affected area, pick the test layer and pattern:
Area
Test Layer
Pattern
Key Location
Node operation
Jest unit
NodeTestHarness + nock
packages/nodes-base/nodes//test/
Node credential
Jest unit
jest-mock-extended
packages/nodes-base/nodes//test/
Trigger webhook
Jest unit
mock IHookFunctions + jest.mock GenericFunctions
packages/nodes-base/nodes//test/
Binary data
Jest unit
NodeTestHarness assertBinaryData
packages/core/nodes-testing/
Execution engine
Jest integration
WorkflowRunner + DI container
packages/cli/src/tests/
CLI / API
Jest integration
setupTestServer + supertest
packages/cli/test/integration/
Config
Jest unit
GlobalConfig + Container
packages/@n8n/config/src/tests/
Editor UI
Vitest
Vue Test Utils + Pinia
packages/frontend/editor-ui/src/*/tests/
E2E / Canvas
Playwright
Test containers + composables
packages/testing/playwright/
Step 3: Locate Source Files
Find the source code for the affected area:
Search for the node/service/component mentioned in the ticket
Find the GenericFunctions file (common bug location for nodes)
Check for existing test files in the same area
Look at recent git history on affected files (
git log --oneline -10 --
)
Step 4: Trace the Code Path
Read the source code and trace the execution path that triggers the bug:
Follow the call chain from entry point to the failure
Identify the specific line(s) where the bug manifests
Note any error handling (or lack thereof) around the bug
Step 5: Form Hypothesis
State a clear, testable hypothesis:
"When [input/condition], the code does [wrong thing] because [root cause]"
Identify the exact line(s) that need to change
Predict what the test output will show
Step 6: Find Test Patterns
Look for existing tests in the same area:
Check
test/
directories near the affected code
Identify which mock/setup patterns they use
Use the same patterns for consistency
If no tests exist, find the closest similar node/service tests as a template
Step 7: Write Failing Test
Write a regression test that:
Uses the patterns found in Step 6
Targets the specific hypothesis from Step 5
Includes a comment referencing the ticket ID
Asserts the CORRECT behavior (test will fail on current code)
Also includes a "happy path" test to prove the setup works
Step 8: Run and Score
Run the test from the package directory (e.g.,
cd packages/nodes-base && pnpm test
).
Classify the result:
Confidence
Criteria
Output
CONFIRMED
Test fails consistently, failure matches hypothesis
Reproduction Report
LIKELY
Test fails but failure mode differs slightly
Report + caveat
UNCONFIRMED
Cannot trigger the failure
Report: what was tried
SKIPPED
Hit a hard bailout trigger
Report: why skipped
ALREADY_FIXED
Bug no longer reproduces on current code
Report: when fixed
Step 9: Iterate or Bail
If UNCONFIRMED after first attempt:
Revisit hypothesis — re-read the code path
Try a different test approach or layer
Maximum 3 attempts before declaring UNCONFIRMED
Hard bailout triggers
(stop immediately):
Requires real third-party API credentials
Race condition / timing-dependent
Requires specific cloud/enterprise infrastructure
Requires manual UI interaction that can't be scripted
Output: Reproduction Report
Present findings in this format:
Ticket:
[ID] — [title]
Confidence:
[CONFIRMED | LIKELY | UNCONFIRMED | SKIPPED | ALREADY_FIXED]
Root Cause
[1-2 sentences explaining the bug mechanism]
Location
File
Lines
Issue
path/to/file.ts
XX-YY
Description of the problem
Failing Test
path/to/test/file.test.ts
— X/Y tests fail:
test name
— [failure description]
Fix Hint
[Pseudocode or description of the fix approach]
Important
DO NOT fix the bug
— only reproduce it with a failing test
Leave test files in place
as evidence (don't commit unless asked)
Run tests from the package directory
(e.g.,
pushd packages/nodes-base && pnpm test && popd
)
Always redirect build output
:
pnpm build > build.log 2>&1
DO NOT look at existing fix PRs
— the goal is to reproduce from signals alone