docs/research/2026-09-08-settings-experience.md

Settings experience

Reference: user-supplied screenshots of official CodexBar macOS 0.56.8 (139), built September 7, 2026. Plasma comparison base: 8a064ea. This is a frontend settings change; the repository's verified official Linux CLI contract baseline remains 0.56.2. No new CLI fields, authentication actions or config writers are introduced.

The five previously proposed settings improvements are implemented together:

BeforeAfterWhy
Panel appearance could only be judged after Apply.Panel shows the actual compact renderer with synthetic normal, near-limit, incident and missing-data scenarios.Inspect order, visibility rules, style and metrics before saving.
General mixed refresh, thresholds, notifications and updates; Display mixed panel and popup controls.General, Providers, Panel, Popup, Notifications and Diagnostics. CLI path and overrides sit with diagnostics.Settings are grouped by the surface or behavior they affect.
Account and project/session identities remained visible during sharing.Optional privacy mode masks presentation fields, tooltips and new notifications and disables session copying.Share the widget without exposing those identities.
Quotas only followed periodic or manual refresh.Optional refresh on opening the popup, only when stale.Obtain recent quotas without starting a request on every opening.
Pace, credits and additional provider details appeared whenever supplied.Three independent Popup switches, enabled by default.Keep the popup focused on the information the user wants.

All five are Plasma-native and implementable now, using existing normalized data and supported refresh commands. Existing saved preferences remain valid. The native Plasma configuration dialog owns Apply/Discard/Cancel between pages; the global Restore all defaults action still prepares pending values.

Privacy mode is a display preference. It preserves cached data and real account keys for selection. Unknown/provider-authored prose and preformatted billing details are omitted, while numeric quota/cost data and valid reset timestamps remain available. Numbered account/project/model/session labels are local to the displayed list. Provider administration and Diagnostics are outside the mode. It does not erase earlier desktop notifications or OS clipboard contents.

Refresh-on-open uses the quota interval as its freshness limit, with a five-minute fallback when periodic refresh is off. Running or queued refreshes are retained. Failed attempts get the same cooldown so open/close cycles cannot create a retry loop. Manual refresh remains available; local history uses its existing schedule.

Provider auth/account editors, hook rule editors, provider-plugin permission management and richer provider data remain blocked on an official CLI contract. This PR does not turn the dormant descriptor proposal into a shipped contract. iCloud, Keychain/Full Disk Access and Sparkle are macOS-only/non-goals; Plasma keeps its existing update integration.

Configuration lifecycle

The settings review checked Plasma's native configuration dialog in the supported KDE neon image, package plasma-workspace version 4:6.7.4-0zneon+24.04+noble+release+build94. Its pushReplace replaces the current page, and opening the next page supplies applied cfg_* values from Plasmoid.configuration. Switching with unsaved changes prompts Apply/Discard/Cancel. The pages do not share an unsaved transaction.

The Panel preview and Notifications page therefore read applied values from other pages. General retains pending defaults so Restore all defaults can update dependent controls before Apply. A shared cross-page pending store would model a different lifecycle.

Privacy keeps Cursor's bounded numeric included-plan percentage available for quota selection while hiding free-form billing text. Provider action menus use raw capabilities with local labels, since removing URLs from that input would remove valid actions. Display records and account command keys remain separate.

Historical verification

The PR #162 verification records executed tests. The synthetic OpenGL captures and review notes remain available in Git history.

Panel disclosure refinement

The follow-up against Plasma d09e5b6 keeps the six-page structure and existing configuration keys. Appearance and meters remain visible. Additional information holds provider name, usage text and format, credits, and the monochrome preset. The closed summary lists enabled information. Text format appears only when usage text is enabled. A separate collapsed section contains quota, order, visibility conditions, and automatic provider selection. Its summary identifies effective non-default choices without discarding hidden preferences. The section is named "Quota, order and visibility" so its contents are predictable.

This follows KDE's progressive disclosure guidance and input-control guidance. Standard and Minimal use native radio buttons with descriptions. The existing preset still selects monochrome styling, enables meters, and hides text; its new label states those effects. Controls respond immediately, and expanding the section introduces no animation or configuration write.

The live preview resolves a Repeater provider back to its synthetic source before selecting quota rows. Qt can expose nested delegate arrays as sequence wrappers; those must not make the pure array-based quota selector omit real preview data. This changes no CLI parsing or live provider normalization.

With the default element order, the selected provider's optional text follows its capsules inside the same clickable group. This removes the repeated provider logo seen at 6addadd. Other providers retain their icon and capsules. A custom order preserves independently positioned text and meters. The configuration matrix review against d223cc6 found that custom orders repeated the icon even with only one provider meter. That redundant icon is now omitted. Separate text keeps its identity among multiple meters or when the selected provider's meter is filtered out or unavailable. Both styles share the layout and preserve quota warnings, keyboard activation, and bounded text width.

The same review moved the preview into SimpleKCM's supported header. The preview remains visible while the options scroll, including with larger text and right-to-left layouts. It uses the existing synthetic model and pending settings; this introduces no configuration key or effect. The repeatable matrix separates automated content/geometry checks from visual approval of the captures.

The element-order layout has a plain Item boundary. FormLayout reads its cached implicit dimensions instead of querying the dynamic layout's attached minimum sizes while Repeater delegates are rebuilt. A debugger reproduced a Qt 6.11.1 crash in QQuickLayout::effectiveSizePolicy_helper during layout polish without this boundary; repeated advanced-settings captures pass with it. Keyboard focus and row geometry remain covered by the native settings test.

Panel opening geometry was traced on Plasma 6.7.4 with Kirigami and the KDE desktop controls style 6.29.0, using Qt 6.11.1. At a 600-by-500 page size, initial overflow briefly reserved a scrollbar gutter and then released it, shifting centered controls right by 7 pixels. The hidden advanced form subsequently increased its implicit width, shifting them left by 4 pixels. FormLayout's width hints include hidden children.

The Panel page now reserves the themed vertical scrollbar width on its mirrored edge, using the ScrollView's public padding and attached scrollbar properties. The scrollbar keeps its normal visibility and interaction behavior. Collapsed forms contribute zero maximum width while retaining their controls and configuration bindings. No delay or movement animation is introduced. Frame-based tests cover opening geometry and keyboard disclosure with usable scrolling in both layout directions.