Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions .github/ci-policy.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,29 @@ Design: developing-today/code#1779 (ci-fast-pr-full-main). Phases:
chain, .github/workflows/main-broken.yml). Tracker: #1599.

Every workflow touched by the tier redesign carries the header
comment . Tuning the tiers
comment `CI tier policy: see .github/ci-policy.md`. Tuning the tiers
means editing THIS table by PR — never ad-hoc pipeline changes.

## Change classes (§3.3 of the design)

| class | trigger paths (examples) | PR tier |
|---|---|---|
| 0 — prose | , docs/, comments-only changes | nothing, or markdown lint only |
| 1 — config/data | non-build, (non-workflow) | syntax parse + lint of changed files |
| 0 — prose | `**.md`, docs/, comments-only changes | nothing, or markdown lint only |
| 1 — config/data | `**.json/yaml/toml` non-build, `.github/**` (non-workflow) | syntax parse + lint of changed files |
| 2 — package source (default) | one package's src + tests | lint/format + typecheck/syntax of affected packages + affected unit tests |
| 3 — elevated | lockfiles, / roots, /, build definitions (), , shared/core libraries | class 2 + compile check of affected packages |
| 4 — nix expressions | | class 1 + parse/eval of the changed files only (never full flake check on a PR) |
| 3 — elevated | lockfiles, `go.mod`/`go.sum` roots, `flake.nix`/`flake.lock`, build definitions (`package.nix`), `.github/workflows/**`, shared/core libraries | class 2 + compile check of affected packages |
| 4 — nix expressions | `**.nix` | class 1 + parse/eval of the changed files only (never full flake check on a PR) |

Default when a change spans classes: the highest class wins. The
policy ships conservative (more class 3) and loosens as the
main-breakage rate (issues labelled ) proves out.
main-breakage rate (issues labelled `main-broken`) proves out.

## Tier assignment in this repo (after #1781)

| workflow | PR tier | main tier | nightly |
|---|---|---|---|
| nix ci | treefmt/format gate only | treefmt + full flake-check | schedule in nix-ci.yml |
| id | guard + affected-crate matrix () | + full job | schedule in id-check.yml + id-e2e-nightly.yml (full flake check) |
| id | guard + affected-crate matrix (`id-pr-checks.txt`) | + full `nix flake check ./pkgs/id` job | schedule in id-check.yml + id-e2e-nightly.yml (full flake check) |
| mcpx conformance | spec-parity leg only (measured 28s exec, run 40801660942, 2026-10-29 — under the 5m fast-leg limit) | all conformance legs + records + spec-parity | — (main covers it) |
| id bench | — (removed) | yes | — |
| go modules build / identity build / map build / mcpx nix build | class-3 paths only (see each workflow) | always (push to main, no path filter) | — |
Expand All @@ -46,16 +46,16 @@ to main.
## Dedup rule

A commit must not run the same suite twice via push +
pull_request. Standard shape: for PRs,
restricted to (plus tags where already
pull_request. Standard shape: `pull_request` for PRs, `push`
restricted to `branches: [main]` (plus tags where already
applicable, e.g. goreleaser).

## Concurrency rule (#1780)

Standard block (design §4): group keyed by for
push-to-main, by otherwise,
Standard block (design §4): group keyed by `run_id` for
push-to-main, by `github.ref` otherwise, `cancel-in-progress: true`
— PR/branch runs cancel on supersede; main runs are never
cancelled. Exceptions: (load-bearing cip=false, #304)
cancelled. Exceptions: `jules.yml` (load-bearing cip=false, #304)
and scheduled singleton/deploy workflows (cip=false) are NOT
touched. Issue-event workflows (auto-assign) use a per-issue group
so cancel-in-progress can only supersede a run for the same issue.
Loading