The PR comment is the point. Every comment is read by every reviewer, in context, at the moment it
matters.
The action
.github/workflows/crust.yml
It fetches snapshot history, runs the check, posts or updates the comment, and publishes the new
snapshot.
Budgets
Create .perf/budgets.json at the workspace root. Nothing is enforced until this file exists.
Both axes are covered on purpose. A check that only guards bytes will happily pass a PR that
silently halved your static shell — which is the regression nothing else catches.
See the budgets reference for every field.
The comment carries a hidden <!-- crust-report --> marker so the action updates the existing one
instead of stacking a new comment on every push.
crust ci exits non-zero on a breach.
Snapshot history
A fresh CI checkout has no .perf/ directory, so the baseline lives on an orphan branch:
An orphan branch shares no history with your code, so it can grow and be truncated freely without
polluting git log or complicating rebases.
Fork pull requests get the comment but skip the push. A fork’s GITHUB_TOKEN is read-only on
the base repository, so history push reports and exits cleanly rather than failing the check.
Diffs still work from whatever snapshots the branch already holds.
Retention
Full fidelity for the newest 50 builds, then one snapshot per commit, then module detail dropped
after 90 days. Route totals and shell ratios are kept forever — they are tiny, and they are what
anyone looks at a year later.