Skip to content

S-CI2: docs-only CI <=5min via preflight-gated job conditionals (no paths filters) #730

Description

@jason931225

Cut wall-clock CI on documentation-only PRs to <=5 minutes WITHOUT defining any workflow-level paths: or paths-ignore: filter, so every required branch-protection context is still created and still reports on every pull request. This is route (a) from the 2026-08-07 blocking note, confirmed reachable 2026-08-08.

WHY THE CONFLICT DISSOLVES. The gate at scripts/check-foundation-gates.mjs:226-227 forbids a MECHANISM, not this bead's GOAL. Its regex /^ paths(?:-ignore)?:/m is anchored to four-space indentation - the on: trigger block - and ci.yml states the rationale in exactly those terms: a paths filter means the workflow never runs, so the check run is never created and the required context stays Pending forever. A job-level if: is a different thing: the workflow runs, the check run IS created, and the job reports conclusion 'skipped', which branch protection accepts. ci.yml already has a preflight job that runs first and already uses conditional execution, so the docs-only signal has a natural home.

IMPLEMENTATION. preflight emits a boolean docs_only output computed from the PR's changed-file set; the expensive jobs (backend, the postgres-reachability jobs, company-conformance, dev-up-smoke) carry if: needs.preflight.outputs.docs_only != 'true'; preflight and repo-gates always run. Any failure computing the diff yields docs_only=false - fail closed.

OWNED ROOT: .github/workflows/ci.yml ONLY.
EXPLICITLY NOT OWNED: scripts/check-foundation-gates.mjs. The gate is not to be weakened, relaxed, or exempted by this bead. If the goal proves unreachable without editing it, STOP and escalate rather than edit it.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions