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.
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.
## 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)
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>
- 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>
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.
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)
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
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.
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
SyncAllCoordinatorTestsandWorkspaceViewModelTests(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.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
mainand belongs with #179.Checklist
git commit -S -s)🤖 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