Back to home

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

8

Clobbers, races, and conflicts no single session can see.

clobber

Held a merge — a parallel session had already edited the same migration, minutes earlier.

billing-fix · auth-refactor → 0012.sql

clobber

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

queue

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

conflict

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

clobber

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

rebase gate

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

clobber

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

clobber

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

5

Drift, fleet rollouts, rewritten history, and one-at-a-time ships.

drift

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

staging

Paused a production deploy because staging was behind it — no shipping past an environment you haven’t verified.

staging behind prod · gate held

fleet

Stopped a fleet-wide rollout that hadn’t actually been approved — flagged the blast radius before it reached every machine.

hooks v16 · every install

branch

Blocked a force-push to main that would have rewritten shared history.

git push --force · main

ungoverned

Flagged a production deploy that skipped the ship gate entirely.

ship-gate tripwire

Regressions

5

The thing that quietly broke — caught before it reached anyone.

silent break

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

regression

Flagged a removed auth check and restored it before the ship gate.

src/lib/auth.ts · ship gate

self-review

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

wrong repo

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

false hold

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

6

Irreversible writes, exposed rows, and billing mistakes.

catastrophe

Blocked an rm -rf on a folder holding two days of model checkpoints.

rm -rf ./checkpoints

data loss

Stopped a DROP TABLE in a migration meant only to rename a column.

migrations/0014_rename.sql

exposure

Flagged a new table shipped with row-level security off — every row world-readable.

table profiles · RLS off

money

Paused a Stripe change that billed full price instead of the prorated amount.

billing/checkout.ts

isolation

Proved one tenant couldn’t read or write another tenant’s rows — at the database layer, not just the app.

RLS backstop · cross-tenant

silent clobber

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

2

Keys and credentials about to leak or move where they shouldn’t.

secret

Caught an API key hardcoded into the client bundle, one commit before push.

OPENAI_API_KEY · client bundle

secret

Blocked a secret being copied from production into staging — twice — until the owner explicitly signed off.

cross-env key copy

Scope & context

3

Work that drifted out of bounds, or rebuilt what already existed.

scope

Stopped a "quick fix" from quietly rewriting the auth flow it was never asked to touch.

"fix typo" → touched auth.ts

context

Reminded a fresh session the retry logic already lived in queue.ts — before it rebuilt it from scratch.

src/lib/queue.ts

verify

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.