The customer places an order, the billing worker charges their saved card, and the order moves from pending payment to paid within a few seconds.
Prediction
Explanation
The rename is complete inside the api repository, and its own tests pass. billing-worker is a separate repository that consumes the same order payload and was not updated.
Initial State
A signed-in customer with a saved card has one item in their cart.
Step 1
The customer submits the order; the API stores it and publishes order.created.
Predicted State
The event payload now carries "account_id" and no "user_id".
api/internal/orders/order.go:18-24
Step 2
billing-worker picks up order.created and looks up the customer to charge.
Predicted State
payload.fetch("user_id") raises KeyError; the job is retried.
Edge Cases
Retries exhaust after 5 attempts and the job is dropped.
billing-worker/app/jobs/charge_order_job.rb:41
Outcome
The order stays in pending payment and no charge is made.
Prediction
Explanation
The rename is complete inside the api repository, and its own tests pass. billing-worker is a separate repository that consumes the same order payload and was not updated.
Built for changes that span teams
A pull request is rarely the whole story, so AfterMerge follows the work across teams, repositories and tools.
Feature runs
Check every pull request behind a feature together, across repositories, as one change.
web#213api#482mobile#77One check
Codebase chat
Ask how something works across all your repositories. Every answer points to the files it came from.
“Who listens for order.created?”
charge_order_job.rbreceipt_mailer.py
Fix prompts
Each break comes with a prompt for your coding agent that names the files to change and why.
Claude CodeCursorCodex
MCP server
Ask about your repos or check a pull request from Claude, ChatGPT, Codex or Claude Code.
aftermerge.dev/mcp
Bring your own key
Run checks on the default models, or on your own provider key from settings.
AnthropicAnthropicOpenAIOpenAIOpenAI-compatible
Never changes your code
AfterMerge reads your repositories. The only things it writes are its own comment and check on a pull request.
A code reviewer reads the diff in front of it. AfterMerge follows the diff into the repositories that depend on it and checks whole user flows end to end. It catches the bugs that pass review because the code that breaks was never in the diff.
Will it block my merges?
No. It reports through a comment and a GitHub check, and the check completes successfully even when a flow breaks. Whether to merge is up to you.
Do I have to configure each repository?
No. There are no config files to add. Connect the repositories and AfterMerge works out how they call each other.
Which languages does it read?
TypeScript, JavaScript, Python, Ruby, Java and Go, mixed freely across repositories.
Which Git hosts are supported?
GitHub, for pull request comments and checks. Repositories on GitLab and Bitbucket can be connected too, so they’re included when a GitHub pull request is checked.
Can I use my own model provider?
Yes. Add an Anthropic, OpenAI or OpenAI-compatible key in settings and checks run on it. Without one, AfterMerge uses its default models.