Shell: lifetime, dialogs, navigation pane, log window, and accessibility items from the review #181

Open
opened 2026-11-11 05:31:43 +00:00 by james.maes · 0 comments
Owner

From the full review of 2026-11-10. Moved out of 1.1.1 by the owner's decision; planned for 1.2.0. Found by reading the shell's code at 1.1.0: re-verify each against current main (some may have changed with #167 and #168).

Window and lifetime

  • An update can be applied, and the app restarted, while syncs are running.
  • Closing the window cancels running work but does not wait for it to end.
  • A failure to read the credential store at startup leaves a process without a window; a corrupt accounts.json is logged but not shown to the user.
  • The update check at startup does not take part in the "an update action is in flight" guard.

Dialogs and forms

  • The mask shown for a saved token is ordinary editable text: typing or pasting into the box without clearing it first saves the mask's characters together with the new text.
  • A failure to save Settings happens after the dialog has closed and is not shown.
  • A failure while the account wizard advances closes the dialog as if it had been canceled.
  • A page that is rebuilt stays referenced by a handler on a long-lived collection (a leak per rebuild).

Navigation pane

  • Accounts are inserted in sorted order by a text that default-token accounts do not have, so their position is wrong; Sync all runs in pane order.

Log window

  • The whole day's log is read again on the UI thread every second.

Accessibility

  • The state shown by an account's badge in the pane is visual only.
  • The Settings dialog's status text does not announce its changes.
  • Account items created at run time have no AutomationId.

Notes

  • Fix in place where small; what needs logic belongs in a view model (the 1.2.0 plan moves shell logic there).
  • Every fix that has logic needs a regression test that fails without it.
From the full review of 2026-11-10. Moved out of 1.1.1 by the owner's decision; planned for 1.2.0. Found by reading the shell's code at 1.1.0: re-verify each against current `main` (some may have changed with #167 and #168). ## Window and lifetime - An update can be applied, and the app restarted, while syncs are running. - Closing the window cancels running work but does not wait for it to end. - A failure to read the credential store at startup leaves a process without a window; a corrupt `accounts.json` is logged but not shown to the user. - The update check at startup does not take part in the "an update action is in flight" guard. ## Dialogs and forms - The mask shown for a saved token is ordinary editable text: typing or pasting into the box without clearing it first saves the mask's characters together with the new text. - A failure to save Settings happens after the dialog has closed and is not shown. - A failure while the account wizard advances closes the dialog as if it had been canceled. - A page that is rebuilt stays referenced by a handler on a long-lived collection (a leak per rebuild). ## Navigation pane - Accounts are inserted in sorted order by a text that default-token accounts do not have, so their position is wrong; Sync all runs in pane order. ## Log window - The whole day's log is read again on the UI thread every second. ## Accessibility - The state shown by an account's badge in the pane is visual only. - The Settings dialog's status text does not announce its changes. - Account items created at run time have no `AutomationId`. ## Notes - Fix in place where small; what needs logic belongs in a view model (the 1.2.0 plan moves shell logic there). - Every fix that has logic needs a regression test that fails without it.
james.maes added the bugdeferred labels 2026-11-11 05:31:43 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KofTwentyTwo/gclo#181