Hold up.
Your code passed CI.
Did it follow the spec?
AI coding agents can write code that works while quietly changing what your team actually agreed to build. HoldUp checks pull requests against your specs, requirements, API contracts, and engineering decisions before merge.
async function applyCoupon(order) { - validateCoupon(order.coupon) - authorizePayment(order.total) + authorizePayment(order.total) + validateCoupon(order.coupon) }
Review the intent, not just the output.
HoldUp gives reviewers a clear reason, source, and possible downstream impact instead of another generic AI comment.
Tests tell you whether the code works. HoldUp checks whether it is what you meant to ship.
The decisions behind a change are spread across specs, ADRs, tickets, contracts, and docs. AI agents move through implementation faster than reviewers can reconstruct all of that context.
Does the code work?
Compile, lint, test, scan, deploy. These checks validate the implementation itself.
Did we build what we agreed on?
Compare the PR against requirements, contracts, and engineering decisions that were supposed to guide it.
Spec drift is bigger than one bad line of code.
Scroll through examples of the kinds of mismatches HoldUp is designed to surface.
Validate before charging
The spec requires validation before authorization. The implementation reverses the order.
PR: authorize → validate
Required becomes optional
A downstream team assumes a field is always present, but a PR quietly makes it nullable.
PR: customer_id?: string
Auth moves layers
An ADR says authorization stays in the gateway. A service starts enforcing it itself.
PR: authorize() in orders-service
Retention rule changes
The code works, but data now lives longer than a documented retention decision allows.
PR: ttl = 90d
Message contract drifts
An event producer renames a field without updating the contract used by consumers.
PR: amount_total
Side effect becomes unsafe
A retryable handler adds a non-idempotent call despite an architecture note requiring idempotency.
PR: chargeCard() on every retry
A check inside the workflow you already have.
HoldUp is not another place to write specs. It connects the context you already maintain to the code that is about to merge.
See what a conflicting change could touch before it ships.
A drift finding matters more when reviewers can see the downstream systems and decisions that depend on it.
Enough context to make a decision.
Show the decision HoldUp is checking.
Point back to the spec, ADR, contract, or requirement instead of leaving reviewers with an unexplained model opinion.
Explain the mismatch in plain English.
Describe what the implementation does, what the source says, and where the two disagree.
Show the likely blast radius.
Connect the changed behavior to services, consumers, and contracts that may depend on the old decision.
Make the reviewer choose.
Fix the implementation, update the decision, or dismiss the finding with an explicit reason. The goal is clarity, not automatic blocking.
Using coding agents heavily? We want to hear where this breaks.
HoldUp is early. We are talking with engineering teams to understand where spec drift actually shows up and what a useful PR check should look like.
Join the pilot