Fragile expression — likely to fail when production data shape differs from test data — These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.
AI agent has no iteration limit — In production, agents can enter loops — repeatedly calling a tool that returns ambiguous results. Without an iteration cap, a single execution can generate hundreds of tool calls, causing unpredictable cost spikes and potentially triggering rate limits on connected APIs.
Side-effect node has no audit trail — If this action is disputed, replayed, or causes a data inconsistency, there is no structured record of what was sent, when, and with what data. Debugging requires cross-referencing n8n execution history with the external system's own logs.
| Check | Description | Status |
|---|---|---|
| Failure Alerting | Failures silent — only visible in execution log | Missing |
| Retry on Failure | Transient failures cause permanent stops | Present |
| Request Timeouts | Slow providers can block execution indefinitely 1 / 4 external nodes have timeout | Partial |
| Duplicate Prevention | Retry on write events creates duplicate records | Missing |
| Empty Response Handling | Zero-result lookups break downstream logic | Present |
| AI Output Limits | Output cost and parsing risk unbounded | Present |
| AI Output Format | Free-form output will break downstream parsers | Present |
| Activity Logging | Side effects unlogged | Missing |
| Write Deduplication | Webhook replays may create duplicate records | Present |
Run this analysis on your own workflows
- Send to Discord
These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.
- In `content`, change {{ $('Preparing CHANGELOG.md').item.json.markdown }} to {{ $('Preparing CHANGELOG?.md')?.item?.json?.markdown }}.
- Send to Gmail
These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.
- In `message`, change {{ $('Preparing CHANGELOG.md').item.json.markdown }} to {{ $('Preparing CHANGELOG?.md')?.item?.json?.markdown }}.
- GitHub Assistant
- llama-3.1-8b
- Send to Gmail
A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.
Set a timeout under the node's Additional Options. A value of 10,000–30,000 ms (10–30 seconds) is a reasonable starting point for most APIs; adjust based on the provider's documented SLA.
- Organize Data
- GitHub Assistant
- llama-3.1-8b
Operators cannot tell from external signals that a run failed. Silent failures go undetected until a downstream system shows missing data or a user reports a problem.
Connect a dedicated Error Workflow in workflow settings, or add a per-node onError: "continueErrorOutput" path that sends an alert via Slack, email, or a logging service.
- Send to Discord
- Send to Gmail
If this action is disputed, replayed, or causes a data inconsistency, there is no structured record of what was sent, when, and with what data. Debugging requires cross-referencing n8n execution history with the external system's own logs.
After the write node, add a step that records the key fields of the action to a log — a Google Sheet row append, a database insert to an audit table, or a Slack message to a dedicated ops channel. Include: timestamp, action type, affected ID, and result.
- GitHub Assistant
In production, agents can enter loops — repeatedly calling a tool that returns ambiguous results. Without an iteration cap, a single execution can generate hundreds of tool calls, causing unpredictable cost spikes and potentially triggering rate limits on connected APIs.
Set maxIterations to 10–20 for most agentic tasks. Monitor actual iteration counts in execution history and adjust up if legitimate tasks are being cut short.
- GitHub Assistant
These expressions work reliably against test data where all fields are present. In production, fields may be absent, null, or differently typed — causing a runtime error or silent null propagation at the point of the expression.
- In `text`, change {{ "Process these raw commits into the required tool format:\n" + JSON.stringify($json.commits) }} to {{ "Process these raw commits into the required tool format:\n" + JSON.stringify($json?.commits) }}.
Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.
- GitHub Assistant
no max iterations set
Set maxIterations to 10–20 for most agentic tasks. Monitor actual iteration counts in execution history and adjust up if legitimate tasks are being cut short.
| # | Issue title | Issue description | Affected nodes | |||
|---|---|---|---|---|---|---|
| 1 | Reliability | External call with no timeout configured | Node "GitHub Assistant" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive. | GitHub Assistant, llama-3.1-8b, Send to Gmail | High | 90% |
| 2 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Send to Discord" contains expression(s) with risky patterns that assume fields are always present. | Send to Discord | High | 85% |
| 3 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Send to Gmail" contains expression(s) with risky patterns that assume fields are always present. | Send to Gmail | High | 85% |
| 4 | Reliability | No error handler or failure notification path | Workflow has 8 high-risk nodes (external calls or writes) with no configured error workflow and no inline notification path. If a production execution fails, the failure only appears in execution history. | Organize Data, GitHub Assistant, llama-3.1-8b, Output Parser, Putting Data in Table, Preparing CHANGELOG.md, Send to Discord, Send to Gmail | High | 85% |
| 5 | Cost Risk | AI agent has no iteration limit | Agent node "GitHub Assistant" has no | GitHub Assistant | Medium | 85% |
| 6 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "GitHub Assistant" contains expression(s) with risky patterns that assume fields are always present. | GitHub Assistant | Medium | 75% |
| 7 | Observability | Side-effect node has no audit trail | Node "Send to Discord" performs a write node: "send to discord" (sideeffect: external_write) operation with no logging or audit trail detected downstream. | Send to Discord | Medium | 70% |
| 8 | Observability | Side-effect node has no audit trail | Node "Send to Gmail" performs a write node: "send to gmail" (sideeffect: external_write) operation with no logging or audit trail detected downstream. | Send to Gmail | Medium | 70% |
| 9 | Reliability | Finding: external without retry | Node "GitHub Assistant" (@n8n/n8n-nodes-langchain.agent) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_agent. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures. | GitHub Assistant | Info | 70% |
| 10 | Reliability | Finding: external without retry | Node "llama-3.1-8b" (@n8n/n8n-nodes-langchain.lmChatGroq) is a read-only external call with no retry configured.. sideEffect: read_only, role: ai_model_call. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures. | llama-3.1-8b | Info | 70% |