Skip to content

feat(settings): link Settings pages to related Dashboard pages - #2059

Closed
bkudiess wants to merge 3 commits into
openclaw:mainfrom
bkudiess:bkudiess-related-settings-dashboard-links
Closed

bkudiess wants to merge 3 commits into
openclaw:mainfrom
bkudiess:bkudiess-related-settings-dashboard-links

Conversation

@bkudiess

@bkudiess bkudiess commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

What Problem This Solves

Settings pages give no path to the deeper Gateway configuration that only the web Dashboard offers, so users can't easily find those settings.

User Impact

User impact: Systems, Automations, Usage, Sessions, Models, Local AI, Permissions, Sandbox and Diagnostics now end with a Windows-style Related settings section. Each row opens the matching Dashboard page and carries a "Dashboard" badge and an external-link icon, so it's clear the link leaves the app.

  • Rows appear only when the connected Gateway version has verified Dashboard routes. Today that is 2026.10.9, the same gate as search and the footer Dashboard button. On other versions the section stays hidden.
  • Admin-only destinations (Wake and heartbeat, Gateway security, Secrets) are hidden without operator.admin.

Why This Change Was Made

The native pages cover common tasks, and Related settings is the standard Windows Settings pattern for reaching deeper configuration. The section reuses the existing verified route catalog and version gate in HubSearchCatalog, with no second route table. Every launch goes through IAppCommands.OpenDashboard, so credentials, tunnels and the visible fallback to Connection settings behave exactly like other Dashboard entry points.

Scope decisions:

  • Connection and Config are not included, because their page-level Dashboard buttons are being retired in separate work.
  • Workspace is not included. It is a full-height file viewer with no page scroll, so a bottom section doesn't fit.
  • Row-level "Edit in Dashboard" is deferred. Cron already edits prompt and delivery natively, and there is no verified per-job Dashboard route.

Rows are compact links (a small icon, the title, a subtle "Dashboard" caption and an external-link glyph) rather than full-height cards, so the section stays secondary to the page's own settings. Each row's description is in its tooltip and UI Automation help text. HyperlinkButton provides a working UIA Invoke; the stock Toolkit SettingsCard advertises Invoke but rejects it.

Evidence

Screenshots come from the isolated app built from 2211b50e (current head) and driven against the synthetic fixture Gateway (details under Real Behavior Proof).

Automations, supported Gateway with operator.admin: three compact link rows, including the admin-only Wake and heartbeat.

Automations page with compact Related settings links: Wake and heartbeat, Gateway activity, Gateway logs, each with a Dashboard caption and external-link icon

Systems page:

Systems page with compact Related settings links: Systems, Approvals, Gateway logs

Unverified Gateway version (fixture-1): no Related settings section is shown.

Systems page on an unverified Gateway version with no Related settings section

Launch path: invoking rows via UI Automation produced these fixture-mode launch lines, which are redacted by the app:

Gateway fixture mode: suppressed Dashboard browser launch: http://<host>:65246/settings/…   (compact Wake and heartbeat row, 2211b50e)
Gateway fixture mode: suppressed Dashboard browser launch: http://<host>:56851/systems      (card layout, 2726dc00)
Gateway fixture mode: suppressed Dashboard browser launch: http://<host>:56851/logs         (card layout, 2726dc00)

Admin-scope gating was also shown on the earlier card layout (read-only scope hid Wake and heartbeat); that logic is unchanged and covered by unit tests.

Change Type

  • Bug fix
  • Feature
  • Refactor
  • Docs or instructions
  • Tests or validation
  • Security hardening
  • Chore or infrastructure

Scope

  • Tray or WinUI UX
  • Windows node capability
  • Local MCP or winnode
  • Gateway, connection, or pairing
  • Setup or onboarding
  • Permissions, privacy, or security
  • Tests, CI, or docs

Required proof pools

  • windows-winui-interactive: new visible Settings UI and accessibility behavior in the isolated WinUI app. Fixture-based current-head proof is below; a maintainer may still schedule the pool run.

Validation

All commands were run locally on Windows ARM64. Results are for the compact-row source of 2211b50e; after that run the only change was line-ending normalization of one file, followed by a clean ./build.ps1:

  • ./build.ps1: passed. All five projects built, and documentation validation passed (72 Markdown files).
  • dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore: passed. 4,868 passed, 25 skipped, 0 failed.
  • dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore: passed. 5,285 passed, 0 failed.
  • Focused run --filter "FullyQualifiedName~RelatedDashboardLinksTests|FullyQualifiedName~LocalizationValidationTests|FullyQualifiedName~HubSearchCatalogTests": passed, earlier in development.
  • git diff --check: clean.

New tests in RelatedDashboardLinksTests:

  • Version gate: unverified, empty and null versions produce no links.
  • Page mapping: each page projects its expected routes in order, and admin-only routes are hidden without admin.
  • Route source: links come only from HubSearchCatalog.DashboardRoutes, and their localized copy exists.
  • Page hosting: each in-scope page hosts the section exactly once with its own tag. Connection, Config and Workspace do not host it.
  • Launch path: the control launches only through IAppCommands.OpenDashboard, uses invokable HyperlinkButton rows, and never builds URLs.

Review: an independent rubber-duck review found no blocking issues. It raised two non-blocking findings, both fixed:

  • Rows were rebuilt (and focus lost) on every GatewaySelf health update; rows are now kept when nothing relevant changed.
  • The badge text was exposed as a separate UI Automation node; it is now hidden from the accessibility tree.

The later change to compact link rows was not re-reviewed. Its suggestion to add a test that mounts the real control was not taken; mounted behavior is covered only by the manual proof below.

Real Behavior Proof

  • Environment tested: Windows 11 ARM64. The isolated Debug app (win-arm64, OpenClaw.Tray.WinUI.dll SHA-256 5E5BB1EC…6CCE) was launched with scripts/run-gateway-fixture.ps1 against the synthetic fixture Gateway.
  • PR head or commit tested: app binary built from 2211b50e (compact rows; the earlier launch lines are from 2726dc00).
    • The fixture Gateway normally reports version fixture-1 with read-only scope. To show the supported state, the fixture host's hello response was patched locally, never committed, to report version 2026.10.9. One run also granted operator.admin.
    • The patch was reverted before the unverified-version run, and no app code was changed for proof.
  • Exact steps or command run: .\scripts\run-gateway-fixture.ps1 -AppPath .\src\OpenClaw.Tray.WinUI\bin\Debug\net10.0-windows10.0.22621.0\win-arm64\OpenClaw.Tray.WinUI.exe, then account menu > Settings > Automations / Systems via UI Automation, invoking rows via UIA. Screenshots were captured with PrintWindow on the app's own HWND (same method as OwnedWindowCapture).
  • Evidence after fix: the four screenshots and fixture launch lines above.
  • Observed result:
    • The section renders with the localized header, icons, descriptions, "Dashboard" badge and external-link icon.
    • The admin row is shown or hidden by scope, and the section is hidden on the unverified version.
    • UIA-invoked rows open /systems, /logs and /settings/approvals through the shared launcher.
  • Screenshot or artifact links verified? Yes.
  • Not verified or blocked:
    • No real 2026.10.9 Gateway; the fixture does not serve Dashboard pages, so route rendering on a real Dashboard is not shown.
    • Usage, Sessions, Models, Local AI, Permissions, Sandbox and Diagnostics were not screenshotted (covered by mapping tests). Background scrolling did not reach the bottom of the longer Sandbox page.
    • The disconnected-state click was not exercised; it relies on the existing GatewayDashboardLauncher failure path to Connection.
    • No dark or high-contrast captures.

Security Impact

  • New permissions or capabilities? (No)
  • Secrets or tokens handling changed? (No)
  • New or changed network calls? (No)
  • Command or tool execution surface changed? (No)
  • Data access scope changed? (No)
  • If any answer is Yes, explain the risk and mitigation: N/A. Rows only call the existing IAppCommands.OpenDashboard with fixed verified paths, and admin-only destinations require operator.admin.

Compatibility and Migration

  • Backward compatible? (Yes)
  • Config or environment changes? (No)
  • Migration needed? (No)
  • If yes, list the exact upgrade steps: N/A

Review Conversations

  • I replied to or resolved every bot review conversation addressed by this PR.
  • I left unresolved only conversations that still need maintainer judgment.

Settings pages end with a Windows-style Related settings section linking to
the matching Gateway Dashboard pages. Rows reuse the verified HubSearchCatalog
routes and version gate, hide admin-only routes without operator.admin, and
launch only through IAppCommands.OpenDashboard. Rows use SetupActionCard so
UI Automation Invoke works.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added the clawsweeper:intake:feature Preliminary submission classification; full source review pending. label Nov 7, 2026
@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Nov 7, 2026
@clawsweeper

clawsweeper Bot commented Nov 7, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

Adds localized Related settings sections linking nine Settings pages to verified Dashboard destinations.

Example: Open Automations while connected to Gateway 2026.10.9 with operator.admin.

  • Before: The page has no Related settings links to automation settings, activity, or logs.
  • After: Three labeled Dashboard rows provide those destinations; read-only operators see only activity and logs.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) Useful, focused navigation work with current-head native UI evidence and no identified defect; proof is bounded to the fixture application path.
Proof confidence 🐚 platinum hermit (4/6) ✨ media proof bonus Sufficient (screenshot): The current-head Windows ARM64 application was exercised through Settings and UI Automation against a synthetic Gateway; four inspected screenshots show rendering, admin visibility, and version gating, with redacted runtime traces showing shared-launcher dispatch. Browser arrival and the additional visual scenarios listed in testingReview remain outside this scoped proof.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Feature · Worth it: Yes · Fix scope: Complete
User problem: Users viewing native Settings pages lack nearby links to deeper related configuration in the Gateway Dashboard.
Reason: The collaborator-authored direction provides contextual discovery with explicit external-destination labeling and preserves existing navigation contracts.

Merge readiness

✅ Ready for maintainer review

Keep open: this collaborator-authored PR adds useful contextual navigation absent from main, with no actionable correctness findings in the reviewed diff.

Priority: P3
Reviewed head: 2726dc00d99305611446b4d20211aaecfa73cc9b

Before merge

None.

Findings

None.

Tests

  • Missing end-to-end proof: Actual Dashboard rendering, remaining page layouts, disconnected-click recovery, and dark/high-contrast appearance were not demonstrated by the supplied fixture captures.
Agent review details

How this fits together

Settings pages supply their page tags to a shared control, which projects Gateway version and operator scopes through the existing route catalog and sends selections to the existing Dashboard launcher.

flowchart LR
Pages[Settings pages] --> Section[Related settings control]
State[Gateway version and scopes] --> Section
Catalog[Verified route catalog] --> Projection[Related links projection]
Projection --> Section
Section --> Commands[App Dashboard command]
Commands --> Launcher[Existing Dashboard launcher]
Loading

Technical review

Best possible solution:

Keep the shared page projection and invokable control while retaining the existing catalog, compatibility gate, and Dashboard launch owner.

Do we have a high-confidence way to reproduce the issue?

This is an additive navigation feature; main lacks the proposed section, and current-head screenshots demonstrate its visible states.

Is this the best way to solve the issue?

The shared control and pure projection are a focused implementation: page-specific related destinations are new, while route validity, credentials, tunnels, and browser dispatch retain their existing owners.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 2812fe5187f6.

Provenance checked

  • Verified Dashboard routes and version gating keeps the original intent (4ea07e8: Shared navigation search deliberately kept unknown Dashboard versions conservative; this PR reuses that policy unchanged.)
  • Accessible Settings-card activation keeps the original intent (7ef81ba: The existing action-card owner supplies the Invoke provider missing from the pinned Toolkit card; this PR reuses it.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

  • Pinned contribution and main boundary: The introduced diff adds the projection, shared control, nine hosts, six locale updates, tests, and an ownership-ledger row; the two new production owners are absent from fetched main. (src/OpenClaw.Tray.WinUI/Presentation/RelatedDashboardLinks.cs:29, 2726dc00d993)
  • Existing route and launch ownership preserved: Links use HubSearchCatalog's existing exact-version gate, route paths, and admin flags; activation delegates to IAppCommands.OpenDashboard without constructing credential-bearing URLs. (src/OpenClaw.Tray.WinUI/Controls/RelatedSettingsSection.xaml.cs:117, 2726dc00d993)
  • Current-head visible behavior: Directly inspected all four downloaded screenshots: Automations shows three admin rows or two read-only rows, Systems shows related destinations, and the unverified-version Systems capture hides the section; supplied redacted runtime output records shared-launcher dispatch for /systems and /logs. (2726dc00d993)
  • Fixture proof boundary: The documented fixture browser owner suppresses Windows browser launch and records the redacted destination, so the supplied traces establish application dispatch rather than rendered Dashboard arrival. (docs/GATEWAY_FIXTURE_TESTING.md:561, 2726dc00d993)
  • Feature history and local history limit: Main history identifies prior navigation and accessibility contributors; GitHub commit patches verify introduction of the reused route catalog and invokable card. Some older local blobs prevent blame and content-history traversal, without affecting inspection of the pinned patch. (src/OpenClaw.Tray.WinUI/Presentation/HubSearchCatalog.cs:16, 2812fe5187f6)
  • Discussion and adjacent work: Discussion contains only review-status bot comments; improve: Connection page drops duplicate Dashboard buttons now covered by the footer #2058 retires duplicate Connection buttons and preserves Config recovery, complementing this PR's new related destinations.

Preflight source

Source unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified.

Review metrics

Metric Value Why it matters
Change allocation Production +322/-8; tests and test project +136; architecture documentation +1 Growth serves one reusable control, a pure page projection, nine hosts, and six-locale copy rather than duplicating launch machinery.

Labels

Label changes:

  • add P3: This improves discoverability of existing Dashboard capabilities without changing settings, credentials, or core execution.
  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P3: This improves discoverability of existing Dashboard capabilities without changing settings, credentials, or core execution.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed November 6, 2026, 9:54 PM ET / November 7, 2026, 02:54 UTC.

bkudiess and others added 2 commits November 6, 2026 19:57
Replace full-height cards with small link rows (icon, title, Dashboard caption,
external-link glyph) so the section stays secondary to each page's settings.
Descriptions move to tooltips and UIA help text. HyperlinkButton keeps a
working UIA Invoke, so SetupActionCard is no longer needed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…lines

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bkudiess
bkudiess marked this pull request as draft November 7, 2026 05:29
@bkudiess bkudiess closed this Nov 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant