Skip to content

ci: require Linux matrix success in aggregate checks - #3219

Merged
steipete merged 2 commits into
mainfrom
codex/linux-ci-gate
Aug 26, 2026
Merged

ci: require Linux matrix success in aggregate checks#3219
steipete merged 2 commits into
mainfrom
codex/linux-ci-gate

Conversation

@steipete

@steipete steipete commented Aug 26, 2026

Copy link
Copy Markdown
Owner

Summary

Make the existing lint-build-test aggregate wait for and validate the glibc Linux build/test matrix. Previously it could report success while a regular Linux job failed. The check name, matrix fail-fast setting, macOS/musl path rules, draft behavior and branch-protection settings are unchanged.

The verifier now requires an explicit successful Linux result. Tests cover failure, cancellation, skipped, empty, missing and unknown results across the existing valid path combinations, preserve the older failure cases, and verify the real workflow dependency and argument wiring.

Move the existing portable AntigravityLocalhostSessionLifetimeTests into CodexBarLinuxTests, which runs on macOS and Linux, instead of leaving this Linux-related regression only in the macOS app target. Keep its synthetic loopback socket bound but non-listening until all concurrent requests finish, preventing port reuse during the test. Document the CI contract.

Full-suite validation also exposed a host-dependent Overview scroll test fixture: synthetic coarse CGEvents sometimes converted to zero NSEvent scroll deltas. A separate test-only follow-up now supplies deterministic NSEvent properties, validates those inputs, isolates settings/account state, and preserves all navigation assertions. Boolean assertions avoid dumping controller/store graphs. Production scroll behavior is unchanged; the underlying CoreGraphics trigger is not diagnosed or claimed fixed.

Related context: #2243. This does not identify or fix the cause of the intermittent Linux dispatch crash, change provider networking, upgrade toolchains, or add blanket test serialization/retries. The observed ARM/glibc test failure passed on one exact-job retry; that is not root-cause proof.

Verification

  • bash -n Scripts/ci_verify_test_jobs.sh Scripts/test_ci_path_gate.sh passed.
  • ./Scripts/test_ci_path_gate.sh passed, including result matrix and workflow-wiring checks.
  • CODEXBAR_SUPPRESS_TEST_KEYCHAIN_ACCESS=1 swift test --filter AntigravityLocalhostSessionLifetimeTests passed both moved tests on macOS. Initial-head Linux x64/ARM CI also passed the moved suite; final-head CI remains required.
  • make check passed with zero violations; the moved file also received explicit formatting/lint checks.
  • Independent Codex review reported no actionable blockers.
  • The first full make test stopped at group 68 on three existing StatusMenuOverviewScrollTests cases, repeated on the harness's group retry. The unchanged focused run reproduced them; safe probes observed zero coarse-event deltas and later normal values. The test-only follow-up passed the focused 10-test suite (including 12 fixture input combinations), the exact 115-test/11-suite group, make check, and independent review without retries.
  • Final-head full make test passed all 933 selections in 78 groups: every group first-pass, zero failures, retries or timeouts, 799.2 seconds. Run with test Keychain access suppressed and the allow override unset.
  • Exact-head CI at 9582144959ef1e479d0edfa3023a6892a3e78117 passed: lint, Linux x64/ARM builds/tests/smoke checks, both macOS shards and provider-engine goldens, and the aggregate. Musl was correctly skipped by the unchanged path gate. GitHub initially did not create a run after the follow-up push; reopening the same PR retriggered CI without changing the commit. An earlier same-head run was superseded/cancelled, not a test failure; the final watcher recovered from a local network error.

No real provider account, saved credential, app restart, or external network probe was used. The loopback test uses only its reserved synthetic local port. No changelog entry is needed for this internal CI/test-only change.

@clawsweeper

clawsweeper Bot commented Aug 26, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

@clawsweeper clawsweeper Bot added merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. P2 Normal priority bug or improvement with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Aug 26, 2026
@clawsweeper

clawsweeper Bot commented Aug 26, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed August 26, 2026, 7:03 PM ET / 23:03 UTC.

ClawSweeper review

What this changes

The PR makes the aggregate CI check require a successful glibc Linux matrix, expands result-state verification, and stabilizes related portable and macOS test fixtures.

Merge readiness

⚠️ Ready for maintainer review - 2 items remain

Keep open pending completion of the exact-head Linux and macOS CI jobs; source review found no actionable patch defect. Likely related people: steipete (high confidence; current workflow and test contributor).

Priority: P2
Reviewed head: 9582144959ef1e479d0edfa3023a6892a3e78117

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) The implementation and focused contract coverage are strong, with final merge readiness dependent on completion of the current-head CI run.
Proof confidence 🌊 off-meta tidepool Not applicable: This OWNER-authored CI/test change is exempt from the external-contributor real-behavior-proof gate; completed exact-head CI is the relevant merge evidence.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: This OWNER-authored CI/test change is exempt from the external-contributor real-behavior-proof gate; completed exact-head CI is the relevant merge evidence.
Evidence reviewed 5 items Aggregate wiring: The aggregate job now depends on the regular Linux matrix and passes its result to the verifier, so it cannot complete before that matrix has resolved.
Fail-closed verifier: Any Linux matrix result other than success exits nonzero before the optional macOS and musl path-gate handling.
Contract coverage: The focused shell test covers failure, cancellation, skipped, empty, unknown, and missing Linux results across the valid macOS and musl gate combinations, then verifies the workflow dependency and eighth argument.
Findings None None.
Security None None.

Live Verification

Command: ./Scripts/test_ci_path_gate.sh

Result: FAIL (failed) — execution before step 1 run: sh -lc pnpm install --ignore-scripts --frozen-lockfile failed: ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.24.0.tgz

sh -lc pnpm install --ignore-scripts --frozen-lockfile failed: ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.24.0.tgz

Assertions:

  • FAIL expect_output: CI path gate tests passed

How this fits together

CodexBar’s GitHub Actions workflow combines lint, change detection, platform tests, and Linux builds into an aggregate branch-protection check. The changed verifier consumes those job results and decides whether the aggregate check succeeds.

flowchart LR
A[Source changes] --> B[CI path detection]
B --> C[Linux glibc matrix]
B --> D[macOS and musl jobs]
C --> E[Aggregate CI verifier]
D --> E
E --> F[Branch protection check]
Loading

Before merge

  • Resolve merge risk (P1) - The exact-head aggregate, Linux matrix, and macOS jobs were still running in the supplied check state, so merging before their completed results would leave the changed branch-protection contract unverified.
  • Complete next step (P2) - The remaining action is maintainer confirmation of completed exact-head automation, not a discrete repair.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Changed surface 6 files: 1 workflow, 2 scripts, 2 test files, 1 development document The CI gate change is accompanied by focused contract coverage and test-fixture stabilization rather than a broad product rewrite.

Merge-risk options

Maintainer options:

  1. Verify the exact CI head (recommended)
    Wait for the current-head aggregate, Linux matrix, and macOS jobs to finish successfully before merging the automation change.

Technical review

Best possible solution:

Merge only after the exact PR head shows successful aggregate, Linux x64/ARM, and macOS results, preserving the fail-closed aggregate contract.

Do we have a high-confidence way to reproduce the issue?

Yes, source-reproducible: the base aggregate lacked the Linux matrix dependency/result, while the focused contract script exercises the relevant failing result states.

Is this the best way to solve the issue?

Yes: adding the existing matrix as an aggregate dependency and requiring its explicit success is the narrowest way to prevent a false-green aggregate check.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 4e1f7a3ef362.

Labels

Label justifications:

  • P2: The PR has bounded but important impact on repository merge validation rather than a current user-facing outage.
  • merge-risk: 🚨 automation: It changes which GitHub Actions result determines whether the aggregate branch-protection check passes.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: This OWNER-authored CI/test change is exempt from the external-contributor real-behavior-proof gate; completed exact-head CI is the relevant merge evidence.

Evidence

What I checked:

  • Aggregate wiring: The aggregate job now depends on the regular Linux matrix and passes its result to the verifier, so it cannot complete before that matrix has resolved. (.github/workflows/ci.yml:220, 9582144959ef)
  • Fail-closed verifier: Any Linux matrix result other than success exits nonzero before the optional macOS and musl path-gate handling. (Scripts/ci_verify_test_jobs.sh:24, 9582144959ef)
  • Contract coverage: The focused shell test covers failure, cancellation, skipped, empty, unknown, and missing Linux results across the valid macOS and musl gate combinations, then verifies the workflow dependency and eighth argument. (Scripts/test_ci_path_gate.sh:241, 9582144959ef)
  • Current-head provenance: Blame attributes the changed aggregate and verifier lines to the current PR head, and the previous ClawSweeper review of this same head reported no findings. (.github/workflows/ci.yml:220, 9582144959ef)
  • Exact-head check state: The supplied check state has current-head Linux x64/ARM and macOS jobs in progress; earlier cancelled jobs are from a superseded run rather than evidence of a patch failure. (9582144959ef)

Likely related people:

  • steipete: Current-head blame attributes the aggregate workflow and verifier lines to this contributor, and the supplied PR commits cover both the CI gate and deterministic test fixture work. (role: recent workflow and test contributor; confidence: high; commits: f5686c26aac2, 9582144959ef; files: .github/workflows/ci.yml, Scripts/ci_verify_test_jobs.sh, Scripts/test_ci_path_gate.sh)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Confirm successful completion of the current-head aggregate, Linux x64/ARM, and macOS jobs.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (3 earlier review cycles)
  • reviewed 2026-08-26T22:27:26.061Z sha f5686c2 :: needs maintainer review before merge. :: none
  • reviewed 2026-08-26T22:42:58.266Z sha f5686c2 :: needs maintainer review before merge. :: none
  • reviewed 2026-08-26T22:55:36.858Z sha 9582144 :: needs maintainer review before merge. :: none

@steipete steipete closed this Aug 26, 2026
@steipete steipete reopened this Aug 26, 2026
@steipete
steipete merged commit abe8f91 into main Aug 26, 2026
12 of 17 checks passed
@steipete

Copy link
Copy Markdown
Owner Author

Merged as abe8f9180a75. Local main fast-forwarded and is clean. The aggregate now waits for the regular Linux matrix and rejects every result other than success. The existing portable localhost-session test runs in the shared macOS/Linux target and holds its synthetic loopback port until all requests finish. No provider networking, branch protection, release artifacts, or production scroll behavior changed.

Validation:

  • bash -n Scripts/ci_verify_test_jobs.sh Scripts/test_ci_path_gate.sh and ./Scripts/test_ci_path_gate.sh: passed, including negative result combinations and actual workflow wiring.
  • CODEXBAR_SUPPRESS_TEST_KEYCHAIN_ACCESS=1 swift test --filter AntigravityLocalhostSessionLifetimeTests: both moved tests passed locally; final-head Linux x64/ARM CI passed builds, tests and CLI smoke checks.
  • swift test --filter StatusMenuOverviewScrollTests with test Keychain access suppressed: 10 tests passed, including 12 input combinations. The original full-suite group containing these tests passed all 115 tests in 11 suites without retry.
  • make check: passed with zero violations.
  • env -u CODEXBAR_ALLOW_TEST_KEYCHAIN_ACCESS CODEXBAR_SUPPRESS_TEST_KEYCHAIN_ACCESS=1 make test: all 933 selections/78 groups first-pass, zero failures/retries/timeouts, 799.2 seconds.
  • Independent Codex review: no actionable blockers. The GitHub review also found no source defect; its separate package-bootstrap failure occurred before the requested shell regression ran.

The initial full suite exposed existing host-dependent coarse CGEvent conversion: some synthetic events produced zero NSEvent deltas. A separate test-only follow-up now supplies and verifies deterministic NSEvent inputs, isolates settings/account state, and avoids whole-controller assertion dumps. The CoreGraphics trigger is not diagnosed. The first suite failed on its built-in retry; the final suite above passed without retries.

CI start was delayed after the follow-up push, so the same PR was reopened without changing the commit. One same-head run was superseded/cancelled; the watcher later recovered from a local network error. Neither was a test failure. Final exact-head CI at 9582144959ef1e479d0edfa3023a6892a3e78117 passed lint, Linux x64/ARM, both macOS shards with provider-engine goldens, and the aggregate. Musl was skipped by the unchanged path gate.

Related #2243 remains open: a passing retry of the earlier ARM/glibc dispatch crash is not root-cause proof for that issue's x64/musl production crash. No real provider account, saved credentials, administrator installer execution, or app relaunch was used.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. P2 Normal priority bug or improvement with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant