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.