Presift

Start an evaluation

There is no key to request, no form to fill in and nothing to copy. Inside GitHub Actions, Presift starts your 30-day evaluation by itself the first time it runs.

What you add

name: migration-safety
on: [pull_request]
permissions:
  contents: read
  id-token: write          # lets Presift start your 30-day evaluation
jobs:
  presift:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: nishu-sde/presift@v1
        with:
          paths: db/migrations
          fail-on: error

Two things matter: uses: nishu-sde/presift@v1, and permissions: id-token: write alongside contents: read. Without that permission GitHub will not issue the job an identity token, and Presift stops with a message saying exactly that.

What happens on the first run

  1. The client asks GitHub for the job's OIDC identity token, scoped to the Presift service.
  2. It posts that token to the service, which verifies it against GitHub's public keys and reads two claims: the repository owner's numeric id and login. Nothing else is read, and the token is not stored.
  3. The service records that this owner's evaluation started today and answers with a short-lived entitlement — valid for about a day, re-issued automatically on every later run, never shown to you.
  4. The client downloads the signed Presift engine, verifies its signature and digest, and runs it on your runner. Findings appear as annotations on the pull request.

You never handle a key during the evaluation. There is nothing to store in a secret, nothing to rotate and nothing to lose.

Who can evaluate

When something stops the run

What you seeWhat it means
this job may not request an OIDC tokenid-token: write is missing from the job's permissions:
GitHub does not provide repository secrets … from a forkthe run came from a fork; use the base repository or a merge queue
the 30-day evaluation for '…' ended on …the evaluation is over for that owner; continuing needs a licence — see pricing
PRESIFT_LICENSE is not a valid keya key was supplied but is malformed — usually a truncated secret

Every refusal prints a stable error code; the full list is in the client's error reference.

After the 30 days

The check stops and says so. Continued use needs an annual organisation licence — intended at $290 per organisation per year, an initial pricing hypothesis — subject to validation. No checkout exists yet; tell us if you want one.