Skip to content

macOS settings publish only with complete frames - #3390

Merged
breznknecht merged 1 commit into
mainfrom
codex/issue-3305-frame-scoped-settings
Sep 16, 2026
Merged

breznknecht merged 1 commit into
mainfrom
codex/issue-3305-frame-scoped-settings

Conversation

@breznknecht

Copy link
Copy Markdown
Collaborator

TL;DR

macOS settings now publish only when their complete frame commits. Rejected, abandoned, and resource-limited frames preserve the last committed settings and do not fire cursor-blink callbacks.

Fixes #3305

Context

gui_config_state previously bypassed CommandDispatcher frame staging even though the BEAM render path emitted it as frame state. That allowed settings to become visible before the rest of the frame was accepted.

Changes

  • Route guiConfigState through the existing prepared frame transaction while keeping SettingsState as the sole settings writer.
  • Preserve the existing replacement key and resource accounting so repeated settings updates replace staged state instead of inflating the frame command count.
  • Reject unframed settings on both the BEAM producer boundary and the macOS consumer boundary.
  • Add focused coverage for rejected, abandoned, committed, repeated, resource-limited, unframed, and config-query settings paths.
  • Verify that the real BEAM emitter places gui_config_state between begin_frame and commit_frame.

Verification

  • xcodebuild test -project macos/Minga.xcodeproj -scheme Minga -configuration Debug -derivedDataPath _build/issue-3305-derived CODE_SIGNING_ALLOWED=NO -only-testing:MingaTests/CommandDispatcherStagingTests -only-testing:MingaTests/SettingsStateTests (71 tests passed)
  • mix test test/minga_editor/frontend/frame_transaction_test.exs test/minga_editor/frontend/emit_test.exs test/minga_editor/handlers/gui_action_handler_test.exs (56 tests passed)
  • mix protocol.gen --check
  • make lint
  • Focused code review and final acceptance review passed with no remaining findings.

Acceptance Criteria Addressed

  • In-frame settings stay invisible until a complete frame commits. ✅
  • Rejected and abandoned frames preserve prior settings and suppress discarded cursor-blink callbacks. ✅
  • Valid frames apply settings exactly once, config queries produce a framed response, and unframed settings reject and request recovery. ✅
  • Repeated in-frame settings retain prepared replacement semantics and resource limits. ✅

@breznknecht
breznknecht merged commit 57c7c24 into main Sep 16, 2026
11 checks passed
@breznknecht
breznknecht deleted the codex/issue-3305-frame-scoped-settings branch September 16, 2026 15:11
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.

macOS settings publish only with their complete frame

1 participant