Skip to content

Required CI checks

Pull requests run Classify Changes and finish with CI Success. The main ruleset requires CI Success and Validate PR title, rather than individual conditional jobs or matrix shard names.

Changed inputs Mandatory validation
Loco application code, dependencies and runtime configuration Formatting, Clippy, unit/integration/browser tests, dependency and security gates
Android implementation and build configuration Android tests, lint, assemblies, release checks and pinned API drift
Published documentation and site configuration Documentation build
Markdown and plans Changed-file Markdown syntax and whitespace
Rust client tools Formatting, compilation, Clippy and tests
OpenAPI and native generator inputs Deterministic generation and Kotlin/Swift compilation
CI workflows Workflow syntax validation

The root OpenAPI contract also selects Android verification when the Android application is present. Native applications use pinned contract copies. An Android README alone runs Markdown validation. A plan inside docs/ also runs the site build because it is published documentation.

Lighthouse and mutation testing produce advisory reports. Their results and duration do not block the required gate. Live canary tests, releases and deployments are separate workflows.

Routing and failures

scripts/ci/policy.json records path ownership and mandatory jobs. Changes to the classifier, gate, policy or shared root tooling select every implemented suite. Mixed changes select the union of affected suites. An unknown path fails classification until its ownership is added explicitly.

PR classification compares the current merge commit with the actual PR base, including stacked branches. Push classification compares the before and after commits. Deletions and both sides of renames are included without API file-list limits.

Every selected mandatory job must report success. Failure, cancellation, unexpected skipping and missing results fail the gate. Reusable workflows also expose completion markers from their validation jobs, so a skipped child job cannot appear as successful validation. Each run includes its path selections and gate result in the job summaries.

Local checks

Lefthook runs task whitespace before every commit. It checks staged, unstaged and new untracked files for trailing spaces, extra blank lines at EOF and other Git whitespace errors. Ignored files stay excluded unless already tracked. The check uses a temporary index and object directory and leaves your staging unchanged. Both temporary copies are removed when it exits. Fix any reported files, including staged copies, before committing.

Run rtk task whitespace manually, or rtk task whitespace BASE=origin/my-branch to include changes since the merge base with another branch. The default is HEAD, so the commit hook needs no remote or main branch. Git whitespace attributes and configuration apply. GitHub workflows do not run this check. Run rtk task test:whitespace for its focused command-behaviour tests.

Run task ci:check with actionlint 1.7.12 installed to validate workflows and CI scripts. Run task ci:classify or task ci:markdown with CI_BASE set to the base commit; CI_HEAD defaults to HEAD and CI_EVENT defaults to PR comparison. Set CI_EVENT=push for a before/after comparison. Run task ci:gate with CI_NEEDS containing GitHub's JSON needs object.

Temporary routing, gate and deliberate-failure tests are removed after pipeline verification. GitHub run links retain the verification evidence.