// Check the work

Don’t take our word for it

Every number on this site is derived from something public. That claim is worth nothing unless you can test it, so this page is the commands. Run them and compare; if anything disagrees with what a page says, that is a bug and we want it.

You need the gh CLI for most of these, authenticated to any GitHub account — the repo they read is public, so no special access is involved.

Merged pull requests

The ship page and the merged-PRs badge both quote this number.

shell
gh api graphql -f query='
{ repository(owner:"fulcrumaxe", name:"fulcrumaxe") {
    pullRequests(states:MERGED) { totalCount } } }' --jq '.data.repository.pullRequests.totalCount'

The merge gates are real labels

The safety page claims four gates applied by machinery rather than prose. Labels are the evidence, so list them:

shell
gh api repos/fulcrumaxe/fulcrumaxe/labels --jq '.[].name' | grep -- -passed

Then pick any merged PR and see which it carries:

shell
gh pr view 171 --repo fulcrumaxe/fulcrumaxe --json number,title,labels,mergedAt,additions,deletions

The review trail

The anatomy page renders a PR’s objections and re-reviews. Those are ordinary PR comments — the team does not post GitHub reviews — so read them directly:

shell
gh pr view 171 --repo fulcrumaxe/fulcrumaxe --comments
Where a number stops being exact. Counts, timestamps, labels, diffs and CI results are read straight from the API and are facts. “Sent back by review” and “scope drift” are heuristics — they are read out of the reviewers’ English by lib/review-signals.js, because the verdicts are prose. Every page that shows them says so, and this is the command that lets you judge the classifier yourself.

What this site serves

The endpoints behind the pages are public and return JSON. Read them raw and compare against what is rendered:

shell
curl -s https://fulcrumaxe.dev/api/ship-stats | jq '.public | {merged, medianMergeMinutes, sentBackPct}'
curl -s https://fulcrumaxe.dev/api/status   | jq '{observed, minutesSinceActivity}'
curl -s https://fulcrumaxe.dev/api/anatomy  | jq '{picked: .pr.number, selection}'
curl -s https://fulcrumaxe.dev/ship.xml     | head -40

The code the numbers come from

The engine is AGPL-3.0 and the agent definitions, the merge machinery and the review classifier are all in it. If you want to check that a role does what this site says it does, the roster names each definition file:

shell
gh api repos/fulcrumaxe/fulcrumaxe/contents/.claude/agents --jq '.[].name'
gh repo clone fulcrumaxe/fulcrumaxe

The site checks itself, weekly

Telling you how to check the work is not much use if nothing checks it between visits. Every Monday a scheduled job re-runs the consistency checks — that the feed still matches the blog index, that no page points at another page’s share card, that the merge-gate names printed on the safety page are still the labels the repository actually has, and that nothing republished from the private repo carries what redaction strips. A failure opens an issue.

The engine’s own CI is public too — every pull request on this project runs it, and the ship page counts the results.

One limit worth naming. The scheduled run uses a token that can read the public repository. Reading the private engine repo’s Discussions needs a stronger one, and without it that half of the redaction check is skipped — loudly, and the run says so in its own summary rather than reporting a clean pass over ground it never covered.

What you cannot check from outside

Being straight about the limits is part of the point. The engine repo that holds the Discussion queue is private, so the queue page and its feed proxy it through a server-side token and withhold every URL — you can read the titles and summaries, redacted, but you cannot open the thread. Likewise the long record is built from this team’s own telemetry store, which does not leave the machine it runs on; that page publishes the method and every exclusion alongside the numbers, and that disclosure is the only check available on it. Adopters’ installs are a separate matter and a separate channel: opt-in, off by default, counters only, and set out field by field on the telemetry page — which is generated from the schema the server enforces, so it cannot describe a field the endpoint does not accept.

Everything on the ship page, the anatomy page and the roster reads the public repo, and is checkable with the commands above.