Repositories
Connecting a repository installs an app with a deliberately small set of permissions, binds it to your workspace, and starts the first index.
Connecting
- In the console, choose Connect for your host. Certus mints a short-lived, single-use token bound to your workspace and sends you to the host's install page.
- Install the app and choose which repositories it can see — all of them, or a list you pick.
- The host returns you to Certus with the installation. The token you left with is what binds that installation to your workspace; nothing the callback asserts is trusted for that.
- Certus starts the first index. Until it finishes, runs on that repository report as blocked with a reason rather than being served a partial model.
The token expires in ten minutes and can be used once. If you take longer, or the page is reloaded, press Connect again — it costs one retry and nothing else.
You never type a host credential into Certus. The connection is an app installation you grant and can revoke at the host, which is a different and better thing than handing over a token.
What Certus asks for
- metadata: read
- To see the repositories the installation covers.
- contents: write
- To read the code, and to open a branch under
certus/when a refined environment recipe is proposed. Certus never pushes to your branches. - pull_requests: write
- To post the verdict as a comment and keep it updated in place.
- checks: write
- To publish the check that reports the verdict.
- issues: write
- To link proof debt to the issue that owns the feature.
Refused on principle, and not requested: administration, secrets, actions, workflows, members, commit statuses, and anything scoped to the organization rather than to the repositories you chose.
Certus subscribes to pull request activity and to re-run requests on its own check. It does not listen to pushes.
What lands on a pull request
One check, named Certus, and one comment that is edited in place rather than reposted. The comment carries the verdict line, a table of claims with their frontier, the proof that ran and the grade, the evidence root with a link to replay, and the gate reasons if any.
The check's conclusion maps from the verdict and never lies about which of the five happened.
- VERIFIED
- Success.
- VERIFIED_WITH_DEBT
- Success. The debt is in the comment.
- FAILED
- Failure.
- INCONCLUSIVE
- Neutral. The proof established nothing; that is not a failure of your change.
- BLOCKED
- Neutral. Nothing was attempted, so nothing is being reported about your code.
Where a host limits comment length, the digest continues into a second comment rather than dropping a proved row. It is never a second topic.
Reading the connection
- Not configured
- The deployment is missing credentials for that host. The row lists the missing variable names — names only, never values.
- Ready to attach
- Configured, and nothing connected yet. Press Connect.
- Connected
- An installation is bound to your workspace, with the repository count.
- Needs attention
- Connected, but something did not complete: repository discovery failed, a webhook did not register, or a public address or webhook secret is not declared.
- Not connected
- Configured and unbound. If the app is visibly installed at the host, see below.
Where Certus could not reach the engine to answer at all, the row states that rather than showing you a confident “not connected”.
When it says something unexpected
- The app is installed at the host but Certus says not connected
- The install never returned an installation and a workspace token together, so Certus never learned whose it was. Press Connect from the console rather than installing from the host's own page.
- “Not configured” with an empty list of missing names
- A credential is present and was rejected. Nearly always a private key that lost its line breaks when the environment file was written.
- Runs report as blocked on indexing
- The first index has not finished. It runs once per repository at connection time, never inside a pull request.
- No check appears on a pull request
- Check deliveries at the host. A rejected signature means the webhook secret does not match; a rejected credential means the app's own key does not — two different rotations, and Certus keeps them distinct so you fix the right one.
- You disconnected and the webhook is still there
- Disconnecting forgets the grant on the Certus side. Removing the installation is done at the host, which is where you granted it.