Documented failure modes with root cause and the fix that worked. This is the evidence base the rest of the wiki (and, eventually, the repair engine and the self-improvement loop) is built on.
A failure case is not the same as a bug report. It captures:
- what was observed
- what the actual root cause turned out to be (often different from the first guess)
- the fix that resolved it
- the pattern or rule that would have prevented it
Good failure cases turn into repair rules and shape the patterns library.
## <Short name>
- **Framework:** n8n / Dify / ...
- **First observed:** YYYY-MM-DD
- **Symptom:** what the user saw
- **Root cause:** what it actually was
- **Fix:** what resolved it
- **Generalises to:** pattern / repair-rule references- Framework: n8n
- First observed: 2024-08-12 (illustrative; reconstructed from a common community report)
- Symptom: Stripe
payment_intent.succeededevents occasionally produced two orders in the downstream system. - Root cause: the workflow only responded
200to Stripe after the order-creation HTTP call returned. Slow runs (>10s) triggered Stripe's retry, which arrived before the first run finished. Both runs created an order because there was no idempotency check. - Fix: added the idempotent webhook ingress pattern keyed on Stripe's
event.id, and moved theRespond to Webhooknode to the start of the side-effecting branch (immediate200). - Generalises to:
n8n-webhook-missing-response, idempotent webhook pattern.
- Framework: n8n
- First observed: 2024-11-03 (illustrative)
- Symptom: scheduled workflow stopped producing new runs. Queue was empty but executor was at 100% slot usage.
- Root cause: one of the upstream APIs started accepting connections but never responding. The HTTP node had no timeout set, so every scheduled run accumulated and held a worker slot indefinitely.
- Fix: set
options.timeout: 30000on the HTTP node and wrapped the call with bounded retry. - Generalises to:
n8n-http-missing-timeout.
- Framework: n8n + OpenAI / Anthropic
- First observed: 2025-02-09 (illustrative)
- Symptom: downstream Postgres insert failed intermittently with
column "category" is null. - Root cause: the LLM was asked to return JSON with a
categoryfield. About 1% of the time it returned valid JSON without that field. The workflow trusted the parse and forwarded the dict as-is. - Fix: added a JSON-schema validation step between the LLM and the database write. Invalid outputs route to a "needs review" branch instead of failing the workflow.
- Generalises to: validate the shape of LLM output, not just whether parsing succeeded.
These cases are illustrative. They are based on common patterns in the n8n community but are not tied to specific user incidents. Real cases gathered from the audit and validation pipeline will be added with concrete workflow references over time.