CI workflows and local checks

Table of Contents

Summary

GitHub runs no PR gate: the pr.yml workflow was deleted, including its classifier, and branch protection has no required check. The absorb-PR-checks-locally story's submit-PR skills classify the change and run only the matching checks before raising the PR; the review is the quality backstop on GitHub. GitHub keeps the continuous builds, nightlies, site deploy, coverage, and housekeeping bots. This document is the inventory, the fate of every check, and the classification rule table.

Detail

The PR gate

There is no PR gate. The pr.yml workflow gated every pull request to main until the gate-reduction task deleted it: the classify job (the path classifier) and pr-gate (the sole required check, which aggregated classify) went with it, and the branch-protection required check was removed. The site, roundtrip, and drift checks it once ran now run locally (see the fate table below).

The workflows that touch PR branches:

  • claude-code-review.yml runs the automatic Claude review on every PR event (opened, synchronize, ready_for_review, reopened) — ~1-2 min.
  • claude.yml runs the review on demand via an @claude comment.
  • misspell.yml runs the misspell fixer on every push to every branch and opens auto-fix PRs (a bot, not a gate).

Fate of each check

Check Fate Where it runs instead / rationale
classify, site, roundtrip, cmake-sources-drift, codegen-drift, pr-gate deleted with pr.yml classify: path classifier, audit trail only — nothing consumed its buckets once the gate shrank. Site: local compass build --direct site (same emacs export; ~5-10 min locally); optional CDash submission as experimental. Roundtrip: local python3 scripts/ore_domain_roundtrip_check.py. cmake-sources-drift: local python3 projects/ores.codegen/scripts/regenerate_cmake_component_files.py --all --check; the codegen-sync-cmake-sources skill wraps it. codegen-drift: local tangle (compass build --direct codegen_templates) then check_component_drift.py with the same components. pr-gate: no branch-protection required check remains.
claude-code-review retired Local: the code-review skill runs before submit; findings go into the task's * Review table and are addressed in the round. The on-demand @claude trigger (claude.yml) stays.
misspell retired Local misspell check folded into the review pass.
site-cdash (Doxygen) stays build-site.yml builds the full site + Doxygen and deploys on main push.
continuous-* (linux/macos/windows) stays Every 2/3/12h + tags: full build matrix + ctest, submitted to CDash as continuous.
nightly-linux stays Daily: full build + ctest -VV to CDash Nightly + valgrind dynamic analysis.
nightly-format stays Daily clang-format drift → auto-fix PR; local tangle_clang_format exists.
ore_coverage stays Coverage on main push.
shell-script-drift / template-drift stays Cheap main-push checks; local tangle equivalents exist (tangle_shell_scripts, tangle_codegen_templates).
codeql-analysis, stale stays Manual security scan; housekeeping bot.

Change-classification rules

The submit-PR skill classifies the diff and runs only the matching checks. The classes mirror the retired pr.yml classifier's buckets, with one addition (python tooling):

Class Paths Checks the submit-PR skill runs
docs doc/*, assets/*, .claude/*, *.md, *.org, projects/*/modeling/* (org/puml/png), external/* vendored site build; codegen drift when projects/*/modeling/* changed; review; misspell
code (C++) projects/ores.* C++ sources, headers, *.cmake, CMakeLists.txt full build + ctest; roundtrip; cmake-sources-drift; codegen-drift; review; misspell; CDash experimental
ci .github/*, projects/ores.codegen/library/templates/* site; roundtrip; drift checks; review
python tooling projects/ores.compass/*, projects/ores.codegen/* (non-template) component test suite; drift checks; review; misspell
anything else any path matching no bucket above code class checks; review; misspell

A mixed change runs the union of its classes' checks.

The python tooling class exists because the retired classifier bucketed ores.compass and ores.codegen changes as docs, so their test suites never ran anywhere; locally they always do.

The projects/*/modeling/* paths under docs carry a codegen-drift exception: the retired pr.yml codegen-drift job ran unconditionally, because a model-only edit classifies as docs and would otherwise skip the check that catches forgotten regeneration. A change touching the modeling paths also runs the codegen drift checks (tangle, then check_component_drift.py).

Local verification flow

  1. Classify the diff with the rule table.
  2. Run the checks for the class (site build, or compass build + compass test run).
  3. Submit the build to CDash as experimental for visibility (./compass.sh test run --preset <preset> --cdash Experimental; runs the CTest.cmake script under the build lock, same shape CI uses).
  4. Run the review skill locally; record findings in the task's * Review table; address them.
  5. Record the verification in the PR description as a --change bullet (e.g. "Verification: doc-only change; local site build clean").
  6. Raise the PR. GitHub runs no gate; merge when the review round is complete. Continuous builds and nightlies stay on GitHub.

Open questions for the implementation tasks

  • How experimental submissions are tagged and filtered out of the continuous/nightly dashboards on CDash.
  • Which exact test suites run for python tooling changes (compass, codegen).

See also

Emacs 29.3 (Org mode 9.6.15)