Task: Classify changes and run targeted local checks in the submit-PR skills
Table of Contents
This page documents a task in the Absorb PR checks locally: targeted checks, local review, CDash submissions story. It captures the goal, current status, acceptance, and any notes or results.
Goal
The pr-raise skill now mandates the full build and ctest for every PR, even doc-only ones. Replace that: classify the changed files, run only the checks the class needs, and record the verification in the PR description. pr-address-review reuses the classification for its per-round verification.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Absorb PR checks locally: targeted checks, local review, CDash submissions |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-08-11 |
Acceptance
- The pr-raise skill classifies the changed files into docs / code (C++) / ci / python tooling; a mixed change runs the union of its classes.
- Only the checks that match the class run locally: a doc-only change runs the site build and nothing heavier.
- The classification rules live in one place that both submit-PR skills read, resolving the shared-rules open question.
- The change class and the verification are recorded in the PR description as a –change bullet.
- pr-address-review applies the same classification to its per-round local verification.
Plan
- The classification rule table lives in
pr-raise(one place both submit-PR skills read);pr-address-reviewlinks to it. ctestgoes viacompass, never raw: the newcompass test runacquires the host-wide build lock and runs ctest;--cdash GROUPruns the CTest.cmake script form (the same shape CI uses) for CDash submissions.- The knowledge doc's local-flow step 3 records the refined CDash
invocation; the shared-rules open question resolves to "the skill
owns the rules" until the gate-reduction task decides whether
pr.ymlneeds its own copy.
Notes
Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario, run
through the QA Validation Runner panel) that verify this task. Link
new ones here as they're created; the scenario doc itself links back
via its "Verifies task" field.
| Scenario | State | Notes |
|---|---|---|
PRs
| PR | Title |
|---|---|
| #1966 | [agile] Classify changes and run targeted checks in submit-PR skills |
Review
| # | Comment summary | File | Decision | Notes |
|---|---|---|---|---|
| 1 | _cmd_test_run crashes when the build lock is unavailable (no fcntl): unguarded lock_file.close() and a ores-build.log.None path |
compass.py | accepted | Guarded like cmd_build; regression test test_run_degrades_without_fcntl added |
| 2 | Knowledge doc local-flow step 2 still says "build + ctest --preset" |
ci-workflows-and-local-checks.org | accepted | Now: compass build + compass test run |
| 3 | ctest runs twice per PR (plain run + CDash script form) | pr-raise/SKILL.org | declined | Intentional: plain run for fast feedback; the script form rebuilds incrementally and submits for CDash visibility (story acceptance) |
| 4 | Codegen-drift step runs build --direct codegen_templates, a target that does not exist (only tangle_codegen_templates) — following the skill skips the check |
pr-raise/SKILL.org | accepted | Added codegen_templates alias to BUILD_TARGET_ALIASES; test_direct_build.py asserts every alias resolves to a known direct-build target |
| 5 | Classification table has no catch-all bucket, unlike pr.yml's classify *) code=true default — unmatched paths map to zero classes and skip all checks |
pr-raise/SKILL.org, ci-workflows-and-local-checks.org | accepted | Added "anything else" row (code class checks) to both tables |
| 6 | _cmd_test_run duplicates cmd_build's lock/log lifecycle; factor into a shared helper |
compass.py | declined | Two call sites only; factoring awaits a third caller (reviewer: not blocking) |
Result
pr-raise now classifies the diff (docs / code (C++) / ci / python
tooling; mixed = union) and runs only the matching checks. The rule
table lives in pr-raise alone; pr-address-review links to it.
ctest goes via the new compass test run (host-wide build lock;
--cdash GROUP for the CTest.cmake script form), never raw.
Verification for this change (python tooling + docs classes): compass
suite 114 passed / 1 skipped; regenerate + codegen drift clean (no
in-tree changes); local site build clean. All acceptance bullets met.
The story stays STARTED: the gate-reduction task (pr.yml) and the
local-review task follow.