Objective
Make the two-process packaged Connect journey pass on Darwin ARM64 from transport epic head e31a4e66a6a304b1d1f41fa3ac7d1a22d7fd6117 while continuing to use real macOS OS-backed Safe Storage.
PR #2089 is merged into the transport epic. Darwin ARM64 completes pairing, then the second packaged process fails at JOURNEY_STORAGE_BACKEND because safeStorage.isEncryptionAvailable() is false. CI successfully created, unlocked, selected, and pre-seeded the disposable keychain item, so pre-seeding alone is proven insufficient. Electron macOS Safe Storage requires a valid consistent application signing identity across launches.
Requirements
- Diagnose the exact Electron/Keychain identity requirement on the current macOS ARM64 runner and implement the smallest deterministic CI acceptance setup. Prefer a generated disposable self-signed test signing identity or an equivalently strong consistent identity for both launches; no paid Apple account, Developer ID, notarization, or repository secret may be required for this CI smoke.
- Keep the packaged application on the real
os-protected Safe Storage backend. Do not mock Safe Storage, fall back to plaintext or basic_text, bypass the storage check, share the token through environment or argv, or collapse pair and reprobe into one process.
- Keep signing identity, certificate material, password, keychain, and credential data ephemeral and non-logged. Restore the runner keychain list/default and delete all disposable material on every exit path.
- Verify the packaged app has one stable designated signing identity before launch and that both pair and reprobe processes decrypt the same persisted credential. Keep exact credential plaintext scans and all existing profile/origin/identity/generation/scope fencing.
- The setup must work on Darwin ARM64 and must not regress Darwin x64. Do not alter production release signing/notarization or Linux/Windows behavior.
- Add source-contract and negative tests proving cleanup, no static secrets, no production-signing mutation, and failure closed when the disposable identity cannot be established.
Gates
Run the focused platform/keychain/lifecycle tests, exact platform-safe Connect 86/86, native durability 120/120, typechecks, diff and secret scans. Require fresh packaged Connect success on Darwin ARM64 and Darwin x64 and unsigned package validation on both targets.
Run Ultrafix with goal 9 before merge and leave the generated PR open for independent audit.
Integration contract
Target 1953-epic-desktop-transport-api through the base-1953-epic-desktop-transport-api label. Never target main or 1950-epic-cross-platform-dsk. Do not merge the generated PR.
Part of #1950 and #1953. Blocking #2035 and final #1970.
Objective
Make the two-process packaged Connect journey pass on Darwin ARM64 from transport epic head
e31a4e66a6a304b1d1f41fa3ac7d1a22d7fd6117while continuing to use real macOS OS-backed Safe Storage.PR #2089 is merged into the transport epic. Darwin ARM64 completes pairing, then the second packaged process fails at
JOURNEY_STORAGE_BACKENDbecausesafeStorage.isEncryptionAvailable()is false. CI successfully created, unlocked, selected, and pre-seeded the disposable keychain item, so pre-seeding alone is proven insufficient. Electron macOS Safe Storage requires a valid consistent application signing identity across launches.Requirements
os-protectedSafe Storage backend. Do not mock Safe Storage, fall back to plaintext orbasic_text, bypass the storage check, share the token through environment or argv, or collapse pair and reprobe into one process.Gates
Run the focused platform/keychain/lifecycle tests, exact platform-safe Connect 86/86, native durability 120/120, typechecks, diff and secret scans. Require fresh packaged Connect success on Darwin ARM64 and Darwin x64 and unsigned package validation on both targets.
Run Ultrafix with goal 9 before merge and leave the generated PR open for independent audit.
Integration contract
Target
1953-epic-desktop-transport-apithrough thebase-1953-epic-desktop-transport-apilabel. Never targetmainor1950-epic-cross-platform-dsk. Do not merge the generated PR.Part of #1950 and #1953. Blocking #2035 and final #1970.