Repository navigation
fix(desktop): enable signed updates from safe fork releases - #31
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
paulsenon-r
marked this pull request as ready for review
November 12, 2026 04:45
This was referenced Nov 12, 2026
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.
Problem
The safe fork disables desktop OTA updates and discards the ZIP, blockmaps and update manifest. Existing ad-hoc signing also cannot preserve the identity needed for later Squirrel.Mac updates. Refs #17, phase 1.
Change
desktopAutoUpdatealongsideremoteAccess.network; safe builds pinrakutenanalytics/t3codeandlatest, ignore custom/mock feeds and saved nightly choices, and retain administrator disablement.codesign, using the existing osx-sign binary ordering/entitlements support and a certificate-pinned designated requirement. Import the secret into a temporary keychain only in the main-onlyreleaseenvironment job; PR builds receive no secrets.latest-mac.ymland checksums/provenance, and display the public certificate fingerprint int3safe doctor.Scope and approval
Requested implementation of #17 phase 1. Only this branch push and draft PR publication are authorized. No environments, secrets, tags or releases were created, and no workflows were dispatched.
Key risk: macOS signature continuity
Squirrel.Mac copies the installed app's designated requirement and validates the candidate with nested-code and strict checks. Apple permits non-Apple certificates for
codesign. #17 records a successful same-key/rotation spike and rejection of different/ad-hoc keys.Consequently, existing ad-hoc installs need one manual installation of the first signed release. A stable leaf-pinned identity can then preserve continuity. A disposable local signing probe without trusted-certificate setup failed with
no identity found; the protected runner explicitly configures that trust. Trusted-runner signing and a real previous-to-candidate Electron update are unverified, not claimed working end to end. The signed DMG check rejects an ad-hoc or wrong-key result.Human actions required before merge/release
Follow the exact Bash commands in MAINTAINING.md:
release; allow only branchmain, with no other branch/tag rules.SAFE_SIGNING_P12_PASSWORDandSAFE_SIGNING_P12_BASE64. The generation script pipes private material directly togh secret set; only the public fingerprint is written locally.security/signing-certificate.sha256and its changelog entry before merge. Its currentUNCONFIGUREDmarker intentionally blocks signing.release.ymlonmain. Do not overwrite published assets or downgrade; ship a higher safe version.Verification
workflow-scan origin/main,policy-verify,egress-scan,dependency-scan --online,stage-lock-scan: passed. No dependency changes or unresolved age checks.electron-updaterfixture resolvedsafe.1→safe.2usinglatest-mac.yml. Public releasev0.1.7-safe.1is not a GitHub prerelease; a public asset HEAD confirmedrelease-assets.githubusercontent.com.Source review:
DesktopUpdates.tspins the source/channel;build-desktop-artifact.tspins package metadata and selects the signer;release.ymlscopes secrets to protected main;build-safe/action.ymlpreserves updater assets; import/sign scripts enforce the reviewed certificate. Baselines are review records, not an egress firewall.Implementation: gpt-6.1-sol through the Codex harness.
Generated with Claude Code