Two free pieces for the most expensive failure in production automation: the execution that succeeds, writes zero rows, and tells nobody. A static linter for n8n workflow JSON, and an importable kit of workflows for the runtime side.
Every automation platform marks an execution successful when no step threw. That is the only definition it can have. It is also the reason the failure that costs the most in production is not the red run but the green one: a token expired and the API started returning an empty list; a field got renamed upstream and the filter now matches nothing; a tool inside an AI agent failed and the model filled the gap with a plausible guess. Every node is green. Zero records landed. The error workflow never fires, because from the platform's point of view nothing went wrong. On the n8n community forum this comes up weekly, and the honest answers in those threads are what these two pieces implement.
n8n-workflow-lint is a zero-dependency command-line tool. Point it at an exported workflow and it reports where the workflow can fail without anyone finding out: no error workflow attached, HTTP nodes with no retry or timeout, errors swallowed by Continue On Fail with nothing downstream looking at them, an AI agent with tools whose output is trusted blindly, IF branches that drop items on the floor, secrets pasted into parameters, unauthenticated webhooks. Fifteen rules; every one cites the forum thread it exists because of.
We ran it over the 400 most-viewed public templates on n8n.io:
| Measure | Result |
|---|---|
| HTTP Request nodes | 628 — 20 (3%) retry on failure, 8 (1%) have a timeout |
| Webhook triggers | 67 — 2 use any authentication |
| Templates that ship settings | 205 — 142 (69%) have no error workflow |
| AI Agent nodes | 248 — 67 templates use an agent's output with no guard after it |
| IF / Switch with an unconnected branch | 22% of templates |
Templates are starting points, not production, so that is not a criticism of their authors. It is a measurement of how much hardening sits between "works in the editor" and "runs for a client for a year", and it is the gap a client is paying for when they hire someone to do this properly.
--min-score 75 on a repository of
exported workflows turns "we are careful about reliability" into a gate that a pull request either passes
or does not.Static analysis can say where a workflow can fail quietly; it cannot say that it is. The Production Hardening Kit is four importable workflows for that side, with no external monitoring service:
The pattern in both pieces is the same one that runs through the reference builds: define what "done" means in terms the system cannot fake, check it at the point where the work happens, and make the failure loud and deduplicated. Automation that cannot tell you when it has stopped working is a liability with a green dashboard. If yours is a few dozen workflows nobody has audited since handoff, that audit is a one-week engagement and the two repositories above are its first two tools.
If the answer is not "all of them, within the hour", that is the engagement.