settings contract changes
Mirrored from
libs/settings/CHANGELOG.md, where releases update it. The component's page is settings. This page describes the currentmainbranch of MixOS.
Unreleased
Additive, store format unchanged: the mail options email.mail.quote_on_reply
(boolean, default true) and email.mail.reply_position ("above" or "below",
default "above"), which the email app's Reply now reads instead of fixed
values. Omitted at their defaults, so existing profiles are unchanged.
0.8.0
Additive, store format unchanged (3):
Desktop.email(email::Email): the email app's JMAP accounts (email.accounts, replaced whole, in tree order: id, name, url, email, ca_path, enabled, signature),email.default_accountand the mail optionsemail.mail.page_size(10–500, default 100),mark_read_on_openandconfirm_delete(both default true). Omitted at its defaults, so older profiles keep their seals; it does not touchEffective. A profile that sets any of it will not load in a 0.7.0 build: resetemailfirst.- Nothing in it is secret: an account has no password field and every
record refuses unknown keys, so
settings.applyrefuses an account that carriespassword. Summary.emailandFollowed::Look.emailcarry it to followers;email::from_snapshot,email::from_summaryandEmail::from_accountread it;email::mint_account_idmints a new uniqueacct-id.settings.describelists eachemail.*path;emailalone resets or replaces the whole group.
0.7.0
Additive, store format unchanged (3):
Desktop.terminal(terminal::Terminal): the term's preferences underterminal.*(font family/size/weight, padding, scrollback lines, scroll speed, border width, cursor shape/blink, focus ring/strength, copy on select,TERM). Every default reproduces the term before the group existed except padding (8 px instead of 1 px) and the focus ring: its default,accentat strength 0.25, draws the focused pane's border as the card border moved a quarter toward the theme accent, where the term drew it halfway before. That change is intentional (a subtler tinted ring);neutralremains available, andaccentwith strength 0.5 gives the old look. Omitted at its defaults (and each value within it), so older profiles keep their seals. It does not touchEffective, askeymapsdoes not. A profile that sets any of it will not load in a 0.6.0 build: resetterminalfirst.Summary.terminalandFollowed::Look.terminalcarry it to followers.settings.describelists eachterminal.*field with its range and default;terminalalone resets or replaces the whole group.terminal: nullresets the whole terminal group, as advertised.- Correct the scroll speed unit: rows per wheel line, scaled by speed/40; touchpad travel counts in cell heights at that scale. Default 40 keeps the existing one-row-per-wheel-line behaviour; it is not a pixel distance.
0.6.0
Additive, store format 3 (decision):
AppearanceandEffectivegain four optional session choices:icon_stroke(1.0 to 3.0 in quarter steps),font_family,font_weight(100 to 900 in steps of 100) andmono_family. Each is omitted when unset, so profiles without them keep their digests.ChangePlan:icon_strokeis a paint change; the font choices are resource and text changes.CompactEffectivecarries the same fields.- The store writes format 3. A format-2 build refuses a profile that sets
any of them; reset them first with
settings.resetor a null value.
Rust API change: Followed::Look.appearance is now Box<Appearance> to keep
follower events compact as font settings grow. Borrowed callers use deref
coercion; callers that take ownership unwrap with *appearance.
0.5.0
Authority verbs 0.3.0 (additive): snapshot schema 2 (decision).
compact:CompactSnapshot(schema 2) sends each distinct design projection once underdesigns, keyed by digest; each context'sdesignnames one.encodebuilds it;decodereads schema 1 or 2 into the same in-memorySnapshot, so consumers, reducer, cache and effective digests are unchanged. A dangling or unnamed design is refused.compact_topic(profile)/COMPACT_TOPIC_PREFIX: the retained schema 2 topic,settingsd.desktop.compact.<profile>, published between the schema 1 topic and the summary.- Breaking:
ReadRequest.schema(1 by default and never serialised; 2 for the compact form) onsettings.getandsettings.appearance.get. Another schema is refused withunsupported_schema. nativefollows the compact topic and reads schema 2. Consumers on the schema 1 topic are not affected.describe()lists the snapshot schemas and the compact topic.
0.4.0
Authority verbs 0.2.0 (additive), snapshot schema still 1 (decision):
Summary(schema 1): binding, incarnation, revision, design revision, source digest, appearance names andcustom_source; never projections or a custom source.summary_topic(profile)/SUMMARY_TOPIC_PREFIXname its retained topic,settingsd.desktop.summary.<profile>, published beside the snapshot topic.ReadRequest.view(View::Full, the default and never serialised, orView::Summary) selectssettings.get's answer.follow::Followersubscribes to the summary topic and reads the summary view. Breaking:Followed::Lookgainscustom_source, and itsappearance.sourceis alwaysNone.describe()lists the read views and both topics.
The cache interpretation includes the library version, so caches written by 0.3.x fall back visibly once.
0.3.5
Add the appearance keys appearance.style (null, the default, takes the
scheme's own style; else plain, pro, studio or classic),
appearance.decorations (csd, the default, or ssd) and
appearance.caption_side (right, the default, or left). They resolve into
every effective context; a style change is a paint and layout change and a
decorations or caption-side change a layout change. Older desktops and
snapshots load with the defaults. Authority verbs/schema remain 0.1.0/1.
0.3.4
Expose the public snapshot identity of an activated cache capture so hosts can report fenced persistence receipts without copying its projection or private producer serial. Authority verbs/schema remain 0.1.0/1. The cache interpretation includes the library version; older caches fall back visibly without affecting authority history.
0.3.3
Add immutable cache targets for borrowed workers, capture deduplication and producer-fenced writer opening. Add lazy persistent fallback loading after retained resource validation, preserving load diagnostics when embedded works. Authority verbs/schema remain 0.1.0/1. Older presentation caches are rejected because the cache interpretation includes this library version.
0.3.2
Expose shared consumer evidence with separate accepted and applied identities, connection generation, confirmation, presentation kind and faults. Readback never claims frame presentation or broker participant registration. Authority verbs and snapshot schema remain 0.1.0 and 1.
0.3.1
Split authenticated native delivery decoding from UI consumer handling, retaining binding/generation fences in the decoded value. Add shared session binding and capture identity predicates for coalesced resource scheduling. Authority wire contract/schema remain 0.1.0/1. The cache interpretation includes this crate's version, so older local presentation caches are rejected and embedded defaults remain available; authority persistence is unaffected.
0.3.0
Add shared retained/cache/embedded fallback preparation with host resource validation, immutable stage fencing and explicit presentation labels. Persisted data never seeds authority ordering or mutation fences. Optional cache I/O uses bounded no-follow directory-relative reads and atomic replacement, with schema/target/capability/digest checks plus complete projection recompilation. Applied-generation captures and one locked serial writer reject stale saves; ambiguous post-rename failure remains visible. Exact JSON float round trips preserve compiler projection comparison. The authority wire/schema stay 0.1.0/1. Real resource loading, GUI/first-map timing and artifact integration remain pending. Keep fallback preparation/activation faults separate from authority/current resource faults, and detect unsupported cache headers before strict body parsing.
0.2.0
Add transport-neutral consumer and render-domain change plan, with an optional native executor over an app-owned supervised connection. Bound work/buffering, coalesce queue-loss recovery, fence connection/consumer/renderer completions, and advance unchanged render evidence without a redraw. Retired confirmation candidates are deduplicated within a bounded history. No owned runtime or renderer dependency. Authority wire contract/schema remain 0.1.0/1. Use canonical app/shell constructors, captured read baselines/tickets and one absolute recovery deadline. Malformed-event storms cannot bypass the deadline; same-incarnation rollback is distinct from a read racing a newer publication. DTO additions require explicit render/evidence classification at compile time. Persisted fallback cache, artifact/resource preparation and GUI activation are still pending; this API does not advertise their completion.
0.1.0
Initial binding/revision/receipt/snapshot types, independent design read projection, validated batch vocabulary and ordering/work-ticket reducer. Renderer transport/bootstrap adapters remain pending. Before initial release: report confirmed same-revision contradictions and validate authored app enum values before accessibility precedence.