Axon 911 Frontend Docs
    Loading navigation…
U
User
Switch to light mode
  1. Ci Cd
  2. Pr Checks

PR Checks

Every check that blocks a merge into trunk, where it comes from, and the checks that run without blocking.

Trunk is protected by four repository rulesets, checked in under .github/rulesets/ with a README. Between them they:
  • block deleting or force-pushing trunk, and restrict who can update it (only bypass actors: org admins, the maintain and admin roles, and the Graphite App, so people without bypass rights can't merge with GitHub's button);
  • require a pull request with one approval and every review thread resolved;
  • require the status checks below, each matched by name and by the app that reports it.
Blocking means the check must pass before the PR can merge. Not required means it runs and reports, but a failure doesn't stop the merge.
How the gate works
There is no gatekeeper job that polls other checks. Each required check is its own named job, and the ruleset lists the names. That has three consequences:
  • A job that is skipped by a job-level if counts as passing, and a check that is never created stays pending forever and blocks every PR. So a required check must come from a workflow that runs on every pull request, with no workflow-level paths filter, and from one aggregate job rather than from a matrix shard.
  • Sharded work reports through an aggregate with the required name: test, storybook-test, design-rendered and lint each aggregate several jobs.
  • Renaming or removing a required job needs the ruleset change first, or the old name stays pending on every PR. rulesets.test.mjs checks every required name against .github/workflows. See the change-ci skill before editing a workflow.
Read the live list with gh api repos/prepared911/axon911-frontend/rules/branches/trunk. The checked-in files are the same rules without their ids and timestamps.
Required checks
This table is a snapshot, and the source of truth is trunk-required-status-checks.json. All but review-pipeline come from GitHub Actions.
CheckWorkflow (job)What it checks
lintci.yamlpnpm check (lint, format, feature-flag manifest), the repo's contract tests, and the tests for the repo's own CI scripts.
typecheckci.yamlturbo run typecheck over the affected packages.
testci.yamlVitest, sharded by package.
localization, localization-catalogci.yamlThe localization regression check, and the extractor gate for shells and remotes.
ui-migrate-checkci.yamlBlocks new @prepared911/ui-* imports in changed files.
design-gates, design-package, design-renderedci.yamlThe design-system gates, the @prepared911/ui package checks, and the rendered checks (design-rendered aggregates its shards).
manifest-driftci.yamlA deployable directory with no apps.mjs entry (or the reverse), or colliding ports.
lockfileci.yamlThe same install Vercel runs, pnpm install --frozen-lockfile.
mf-types-contractci.yamlRebuilds the remotes and fails on drift in the generated remote-ID types (pnpm mf:types:check).
storybook-testci.yamlStorybook play functions, run in a browser.
playwright, playwright-authci.yamlThe Playwright integration suites against built Module Federation previews.
MF runtime checksci.yamlSingleton integrity (report-only) and remote-failure survival (blocking).
labci.yamlThe memory lab: DOM nodes, listeners and heap left after unmount.
stores-frameci.yamlCore's two-origin stores frame harness.
bundle-healthbundle-health.ymlBundle size for every shell and remote. See docs/BUNDLE-SIZE.md.
gitleakssecret-scan.yamlBlocks commits that add a credential.
codeownerscodeowners-pr.yamlFails when a changed file has no owner, or a new file is owned only by the * fallback.
jira-keypr-title.yamlThe PR title starts with [KEY-123], [HF] or [BUMP].
review-pipelineThe review-pipeline GitHub App (not GitHub Actions)The review verdict. It stays pending while the owning team still has to decide. See docs/REVIEW-PIPELINE.md.
jira-key skips bot PRs and Graphite queue drafts, which carry their own titles.
Approvals
The ruleset needs one approving review and resolved review threads. It does not currently require a GitHub code-owner review (require_code_owner_review is false in trunk-pr-require.json). Ownership approvals come through the required review-pipeline status, which stays pending on paths that need a human until the owning team approves. The PR's author can't approve their own PR: GitHub's own rule applies, and review-pipeline doesn't count it either.
Checks that run without blocking
None of these is in the ruleset. A failure is still worth reading, and some have comments or follow-up.
CheckWorkflowWhat it does
pr-bodypr-title.yamlReads the PR body once: the template's sections, the ### Pattern search section for UI changes, and the changesets and ### Package Release section for publishable packages.
review-pipeline / details and review-pipeline evalsreview-pipeline app, review-pipeline-evals.yamlThe full review report (re-run it to review again), and the evals for review agents.
Cursor BugbotGitHub AppAutomated review, guided by .cursor/BUGBOT.md.
lab-comment, playwright-report-comment, bundle commentsci.yaml, bundle-health.ymlPR comments from the memory lab, Playwright failures and bundle size.
Preview deploymentspr-preview.ymlVercel preview builds for the affected projects. See Deployment.
feature-flags-governance, guidance registry, Console embed version skew, apollo-cache-benchmarksTheir own workflowsPath-filtered, so they only report on PRs that touch their inputs. A path-filtered check can't be required.
loophole-checkloophole-check.yamlRuns pnpm loophole-check against the base commit on pull requests and merge_group events.
remote-ui-consumer-contract, region-class-buildci.yamlReal checks (the remote consumer contract, region-class and third-party-DOM checks, publishable package smoke) that can turn a PR red without being required.
Chromatic Storybook CI, agent-evals, local-dev-smoke, review fixture changesTheir own workflowsVisual diffs, report-only agent evals, a fresh-checkout dev-startup smoke test, and a check that a changed review fixture is explained in the PR body.
Helper jobs in ci.yamloptimize_ci, changes, turbo-token, desktop*, pnpm-cache-warm and the likeScope detection, tokens, caches and the desktop jobs. They gate nothing here.
On the merge queue
When a PR is queued, Graphite can open a draft PR on a gtmq_* branch that holds it and other queued PRs, and CI runs again there. ci.yaml recognises a draft as a gtmq_* head opened by graphite-app[bot], and a few jobs the PR run and the trunk push already cover skip on it. Every required check still reports on the draft, because the draft's commit is the one trunk is fast-forwarded to. review-pipeline gives the draft a success status without a second review, and jira-key ignores it. See the merge-queue skill for labels, ejection and what to do afterwards.
Previous
CI/CD & deployment / CI/CD Overview
Next
CI/CD & deployment / Deployment
On this page
How the gate works
Required checks
Approvals
Checks that run without blocking
On the merge queue