Bundle ID migration: com.herotools.openwispr → com.gizmolabs.openwhispr#669
Merged
gabrielste1n merged 5 commits intomainfrom Apr 26, 2026
Merged
Bundle ID migration: com.herotools.openwispr → com.gizmolabs.openwhispr#669gabrielste1n merged 5 commits intomainfrom
gabrielste1n merged 5 commits intomainfrom
Conversation
Aligns the macOS app bundle ID with the legal entity that owns the
signing identity (Gizmo Labs Inc., Team T832773L2J) and fixes the
long-standing typo in the previous identifier (com.herotools.openwispr
was missing the trailing h in 'whispr').
Auto-update cannot carry users across the rename — Squirrel.Mac
enforces CFBundleIdentifier matching when unpacking updates. Existing
users on the old bundle must manually re-download. Migration plan and
notification strategy live in
Plans/bundle-id-migration-gizmo-labs.md.
No data migration needed: app.getPath('userData') is driven by
productName ('OpenWhispr'), not appId, so notes, settings, .env, and
model caches all carry over on a fresh install of the new bundle.
Detects when a user installs the new com.gizmolabs.openwhispr bundle on top of an existing com.herotools.openwispr install (data already in ~/Library/Application Support/OpenWhispr/ but no .bundle-migrated sentinel) and shows a one-time onboarding modal that walks them through re-granting Microphone, Accessibility, and System Audio. Mirrors the TccResetModal structure exactly — same Dialog primitive, same PermissionsSection, same usePermissions/useSystemAudioPermission hooks, same Done/Remind Me Later UX. Different copy + different sentinel-file flag (file-based instead of localStorage so it survives even if userData/localStorage were nuked). Suppresses the existing accessibility-missing Settings auto-open while the post-migration modal is pending so users don't see two prompts. Platform-gated to macOS in the main-process detector. Adds postMigration.* i18n keys across 10 locales mirroring the tccReset.* placement and tone.
- Bump package + lockfile to 1.7.0 (1.6.11 was never publicly released; going straight from 1.6.10 -> 1.7.0). - Rename CHANGELOG section 1.6.11 -> 1.7.0 (2026-04-26) and add entries for the bundle ID rename and post-migration onboarding. - Write the .bundle-migrated sentinel during onboarding completion so fresh 1.7.0 installs never see the "Welcome back" modal on relaunch. Migrating users skip onboarding (their flag carries over via productName-keyed userData) so they still get the modal correctly.
…boarding TccResetModal was added for a 1.6.10 -> 1.6.11 Team ID transition that never publicly shipped (1.6.11 was skipped in favor of going straight to 1.7.0). Every user now goes 1.6.10 -> 1.7.0, where PostMigrationOnboarding handles the same Mic / Accessibility / System Audio re-grant walkthrough with the right copy. Removes the dead component, its localStorage flag and helper, the mount + dismiss wiring in ControlPanel, and the tccReset.* keys in all 10 locale files. Also drops the redundant accessibility-missing suppression check that was guarding against the second modal.
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.
What this ships
com.herotools.openwisprtocom.gizmolabs.openwhisprand the Windows AUMID to match — aligning with the legal entity that owns the signing identity (Gizmo Labs Inc., T832773L2J) and fixing the long-standing typo (openwisprwas missing the trailingh)TccResetModal(and its locale keys) — it was added for an unshipped 1.6.10 → 1.6.11 Team ID transition and would have stacked on top of the post-migration modalWhy now
We migrated the macOS signing identity from HeroTools to Gizmo Labs and the bundle ID still carried the old org's reverse-DNS namespace plus a typo. Bundle IDs are baked into Apple's TCC database and the App Store Connect global namespace, so the rename wants to happen now while users are already going through a forced reinstall — the Team ID change broke auto-update from 1.6.10 regardless.
Auto-update cannot carry users across the rename. Squirrel.Mac's
SQRLUpdater.updateBundleMatchingCurrentApplicationInDirectory:enforces a hardCFBundleIdentifiermatch (verified against Squirrel.Mac source). Existing 1.6.10 users are already stranded by the Team ID change anyway — the bundle ID rename adds nothing to their situation. Notification is out-of-band only (Discord, X, email, openwhispr.com banner). No in-app prompt is going out to existing users.What carries over (zero migration code)
app.getPath('userData')is keyed byproductName(OpenWhispr), not bundle ID. After installing the new bundle on top of an existing install:~/Library/Application Support/OpenWhispr/transcriptions.db).envin same userData)~/.cache/openwhispr/— hardcoded literal, not bundle-ID-keyed)What resets
PostMigrationOnboardingmodalopenwhispr://)Modal behavior
.bundle-migratedsentinel on completion so the modal never fires for new usersDone(mic granted).bundle-migratedwritten → never shown againRemind Me Later/ X / Escprocess.platform === 'darwin'gate in main process)accessibility-missingevent fires while modal pendingImplementation notes
Dialog,PermissionsSection,usePermissions, anduseSystemAudioPermissionprimitives — no new UI infrastructure.bundle-migratedin userData), not localStorage — survives if a user nukes their Local Storage dirget-post-migration-state,mark-bundle-migrated)postMigration.{title,description,done,remindLater}keys across all 10 locale filesTccResetModalcomponent, itstccResetModalSeen_1_6_11localStorage key + helper, the mount/dismiss wiring inControlPanel, and thetccReset.*locale keys (~145 lines deleted)Related
Plan:
Plans/bundle-id-migration-gizmo-labs.md— covers the rationale, what does and doesn't carry over, the Squirrel.Mac research, and the post-release monitoring strategy.