fix(app): an account's page takes no token it would ignore, and Sync all does not call an unsynced account synced #185

Merged
james.maes merged 2 commits from fix/182-account-token-box-and-sync-all-result into main 2026-11-11 06:20:31 +00:00
Owner

What

Four user-facing defects found by the release reviews of the 1.1.1 candidate (design and code), fixed together because they sit in the same two places: the connect card of an account's page, and how a workspace and Sync all report what was synced.

  • An account's page: the token box takes no input (a typed token was shown as taken and then not used, since #158); the card says the token is set with Edit account…, offers that button, and says why Load repositories cannot run when the account has no token.
  • Sync all: an account that could not be synced is marked as needing attention and the pass ends as "finished with failures"; an account whose own sync was canceled is not counted as synced; a canceled pass says how many accounts were not started.
  • Retry failed gives the selection back after its run.
  • "1 repository loaded." / "Syncing 1 repository...".

Why

Closes #182. Each of these let the app say something that was not so: a token that looked accepted, an account that looked synced.

How it was tested

  • New and changed tests in SyncAllCoordinatorTests and WorkspaceViewModelTests (the reviewers' reproductions, adapted): the account without a token, the load that fails, the account canceled in its own workspace (with and without a failed repository), the canceled pass, Retry failed with a full and a narrowed selection, the singular.
  • Gates, started from PowerShell: build with warnings as errors 0, engine 1,148, CLI 212, line coverage 100% on the three gated assemblies, format clean, UI suite 13 of 13.
  • The changed card was looked at in a throwaway instance with its own data folder (an account without a token): the box is disabled and reads "No token is saved for this account", the note and the reason are under the form, Edit account… is beside Load repositories.

Not changed here, seen while looking: with no token the organization box of an account's page shows its placeholder although the account has an organization. It is the same on main and belongs with #179.

Checklist

  • Commits are signed and signed off (git commit -S -s)
  • Zero build warnings; format and lint are clean
  • Tests added or updated; the 100% coverage gate still passes
  • Docs updated for user-visible changes; threat model updated if the attack surface changed (README; no change of attack surface)
  • No secrets, credentials, or personal data
  • New dependencies are justified below, or none were added (none)
  • Substantial AI assistance, if any, is noted here: written with Claude Code, from findings of four independent review agents.

🤖 Generated with Claude Code

## What Four user-facing defects found by the release reviews of the 1.1.1 candidate (design and code), fixed together because they sit in the same two places: the connect card of an account's page, and how a workspace and Sync all report what was synced. - An account's page: the token box takes no input (a typed token was shown as taken and then not used, since #158); the card says the token is set with **Edit account…**, offers that button, and says why **Load repositories** cannot run when the account has no token. - Sync all: an account that could not be synced is marked as needing attention and the pass ends as "finished with failures"; an account whose own sync was canceled is not counted as synced; a canceled pass says how many accounts were not started. - Retry failed gives the selection back after its run. - "1 repository loaded." / "Syncing 1 repository...". ## Why Closes #182. Each of these let the app say something that was not so: a token that looked accepted, an account that looked synced. ## How it was tested - New and changed tests in `SyncAllCoordinatorTests` and `WorkspaceViewModelTests` (the reviewers' reproductions, adapted): the account without a token, the load that fails, the account canceled in its own workspace (with and without a failed repository), the canceled pass, Retry failed with a full and a narrowed selection, the singular. - Gates, started from PowerShell: build with warnings as errors 0, engine 1,148, CLI 212, line coverage 100% on the three gated assemblies, format clean, UI suite 13 of 13. - The changed card was looked at in a throwaway instance with its own data folder (an account without a token): the box is disabled and reads "No token is saved for this account", the note and the reason are under the form, **Edit account…** is beside **Load repositories**. Not changed here, seen while looking: with no token the organization box of an account's page shows its placeholder although the account has an organization. It is the same on `main` and belongs with #179. ## Checklist - [x] Commits are signed and signed off (`git commit -S -s`) - [x] Zero build warnings; format and lint are clean - [x] Tests added or updated; the 100% coverage gate still passes - [x] Docs updated for user-visible changes; threat model updated if the attack surface changed (README; no change of attack surface) - [x] No secrets, credentials, or personal data - [x] New dependencies are justified below, or none were added (none) - [x] Substantial AI assistance, if any, is noted here: written with Claude Code, from findings of four independent review agents. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
james.maes added 1 commit 2026-11-11 05:57:13 +00:00
Findings of the release reviews of 1.1.1, each reproduced against the view
models before it was fixed.

- An account's token is read from where it is saved each time it is used
  (#158), so a token typed into the box on an account's page looked taken and
  was not used. The box of an account takes no input now; the page says the
  token is set with Edit account, offers that button, and says why Load cannot
  run when the account has no token. Quick Sync keeps its box.
- Sync all: an account that could not be synced (no token, repositories that
  could not be loaded) is marked as needing attention and the pass ends as
  finished with failures, instead of a green "0 accounts synced, 1 skipped".
  An account whose own sync was canceled is not counted as synced. A canceled
  pass says how many accounts were not started.
- Retry failed gives the selection back when its run is over. Left narrowed, a
  later Sync or Sync all synced only the rows that had failed and reported the
  account as synced.
- "1 repository", not "1 repositories".

Closes #182

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
james.maes added 1 commit 2026-11-11 06:19:52 +00:00
- The result sentence says how many of how many accounts were synced, then
  each group that was not, once: an account that could not be synced needs
  attention and is no longer 'skipped' as well (SyncAllResult.CouldNotSync,
  Total).
- Retry failed runs the failed rows without changing the selection at all, so
  there is nothing to give back and a change made while it runs stays.
- The account's page says what to do in the window's own words (no Credential
  Manager entry name), also for an account on the default token; the line is
  announced when it changes.

Refs #182

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
Author
Owner

Second review by the four release reviewers (each on their own area): the fixes hold; code re-scored this area 9. Their remaining points are in d75bd4b: the Sync all sentence counted an unsynced account as both skipped and needing attention (now "N of M accounts synced." and each other group once); Retry failed restored a selection and so discarded a change made while it ran (it does not touch the selection any more); the missing-token line named a Credential Manager entry instead of what to do.

Gates on d75bd4b, started from PowerShell: build with warnings as errors 0, engine 1,151, CLI 212, line coverage 100% on the three gated assemblies, format clean, UI suite 13 of 13. The card was looked at again in a throwaway instance.

🤖 Generated with Claude Code

Second review by the four release reviewers (each on their own area): the fixes hold; code re-scored this area 9. Their remaining points are in d75bd4b: the Sync all sentence counted an unsynced account as both skipped and needing attention (now "N of M accounts synced." and each other group once); Retry failed restored a selection and so discarded a change made while it ran (it does not touch the selection any more); the missing-token line named a Credential Manager entry instead of what to do. Gates on d75bd4b, started from PowerShell: build with warnings as errors 0, engine 1,151, CLI 212, line coverage 100% on the three gated assemblies, format clean, UI suite 13 of 13. The card was looked at again in a throwaway instance. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
james.maes merged commit 165fda18f3 into main 2026-11-11 06:20:31 +00:00
Sign in to join this conversation.