Skip to content

CI: defer macOS Debug from pull requests (D3, CR-195) - #454

Merged
luisleo526 merged 7 commits into
mainfrom
ci/d3-macos-debug-main
Oct 20, 2026
Merged

luisleo526 merged 7 commits into
mainfrom
ci/d3-macos-debug-main

Conversation

@luisleo526

Copy link
Copy Markdown
Collaborator

CI simplification D3 (CR-195): pull requests no longer build the macOS Debug leg.

  • An expression-driven matrix exclude removes exactly macos-26 + Debug on pull_request. Ubuntu Release/Debug and macOS Release keep their build names.
  • Every non-PR event (push to main, workflow_dispatch, schedule, release) keeps the full matrix; triggers and the release workflow are unchanged.
  • The aggregate still requires the selected matrix's result with no missing-leg exception; its result step and the build strategy are pinned, with must-fail mutations for lost PR or full-event coverage and for accepting absent or skipped matrix results.
  • docs/ci.md updated (event table, PR policy, docs-only counts, runner description); every rewritten sentence is named in the D3 commit message for doc-reverts.

Stacked on D1 (#449): main 0212cab is merged in (merge commit 4008e2b). Own change vs main: 6 files, +180/-21.

Gate: lab preflight first, then the full steps; review per O19 is a Codex read (ORG-CX lane org-cx-codexread). Landing is L6's.

🤖 Generated with Claude Code

luisleo526 and others added 7 commits October 20, 2026 05:36
…egistration floors, and defers the slow verifier self-test classes (D1, CR-195)

On pull_request the Release matrix leg and the kernel-only job now pass
--exclude-label slow, like Debug and sanitizers already did. Push to main,
workflow_dispatch and release keep every row and every class, so coverage is
unchanged and only its timing moves.

- ci_preflight.py: the two policy checks that forbade this (only PR Debug
  matrix jobs may exclude slow rows; kernel-only must keep its full
  population) become one exact rule with must-fail forms; docs/ci.md says the
  same. This REVERSES the previous policy. The must-fail test for the
  full-population rule edits the `with:` block of the reusable-workflow job
  corpus-parity-subset (it has no `steps:`).
- ci_verify.py: EXCLUDED_REGISTERED_MIN gains release 895 and kernel 337
  (KERNEL_MIN_TESTS), derived on one registered-count basis from the PR-world
  job data, to be confirmed by a lab ctest -N. 337 keeps today's 34-row slack
  and stays below the 371 registered in all 16 sampled pull-request and push
  runs; 'release' stays 895.
- test_ci_verify.py classes are partitioned into FAST (13) and SLOW (9) in
  scripts/ci_verifier_classes.py; the preflight verifier-tests stage runs the
  FAST classes on every pull request and the SLOW ones only when
  scripts/ci_verifier_paths.py finds a path the verifier reads; any unknown
  path or class runs. Non-PR events run everything. HistoricalProviderPins is
  skipped without the private overlay and is FAST by decision.
- preflight has `needs: changes` and `if: ${{ !cancelled() }}` (pinned in
  ci_preflight.py); the docs say so.
- doc anchors: PRIVATE_FIXTURE_PROFILE_FLOORS moved from ci_verify.py:789 to
  ci_verify.py:802 (CONTRIBUTING.md, docs/pages/contributing-llm.md,
  docs/pages/native-engine.md, docs/ci.md).
- docs/ci.md gains L6's rule for the deferred rows: a red on main in an
  excluded row or class blocks the next release cut and is fixed or reverted
  within the hour. AGENTS.md lists Release and kernel-only among the jobs that
  exclude the slow rows.
- New tests assert that push, dispatch and release carry no exclusion and no
  class filter.

Doc sentences this change removes or rewrites ON PURPOSE (doc-reverts check):

- "The PR registration floors after lane FIX-E1E2 are 773 for Debug and
  sanitizers and 782 for native ..." (docs/ci.md), introduced by b2a578c
  ("docs: make every README and doc page true before the release
  (DOCS-ENGINE) (#300)"). Those numbers were already stale against
  scripts/ci_verify.py (876/867/963) and are now the keys of
  EXCLUDED_REGISTERED_MIN.
- "`preflight` waits for nothing." (docs/ci.md), introduced by 133f571 ("1.0
  prep: CI flake fix, docs-only CI skip, benchmark refresh (supersedes #303,
  #304, #307)"): preflight now waits for `changes`.
- "Preflight starts at once, and the proof jobs start alongside it" and
  "`changes` and `preflight` wait for nothing and run on every event"
  (docs/ci.md), same reason as 133f571 above.
- "than documentation runs preflight, both Release jobs, kernel-only and the
  parity subset with their full sets" and "both Debug jobs, sanitizers and
  native-live run the registered set excluding the 29 CTest rows labelled
  `slow`" (docs/ci.md): now stated for Release and kernel-only too.
- "A Release leg runs its full population on every event" and "Every event
  runs the whole kernel set" (the `build` and `kernel-only` rows of the
  timeout table in docs/ci.md): a pull request now excludes the slow rows.
- "The two new keys are derived, not measured: each is the registered count in
  the sampled public pull-request runs" (docs/ci.md): the kernel key differs
  from the Release one.

Note: scripts/release.yml runs no CTest and no ci_verify, so "release keeps
every row" means only that no --exclude-label is present in any release path;
the release workflow itself is unchanged.

The registration floors for Release and kernel-only (895 and 337) are derived,
not measured; a lab run of the release and kernel steps confirms or corrects
them.

This is the squash of 11cd290, 1b01244 and ef8fc5d (doc-reverts judges
every commit with its own message; the three were folded so that one message
names every sentence).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This change stacks on 14c3365
(14c3365).

Use an expression-driven matrix exclude to remove exactly macos-26 + Debug
on pull_request. Ubuntu Release/Debug and macOS Release keep their existing
build names. Every non-PR event retains the complete matrix, including push,
workflow_dispatch, schedule and release contexts; existing triggers and the
separate release workflow stay unchanged.

The aggregate continues to require the selected matrix's result, with no
missing-leg exception. Pin its whole result step as well as the exact build
strategy, and add must-fail mutations for lost PR or full-event coverage and
for accepting absent or skipped matrix results. Preserve the classified
documentation-only skip.

Update the event table, PR policy, docs-only counts, runner description and
historical timing context. Keep the PR's own macOS Release proof and Release
registration floor. Preserve the existing pinned AGENTS.md citation in place.

The following parent documentation sentences are intentionally rewritten.
Each quotation reproduces the old sentence in full, including its consecutive
words, so this commit's own message names the changes for doc-reverts:

docs/ci.md:

- "A PR that changes more than documentation runs preflight and the parity subset with its full set; both Release jobs, both Debug jobs, kernel-only, sanitizers and the native cell of native-live run the registered set excluding the 29 CTest rows labelled `slow` in `tests/CMakeLists.txt` ([PR tier versus MAIN/RELEASE](#pr-tier-versus-mainrelease-what-is-excluded-where))."
- "A pull request or a push to `main` whose change is documentation only runs `preflight` and the documentation build and skips every proof job: the four `build` legs, both macOS legs among them, `sanitizers`, `kernel-only`, `native-live` and `corpus-parity-subset`."
- "A skipped matrix is never expanded, so a documentation-only run shows one skipped `build` check under its unexpanded name instead of the four legs."
- "The `build` matrix retains its four legs and their `build (<image>, <type>)` names."
- "The two hosted macOS legs stay on `macos-26` (M1, 3 cores, 7 GB)."
- "A Release leg runs its full population on push and dispatch events; a pull request's Release legs, a fork's included, exclude the `slow` rows like its Debug legs, and that pull-request time is to be measured on real PR runs."

AGENTS.md:

- "GitHub Actions is advisory: PR Release, Debug, kernel-only, sanitizers and native jobs exclude the measured `slow` CTest rows; push-to-main and manual CI dispatch run every row, and a documentation-only change runs preflight alone."

CONTRIBUTING.md:

- "The GitHub Actions jobs (build on Ubuntu + macOS in Release and Debug, sanitizers, ctest, the source guards, the install/`find_package` smoke test and the parity subset) are advisory."

Verification: NOT RUN. This lane is restricted to file edits and permitted
read-only inspection; no repository code, parser, linter, test, build or corpus
verification was run. Lab preflight tests, doc-anchors and doc-reverts, the
PR's own GitHub CI and the required Claude Opus read remain pending.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
D3 (macOS Debug leaves the pull-request matrix) was written on the pre-merge D1
squash 14c3365; main's final D1 is textually identical to it in the four files
that conflicted (AGENTS.md, docs/ci.md, scripts/ci_preflight.py,
scripts/test_ci_preflight.py: git diff 14c3365 0212cab is empty for them),
so each conflict resolves to the D3 side. No D1 text is dropped; D3's own
rewritten sentences are named in the D3 commit message.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Both intents kept: D3 (macOS Debug excluded from pull-request builds, its
ci.yml matrix exclude and docs/ci.md build row) and #462 (no timeout-minutes
anywhere; scripts/ci_preflight.py requires their absence). The single
conflict, docs/ci.md's preflight row, takes main's wording (owner #827
removed every declared job timeout; GitHub's 6 h platform maximum); the
build row keeps the D3 text.

Co-Authored-By: Claude Code <[email protected]>
Brings in #461 (engine release jobs on pf-ci-release). It touches
.github/workflows/promote-baseline.yml, .github/workflows/release.yml,
.github/actionlint.yaml, docs/ci.md, scripts/ci_preflight.py and
scripts/test_ci_preflight.py; the merge has no conflict (this branch changes
ci.yml, AGENTS.md, CONTRIBUTING.md and different regions of the other three).
No resolution edits were made.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@luisleo526
luisleo526 merged commit eed6598 into main Oct 20, 2026
19 checks passed
luisleo526 added a commit that referenced this pull request Oct 20, 2026
…hecks-2

#454 landed the build-gate result-policy pin (GATE_STEP, AUTHZ_RESULT, authz
routing) and its mutation tests; #464 carries the authz canon, D1/D3 matrix
and docs. Conflicts resolved keeping both intents:

- AGENTS.md: keeps both the #454 GitHub-Actions advisory rewording and the
  branch's authz/labels paragraph and docs-only "among verification jobs".
- docs/ci.md: keeps main's D3 matrix paragraphs and the branch's owner
  October 20 runner rulings; every ci_preflight.py citation re-measured
  against the merged file (130-132, 135-139, 474-481, 482-497, 77-89).
- scripts/ci_preflight.py: GATE_STEP (with AUTHZ_RESULT) is kept whole; the
  #454 exact-step pin is re-expressed for the canon's two-step gate as
  "last step == GATE_STEP", since authz_workflow_findings already pins the
  gate to exactly two steps with AUTHZ_REFUSE_STEP first. BUILD_STRATEGY
  carries D3's PR-only macOS Debug exclusion with the ci-spot/pool includes.
- scripts/test_ci_preflight.py: both PRs' mutation suites kept; no test
  assumes a single gate step.

Co-Authored-By: Claude Code <[email protected]>
luisleo526 added a commit that referenced this pull request Oct 22, 2026
…, squash of #477) (#480)

One tree-identical squash of the CR-233 branch (PR #477), on engine main 20267dd, so that the doc-reverts gate judges the change once, against main, with this message. It replaces the branch's eleven commits (f82ef8a, 0d63b1b, b4a98a4, cfda278, 9f33e1b, a merge of main, 64137d8, ab12867, 60bcfe2c, 8c2386ed and the control test 077d3ebb); the branch is kept as ci/cr233-pr-split-r2.

What changes:
- ci.yml keeps only the PR wall (authz, changes, preflight, Release/Debug build, corpus-parity-subset, build-gate); the full-event jobs (preflight-slow, macOS build, sanitizers, kernel-only, native-live, full corpus parity) move to ci-post.yml on pf-gcp-post; docs build/deploy split into docs.yml and docs-post.yml; corpus-parity-subset becomes its own workflow.
- scripts/ci_preflight.py, its tests and docs/ci.md follow the split (runner contract, PR vs post aggregates, PR_PROOF_JOBS, PR fast rows).
- scripts/check_two_world_registration.py models a parenthesised boolean group and get_test_property (property reads bind NOTFOUND); tests/CMakeLists.txt carries the PR-fast-rows guard; control tests 21 and 22 cover both.

doc-reverts: docs/ci.md rewords or drops sentences introduced by earlier commits on main. They are named here: a8089b2 (the GCP fleet routing, #474), 21ba62b (native-live and the Ubuntu Debug leg as pool-only checks, #464), 03b2406 (release jobs on pf-ci-release, #461), 3c19a69 (Linux x64 jobs on the pf-ci-spot pool, #420), 133f571 (1.0 prep, docs-only CI skip, #303), d3cca9e (docs: migration semantics, publication guards), eed6598 (defer macOS Debug from pull requests, CR-195, #454). Each deleted sentence is superseded by the PR/post split described above; none is a silent revert.

Proof: the previous head of this tree failed CLOUD proof rj-20261021t210656-9f91b8 on the causes fixed here (get_test_property unmodelled in the two-world walk, a stale macOS anchor, a stale aggregate lane list); this commit has not been run by its author, the next CLOUD proof is its first run.

Co-authored-by: Claude Sonnet 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant