Step 3 of the approved UX plan, stacked on #106 (step 2) and #103 (step 1).
SettingsTokenState (ViewModels, fully tested): the box's initial value (a fixed mask when a token is saved, never the token), what Save does for a given box value (keep / store / remove), whether the Remove link applies, and the caption text, which names who depends on the token and what Save will do.
SettingsDialog: shows the mask when a token is saved; the caption follows every edit; clearing the box or pressing Remove saved token removes on Save; a removal that breaks accounts turns the caption critical and names them, so Save is an informed confirmation (inline, not a second dialog: a ContentDialog cannot open another and the dialog guard allows one at a time; the plan is updated to say so). Replacing the token says the dependent accounts rotate with it. The dialog now takes the AccountsStore to count and name them.
## What
Step 3 of the approved [UX plan](docs/plans/default-token-ux.md), stacked on #106 (step 2) and #103 (step 1).
- `SettingsTokenState` (ViewModels, fully tested): the box's initial value (a fixed mask when a token is saved, never the token), what Save does for a given box value (keep / store / remove), whether the Remove link applies, and the caption text, which names who depends on the token and what Save will do.
- `SettingsDialog`: shows the mask when a token is saved; the caption follows every edit; clearing the box or pressing *Remove saved token* removes on Save; a removal that breaks accounts turns the caption critical and names them, so Save is an informed confirmation (inline, not a second dialog: a `ContentDialog` cannot open another and the dialog guard allows one at a time; the plan is updated to say so). Replacing the token says the dependent accounts rotate with it. The dialog now takes the `AccountsStore` to count and name them.
Closes #101 (part of #62).
## How it was tested
- `dotnet build -warnaserror` 0 warnings; `dotnet format --verify-no-changes` clean.
- `gclo.Engine.Tests` 475/475 (+16 for `SettingsTokenState`); line coverage 100% on `gclo.Engine` and `gclo.ViewModels`.
- FlaUI suite run locally against the rebuilt app (result in the PR comments).
Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Step 3 of the approved UX plan, stacked on #106 (step 2) and #103 (step 1).
SettingsTokenState(ViewModels, fully tested): the box's initial value (a fixed mask when a token is saved, never the token), what Save does for a given box value (keep / store / remove), whether the Remove link applies, and the caption text, which names who depends on the token and what Save will do.SettingsDialog: shows the mask when a token is saved; the caption follows every edit; clearing the box or pressing Remove saved token removes on Save; a removal that breaks accounts turns the caption critical and names them, so Save is an informed confirmation (inline, not a second dialog: aContentDialogcannot open another and the dialog guard allows one at a time; the plan is updated to say so). Replacing the token says the dependent accounts rotate with it. The dialog now takes theAccountsStoreto count and name them.Closes #101 (part of #62).
How it was tested
dotnet build -warnaserror0 warnings;dotnet format --verify-no-changesclean.gclo.Engine.Tests475/475 (+16 forSettingsTokenState); line coverage 100% ongclo.Engineandgclo.ViewModels.Generated with Claude Code