External call with no timeout configured — A single slow external call can block the entire workflow execution. At high trigger frequency, accumulated stuck executions can exhaust the n8n execution queue.
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.
| 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 | N/A |
| Empty Response Handling | Zero-result lookups break downstream logic | Missing |
| AI Output Limits | Output cost and parsing risk unbounded | Present |
| AI Output Format | Free-form output will break downstream parsers 1 of 4 AI nodes lack structured output | Partial |
| Activity Logging | Side effects unlogged | N/A |
| Write Deduplication | Webhook replays may create duplicate records | N/A |
Run this analysis on your own workflows
- Fetch Transcript
- AI Agent
- Anthropic Sonnet 4.5
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.
- Fetch Transcript
- Build Prompt
- Build Markdown
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.
- Fetch Transcript
- Build Prompt
The workflow works reliably with test data where lookups always return results. In production, when the lookup returns zero results, the expression throws a runtime error or propagates null/undefined through the rest of the workflow — silently, with no clear error message pointing to the cause.
Add an IF node immediately after "Fetch Transcript" to branch on whether results exist (e.g., {{ $json.length > 0 }}). Route the empty case to an explicit exit, log, or notification.
- AI Agent
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.
- Fetch Transcript
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 `queryParameters.parameters[0].value`, change {{ $json['YouTube URL'] }} to {{ $json['YouTube URL'] ?? '' }}.
- Save to Google Drive
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 {{ $json.markdown }} to {{ $json?.markdown }}.
- In `name`, change {{ $json.filename }} to {{ $json?.filename }}.
- Done
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 `completionMessage`, change {{ $json.name }} to {{ $json?.name }}.
- AI Agent
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 {{ $json.userPrompt }} to {{ $json?.userPrompt }}.
- In `options.systemMessage`, change {{ $json.system }} to {{ $json?.system }}.
- AI Agent
Free-form text output varies between invocations. The downstream node assumes a specific format to parse or act on. When the model produces a slightly different structure — different key names, trailing text, markdown formatting — the downstream logic fails intermittently in ways that are hard to debug.
Enable JSON mode (responseFormat: "json") on the AI node or connect an Output Parser sub-node with a defined schema. This forces the model to produce output in a predictable format and fails fast when it does not.
Currently covers AI/LLM nodes. Non-AI API costs will be added in a future update.
- AI Agent
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 "Fetch Transcript" makes an external call with no timeout parameter set. The n8n execution will wait indefinitely if the provider is slow or unresponsive. | Fetch Transcript, AI Agent, Anthropic Sonnet 4.5, OpenAI GPT-5, Ollama Quen 32b | High | 90% |
| 2 | Reliability | Lookup result accessed without empty-state check | Node "Fetch Transcript" fetches a list or search result. A downstream expression uses | Fetch Transcript, Build Prompt | High | 80% |
| 3 | Reliability | No error handler or failure notification path | Workflow has 7 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. | Fetch Transcript, Build Prompt, Build Markdown, AI Agent, Anthropic Sonnet 4.5, OpenAI GPT-5, Ollama Quen 32b | High | 85% |
| 4 | Cost Risk | AI agent has no iteration limit | Agent node "AI Agent" has no | AI Agent | Medium | 85% |
| 5 | Reliability | AI output drives downstream logic without a structured format | Node "AI Agent" produces free-form text output that flows into downstream logic with no Output Parser or JSON mode configured. | AI Agent | Medium | 75% |
| 6 | Reliability | API response may be paginated — only first page processed | Node "Fetch Transcript" fetches data without | Fetch Transcript | Medium | 60% |
| 7 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "AI Agent" contains expression(s) with risky patterns that assume fields are always present. | AI Agent | Medium | 75% |
| 8 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Fetch Transcript" contains expression(s) with risky patterns that assume fields are always present. | Fetch Transcript | Low | 75% |
| 9 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Save to Google Drive" contains expression(s) with risky patterns that assume fields are always present. | Save to Google Drive | Low | 75% |
| 10 | Reliability | Fragile expression — likely to fail when production data shape differs from test data | Node "Done" contains expression(s) with risky patterns that assume fields are always present. | Done | Low | 75% |
| 11 | Reliability | Finding: external without retry | Node "Fetch Transcript" (n8n-nodes-base.httpRequest) is a read-only external call with no retry configured.. sideEffect: read_only, role: external_read. Read-only calls are typically safe to retry; enabling retryOnFail improves resilience to transient failures. | Fetch Transcript | Info | 70% |
| 12 | Reliability | Finding: external without retry | Node "AI Agent" (@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. | AI Agent | Info | 70% |
| 13 | Reliability | Finding: external without retry | Node "Anthropic Sonnet 4.5" (@n8n/n8n-nodes-langchain.lmChatAnthropic) 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. | Anthropic Sonnet 4.5 | Info | 70% |
| 14 | Reliability | Finding: external without retry | Node "OpenAI GPT-5" (@n8n/n8n-nodes-langchain.lmChatOpenAi) 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. | OpenAI GPT-5 | Info | 70% |
| 15 | Reliability | Finding: external without retry | Node "Ollama Quen 32b" (@n8n/n8n-nodes-langchain.lmChatOllama) 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. | Ollama Quen 32b | Info | 70% |