refactor(tray): native back navigation for cross-page back - #521
refactor(tray): native back navigation for cross-page back#521bkudiess wants to merge 4 commits into
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 9, 2026, 3:01 PM ET / 19:01 UTC. Summary Reproducibility: not applicable. this is a tray UX feature PR rather than a bug report. The relevant check is visual proof of the changed Hub navigation states, and the posted screenshot only covers one shown-link state. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Land the focused tray UX change after representative visual proof covers both shown and hidden backlink states, and after the helper’s trailing blank lines are trimmed. Do we have a high-confidence way to reproduce the issue? Not applicable; this is a tray UX feature PR rather than a bug report. The relevant check is visual proof of the changed Hub navigation states, and the posted screenshot only covers one shown-link state. Is this the best way to solve the issue? Yes, the implementation direction fits the existing HubWindow LastNavigationOrigin pattern and reuses localized sidebar labels. The remaining merge blockers are proof coverage for the promised behavior and a small EOF whitespace cleanup. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 71d249711d63. Label changesLabel changes:
Label justifications:
Evidence reviewedWhat I checked:
Likely related people:
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. How this review workflow works
|
|
ClawSweeper PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
|
We could probably use the NavigationView's built-in back stack instead of tracking where each page navigation came from and manually navigating back to that origin. That would keep the behavior tied to the actual navigation history rather than a separate origin tag. We can also use the back button affordance provided by NavigationView instead of adding per-page back-link UI. |
…ck links
Replace the custom cross-page back affordances with a single native
title-bar back button driven by the NavigationView ContentFrame's back
stack.
- Add a native back button in the Hub title bar wired to ContentFrame.GoBack(),
enabled/disabled by CanGoBack (mirrors NavigationView's root behavior),
plus an Alt+Left accelerator. The rail re-syncs its selection on
Back/Forward.
- Remove all custom origin-tracking infrastructure: NavOriginLabels helper,
the 2-arg IAppCommands.Navigate/NavigateTo overloads, LastNavigationOrigin
and pending-origin state on HubWindow, and the LocalizationHelper origin
additions.
- Remove the per-page "Back to {origin}" links (Config/Connection/Debug/Voice)
and the "Back to Connection" links (Sessions/Instances/Permissions), along
with their code-behind handlers and visibility logic.
- Revert all 2-arg navigation call sites back to single-arg Navigate across
11 pages.
- Clean up obsolete resw keys and add NavBackButton strings across all five
locales (en, fr, nl, zh-cn, zh-tw).
In-page form/detail close buttons (ConnectionPage "Add a gateway",
DebugPage log detail) are intentionally kept — they are view-state toggles
within a page, not Frame navigations.
Addresses PR openclaw#521 review feedback to rely on native back navigation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Extended the existing 'Back to Connection' affordance (Sessions/Instances/
Permissions) to every cross-page link in the Hub so users always have a
one-click return path.
- Added Helpers/NavOriginLabels for nav-tag -> display-label mapping so
destination pages can render 'Back to {origin}' dynamically.
- Threaded originTag through 9 cross-page Navigate calls: About->Debug,
Channels->Config (x2), Permissions->Voice, and Bindings/Cron/Usage/
Debug/Instances->Connection.
- Added the inline back HyperlinkButton + Initialize-time wiring to
ConfigPage, VoiceSettingsPage, DebugPage, and ConnectionPage matching
the existing Sessions/Instances/Permissions pattern.
- Updated AsyncListLoadingPageWiringTests to accept the originTag-bearing
Navigate('connection', ...) signature.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ck links
Replace the custom cross-page back affordances with a single native
title-bar back button driven by the NavigationView ContentFrame's back
stack.
- Add a native back button in the Hub title bar wired to ContentFrame.GoBack(),
enabled/disabled by CanGoBack (mirrors NavigationView's root behavior),
plus an Alt+Left accelerator. The rail re-syncs its selection on
Back/Forward.
- Remove all custom origin-tracking infrastructure: NavOriginLabels helper,
the 2-arg IAppCommands.Navigate/NavigateTo overloads, LastNavigationOrigin
and pending-origin state on HubWindow, and the LocalizationHelper origin
additions.
- Remove the per-page "Back to {origin}" links (Config/Connection/Debug/Voice)
and the "Back to Connection" links (Sessions/Instances/Permissions), along
with their code-behind handlers and visibility logic.
- Revert all 2-arg navigation call sites back to single-arg Navigate across
11 pages.
- Clean up obsolete resw keys and add NavBackButton strings across all five
locales (en, fr, nl, zh-cn, zh-tw).
In-page form/detail close buttons (ConnectionPage "Add a gateway",
DebugPage log detail) are intentionally kept — they are view-state toggles
within a page, not Frame navigations.
Addresses PR openclaw#521 review feedback to rely on native back navigation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(tray): consistent back-links across cross-page navigations
Extended the existing 'Back to Connection' affordance (Sessions/Instances/
Permissions) to every cross-page link in the Hub so users always have a
one-click return path.
- Added Helpers/NavOriginLabels for nav-tag -> display-label mapping so
destination pages can render 'Back to {origin}' dynamically.
- Threaded originTag through 9 cross-page Navigate calls: About->Debug,
Channels->Config (x2), Permissions->Voice, and Bindings/Cron/Usage/
Debug/Instances->Connection.
- Added the inline back HyperlinkButton + Initialize-time wiring to
ConfigPage, VoiceSettingsPage, DebugPage, and ConnectionPage matching
the existing Sessions/Instances/Permissions pattern.
- Updated AsyncListLoadingPageWiringTests to accept the originTag-bearing
Navigate('connection', ...) signature.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore(tray): use catalog back icon
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(tray): resolve property resource labels
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* refactor(tray): use native Frame back navigation instead of custom back links
Replace the custom cross-page back affordances with a single native
title-bar back button driven by the NavigationView ContentFrame's back
stack.
- Add a native back button in the Hub title bar wired to ContentFrame.GoBack(),
enabled/disabled by CanGoBack (mirrors NavigationView's root behavior),
plus an Alt+Left accelerator. The rail re-syncs its selection on
Back/Forward.
- Remove all custom origin-tracking infrastructure: NavOriginLabels helper,
the 2-arg IAppCommands.Navigate/NavigateTo overloads, LastNavigationOrigin
and pending-origin state on HubWindow, and the LocalizationHelper origin
additions.
- Remove the per-page "Back to {origin}" links (Config/Connection/Debug/Voice)
and the "Back to Connection" links (Sessions/Instances/Permissions), along
with their code-behind handlers and visibility logic.
- Revert all 2-arg navigation call sites back to single-arg Navigate across
11 pages.
- Clean up obsolete resw keys and add NavBackButton strings across all five
locales (en, fr, nl, zh-cn, zh-tw).
In-page form/detail close buttons (ConnectionPage "Add a gateway",
DebugPage log detail) are intentionally kept — they are view-state toggles
within a page, not Frame navigations.
Addresses PR #521 review feedback to rely on native back navigation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add OpenClaw Onboard settings card
Add a dedicated "OpenClaw Onboard" card to the Local Gateway section of
Companion Settings. Its "Open onboarding" button opens the hosted setup
window and navigates straight to the gateway onboarding step, skipping
WSL installation.
- New ShowGatewayWizard app command hosts SetupWindow and calls
NavigateToWizard() after initial content is ready.
- Local Gateway setup card keeps its single "Open setup" button.
- Localized header, description, and button across all 5 locales.
- Extend AppRefactorContractTests to cover the direct onboarding entrypoint.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Address review: guard active setup and fix onboarding header localization
- Guard direct onboarding so it cannot interrupt an in-progress setup.
ShowGatewayWizardAsync now goes through EnsureSetupWindowAsync, which
reports whether a setup window was newly created. It only calls
NavigateToWizard() for a freshly created window; an already-open setup
window (which may be mid-install on ProgressPage, whose Unloaded handler
cancels the running pipeline) is just brought to the front instead.
- Register SettingsPage_OnboardWizard_Header.Text as an invariant resource
key. "OpenClaw Onboard" is a product/feature name kept identical across
locales (the card's description and button are translated), fixing the
LocalizationValidationTests all-or-none failure.
- Extend AppRefactorContractTests to assert the active-setup guard
(EnsureSetupWindowAsync + the createdNew check) stays in place.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add Run gateway doctor action to Diagnostics page
Add a "Run gateway doctor" action to the Diagnostics page (DebugPage). The
card opens a terminal in the app-managed WSL gateway, runs `openclaw doctor`,
and leaves an interactive shell open so the operator can read the report.
- Shown only when the active gateway is an app-managed WSL distro
(GatewayHostAccessPlan.CanControlWslGateway); hidden for SSH/remote/none.
- Reuses the same launcher path as the Connection page's Open terminal
(GatewayTerminalLauncher / GatewayHostAccessClassifier), opening a themed
Windows Terminal tab with a direct wsl.exe fallback.
- Keep-open uses `&& openclaw doctor || true && exec bash` (no `;`):
Windows Terminal splits its command line on `;` even inside quotes, which
caused 0x80070002. `|| true` absorbs doctor's frequent advisory non-zero
exit so the shell always stays open.
- Start() now uses UseShellExecute = !UsesWindowsTerminal so direct wsl/ssh
launches get a visible console window.
- Adds a Doctor glyph to FluentIconCatalog and resw keys across all 5 locales.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix diagnostics page contract merge
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Address onboarding and navigation review findings
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Hide onboard card after gateway removal
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Translate gateway doctor diagnostics strings
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Allow invariant gateway section label
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: ranjeshj <ranjeshj@DESKTOP-D683G7P>
|
Closed as superseded by #780, which includes this change plus conflict-resolution, validation, localization, and review fixes. |
Summary
Reworked per review feedback to use the native
Frame/NavigationViewback navigation instead of custom back affordances.Cross-page back is now handled by a single native back button in the Hub title bar, driven by the
NavigationViewContentFrame's real back stack — no bespoke origin tracking or per-page back links.What changed
Added
ContentFrame.GoBack().CanGoBack(mirrorsNavigationView's native greyed-at-root behavior).NavBackButtonstrings across all five locales (en, fr, nl, zh-cn, zh-tw).Removed
NavOriginLabelshelper, the 2-argIAppCommands.Navigate/NavigateTooverloads,LastNavigationOrigin+ pending-origin state onHubWindow, and the relatedLocalizationHelperadditions.Navigateacross 11 pages.Intentionally kept
Framenavigations, so the native back button does not own them.Net effect
32 files changed, ~307 lines net removed (171 insertions / 478 deletions), including deletion ofHelpers/NavOriginLabels.cs.Validation
build.ps1— all projects (ARM64, .NET 10)Closes the review feedback to rely on native back navigation.