Triggered
A PR update or @postil mention starts a run on the current head SHA.
One event in, one diff reviewed, one check run out. If there is nothing worth saying, the PR does not get a bot recap.
The write moved ahead of `canManageBilling`, so a caller can change a plan before the permission failure is raised. Move the authorization check before the billing mutation.
- await billing.updatePlan(org.id, plan)+ if (!canManageBilling(actor, org)) throw new Error("authorization failed")+ await billing.updatePlan(org.id, plan)A PR update or @postil mention starts a run on the current head SHA.
Postil reads the diff, config, and open review threads.
The reviewer returns structured findings, not a prose blob.
Ignored paths, severity thresholds, and max findings apply before posting.
Real findings become inline comments. Clean reviews can stay quiet.
The check run records the result for branch protection.
The examples rotate, but each one is the kind of issue a reviewer would actually block on.
The write moved ahead of `canManageBilling`, so a caller can change a plan before the permission failure is raised. Move the authorization check before the billing mutation.
- await billing.updatePlan(org.id, plan)+ if (!canManageBilling(actor, org)) throw new Error("authorization failed")+ await billing.updatePlan(org.id, plan)Comment @postil in a PR, review, or inline thread for another pass.
Open review threads and change requests go into the prompt.
No finding means no synthetic recap.
Each finding points to the changed file and line it depends on.
Join the hosted beta queue, or run the Postil CLI in your own CI.