Redesign Sessions page (Fluent 2 + deep-link to Chat)#514
Conversation
|
Codex review: needs real behavior proof before merge. Latest ClawSweeper review: 2026-05-22 23:02 UTC / May 22, 2026, 7:02 PM ET. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: yes. for the review finding: source inspection of the PR head shows new hard-coded SessionsPage strings without matching resource entries. The Chat handoff itself is not reproduced in a live app run; the submitted screenshot is not enough to verify that path. PR rating Rank-up moves:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. Real behavior proof Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge Security Review findings
Review detailsBest possible solution: Keep the Fluent Sessions redesign and deep-link after all new visible/accessibility strings are resource-backed across locales and observed proof shows Open chat selects the clicked session while overflow actions target the correct row. Do we have a high-confidence way to reproduce the issue? Yes for the review finding: source inspection of the PR head shows new hard-coded SessionsPage strings without matching resource entries. The Chat handoff itself is not reproduced in a live app run; the submitted screenshot is not enough to verify that path. Is this the best way to solve the issue? No, not as submitted. The direction is maintainable, but the best path is to preserve localization coverage and add observed proof for the session handoff and flyout routing before merge. Label justifications:
Full review comments:
Overall correctness: patch is incorrect Acceptance criteria:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 0afeaca8f87f. |
|
ClawSweeper PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
_mountedThreadId only records what we asked for, not what the user later picked inside OpenClawChatRoot's composer dropdown. Comparing against it could leave the chat root selected on a different session than the row the user just clicked, sending the next message to the wrong thread (raised in PR openclaw#514 review). Treat any pending session key from SessionsPage as an unconditional remount so the deep-link always wins. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restructures SessionsPage to match the Permissions/Connection shell (ScrollViewer + StackPanel, MaxWidth 900, 4 px grid) and removes UI drift against the openclaw-design skill: - Replace literal emoji empty-state and ad-hoc colors with Segoe Fluent glyphs and SystemFillColor* theme brushes. - Status dot is now a 4-state Fluent map (Success / Caution / Critical / Neutral) with a hover tooltip describing the state. - Primary action is an AccentButton 'Open chat' (Fluent 2 rest/hover/press/disabled via AccentButtonStyle, no Foreground overrides); destructive Reset/Compact/Delete moved to a MenuFlyout behind the row's overflow button. - Filter out cron-spawned sessions (key slot == 'cron') so the conversation list mirrors the macOS companion. - Deep-link from a session row to the Chat surface: SessionsPage stores the session key on HubWindow.PendingChatSessionKey; ChatPage.ShowFunctionalSurface consumes it and remounts the OpenClawChatRoot with initialThreadId, so both the timeline and the composer's session dropdown render the requested session. - Robust MenuFlyout click routing via ResolveSessionKey, which walks back to MenuFlyout.Target when DataContext propagation into popup items fails (canonical WinUI binding quirk). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
_mountedThreadId only records what we asked for, not what the user later picked inside OpenClawChatRoot's composer dropdown. Comparing against it could leave the chat root selected on a different session than the row the user just clicked, sending the next message to the wrong thread (raised in PR openclaw#514 review). Treat any pending session key from SessionsPage as an unconditional remount so the deep-link always wins. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restructures SessionsPage to match the Permissions/Connection shell and removes UI drift against the
openclaw-designskill.Highlights
ScrollViewer+StackPanel(MaxWidth=900, 24 px page padding, 4 px grid throughout) — matches every other app page.SystemFillColorSuccessBrushStatus ∈ {active, running}SystemFillColorCautionBrushAbortedLastRun == trueSystemFillColorCriticalBrushStatus ∈ {error, failed, failure}SystemFillColorNeutralBrushAccentButton("Open chat") — text-only Fluent 2 button soAccentButtonStyleowns rest/hover/press/disabled brushes per spec.MenuFlyoutbehind the row's overflow (⋯) button: Reset, Compact, Delete (Delete usesSystemFillColorCriticalBrush).agent:<id>:cron) — they overcrowd the conversation list and have a dedicated Cron page.HubWindow.PendingChatSessionKeyand navigates;ChatPage.ShowFunctionalSurfaceconsumes the key and remountsOpenClawChatRootwithinitialThreadId. Both the timeline and the composer's session dropdown render the selected session on first paint.MenuFlyoutclick routing viaResolveSessionKey— falls back toMenuFlyout.TargetwhenDataContextpropagation into popup items fails (canonical WinUI binding quirk).LimeGreen/Gray/IndianRedcolors; all glyphs are Segoe Fluent (PUA) values mirrored fromFluentIconCatalog.Files
src/OpenClaw.Tray.WinUI/Pages/SessionsPage.xaml/.xaml.cssrc/OpenClaw.Tray.WinUI/Pages/ChatPage.xaml.cs(session-key consumer + thread remount)src/OpenClaw.Tray.WinUI/Windows/HubWindow.xaml.cs(PendingChatSessionKeyfield)Validation
./build.ps1✅dotnet test OpenClaw.Shared.Tests --no-restore— 1891 passed, 29 skipped ✅dotnet test OpenClaw.Tray.Tests --no-restore— 1178 passed ✅