feat(cli): add managed Nightly installation and lockstep updates - #409
Merged
Conversation
xcv58
marked this pull request as ready for review
September 10, 2026 06:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements #403. Apple silicon Nightly users can install the matching optional CLI from Settings → General → Command Line with one confirmation. Managed installations then update automatically with MacTools; Command-Line Integration remains a separate permission switch. Stable and manually installed CLIs retain their existing workflows.
Behavior
Verification and publication
The installer trusts
cli-install.jsonsealed inside the Developer ID signed app. It verifies bounded HTTPS downloads, archive structure, exact hash/size, arm64 architecture, publisher identity, notarization, embedded version/build, and protocol compatibility before activation. Quarantine remains intact.Receipts bind the publisher, executable hash, and managed paths. Initial command creation refuses collisions, including dangling symlinks. Updates preserve the public command link and atomically switch a private version pointer. Post-activation version/doctor checks, a durable recovery journal, and retained versions support failure recovery. Removal and pruning validate ownership; shell configuration and unmanaged commands are not modified.
GitHub Nightly publication packages the signed CLI once, embeds its metadata before signing the app, and publishes that same archive and JSON after the existing notarization and verification gates. Release interface v4 rejects older source refs that cannot produce this contract. Personal publishers use the same immutable-release contract described in managed CLI distribution. The CLI remains a separate download.
Validation
Reviewed implementation:
3c55690f(the subsequent change only corrects distribution documentation).Full local
make ci: 4,426 XCTest cases and 254 script tests passed, including PluginKit v6 binary compatibility.Fresh review run: 63 focused installer, recovery, localization, and native disclosure tests passed; 72 release-script tests passed.
actionlint .github/workflows/nightly.ymlandgit diff --checkpassed.Implementation CI passed build/tests, script tests, changelog validation, PluginKit compatibility, and the unsigned Nightly build.
Final-head CI passed on documentation commit
bde41c83, including the full build/test, PluginKit compatibility, and unsigned Nightly checks.Signed release acceptance still required
Ready for code review. Automated results and reported local Nightly testing do not establish the complete signed acceptance matrix. Record evidence for the final release candidate using the signed test checklist:
Keep these release checks visible after leaving draft. This PR is not an assertion that the final candidate has completed both operating-system acceptance runs.