Five specialist review agents (workflow, Fluent compliance, accessibility, feedback/state, microcopy) reviewed the shipped v0.1.0-beta.4 XAML and view models at the code level; every finding survived two adversarial verifiers (factual + design-value). 51 raw → 26 confirmed → 22 after consolidating duplicates. Overall: structure and workflow reviewed well; the systemic gaps are theme-hostile hardcoded status colors and a near-silent screen-reader experience.
Status colors are hardcoded literals and the only status differentiator (StatusFormat.cs:12–25): Gray/DodgerBlue/ForestGreen/Crimson/Orange ignore dark theme and High Contrast, and there are no icons — Done vs Failed is color-alone. Fix: WinUI semantic brushes (SystemFillColorSuccessBrush, SystemFillColorCriticalBrush, SystemFillColorCautionBrush, SystemFillColorAttentionBrush, neutral for Queued) resolved per-call from Application.Current.Resources, plus a per-status FontIcon glyph. (Found independently by 3 of 5 reviewers.)
No live regions — sync progress/summary/errors never announced (MainWindow.xaml:168–171): AutomationProperties.LiveSetting="Polite" on StatusText (Assertive for errors) + RaiseNotificationEvent for summary/failures.
Row selection checkboxes have no accessible name (MainWindow.xaml:272–278): announce as bare "checkbox" — add AutomationProperties.Name with the repo name.
P2 — visible friction
Overall progress bar dishonest on subset syncs: Maximum stays at full loaded count; scope TotalCount/completed counting to the captured run set (MainViewModel.cs).
Inputs editable mid-run; path preview can contradict the running job: add CanEditInputs (!IsRunning && !IsLoadingRepos) bound to the input region's IsEnabled.
One StatusText multiplexes org-lookup/load/sync/errors: a token keystroke mid-sync clobbers "Syncing…"; give org-lookup inline feedback by the ComboBox, or at minimum gate its writes on !IsRunning.
No minimum window size — action row clips off-screen: OverlappedPresenter minimum (~660×500); optionally wrap the action row.
First-run token guidance is reactive only: "How to create a token" HyperlinkButton + required scopes (repo, optional read:org) near the field.
Table on raw Mica: wrap header+ListView in LayerFillColorDefaultBrush with CornerRadius="8".
No table semantics for screen readers (L effort): near-term composed per-row AutomationProperties.Name ("name, status, branch, archived"); long-term a real grid control.
Sort headers announce the glyph ("Name black up-pointing triangle"): visual-only arrow + proper names ("Name, sorted ascending") + polite notification on sort.
"Browse..." (three periods) vs "Settings…" (glyph): use "…" everywhere.
"{n} path(s)" pluralization in the user-facing invalid-path row error: explicit singular/plural.
Status colors item also noted by the feedback reviewer (consolidated into the P1 above).
Method note: code-level review (headless machine — pixel/spacing judgments deliberately excluded); 25 findings were refuted during verification and discarded. Full narrative report delivered to the owner as a private artifact page.
Five specialist review agents (workflow, Fluent compliance, accessibility, feedback/state, microcopy) reviewed the shipped v0.1.0-beta.4 XAML and view models at the code level; every finding survived two adversarial verifiers (factual + design-value). 51 raw → 26 confirmed → 22 after consolidating duplicates. **Overall: structure and workflow reviewed well; the systemic gaps are theme-hostile hardcoded status colors and a near-silent screen-reader experience.**
## P1 — accessibility & theming blockers (~1 focused day)
- [ ] **Status colors are hardcoded literals and the only status differentiator** (`StatusFormat.cs:12–25`): `Gray/DodgerBlue/ForestGreen/Crimson/Orange` ignore dark theme and High Contrast, and there are no icons — Done vs Failed is color-alone. Fix: WinUI semantic brushes (`SystemFillColorSuccessBrush`, `SystemFillColorCriticalBrush`, `SystemFillColorCautionBrush`, `SystemFillColorAttentionBrush`, neutral for Queued) resolved per-call from `Application.Current.Resources`, plus a per-status `FontIcon` glyph. *(Found independently by 3 of 5 reviewers.)*
- [ ] **Inline row error uses `Foreground="Crimson"`** (`MainWindow.xaml:321`) → `{ThemeResource SystemFillColorCriticalBrush}`.
- [ ] **No live regions — sync progress/summary/errors never announced** (`MainWindow.xaml:168–171`): `AutomationProperties.LiveSetting="Polite"` on StatusText (Assertive for errors) + `RaiseNotificationEvent` for summary/failures.
- [ ] **Row selection checkboxes have no accessible name** (`MainWindow.xaml:272–278`): announce as bare "checkbox" — add `AutomationProperties.Name` with the repo name.
## P2 — visible friction
- [ ] **Overall progress bar dishonest on subset syncs**: Maximum stays at full loaded count; scope `TotalCount`/completed counting to the captured run set (`MainViewModel.cs`).
- [ ] **Inputs editable mid-run; path preview can contradict the running job**: add `CanEditInputs` (`!IsRunning && !IsLoadingRepos`) bound to the input region's `IsEnabled`.
- [ ] **One StatusText multiplexes org-lookup/load/sync/errors**: a token keystroke mid-sync clobbers "Syncing…"; give org-lookup inline feedback by the ComboBox, or at minimum gate its writes on `!IsRunning`.
- [ ] **No minimum window size — action row clips off-screen**: `OverlappedPresenter` minimum (~660×500); optionally wrap the action row.
- [ ] **First-run token guidance is reactive only**: "How to create a token" HyperlinkButton + required scopes (`repo`, optional `read:org`) near the field.
- [ ] **Table on raw Mica**: wrap header+ListView in `LayerFillColorDefaultBrush` with `CornerRadius="8"`.
- [ ] **No table semantics for screen readers** (`L` effort): near-term composed per-row `AutomationProperties.Name` ("name, status, branch, archived"); long-term a real grid control.
- [ ] **Sort headers announce the glyph** ("Name black up-pointing triangle"): visual-only arrow + proper names ("Name, sorted ascending") + polite notification on sort.
- [ ] **Unlabeled controls**: identical "Resolve…" links (add repo name), select-all checkbox (tooltip isn't a UIA name), PathRecoveryDialog rename fields/Skip checkboxes (`LabeledBy`).
- [ ] **No access keys/accelerators**: menu mnemonics + Ctrl+R Load, Ctrl+Enter Sync, Esc Cancel.
- [ ] **"Parallel" NumberBox header names no noun**: "Parallel clones" (also in Settings) + tooltip.
- [ ] **Path preview dangles when empty and says "created" for updates**: collapse when empty; "Each repository will be placed at:".
## P3 — polish
- [ ] "Retry failed" stays visible (inert) after the last failure is Resolved: dedicated `AnyFailed` observable instead of piggy-backing on `CompletedCount`.
- [ ] No busy state while a path recovery applies: set the row active during `ApplyRecoveryAsync` so the per-row bar shows.
- [ ] Progress bar/spinners lack automation names ("Overall sync progress", "Loading organizations/repositories").
- [ ] "Browse..." (three periods) vs "Settings…" (glyph): use "…" everywhere.
- [ ] "{n} path(s)" pluralization in the user-facing invalid-path row error: explicit singular/plural.
- [ ] Status colors item also noted by the feedback reviewer (consolidated into the P1 above).
Method note: code-level review (headless machine — pixel/spacing judgments deliberately excluded); 25 findings were refuted during verification and discarded. Full narrative report delivered to the owner as a private artifact page.
Owner follow-up: composition-level critique (layout hierarchy, IA) was out of this review's defect-verification scope — addressed as a redesign direction posted on #16, which the P2/P3 items here should be reconciled against before implementation (several dissolve in the new layout: the action-row clipping, status multiplexing, and path-preview items are all restructured away).
Owner follow-up: composition-level critique (layout hierarchy, IA) was out of this review's defect-verification scope — addressed as a redesign direction posted on #16, which the P2/P3 items here should be reconciled against before implementation (several dissolve in the new layout: the action-row clipping, status multiplexing, and path-preview items are all restructured away).
All four P1 items shipped in v0.1.0-beta.5 (PR #23): theme/HC-aware semantic status brushes + status glyphs (never color-alone), SystemFillColorCriticalBrush errors, a WORKING live region for StatusText (doc-verification caught that LiveSetting alone never announces — LiveRegionChanged is now raised per update), UIA failure notifications, and AutomationProperties.Name on all previously anonymous controls. Owner checkpoint: verify visually in light/dark/High Contrast. P2/P3 items proceed per the plan's Phase 3 reconciliation.
All four P1 items shipped in v0.1.0-beta.5 (PR #23): theme/HC-aware semantic status brushes + status glyphs (never color-alone), SystemFillColorCriticalBrush errors, a WORKING live region for StatusText (doc-verification caught that LiveSetting alone never announces — LiveRegionChanged is now raised per update), UIA failure notifications, and AutomationProperties.Name on all previously anonymous controls. Owner checkpoint: verify visually in light/dark/High Contrast. P2/P3 items proceed per the plan's Phase 3 reconciliation.
All findings addressed across the accessibility wave (beta.5), the workspace redesign (beta.6–8), and this session's responsive-layout work (beta.11).
P1 (accessibility & theming): status now uses theme-/HC-aware SystemFillColor* brushes plus per-status glyphs (color is never the sole differentiator); inline errors use SystemFillColorCriticalBrush; StatusText is a live region with a manual LiveRegionChanged raise and RaiseNotificationEvent for failures; selection checkboxes and Resolve links carry AutomationProperties.Name.
P2: run-scoped progress (TotalCount/completed over the captured set); CanEditInputs gates inputs mid-run; minimum window size via OverlappedPresenter plus a responsive two-row toolbar so actions never clip; "How to create a token" guidance; the table sits on a LayerFillColorDefaultBrush card; sort headers announce composed names ("Name, sorted ascending") with the glyph in the Raw view; access keys + Ctrl+R / Ctrl+Enter / Esc.
P3:HasFailedRepos flag (Retry hides when nothing's failed); per-row busy state during recovery; automation names on progress bars/rings; "Browse…" uses the ellipsis everywhere; explicit singular/plural in path messages.
The one long-term item — a real grid control for full table semantics — is tracked separately as #33 (adopt WinUI.TableView once its accessibility release ships). Closing this review issue.
**All findings addressed** across the accessibility wave (beta.5), the workspace redesign (beta.6–8), and this session's responsive-layout work (beta.11).
- **P1 (accessibility & theming):** status now uses theme-/HC-aware `SystemFillColor*` brushes plus per-status glyphs (color is never the sole differentiator); inline errors use `SystemFillColorCriticalBrush`; StatusText is a live region with a manual `LiveRegionChanged` raise and `RaiseNotificationEvent` for failures; selection checkboxes and Resolve links carry `AutomationProperties.Name`.
- **P2:** run-scoped progress (`TotalCount`/completed over the captured set); `CanEditInputs` gates inputs mid-run; minimum window size via `OverlappedPresenter` plus a responsive two-row toolbar so actions never clip; "How to create a token" guidance; the table sits on a `LayerFillColorDefaultBrush` card; sort headers announce composed names ("Name, sorted ascending") with the glyph in the Raw view; access keys + Ctrl+R / Ctrl+Enter / Esc.
- **P3:** `HasFailedRepos` flag (Retry hides when nothing's failed); per-row busy state during recovery; automation names on progress bars/rings; "Browse…" uses the ellipsis everywhere; explicit singular/plural in path messages.
The one long-term item — a **real grid control** for full table semantics — is tracked separately as #33 (adopt WinUI.TableView once its accessibility release ships). Closing this review issue.
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.
Five specialist review agents (workflow, Fluent compliance, accessibility, feedback/state, microcopy) reviewed the shipped v0.1.0-beta.4 XAML and view models at the code level; every finding survived two adversarial verifiers (factual + design-value). 51 raw → 26 confirmed → 22 after consolidating duplicates. Overall: structure and workflow reviewed well; the systemic gaps are theme-hostile hardcoded status colors and a near-silent screen-reader experience.
P1 — accessibility & theming blockers (~1 focused day)
StatusFormat.cs:12–25):Gray/DodgerBlue/ForestGreen/Crimson/Orangeignore dark theme and High Contrast, and there are no icons — Done vs Failed is color-alone. Fix: WinUI semantic brushes (SystemFillColorSuccessBrush,SystemFillColorCriticalBrush,SystemFillColorCautionBrush,SystemFillColorAttentionBrush, neutral for Queued) resolved per-call fromApplication.Current.Resources, plus a per-statusFontIconglyph. (Found independently by 3 of 5 reviewers.)Foreground="Crimson"(MainWindow.xaml:321) →{ThemeResource SystemFillColorCriticalBrush}.MainWindow.xaml:168–171):AutomationProperties.LiveSetting="Polite"on StatusText (Assertive for errors) +RaiseNotificationEventfor summary/failures.MainWindow.xaml:272–278): announce as bare "checkbox" — addAutomationProperties.Namewith the repo name.P2 — visible friction
TotalCount/completed counting to the captured run set (MainViewModel.cs).CanEditInputs(!IsRunning && !IsLoadingRepos) bound to the input region'sIsEnabled.!IsRunning.OverlappedPresenterminimum (~660×500); optionally wrap the action row.repo, optionalread:org) near the field.LayerFillColorDefaultBrushwithCornerRadius="8".Leffort): near-term composed per-rowAutomationProperties.Name("name, status, branch, archived"); long-term a real grid control.LabeledBy).P3 — polish
AnyFailedobservable instead of piggy-backing onCompletedCount.ApplyRecoveryAsyncso the per-row bar shows.Method note: code-level review (headless machine — pixel/spacing judgments deliberately excluded); 25 findings were refuted during verification and discarded. Full narrative report delivered to the owner as a private artifact page.
Owner follow-up: composition-level critique (layout hierarchy, IA) was out of this review's defect-verification scope — addressed as a redesign direction posted on #16, which the P2/P3 items here should be reconciled against before implementation (several dissolve in the new layout: the action-row clipping, status multiplexing, and path-preview items are all restructured away).
All four P1 items shipped in v0.1.0-beta.5 (PR #23): theme/HC-aware semantic status brushes + status glyphs (never color-alone), SystemFillColorCriticalBrush errors, a WORKING live region for StatusText (doc-verification caught that LiveSetting alone never announces — LiveRegionChanged is now raised per update), UIA failure notifications, and AutomationProperties.Name on all previously anonymous controls. Owner checkpoint: verify visually in light/dark/High Contrast. P2/P3 items proceed per the plan's Phase 3 reconciliation.
All findings addressed across the accessibility wave (beta.5), the workspace redesign (beta.6–8), and this session's responsive-layout work (beta.11).
SystemFillColor*brushes plus per-status glyphs (color is never the sole differentiator); inline errors useSystemFillColorCriticalBrush; StatusText is a live region with a manualLiveRegionChangedraise andRaiseNotificationEventfor failures; selection checkboxes and Resolve links carryAutomationProperties.Name.TotalCount/completed over the captured set);CanEditInputsgates inputs mid-run; minimum window size viaOverlappedPresenterplus a responsive two-row toolbar so actions never clip; "How to create a token" guidance; the table sits on aLayerFillColorDefaultBrushcard; sort headers announce composed names ("Name, sorted ascending") with the glyph in the Raw view; access keys + Ctrl+R / Ctrl+Enter / Esc.HasFailedReposflag (Retry hides when nothing's failed); per-row busy state during recovery; automation names on progress bars/rings; "Browse…" uses the ellipsis everywhere; explicit singular/plural in path messages.The one long-term item — a real grid control for full table semantics — is tracked separately as #33 (adopt WinUI.TableView once its accessibility release ships). Closing this review issue.