CI Build Triggers: which lanes run when#

The rule is branch-and-release-strategy.md (owner, 2026-10-15): a push to develop runs the Linux x64 lane, every other lane runs when a commit message asks with [ci <lane>] or when started by hand, and a push to main runs every lane and releases only when all are green. The repositories move to it one at a time, so this page says what each one does today. The file names are one per platform and arch since 2026-09-24 (adopting-in-a-new-project.md § Workflow file names and display names).

The consumer lanes#

Repository

On every push to develop

On request, and on main

OmniAccelerANT (since 2026-10-15)

linux-x64.yml; submodule-pins.yml when a pin moves

linux-arm64, windows-x64, windows-arm64, android, web through on-request.yml; all of them through release.yml on main

OxidANT (since 2026-10-15)

linux-x64.yml and lint-gates.yml; submodule-pins.yml when a pin moves

linux-arm64, linux-riscv64 (also weekly), windows-x64, windows-arm64-cross through on-request.yml; all five through release.yml on main (since 2026-10-16; the version is Cargo.toml’s)

AccelerANTgine (since 2026-10-16)

linux-x64.yml and lint-gates.yml; submodule-pins.yml when a pin moves

linux-arm64, linux-riscv64, windows-x64, windows-arm64-cross through on-request.yml; no release.yml yet

BeschleunigerBallett, OrchestrANT

every platform lane, on every push and PR to main/develop: the 2026-09-24 rule, until each moves

by hand where a lane has workflow_dispatch

The lanes those two still run on every push, measured 2026-09-25:

Lane

Workflow files

Linux x64 and arm64 (build + test)

linux-x64.yml, linux-arm64.yml, most over a shared reusable-linux.yml (OrchestrANT: one ubuntu-26.04-amd64-arm64.yml for both)

Windows x64

windows-x64.yml

Windows arm64 (cross build, then a run on windows-11-arm)

windows-arm64-cross.yml in BeschleunigerBallett

What else decides whether a lane runs:

  • Path filters. BeschleunigerBallett’s four platform lanes ignore a push that touches only **.md or docs/**. Most submodule-pins.yml callers run only when .gitmodules or third_party/** changes. A workflow that a path filter leaves out does not start at all; it does not report skipped.

  • Push only. jotrockenmitlocken’s web.yml builds and deploys on a push, not on a PR.

This repository’s lanes#

None of them builds a container image. The image chains run on the build hosts.

Workflow

Trigger

linux-x64.yml

every push and PR to main/develop: preflight, the mutation gate in four shards, the docs build

windows-x64.yml

push/PR that touches windows/**, shared/windows/**, versions.env or the workflow itself

llm-stack-serving.yml

push/PR that touches linux/llm-stack/**

submodule-pins.yml

push/PR that touches .gitmodules, third_party/** or the pin suite

actions-selftest.yml

push/PR that touches .github/actions/**, Mondays, and dispatch

consumer-inventory.yml

Mondays, dispatch, and push/PR that touches its own inputs

ghcr-cleanup.yml

Sundays, dispatch

sbom.yml, stale-docs-check.yml

Mondays, dispatch

build-docs.yml, container-ci-windows.yml, lint-gates.yml and the two python-ci-* workflows are workflow_call only: they run when a caller runs.

A skipped job is still not a pass#

A job with an if: reports skipped when the condition is false, and a badge or gh run view shows that like a success. Such jobs remain: the feature check above, python-ci-windows.yml’s build and lint jobs (each gated by an input), and container-ci-windows.yml’s windows-11-arm run job (only with target-arch: arm64 and a run-command). Read the conclusion per job: github-cli-pipeline-monitoring.md.

2026-09-24 to 2026-10-15#

Every platform lane ran on every push and PR, with no commit-message opt-in and no if: on any platform job. The repositories that have not moved still work this way.

Before 2026-09-24#

The Windows lane and the Linux arm64 lane were opt-in per commit: [build-win] or [build-arm] had to be in the pushed HEAD commit’s message (github.event.head_commit.message), or the workflow reported skipped. A consumer note, a run log or a commit message from before that date may still name those two tokens; nothing acts on them any more. Today’s tokens have a different form, [ci <lane>], and are read by on-request.yml.