Skip to content

fix: auto-resolve sync conflicts and hide Dock icon by default - #118

Merged
bifrost-proxy merged 1 commit into
mainfrom
codex/sync-dedup-dock-default
Aug 27, 2026
Merged

bifrost-proxy merged 1 commit into
mainfrom
codex/sync-dedup-dock-default

Conversation

@bifrost-proxy

Copy link
Copy Markdown
Owner

Summary

  • automatically publish a deterministic superseding operation when configuration or dictionary values conflict across devices
  • avoid resolution write loops when concurrent operations already contain identical payloads
  • hide the Dock icon by default for new profiles while preserving an existing explicit preference
  • declare LSUIElement at launch so the icon does not flash before preferences load

User-visible behavior

  • the sync settings page no longer leaves duplicate/conflicting configuration or dictionary entries waiting for manual intervention; the immutable operation log converges automatically
  • fresh installs run as a menu-bar app without requiring the user to enable “Hide Dock Icon”
  • users who explicitly chose to show the Dock icon keep that setting

Compatibility and privacy

  • existing sync files are not deleted or rewritten; resolution is append-only and supersedes all observed candidates
  • deterministic selection uses the existing register policy, including dictionary add-wins behavior
  • no secrets, audio, or additional user data are synchronized

Risk and rollback

  • risk: an automatically selected concurrent configuration value may differ from one device's local edit; the winner follows the existing deterministic materialization rule
  • rollback: revert this commit; existing resolution operations remain valid append-only history and old app versions can still read the resolved value

Verification

  • git diff --check
  • make check
  • xcodebuild test -project VoiceInk.xcodeproj -scheme VoiceInk -destination 'platform=macOS,arch=arm64' -only-testing:VoiceInkTests -parallel-testing-enabled NO CODE_SIGNING_ALLOWED=NO ENABLE_TESTABILITY=YES
    • 442 tests in 35 suites passed
  • tests cover deterministic resolution, equal-value no-op behavior, steady-state no-loop behavior, configuration integration, dictionary integration, and registered Dock preference semantics

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b994a5b9e0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


// UI & Behavior
"IsMenuBarOnly": false,
"IsMenuBarOnly": true,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve the legacy Dock setting for existing profiles

On upgrade, established users who never toggled “Hide Dock Icon” have no persistent IsMenuBarOnly value because the previous register(defaults:) value was only a registration-domain fallback. Changing that fallback to true therefore makes those existing profiles start in menu-bar-only mode and hides their main window, rather than limiting the new behavior to fresh installs as intended. Add an installation-aware migration that persists false for established profiles lacking the key before registering the new default.

AGENTS.md reference: AGENTS.md:L153-L158

Useful? React with 👍 / 👎.

@bifrost-proxy
bifrost-proxy merged commit 80b8d7e into main Aug 27, 2026
3 checks passed
@bifrost-proxy
bifrost-proxy deleted the codex/sync-dedup-dock-default branch August 27, 2026 17:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant