Judging whether the rules you wrote down still hold at this commit

This browser reads your shared-value canon, the references in your docs and your declared UI paths, and reports each one as a pass, a violation, or unjudged. No sign-up and no install. The canon of your rules stays in your own repository. We only point at it and compare, and your code never reaches us.

Private repository — one command

Run the command below at your repository root: judgment runs on that machine, and only a summary of the result opens this page through the address (fragment). Neither code nor tokens are sent. That screen is the same one a public repository address produces, down to the number of judged cells.

npx graduand --open

There is no field for a token (PAT) on this page — that is design, not an omission. This will not become a product that teaches you to paste tokens.

Public repository — just paste the address

Paste a repository address, press Diagnose, and this browser reads straight from the GitHub API and judges on the spot. There is no server in between, and no sign-in.

Start declaring — three steps

An axis stays unjudged because nothing was declared for it. Without a declared basis the answer is not "0 violations", it is unjudged. ① Copy the snippet below, ② save it at your repository root as graduand.json, ③ commit it, and those cells are judged from the next diagnosis on. You do not even need a working copy. Copying and pasting is all of it.


      
      
      

An empty admissions record is fine. "No rule has been admitted yet" is a true declaration, and every one of those cells stays unjudged. An empty state is not treated as a defect here.

⭐ When you admit a rule, you write a name that points at the canon of that norm. Copy the same norm into every repository and those copies drift apart. This page measures exactly that drift.

If you do have a working copy, one command writes the same content to the same place. It does not overwrite an existing declaration, and it does not commit.

npx graduand init

What gets judged

Everything below runs today. For a public repository you only paste the address. For a private one, a single command on the machine that already holds the repository gives you the same report.

Repository subscription

The diagnosis keeps running here for free, exactly as it does now — judgment runs on your side, and its result never reaches us. Subscribing does not move that boundary.

$15 / month · $150 / year per repository (total)

Tax follows where you are — it is either included in the price shown or added to it, and the final amount is settled at checkout.

Monthly or annual, and how many repositories (minimum 1), are chosen on the payment screen. This link does not lock them in advance.

Start a subscription

What you do in the repository after you subscribe

Three things. Put the key you get when you subscribe into your environment, run graduand activate once in your repository, and it writes a handle file. Commit that file, and put the key into your CI secrets. The key is never committed: a secret that is committed is not a secret.

This screen does not write the names of that file and that key. The command tells you, right where you need them. Writing them here would add one more copy, and that copy parts from the command the day a name moves.

Questions we get

When do holding a declaration on screen, and promoting a rule, stand up?

Holding stands. The prior decision that blocked it is closed (the page composes, the command writes), and the place to link or create a constitution is the link in the Product column below. ⛔ That page neither writes nor commits. The page hands you a string; writing the file is done by the command on your own machine.

Fixing half stands. Putting values back in line with the canon runs as a command (graduand deliver — the feature above is that place). Moving the basis itself, promotion, has not stood up yet.

What divides the two is who decides. Putting values back has nothing to choose: the canon is the basis, and the side that disagrees is brought to it. Promotion is the judgment that "the downstream is right and the canon is stale", and we do not make it for you. Only its shape is settled: among the observed drifts, a person picks what goes upstream (the machine names candidates and invents no criterion). When it stands it takes your declaration as its basis, so it asks about entitlement.

How much is visible for free?

Right now everything runs. This in-browser diagnosis has no place that asks for entitlement yet, so it blocks nothing.

What divides is not the file but whether a feature needs a declaration. Reference judging yields counts with no declaration at all. The features of the declaration itself (admissions, the grid, exemptions) and the checks that take a declaration as their basis do ask for entitlement.

Even where it is asked for, the shape of the cells stays visible. Only the counts are withheld, and those cells stay unjudged.