Skip to content

ci: a no-verdict compile is never a base red; shas are masked in compared error lines - #26816

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
base-red-sha-normalise
Oct 28, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
base-red-sha-normalise

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Follow-up to #26798. scripts/ci/base_red_excuse.py (used by gh-merge-green) and next-batch decide whether a red on a PR is "the same red as the base". The fleet Release compile's red while the controller was wedged is cmux-next/compile is not a pass for <sha> (no result). Error lines were compared with only digits masked, so the PR's line and the base's line never matched because each names its own sha. Masking shas alone would have been wrong, though: it would excuse a compile that compiled nothing, and a Swift PR could land unbuilt.

The rule this PR enforces: a fleet compile "no result" is an infra non-verdict, not a test failure. It is never excused as a base red, even when the PR and base show the identical normalised error. It may be set aside only when another job at that same head gave a real compile pass: the Mac Release compile fallback green, or cmux-next/compile success.

Change

  • base_red_excuse.judge: a failed job whose log says it gave no compile verdict is refused, whatever the base shows. It fails closed: of compile-status's own error lines, only cmux-next/compile is not a pass for <sha> (fail) is a real compile red. Every other state (no result, unavailable, mismatch, unreadable, pending, last: ...), could not post the pending status and bad head sha count as no verdict, as does the app compile's No build-fleet verdict for ... from ci(cmux-next): a build-fleet app compile with no verdict fails, never green #26798. Only the job's own ##[error] lines count, never the script text the log echoes. It is set aside, with an audit line ignored '<job>': ... compiled <sha> and passed, only when one of these holds at the same head:
    • the newest attempt of the Mac Release compile job (cmux-next Release compile (Xcode 26)) at that exact sha concluded success, with its Release compile or Reuse that pass step green. The newest attempt decides, so an older pass doesn't count over a newer failure. release-compile-fast-admission, a Linux wrapper with the same check name, has neither step and never counts. A check run whose sha is null or different doesn't count either;
    • the newest cmux-next/compile commit status is success.
  • next_batch.expand_job: such a job, or an unreadable log of a compile job that can end without a verdict, is keyed by its own job id (no compile verdict (job N, never a base red)), the same way crashes already are, so a base probe never excuses it.
  • Compared error lines now mask commit shas before digits: a full 40-hex sha, or 7–39 hex characters right after a word that names a commit (commit, sha, tree, revision), any hex digits at all there. Any other hex id, such as an artifact hash, is compared as is. A real red that differs only by the commit it names is still excused. Nothing else gets looser: steps, test names, crash and truncation rules are unchanged.

Tests

  • tests/test_base_red_excuse.py NoVerdictCompileIsNeverABaseRed:
    • no-verdict with nothing else compiling the head is refused, even when the base has the same "no result" line;
    • the same holds for the app compile's "No build-fleet verdict" line;
    • it is ignored when the Mac Release compile passed at the head, but a skipped run or one from another app does not count;
    • it is ignored when cmux-next/compile succeeded, but not when the newest status is failure;
    • a real red differing only by its embedded sha is excused;
    • a different error is not;
    • the admission job of the same name, an older pass under a newer failed attempt, and a skipped run, a run from another app or one with a null or different sha are not passes; a reused pass for the same inputs is;
    • a real fleet red whose log echoes the no-verdict script text is not set aside;
    • other hex ids (artifact deadbeef1 vs artifact abcdef12, for deadbeef1 vs for abcdef12) are not equated;
    • every compile-status state except (fail) is no verdict, and a real (fail) is compared with the base;
    • next-batch: an unreadable no-verdict compile log is keyed by its own job.
  • tests/test_next_batch.py: a no-verdict compile is keyed by its own job.
  • On today's code, most of the new excuse tests fail; all pass on this head. Locally, test_base_red_excuse, test_next_batch, test_next_batch_groups and test_test_reds all pass (244 tests). Checked against the real logs too: both "no result" fleet Release compile jobs and the "No build-fleet verdict" app compile job are recognised, and the [launch-polish] Add native human setup guide #26741 green log is not.

Risk: low. Every change except the sha mask makes the excuse stricter. The sha mask only ever applies after a no-verdict compile has already been handled.

Agent session: agent session

🤖 Generated with Claude Code

…r lines

base_red_excuse compared error lines with digits masked, so the fleet
Release compile's "cmux-next/compile is not a pass for <sha> (no result)"
never matched between a PR and the base. Masking the sha alone would have
excused it, letting a Swift PR land with nothing having compiled it.

Now a compile check with no verdict (no result / unavailable / mismatch /
unreadable, or the app compile's "No build-fleet verdict") is refused,
whatever the base shows. It is set aside only when the same head has a
real compile pass: a green "cmux-next Release compile (Xcode 26)" check
run or a cmux-next/compile success status. next-batch keys such a job by
its own job id so the base never excuses it. Commit shas (7-40 hex with a
digit and a letter) are masked in compared error lines, so a real red
that names each run's own commit still matches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 78e86fa: 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=pr26816 -f ref=base-red-sha-normalise -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Package dependency lists sorted is not red on the base 382bbd6; do not merge until green; see lane-rules

…echoed script

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Oct 28, 2026
@blacksmith-sh

This comment has been minimized.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-reoc9l created for this PR by the cmux coordinator.

…shas only

Review findings on #26816:
- compile_pass_at took any green "cmux-next Release compile (Xcode 26)"
  check run, a name release-compile-fast-admission shares, an older pass
  over a newer failed attempt, and a null head_sha. It now reads the job
  of each check run at the exact sha, newest first, counts only jobs with
  the Mac compile's own steps (Release compile / Reuse that pass), and
  the newest of those decides.
- SHA masked any mixed-hex id. It now masks a full 40-hex sha, or 7-39
  hex right after a word that names a commit (commit, sha, tree, head,
  base, revision, ref, at, for); other hex ids are compared as they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@cursor

cursor Bot commented Oct 28, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

teamleaderleo and others added 2 commits October 28, 2026 03:45
Review findings on #26816 (second round):
- Of compile-status's own error lines, only "(fail)" is a real compile
  red; every other state (pending, pass it could not post, last: ...),
  "could not post the pending status" and "bad head sha" are no verdict.
- next-batch keys an unreadable log of a no-verdict-capable compile job
  by its own job id.
- Commit sha masking: a full 40-hex sha, or 7-39 hex after commit, sha,
  tree or revision (any hex, so "commit 1234567" too); generic words
  like "for" or "at" no longer mask.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
A check run id is not guaranteed to be its Actions job id. compile_pass_at
now takes the job from details_url (as main_fix_evidence.job_for does)
and checks its run, sha and name; the tests give check runs and jobs
different ids.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@blacksmith-sh

blacksmith-sh Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Found 11 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp6hx0x41z/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmposjk8per/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
build_only must be a conjunctive exclusion on the helper, signing, and publication jobs
, and must not gate the unsigned app build/
build_only must be a conjunctive exclusion on the helper, signing, and publication jobs
, and must not gate the unsigned app build
View Logs
nightly.yml must derive the embedded key and sign every appcast through the helper/
nightly.yml must derive the embedded key and sign every appcast through the helper
View Logs
test_prepare_runs_on_linux_and_executes_no_mach_o (main.NightlyPooledRoutingTests.t
est_prepare_runs_on_linux_and_executes_no_mach_o)/
test_prepare_runs_on_linux_and_executes_no_mach_o (main.NightlyPooledRoutingTests.t
est_prepare_runs_on_linux_and_executes_no_mach_o)
View Logs
test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live (main.Workflow
Tests.test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live)/
test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live (main.Workflow
Tests.test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live)
View Logs

...and 1 more test failures. View all on Blacksmith

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

judge() set aside any failed job printing a no-verdict line once a compile
pass existed; a non-compile job's real red could ride on it. Only jobs in
NO_VERDICT_JOBS take that branch now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@teamleaderleo
teamleaderleo merged commit f018491 into feat-cmux-next Oct 28, 2026
167 of 171 checks passed
@teamleaderleo
teamleaderleo deleted the base-red-sha-normalise branch October 28, 2026 13:04
@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40693729434 at 3df9106 failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at b02480c. This pull request is one of 2 merged since: #26816, #26700.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

This branch had an error being deployed

1 failed and 2 inactive deployments
artifacts — 78e86fae Deployed Oct 28, 2026 by teamleaderleo via publish to R2 #71781
sentry-dsyms — 78e86fae Deployed Oct 28, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #71781
ci-routing-agent — 78e86fae Deployed Oct 28, 2026 by teamleaderleo via wait for same-key tree publisher #71781
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:high Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant