Settings visibly jumps when its final height loads because every Ace dialog is vertically centered (translate-y-[-50%]) and Settings grows as async provider, helper, and native-permission state arrives. Settings has also grown into a stack of bordered diagnostic panels and permanently expanded forms.
Scope
- Top-anchor every modal from the shared
packages/ui dialog primitive at about 20vh on comfortable desktop sizes, with fixed margins on compact or short screens. Generic dialogs, Settings, and the command palette share one remaining-viewport-height calculation; no content-height-dependent translation or scale origin that reads as vertical jumping. Consumers: Settings, Open Project, tab Rename, command palette.
- Rebuild Settings as a stable bounded two-column shell: a small navigation rail (General, Providers, Computer use, This Mac/This host, Updates), fixed header, and scrolling content so section switches and async state never move its top.
- Rows: label and restrained description on the left, compact controls on the right; subtle separators; diagnostics and long technical explanations behind secondary disclosure, with actual errors and recovery actions visible.
- Preserve every working control and state: provider key add/replace/check/remove and secret handling, default model and environment overrides, helper approval/command-line-host/start/restart/stop distinctions, Tailscale/GitHub/tool diagnostics, computer-use permissions and clipboard policy, automatic update checking vs explicit install/restart,
ace:updates routing, and disabled/loading/error/disconnected states.
Out of scope
Accounts, billing, team access controls, old sandbox options, new fake settings, or duplicate persistence. Timeline clipping (#168).
Settings visibly jumps when its final height loads because every Ace dialog is vertically centered (
translate-y-[-50%]) and Settings grows as async provider, helper, and native-permission state arrives. Settings has also grown into a stack of bordered diagnostic panels and permanently expanded forms.Scope
packages/uidialog primitive at about 20vh on comfortable desktop sizes, with fixed margins on compact or short screens. Generic dialogs, Settings, and the command palette share one remaining-viewport-height calculation; no content-height-dependent translation or scale origin that reads as vertical jumping. Consumers: Settings, Open Project, tab Rename, command palette.ace:updatesrouting, and disabled/loading/error/disconnected states.Out of scope
Accounts, billing, team access controls, old sandbox options, new fake settings, or duplicate persistence. Timeline clipping (#168).