88905e5173c9d78156a52a6540db1b04a78f2c31
The window always opened at the hardcoded 900x760 because the size was never persisted: run_gui hardcoded it, AppConfig had no size fields, and the Resized handler only kept the size in memory (for divider clamping) while exit_on_close_request:true quit before anything could save. - AppConfig gains window_width/window_height (serde-default 900/760). - run_gui restores them as the initial window size. - The Resized handler mirrors the live size into config (guarded against bogus tiny sizes); divider positions on load now clamp against the restored size rather than a hardcoded default. - exit_on_close_request:false + a CloseRequested handler writes the final size once, then iced::exit() — no per-resize disk thrash. Verified empirically that KWin/Wayland honors a client-requested initial size (requested 1150x680 -> window reported 1150x680). Window *position* is not restored: xdg-shell gives Wayland clients no way to set their own position. +1 config test (default + round-trip). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>