Skip to content

refactor(settings): centralize Settings Snapshot Publication - #352

Merged
dbgeek merged 1 commit into
mainfrom
feat/settings-snapshot-publication
Sep 13, 2026
Merged

dbgeek merged 1 commit into
mainfrom
feat/settings-snapshot-publication

Conversation

@dbgeek

@dbgeek dbgeek commented Sep 13, 2026

Copy link
Copy Markdown
Owner

What & why

Menu edits and file reloads previously published Settings Snapshots through different sequences. Overlay and Vocabulary callbacks could still run after allocation prevented publication.

Introduce Settings Snapshot Publication as the shared owner of typed edits, retained values, change detection, publication, daemon effects, and persistence. Preparation failures change nothing; failed saves leave the accepted change live. Invalid reloads keep live settings, valid reloads remain authoritative, and an existing unpatchable file is preserved. Same-value Save retries persistence without dispatching effects.

The menu now reports explicit edit failures, and radio choices are tested through publication, disk, and read-back. The agreed design is documented in docs/settings-publication.md; this completes the settings write work deferred by ADR-0011.

Type of change

  • Bug fix
  • Documentation
  • Small improvement
  • Larger change (design discussed and confirmed with the maintainer before implementation)

Checklist

  • Single, focused concern
  • Full zig build --summary all passes in the pinned development environment, including the test gate: 678 Zig tests, 34 Python tests, and strict mypy checks
  • Uses the project vocabulary from CONTEXT.md
  • Matches the surrounding code style

AppKit alerts compile in the production executable but have not been exercised interactively.

@dbgeek
dbgeek merged commit 9b555ec into main Sep 13, 2026
2 checks passed
@dbgeek
dbgeek deleted the feat/settings-snapshot-publication branch September 13, 2026 18:14
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