Repository navigation
ci(nightly-next): run verify-signed's checks on the DMG Mac, beside the DMG - #27508
Conversation
…he DMG A pool-signed nightly-next build sent its stapled app to two office Macs: signer-dmg-image (to build the DMG) and verify-signed-nightly (gzipped on Linux by signer-dmg, then downloaded again). That second download took 2-5 min in runs 40905688542, 40913618519 and 40918131595 and set the chain's verify stage whenever it outran verify-final-dmg-nightly. signer-dmg-image now runs verify-signed-nightly's checks (signer-verify-signed.sh: version surfaces, the signed diff sidecar contract, check-signed-app.sh with the helper ticket required, the bundled Ghostty theme picker regression, the SSH daemon contract) and the signed-app checks on copies of the app in the background while the DMG is built and uploaded, and fails after the upload when one fails, so signer-dmg never signs that DMG. verify-signed-nightly runs for the macOS signer's app only, publish-nightly takes signer-dmg's success for a pool-signed app, and signer-dmg no longer packages or uploads the verify handoff (signer-handoff.sh is gone). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab
|
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); NEW: green on the base 37b93da; do not merge until green; see lane-rules |
|
Found 14 test failures on Blacksmith runners: Failures
...and 4 more test failures. View all on Blacksmith
|
…erify handoff upload Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab
|
Bead |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab
|
Review (codex gpt-6-astra high, next-review): SHIP at a71f97c No blocking findings. |
|
Owned by an agent session · session |
…own, resumed or recovered Review findings on 18c51bd: - publish-nightly's source selection takes this run's own build only when await-nightly-tree-marker passed (or the build never waited for its tree), so a recovered build can no longer stand in while the own build is used; - the marker check also runs for an unsigned resume, against the commit the resumed app installed; - recovery refuses a run whose marker check failed, was cancelled or has not finished (recover-tree-marker-ok.sh); - await-tree-client.sh reads each candidate's own artifacts runs before the newest-50 listing, so a crowded listing never reads as no publisher. publish-nightly's own if clause is left as it is (#27508 changes it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab
|
Shipped in:
|
…own, resumed or recovered Review findings on 18c51bd: - publish-nightly's source selection takes this run's own build only when await-nightly-tree-marker passed (or the build never waited for its tree), so a recovered build can no longer stand in while the own build is used; - the marker check also runs for an unsigned resume, against the commit the resumed app installed; - recovery refuses a run whose marker check failed, was cancelled or has not finished (recover-tree-marker-ok.sh); - await-tree-client.sh reads each candidate's own artifacts runs before the newest-50 listing, so a crowded listing never reads as no publisher. publish-nightly's own if clause is left as it is (#27508 changes it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab
* ci(nightly-next): build the tip at once and install its tree's client when the tree publishes A tree-changing landing waited about 27 minutes for its cmux-tui tree (build, R2 upload, tree publish, marker) before its NEXT nightly could start. Main's promote guard now accepts such a commit when its nightly.yml carries NIGHTLY_NEXT_TREE_AT_INSTALL: v1 (#27498). This is that nightly: - resolve-nightly-cmux-tui-client: a tip whose tree is a clean 404 is built as it is (tree_pending, with its same-key first-parent candidates); - build-nightly-app compiles at once. Bundle acpmux gets a stand-in input (the phase only aliases bin/acpmux to bin/cmux), and "Bundle the cmux-tui client" waits for the tree's attested manifest (await-tree-client.sh), then installs it with the same install-cmux-tui-client.sh command; - await-nightly-tree-marker gates publish-nightly on the build commit's tree-commit marker naming the installed client's commit (G5, in the run); - request-nightly-next.sh requests such a tip while an artifacts run builds its tree. nightly.yml stays under its size limit: two steps live in scripts/ci/nightly-steps/ and some comments in the touched jobs are shorter. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab * ci(nightly-next): the tree marker gates the build the run publishes, own, resumed or recovered Review findings on 18c51bd: - publish-nightly's source selection takes this run's own build only when await-nightly-tree-marker passed (or the build never waited for its tree), so a recovered build can no longer stand in while the own build is used; - the marker check also runs for an unsigned resume, against the commit the resumed app installed; - recovery refuses a run whose marker check failed, was cancelled or has not finished (recover-tree-marker-ok.sh); - await-tree-client.sh reads each candidate's own artifacts runs before the newest-50 listing, so a crowded listing never reads as no publisher. publish-nightly's own if clause is left as it is (#27508 changes it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab * ci(nightly): shorter warm-checkout comment keeps nightly.yml under its size limit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab * ci(nightly-next): the recovery marker check reads one bounded job list (no gh api paginate) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab * test(nightly): sign variants require the client build-nightly-app bundled The sign variant now reads build-nightly-app.outputs.cmux_tui_commit first (the commit await-tree-client.sh found while the tip tree publishes), so the universal-build guard accepts that expression instead of the resolver output alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c * fix(nightly-next): gate resume with bundled tree client Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c * fix(nightly-next): gate resume with bundled tree client Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c * fix(nightly-next): carry bundled client through resume receipt Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c * fix(nightly-next): publish when marker wait is skipped Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c * fix(nightly-next): use synthetic tree key for resumed build Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c * fix(nightly-next): read resumed client from app archive Agent-Session: https://cmux.com/deeplink/agent?id=aid-d35d25d288d130b0c84c --------- 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)
Summary
A pool-signed cmux NEXT nightly sent its stapled app to two office Macs:
signer-dmg-image(to build the DMG) andverify-signed-nightly(a gzip thatsigner-dmgmade on Linux, downloaded again over the office link). That second download took 2-5 min in recent runs and set the length of the verify stage whenever it outranverify-final-dmg-nightly.signer-dmg-imagenow runsverify-signed-nightly's checks itself (scripts/ci/nightly-steps/signer-verify-signed.sh: version surfaces, the signed diff sidecar contract,check-signed-app.shwith the Computer Use helper ticket required, the bundled Ghostty theme picker regression, the SSH daemon contract), on a copy of the app it already holds.signer-dmgneedssigner-dmg-image, so it never signs a DMG whose app failed a check.verify-signed-nightlyruns for the macOS signer's app only.publish-nightlytakessigner-dmg's success in its place for a pool-signed app (itsifand itsOWN_VERIFIED).signer-dmgno longer packages or uploads the verify handoff;signer-handoff.shis removed.No check is dropped:
verify-signed-nightly'scodesign --verify --deep --strictis the first ofsigner-apple-checks.sh's checks, which the job runs before it starts the others. No secret reaches the Mac job. Nothing changes inbuild-nightly-app, prepare, or the macOS fallback signer path.Performance
Chain =
build-nightly-append topublish-nightlyend. The before rows are the last five arm64 pool-signed runs with a publish, from the jobs API. The after column is filled from real nightly-next runs once this lands.Testing
python3 tests/test_nightly_signer_jobs.py: 20 tests pass, including newSignerVerifySignedtests that run the script with stub checks (every check runs on a copy; a failure failsfinishafter the rest ran; bundled-assets and CLI flags matchverify-signed-nightly; nothing a check writes reaches the app the DMG is built from) and the wiring test for the new step order.python3 tests/test_nightly_step_coverage.pyandpython3 tests/test_nightly_next_recovery.pypass.tests/test_*nightly*/ workflow test that reads nightly.yml passes here, excepttests/test_nightly_next_arm64_only.pyandtests/test_check_ghostty_zig_workflows.py, which fail the same way on base in this Linux environment (agit rev-parseoutside a repo; nobashlex).Observed / Not run
Observed: the tests above on Linux. Not run: a real nightly-next run with this change; the first runs after it lands fill the Performance table.
Changelog
none
🤖 Generated with Claude Code
Agent session: agent session