Decide if a change is safe to ship

openthunder can-i-ship turns "does this feel okay?" into one defensible decision, backed by evidence you can read. This guide explains how to run it, how to read the three verdicts, and how to gate merges on it.

Run it

With your change in the working tree (staged, unstaged, or committed on a branch):

openthunder can-i-ship

It is keyless and local , no AI key, nothing uploaded , and it caches on git state, so re-running on an unchanged tree is instant.

Read the verdict

You get one of three outcomes, each with file:line evidence behind it:

VerdictMeansDo
SHIPLow structural risk, checks pass, no high-severity findings in the diffMerge with a normal review
CAUTIONIt can go, but something needs eyes: a hub/fragile file, a high finding, or thin verificationReview the flagged files first, then decide
HOLDDo not ship yet: failing checks, a critical finding, secrets, or an unauthenticated protected routeFix the blocker; re-run

The verdict is never a bare label. It names why: which files drove the risk, what the blast radius is, and which findings or missing checks pushed it up or down.

What goes into it

Keep the receipt

openthunder evidence        # the Evidence Pack behind this verdict
openthunder pr-evidence     # a pull-request-ready pack

Attach it to the PR so reviewers see what was checked, not just a green check.

Gate CI on it

Run openthunder can-i-ship in CI and fail the job on HOLD. Pair it with openthunder security check, which fails on new critical findings, secrets, or unauthenticated protected routes. OpenThunder ships as a GitHub Action, a GitLab component, and an Azure DevOps task, so the same verdict blocks merges everywhere.

For risky work, use a mission

For auth, billing, database migrations, or security changes, a single verdict is not enough , run the change as a mission so an independent reviewer challenges it and its checks run before it is accepted. The mission's result is a diff plus an Evidence Pack, not just a diff. Create one with openthunder mission or the app.