Skip to content

ci: feat-cmux-next pushes run the web checks and cmux-next checks again - #22205

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
ci/base-web-on-push
Oct 19, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
ci/base-web-on-push

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Every push to feat-cmux-next runs ci-web's checks (web / react-apps-check, typecheck, tests) and the cmux-next checks job again, under the same check names a pull request gets. Routing now covers everything the push brought, not just its last commit.

Why

On 2026-10-10, cx-g34i removed this workflow's push trigger ("push CI is the Swift build only"). Since then, nothing has run the web checks on the base:

What changed

  • cmux-next-web.yml: a push trigger on feat-cmux-next, with no paths filter. A path list here would drift from web_subareas.py.
  • ci-web.yml: a new optional input, push_base (the push's event.before). The scope job fetches that commit and routes from push_base..HEAD. Pull requests leave it empty and route from the merge commit, as before.
  • web_subareas.py route: honors WEB_SUBAREAS_BASE. If it can't resolve the base (a new branch's zero SHA, or a base GitHub won't serve), it runs every subarea and writes a ::warning::.
  • cmux-next.yml checks job (god files, concurrency, crash safety, l10n): it runs on feat-cmux-next pushes again. cx-g34i had excluded them, so its reds also went unseen until a PR hit them. It is a 10-minute Linux job.

Cost

A push that touches no web path runs two small Linux jobs: the scope job and web-status. This is the push volume cx-g34i was protecting, and those pushes cost little now. A webviews push runs the same lanes a webviews PR does. Concurrency is per SHA, so a later push doesn't cancel an earlier verdict that base-aware excusal reads.

Testing

tests/test_cmux_next_web_base_push.py is committed red first, in its own commit, then fixed:

  • base: 4/4 FAIL (no push trigger, no push_base input, a multi-commit push routed from its last commit only, and the checks job excluded on push);
  • head: 4/4 PASS. The checks-job assertion came in the second commit; it fails on the base because the exclusion is there.

Observed / Not run

  • Ran: the new test (red, then green), tests/test_ci_change_areas.py (227 passed), tests/test_cmux_next_checks_workflow.py (77 passed), the route, route-replay, next-batch and generated-catch-up tests, test_web_validation, test_webviews_tests_per_file, test_cmux_binaries_prune, test_web_bundle_key_inputs.sh, test_ci_self_hosted_guard.sh, and actionlint on both workflows.
  • Fails on base too: tests/test_ci_workflow_run_sources.py ("ci.yml has no tests job"), identically without this change.
  • Not run: a real push event. That happens on the first push to feat-cmux-next after merge. A workflow_dispatch run on this branch is linked below.

Review: subagent at db9e05d, no blockers (zero or force-push base, callers, push-sensitive steps, cost, test, body). I applied its minor points (a ::warning:: on an unfetchable base, and wording) in 0927e1b.
Runtime test: https://github.com/manaflow-ai/cmux/actions/runs/39341605218 (workflow_dispatch of cmux-next-web.yml on db9e05d). Every web lane ran. The two react-apps-check shards failed at check:browser-lanes on test/agent-pane-older-rows-fade.test.ts, the base red #22118 is fixing. That is the base red this workflow now shows on the base itself.

Changelog

none

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits October 19, 2026 16:24
…ush (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…le push

cmux-next-web.yml lost its push trigger on 2026-10-10 (cx-g34i). Since then a
web red a direct push brings goes unseen until a pull request trips over it,
and a pull request's new web red passes as a base red because the base has no
web run to compare with (#20633 merged a new lint red next to the eager JS
budget red). The trigger is back with no paths filter: ci-web's scope job now
routes from everything the push brought (event.before), not its last commit,
so a push with no web path runs only the scope and status jobs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 0927e1b: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr22205 -f ref=ci/base-web-on-push -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check (2) failed: no known signature; failed step: Check webviews (Oxlint, Oxfmt, type check). This PR merged before its CI finished: fix forward on main.

CI failed on 0927e1b67f (run 39342520161 attempt 1): 3 unknown.

Job Verdict Why
web / react-apps-check (2) unknown no known signature; failed step: Check webviews (Oxlint, Oxfmt, type check)
web / react-apps-check (1) unknown no known signature; failed step: Check webviews (Oxlint, Oxfmt, type check)
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (2), web / react-apps-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; do not merge until green; see lane-rules
red: web / react-apps-check; do not merge until green; see lane-rules
red: web / react-apps-check (1); do not merge until green; see lane-rules
red: web / react-apps-check (2); do not merge until green; see lane-rules

@greptile-apps

greptile-apps Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no blocking issue was found.

Summary

Restores web checks and cmux-next checks on pushes to feat-cmux-next.

  • Every feat-cmux-next push now gets its matching web checks.
  • The cmux-next checks job now runs on feat-cmux-next pushes.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  Push[Push to feat-cmux-next] --> Web[cmux-next web]
  Push --> Checks[cmux-next checks]
  Web --> Base{Push base available?}
  Base -->|Yes| Diff[Classify push_base to HEAD]
  Base -->|No| All[Run every web subarea]
  Diff --> Selected[Run selected web checks]
Loading

Reviews (2) · Last reviewed commit: "ci: feat-cmux-next pushes run cmux-next ..." · Reviewed by Greptile

…tchable push base

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo changed the title ci: feat-cmux-next pushes run the web checks again, routed by the whole push ci: feat-cmux-next pushes run the web checks and cmux-next checks again Oct 19, 2026
@teamleaderleo
teamleaderleo merged commit a899423 into feat-cmux-next Oct 19, 2026
@teamleaderleo
teamleaderleo deleted the ci/base-web-on-push branch October 19, 2026 23:36
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

FYI @lawrencecchen: this partly reverses cx-g34i (10-10). feat-cmux-next pushes run the web checks and cmux-next checks again, so a direct push's red shows on that push, and a PR's own red can't pass as a base red. This follows Leo's direction on 10-19. A push that touches no web path adds only the scope and status jobs, two small Linux jobs, plus the 10-minute checks job. Merged at 0927e1b.

🤖 Generated with Claude Code

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