Everything it’s caught.
A running list of the real interventions afterclick has made — clobbers held, deploys reconciled, regressions surfaced. Many of them while building afterclick itself.
29 catches and counting · only the ones worth speaking up about
Across your sessions
8Clobbers, races, and conflicts no single session can see.
Held a merge — a parallel session had already edited the same migration, minutes earlier.
billing-fix · auth-refactor → 0012.sql
A deploy from a stale base was about to revert a parallel session’s just-shipped rate-limiting and AI-spend governor. Caught it and recovered both — zero work lost.
stale base · migration 0006
Two sessions hit the ship gate in the same second. The deploy lock queued them — one shipped, the other waited, neither clobbered.
deploy lock · FIFO queue
Warned two live sessions they were editing the same file at the same time — before either overwrote the other.
live radar · one file, two sessions
Two sessions shipped at the same time — one bundle was about to roll the other’s security hooks back a full version. The push-rejection and version check caught it mid-flight.
public/hooks · v15 → v14
A deploy from an old base would have reverted two already-merged features and collided on a migration slot. The rebase gate caught it before push.
stale base · migration 0002 collision
A --delete deploy was about to wipe a script a parallel session had shipped but not yet merged. The dry-run diff halted it.
public/scan-worktrees.sh
Building from an old commit would have reverted already-live work from another session. The dry-run caught it — rebuilt from current main so only the new feature shipped.
install.sh · manifest.txt
Shipping & deploys
5Drift, fleet rollouts, rewritten history, and one-at-a-time ships.
Production was running code that never made it back to main. The pre-deploy dry-run caught the drift and reconciled it before the next ship could clobber it.
prod ahead of main
Paused a production deploy because staging was behind it — no shipping past an environment you haven’t verified.
staging behind prod · gate held
Stopped a fleet-wide rollout that hadn’t actually been approved — flagged the blast radius before it reached every machine.
hooks v16 · every install
Blocked a force-push to main that would have rewritten shared history.
git push --force · main
Flagged a production deploy that skipped the ship gate entirely.
ship-gate tripwire
Regressions
5The thing that quietly broke — caught before it reached anyone.
After a database migration, every insert into two tables had been failing silently for 22 hours — a desynced ID sequence. A routine ship check surfaced it and resynced them.
transcript_events · usage_rows
Flagged a removed auth check and restored it before the ship gate.
src/lib/auth.ts · ship gate
The review panel caught a real bug in afterclick’s own code — on the very diff that was shipping the panel itself.
advisor pipeline · own diff
Caught a change being made in the wrong project’s repo — the task belonged to a sibling codebase. Pointed it to the right one before a line was written.
directory-fit · wrong working dir
The launch gate was rejecting good drafts because the model wrapped its JSON in markdown. Caught on staging before it reached anyone.
parseJsonLoose · launch gate
Data & money
6Irreversible writes, exposed rows, and billing mistakes.
Blocked an rm -rf on a folder holding two days of model checkpoints.
rm -rf ./checkpoints
Stopped a DROP TABLE in a migration meant only to rename a column.
migrations/0014_rename.sql
Flagged a new table shipped with row-level security off — every row world-readable.
table profiles · RLS off
Paused a Stripe change that billed full price instead of the prorated amount.
billing/checkout.ts
Proved one tenant couldn’t read or write another tenant’s rows — at the database layer, not just the app.
RLS backstop · cross-tenant
A doc update with a blank target had been silently overwriting the wrong record. Now it’s exact-match-or-refuse, with a read-back to confirm.
feature catalog · wrong row
Secrets
2Keys and credentials about to leak or move where they shouldn’t.
Caught an API key hardcoded into the client bundle, one commit before push.
OPENAI_API_KEY · client bundle
Blocked a secret being copied from production into staging — twice — until the owner explicitly signed off.
cross-env key copy
Scope & context
3Work that drifted out of bounds, or rebuilt what already existed.
Stopped a "quick fix" from quietly rewriting the auth flow it was never asked to touch.
"fix typo" → touched auth.ts
Reminded a fresh session the retry logic already lived in queue.ts — before it rebuilt it from scratch.
src/lib/queue.ts
A "sign out" button that did nothing — caught only by testing a real click, not a synthetic one.
sidebar · onClick unmount
afterclick is honest about the ceiling: it catches the catastrophic, knowable mistakes before they ship — not literally everything. The thousands of safe edits in between, it stays quiet on.
Give Claude Code its best friend.
One paste, AI included, free to start. afterclick starts catching the things a single session can’t — across all of yours.
