Nothing to do
NO_ACTION
Transient, external, already fixed, or already covered.
Ends here, silently.Every Beeswax production error flows through this pipeline. It deploys a fix alone only when the change is small, tested and proven by CI. Everything else waits for a person.
Airbrake groups it and sends it to n8n.
n8n normalises the error and passes it to the autofix server.
Dropped: shutdown signals, and errors with no application code in the stack.
Jobs run one at a time on a clean copy of the code.
Skipped: a repeat of a recent error, or one that already has an open PR.
It reads the code, checks for duplicates, and if it writes a fix, adds a regression test and runs it.
NO_ACTION
Transient, external, already fixed, or already covered.
Ends here, silently.ANALYSIS
The root cause is unclear, or the fix needs a human decision.
Draft PR with a write-up. Email sent.FIX_PR
A confident fix that touches business behaviour.
PR with an open question. Email sent. Never merged alone.MECHANICAL_FIX
The bug and the correction are clear from the code alone.
Continues below.Any miss: it becomes a “Fix, but your call” PR and you get an email.
The server waits up to 30 minutes for independent proof, because Claude's own test report is not enough.
Failed, timed out or moved: nothing merges. The PR stays open for you.
The server squash-merges that commit into main, and Heroku deploys it automatically.
n8n emails “Fix deployed” and resolves the error in Airbrake.
n8n waits five hours and sends the job again.
n8n sends an alert email, at most once a day.
The job falls back to a second trusted Claude model.
One setting turns auto-merge off. Fixes then wait as PRs.
Bug reports from Beeswax users and feature requests use the same server. Feature requests never auto-merge, and bug-report fixes don't either unless that is switched on.