Repository navigation
nightly: spend no notarization on a build a newer published build is above - #33109
Conversation
…above Apple caps notarizations per day. On 2026-11-03 the cap (429 RATE_LIMIT) failed every nightly for hours while about ten runs signed side by side, and only the newest of them could publish. pick-nightly-sign-runner, which runs right before signing, now reads the cmux NEXT feed: when its highest build is above this run's (the rule publish-nightly applies, nightly_version.py), overtaken=true and signer-app and build-sign-notarize-nightly skip, as they do for resolve's superseded. Only a published newer build counts, never a newer push alone (#28961); an unreadable feed signs as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f724bb1ff9295c18fee7
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on e8b1b7d to compare; do not merge until green; see lane-rules Shipped in:
|
|
Found 7 test failures on Blacksmith runners: Failures
|
|
Review (codex, router-review): SHIP at e480a89 Reviewer: codex gpt-6.1-sol xhigh, fast tier. Follow-ups: 2. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at e480a89
Follow-ups:
|
…ightly (#33306) #33109 added needs.pick-nightly-sign-runner.outputs.overtaken != 'true' to the macOS signer's job if:, and test_nightly_universal_build.sh matches that if: verbatim, so the release-notary guard group went red on feat-cmux-next. The conjunct only narrows the gate; build_only stays a top-level exclusion. Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…acOS signer (release-notary) (#33289) #33109 (0ca0646) added needs.pick-nightly-sign-runner.outputs.overtaken != 'true' as one more top-level conjunct on build-sign-notarize-nightly's if. The release-notary guard test pins that if exactly, so it failed with 'build_only must be a conjunctive exclusion ...'. The new conjunct keeps the build_only exclusion (it only narrows the job), so the pin now names it. Red at 0ca0646 and at tip: bash tests/test_nightly_universal_build.sh FAIL: build_only must be a conjunctive exclusion on the helper, signing, and publication jobs, and must not gate the unsigned app build Green here: the script passes (exit 0). Green at 0ca0646^.
… whose sign job is queued (#35752) * ci(nightly-next): an older build hands its sign slot to a newer build whose sign job is queued GitHub gives a free runner the oldest queued job on its label, so the newest nightly-next tip's sign job waited about 20 minutes per slot behind older builds that latest-wins publication replaced within minutes (2026-11-04, runs 41866781601 to 41873130397). A new step right after the signing claim, before any secret, reads whether a newer nightly-next push run already has its own sign job queued, running or signed; if so this job yields (exit 1, yielded=true) and report-nightly-failure skips it. The newest sign job never yields, so the newest finished build always signs. Nothing is cancelled. Narrows #33109's "only a published newer build counts": a newer push alone still never counts; a newer run whose sign job exists does. Tests: tests/test_nightly_sign_yield.py (9) and test_nightly_step_coverage pass; the wiring tests fail on 4d20a29. The other nightly.yml-related test files fail the same tests here as on base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-90f71867d2222e9eecd0 * ci(nightly-next): sign-yield test is manual; listings read to an empty page goal-nightly-30min's BLOCK at bf25b77: tests/test-execution.toml registered tests/test_nightly_sign_yield.py as linux-guard, which no workflow runs, so the registry validator failed. It is manual now with a reason (no new CI tests). Their non-blocking note: a status-filtered run list's total_count can run ahead of its items, so the yield read pages until an empty one, as signing_runner.every_page does; more than MAX_PAGES pages signs as before. Tests: test_nightly_sign_yield, test_nightly_step_coverage, validate_test_execution_registry.py and test_ci_test_execution_registry pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-90f71867d2222e9eecd0 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Apple caps notarizations per day. On 2026-11-03 we hit the cap (429
RATE_LIMIT, "Exceeded daily limit for notarizations"), and every NEXT nightly from 03:46Z failed at a notary step for hours. About ten runs were signing side by side, and only the newest could ever publish: publication is latest-wins (nightly_version.py check). Each run spends a notarization each on the helper, app and DMG, for both feeds (#32140), so a run that is already overtaken burns up to six for nothing.Change
pick-nightly-sign-runnerruns right before signing and, since nightly: pick the signer on hosted Ubuntu instead of the saturated reservation #32966, on hosted Ubuntu. It gets a last step, "Leave notarization to a newer published build" (scripts/ci/nightly-steps/sign-pick-overtaken.sh).sparkle:versionis above this run's build (the run id plus a two-digit attempt), it setsovertaken=true. That is the same rule publish-nightly applies, so this build could only be called superseded there.continue-on-error, a 1-minute budget, and curl capped at 15 s.signer-appand the Mac fallbackbuild-sign-notarize-nightlyskip onovertaken, the way they already skip on resolve'ssuperseded.Both feeds stay as they are. The stapled app inside the DMG and both notarizations are unchanged. Consolidating to one feed is #33050, for later. #33028 (merged) waits out a 429 when one still happens.
Performance
Tests
tests/test_nightly_sign_runner.pygets anOvertakenclass:The new tests fail without the change.
tests/test_nightly_step_coverage.py, the routing and signer suites, andtests/test_ci_self_hosted_guard.shpass.Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Stops nightly runs that are already overtaken by a newer published build from spending notarizations, which are capped by Apple per day (hit as a 429
RATE_LIMITon 2026-11-03, failing every nightly for hours).Written for commit e480a89. Summary will update on new commits.