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 | Missing |
| Duplicate Prevention | Retry on write events creates duplicate records 5 of 7 write nodes guarded | Partial |
| 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 1 of 2 AI nodes lack structured output | Partial |
| Activity Logging | Side effects unlogged | Missing |
| Write Deduplication | Webhook replays may create duplicate records | Present |
Run this analysis on your own workflows
- Is Carousel?
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 `conditions.conditions[0].leftValue`, change {{ $('Take Todays Post1').item.json.type }} to {{ $('Take Todays Post1')?.item?.json?.type }}.
- IG Create Item1
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 `headerParameters.parameters[0].value`, change {{ $('Config2').item.json.igToken }} to {{ $('Config2')?.item?.json?.igToken }}.
- IG Create Carousel1
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 `headerParameters.parameters[0].value`, change {{ $('Config2').item.json.igToken }} to {{ $('Config2')?.item?.json?.igToken }}.
- IG Publish (carousel)1
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 `headerParameters.parameters[0].value`, change {{ $('Config2').item.json.igToken }} to {{ $('Config2')?.item?.json?.igToken }}.
- IG Create (single)1
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 `headerParameters.parameters[0].value`, change {{ $('Config2').item.json.igToken }} to {{ $('Config2')?.item?.json?.igToken }}.
- IG Publish (single)1
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 `headerParameters.parameters[0].value`, change {{ $('Config2').item.json.igToken }} to {{ $('Config2')?.item?.json?.igToken }}.
- Mark Posted1
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 `columns.value.id`, change {{ $('Take Todays Post1').item.json.id }} to {{ $('Take Todays Post1')?.item?.json?.id }}.
- In `columns.value.media_id`, change {{ $json.id }} to {{ $json?.id }}.
- Generate Drafts (LLM)
- Google Gemini Chat Model
- Render via HCTI
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.
- Generate Drafts (LLM)
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 {{ $('Config').item.json.prompt }} to {{ $('Config')?.item?.json?.prompt }}.
- Config
- Generate Drafts (LLM)
- Parse to Rows
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.
Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.
- Generate Drafts (LLM)
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 "Generate Drafts (LLM)" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive. | Generate Drafts (LLM), Google Gemini Chat Model, Render via HCTI, IG Create Item1, IG Create Carousel1, IG Publish (carousel)1, IG Create (single)1, IG Publish (single)1, Mark Posted1 | High | 90% |
| 2 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Generate Drafts (LLM)" contains expression(s) with risky patterns that assume fields are always present. | Generate Drafts (LLM) | High | 85% |
| 3 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Is Carousel?" contains expression(s) with risky patterns that assume fields are always present. | Is Carousel? | High | 85% |
| 4 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "IG Create Item1" contains expression(s) with risky patterns that assume fields are always present. | IG Create Item1 | High | 85% |
| 5 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "IG Create Carousel1" contains expression(s) with risky patterns that assume fields are always present. | IG Create Carousel1 | High | 85% |
| 6 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "IG Publish (carousel)1" contains expression(s) with risky patterns that assume fields are always present. | IG Publish (carousel)1 | High | 85% |
| 7 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "IG Create (single)1" contains expression(s) with risky patterns that assume fields are always present. | IG Create (single)1 | High | 85% |
| 8 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "IG Publish (single)1" contains expression(s) with risky patterns that assume fields are always present. | IG Publish (single)1 | High | 85% |
| 9 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Mark Posted1" contains expression(s) with risky patterns that assume fields are always present. | Mark Posted1 | High | 85% |
| 10 | Reliability | No error handler or failure notification path | Workflow has 16 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. | Config, Generate Drafts (LLM), Parse to Rows, Google Gemini Chat Model, Build Slides (picker), Build Single (picker), Render Template, Render via HCTI, Config2, IG Create Item1, Collect Item IDs1, IG Create Carousel1, IG Publish (carousel)1, IG Create (single)1, IG Publish (single)1, Mark Posted1 | High | 85% |
| 11 | Cost Risk | AI agent has no iteration limit | Agent node "Generate Drafts (LLM)" has no | Generate Drafts (LLM) | Medium | 85% |
| 12 | Reliability | AI output drives downstream logic without a structured format | Node "Generate Drafts (LLM)" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured. | Generate Drafts (LLM) | Medium | 75% |
| 13 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Render via HCTI" contains expression(s) with risky patterns that assume fields are always present. | Render via HCTI | Medium | 75% |
| 14 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Carousel?1" contains expression(s) with risky patterns that assume fields are always present. | Carousel?1 | Medium | 75% |
| 15 | Reliability | Irreversible write chain with no compensation path | Nodes Render via HCTI, IG Create Item1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | Render via HCTI, IG Create Item1 | Medium | 75% |
| 16 | Reliability | Irreversible write chain with no compensation path | Nodes IG Create Item1, IG Create Carousel1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | IG Create Item1, IG Create Carousel1 | Medium | 75% |
| 17 | Reliability | Irreversible write chain with no compensation path | Nodes IG Create Carousel1, IG Publish (carousel)1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | IG Create Carousel1, IG Publish (carousel)1 | Medium | 75% |
| 18 | Reliability | Irreversible write chain with no compensation path | Nodes IG Publish (carousel)1, Mark Posted1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | IG Publish (carousel)1, Mark Posted1 | Medium | 75% |
| 19 | Reliability | Irreversible write chain with no compensation path | Nodes Render via HCTI, IG Create (single)1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | Render via HCTI, IG Create (single)1 | Medium | 75% |
| 20 | Reliability | Irreversible write chain with no compensation path | Nodes IG Create (single)1, IG Publish (single)1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | IG Create (single)1, IG Publish (single)1 | Medium | 75% |
| 21 | Reliability | Irreversible write chain with no compensation path | Nodes IG Publish (single)1, Mark Posted1 perform irreversible side effects in sequence with no rollback, cancellation, or compensation path between them. A failure after the first write leaves external systems partially updated. | IG Publish (single)1, Mark Posted1 | Medium | 75% |
| 22 | Reliability | Sequential external chain with no timeouts — cascade hang risk | Nodes IG Create Item1, IG Create Carousel1, IG Publish (carousel)1 form a sequential chain of 3 external calls with no timeout configured on any node. | IG Create Item1, IG Create Carousel1, IG Publish (carousel)1 | Medium | 80% |
| 23 | Observability | Side-effect node has no audit trail | Node "Render via HCTI" performs a write node: "render via hcti" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream. | Render via HCTI | Medium | 70% |
| 24 | Observability | Side-effect node has no audit trail | Node "IG Create Item1" performs a write node: "ig create item1" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream. | IG Create Item1 | Medium | 70% |
| 25 | Observability | Side-effect node has no audit trail | Node "IG Create Carousel1" performs a write node: "ig create carousel1" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream. | IG Create Carousel1 | Medium | 70% |
| 26 | Observability | Side-effect node has no audit trail | Node "IG Publish (carousel)1" performs a write node: "ig publish (carousel)1" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream. | IG Publish (carousel)1 | Medium | 70% |
| 27 | Observability | Side-effect node has no audit trail | Node "IG Create (single)1" performs a write node: "ig create (single)1" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream. | IG Create (single)1 | Medium | 70% |
| 28 | Observability | Side-effect node has no audit trail | Node "IG Publish (single)1" performs a write node: "ig publish (single)1" (sideeffect: unknown_write) operation with no logging or audit trail detected downstream. | IG Publish (single)1 | Medium | 70% |
| 29 | Observability | Side-effect node has no audit trail | Node "Mark Posted1" performs a write node: "mark posted1" (sideeffect: external_write) operation with no logging or audit trail detected downstream. | Mark Posted1 | Medium | 70% |
| 30 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Save Drafts to Sheet" contains expression(s) with risky patterns that assume fields are always present. | Save Drafts to Sheet | Low | 75% |
| 31 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Only Approved1" contains expression(s) with risky patterns that assume fields are always present. | Only Approved1 | Low | 75% |
| 32 | Reliability | Finding: external without retry | Node "Generate Drafts (LLM)" (@n8n/n8n-nodes-langchain.chainLlm) 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. | Generate Drafts (LLM) | Info | 70% |
| 33 | Reliability | Finding: external without retry | Node "Google Gemini Chat Model" (@n8n/n8n-nodes-langchain.lmChatGoogleGemini) 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. | Google Gemini Chat Model | Info | 70% |