Repository navigation
Open
Description
Context
Upstream shipped a managed policy (nightly only as of 2026-11-01, not in stable v0.1.6).
We keep this fork, embed our policy in the build, and ship signed releases that the in-app update button can install.
Start when a stable upstream release contains the policy. Work is run manually: the maintainer runs the sync skill against this issue, and postpones by hand when blocked.
Scope
- First sync with the new process: bake the policy; build and release pipeline; update channel from this fork's signed releases.
- Signing
- One self-signed code-signing key in a GitHub
releaseenvironment secret, restricted tomain. Fork PRs cannot reach it. - Public cert fingerprint committed and shown by
t3safe doctor. - Designated requirement pins that key (no root CA).
- Plain
codesignwith a temporary trusted keychain first,rcodesignas fallback (pinned version + checksum + host ledger entry).
- One self-signed code-signing key in a GitHub
- One-time secret setup (needs maintainer approval of the exact commands at run time)
- Create the
releaseenvironment limited to themainbranch. - Generate key + cert straight into
gh secret setwith no key file on disk; print only the public fingerprint.
- Create the
- Policy: allow
desktopAutoUpdate, feed pinned to this repo; matchingallowlist.jsonandsecurity/CHANGELOG.mdlines. - Publishing: keep the zip, blockmap and
latest-mac.ymlinsafe-build.ymland upload them inrelease.yml. Host ledger and egress baseline refresh. - Updater channel: version has a prerelease tag (
-safe.N); force the channel tolatestand verify. - Docs: update section; rotation runbook (overlap release signed by the old key whose requirement accepts old or new key); forward-fix-only rollback rule; public cert fingerprint.
- CI: real-Electron smoke asserting
window.desktopBridgeloads; previous-release to candidate update test; release blocked if the chain breaks.
Sync skill changes
- Stable upstream tags only (never nightly); min-age applies to the upstream release itself.
- Audit the diff; ensure every new egress path is policy-gated, else patch. Map new upstream policy keys to gated / ungated / n/a.
- No dependency under min-age: if one is, postpone and record a retry-after date; check no CVE fix is held back on frozen versions; check Electron/Chromium staleness.
- Flag new install scripts, native binaries and outbound hosts.
- Audit dependency source on doubt; escalate on anything suspicious.
- Post the audit summary in the PR (no internal info, repo is public), then babysit until a human merges.
Evidence
A local spike confirmed: same-key in-place update, version jump, rejection with a different key or ad-hoc, key rotation with an overlap release, and rotation under a root CA. Unverified: plain codesign on a CI runner, GitHub asset CDN host, keychain/TCC behavior across updates.
Metadata
Metadata
Assignees
Labels
No labels
Activity