How a production error fixes itself

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

An error happens in production

Airbrake groups it and sends it to n8n.

n8n

Noise is filtered out

n8n normalises the error and passes it to the autofix server.

Dropped: shutdown signals, and errors with no application code in the stack.

Autofix server

The job joins a queue

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.

Claude Code, on the autofix server

Claude investigates and picks one verdict

It reads the code, checks for duplicates, and if it writes a fix, adds a regression test and runs it.

Nothing to do

NO_ACTION

Transient, external, already fixed, or already covered.

Ends here, silently.

Needs a person to think

ANALYSIS

The root cause is unclear, or the fix needs a human decision.

Draft PR with a write-up. Email sent.

Fix, but your call

FIX_PR

A confident fix that touches business behaviour.

PR with an open question. Email sent. Never merged alone.

Obvious defect

MECHANICAL_FIX

The bug and the correction are clear from the code alone.

Continues below.
Autofix server · Gate 1

The change must be small and safe

Any miss: it becomes a “Fix, but your call” PR and you get an email.

GitHub Actions · Gate 2

CI must prove it on that exact commit

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.

GitHub, then Heroku

Merged and deployed

The server squash-merges that commit into main, and Heroku deploys it automatically.

n8n

You hear about it, and the error closes

n8n emails “Fix deployed” and resolves the error in Airbrake.

When things go wrong

Claude's usage limit is hit

n8n waits five hours and sends the job again.

The autofix server can't be reached

n8n sends an alert email, at most once a day.

The first model is unavailable

The job falls back to a second trusted Claude model.

You want it to stop deploying

One setting turns auto-merge off. Fixes then wait as PRs.

Also on this server

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.