Repository navigation
feat(dashboards): add native Dashboards page with board widgets - #1894
Conversation
Step 1 of native Dashboards: a gallery of session boards for the selected agent with live previews, and a read-only dashboard view with tabs and HTML, report, and website widgets. HTML widgets run in isolated WebView2 sandboxes through the Gateway sandbox proxy; website widgets use their own in-private profiles and are limited to public HTTPS hosts. Adds the dashboards hub route, nav entry, command palette entry, Sessions row action, localized strings, a Gateway fixture scenario, tests, and docs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Preserve both dashboard resources and upstream chat sandbox resources in all locales. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Codex review: needs real behavior proof before merge. What this changesAdds a native dashboard gallery and read-only board viewer with reports, ticketed HTML widgets, browser links, and sidebar navigation. Example: The main agent has an Ops overview board showing 99.97% uptime and 128 closed tickets.
Review scores
ProductKind: Feature · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 5 items remain Keep this maintainer-authored feature open: the native reader remains absent from main, and a widget recovery defect needs repair before merging. Priority: P2 Before merge
Findings
Tests
Agent review detailsHow this fits togetherWorkspace hosts the reader; authenticated Gateway session and board responses become native cards and reports, while ticketed HTML passes through a separate-origin WebView2 sandbox. flowchart LR
Workspace --> DashboardsPage
DashboardsPage --> GatewayClient
GatewayClient --> Gateway
GatewayClient --> NativeReports
GatewayClient --> DocumentLoader
DocumentLoader --> WebViewSandbox
Technical reviewBest possible solution: Keep the reader on existing Gateway and Workspace owners, and arm a fresh render deadline whenever the widget host delivers HTML. Do we have a high-confidence way to reproduce the issue? The timeout defect is traceable through document retries, the one-shot deadline and late delivery; no target code was executed during this read-only review. Is this the best way to solve the issue? The bounded native reader is a reasonable feature using existing navigation and connection owners; recovery needs a delivery-scoped deadline, and obsolete or duplicate test coverage should be removed. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 1c223f14f6b6. Merge-risk optionsMaintainer options:
Provenance checked
TestingProof path: unit tests only. SecurityNeeds attention: Source isolation controls are present, but final-delivery ticket authorization remains unverified. EvidenceSecurity concerns:
What I checked:
Likely related people:
Preflight sourceSource 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
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/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. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (1 earlier review cycle)
Reviewed November 9, 2026, 6:09 PM ET / 23:09 UTC (Revision 2). |
Exercise current-build Light/Dark boards through the fixture, OCR owned-window pixels, scan accessibility, and cover website cookie/storage separation. Reap only browser children bound to the fixture process before profile cleanup. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Current dashboard UI proof: 14 owned-window captures in Light and Dark from the real ARM64 app against synthetic read-only boards. Windows OCR verifies rendered HTML (99.97% uptime), native reports, approval/error copy and tab states; Axe scans cover the populated gallery and board. The focused run executed 3 tests with zero failures/skips, including same-origin website cookie/localStorage isolation. These captures use the production source at 5c9e960, unchanged under src/ by ee9a20f (the follow-up adds proof tests/harness only). This is not a high-contrast, real-Gateway, process-crash or working-MCP-app proof claim. The MCP app shown is the explicitly deferred Step 3 placeholder. |
Retain cleanup failures while still stopping later browser children. Bound discovered child lifetimes to the actual fixture app lifetime. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use the actual accessible control as the page marker rather than the non-control Page root. The focused scan executes and passes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use the foreground accent token for SVG strokes, not the native background-fill role. Require visible plot luminance in captured pixels; verify the old fixture fails in real Windows high contrast and the corrected fixture passes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Exercise the integrations tab against the reserved public documentation site, assert visible page content and native origin footer, and document the explicit outbound HTTPS requirement. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Updated native dashboard proof: working HTML, native report and public HTTPS website widget; Light/Dark, production-shaped ARM64 Release, and real Windows Aquatic contrast mode. Visual inspection exposed a fixture SVG using a background token for ink. The added pixel guard failed before the fixture-only fix (luminance range 2, required 64) and passed afterward (216–223) in both app themes. No app/framework workaround was added. Windows was restored to None after approval. Debug selected proof: 4 passed, 0 skipped; Release fixture: 1 passed, 0 skipped; contrast fixture: 1 passed, 0 skipped (each fixture case exercises two themes). Website content comes from the reserved public documentation page, in a fresh private profile, not a production Gateway. MCP apps shown in the separate tabs captures remain Step 3 placeholders. |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Replace live gallery previews and embedded websites with a focused reader, preserve ticketed HTML and native reports, and make Dashboards a standalone default pin. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve native board content and bounded HTML hosting, repair session refresh and loopback transport, integrate reviewed viewport inset and pane toggle ownership, and add faithful rendering and fail-closed diagnostic guards. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use the shared native PageHero adapter for gallery and board headers, improve reader recovery and focus, and add bounded arrangement diagnostics without weakening capture assertions. Validation: full build passed; Shared 5085 passed, 25 actual skips; Tray 5178 passed. Native visual and motion proof remains pending. No compositor acceptance claimed. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Reconcile current sidebar removals and toggle-only pane persistence with native Dashboards routing, layout and independent fixture coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Integrate main 045d13a with canonical PageHero, Settings inset, Back/Escape navigation and Windows App SDK 2.6.5. Preserve Dashboard reader routes and the user-requested published Reactor preview.17 dependency train. Repair stale native readiness and operation-banner assertions without weakening their contracts. Validation on staged tree 62478d4: build.ps1 -NoTrustRepository passed all five builds; unfiltered Shared tests passed 5033 with 25 actual NotExecuted rows; unfiltered Tray tests passed 5459 with no skips. Fresh Debug ARM64 UI build passed with zero warnings/errors. Independent merge review found a stale SettingsNavChat readiness anchor, repaired to SettingsBackToApp. Native execution remains unverified: the admission wrapper stopped before discovery/tests because it incorrectly required loose XBF files that the fresh PRI inventory identifies as EmbeddedData. Required resources remain bound in matching app/test PRI files; runtime resolution, mounted/app/accessibility/animation proof and Release proof remain open. Owned cleanup and full nine-field lease release were independently verified. No PR landing claim. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep active gallery search accessible after scope or inventory changes, reject missing widget tabs before rendering, and retain valid HTML-only boards. Update the native journey to the current gallery controls and remove wall-clock-dependent gallery readiness. Add deterministic calendar-day coverage and document the legacy empty-pin migration caveat. Adopt the shared Reactor bootstrap and capped Settings field alignment fixes with their regression coverage. Synchronize approval-fixture log assertions using the existing completion wait; preserve all approval and output assertions. Headless validation on the final source: full build passed; unfiltered Shared 5041 passed with 25 opt-in skips; unfiltered Tray 5464 passed; Debug ARM64 UI tests compiled with zero warnings/errors and were not executed. Documentation, skill and bootstrap checks passed. An earlier synthetic reader-start timeout remains an unresolved intermittent observation. The isolated diagnostic and controlled final Shared pass do not establish a scheduling fix. Native/UI execution and Debug/Release app proof remain blocked, including the two previously recorded focus failures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve main Inbox ownership and file-worker fixtures while retaining the Dashboards reader. Adapt the stable sidebar geometry proof to the default Dashboards pin and replace the retired page-local notification guard with shared Inbox ownership coverage. Validation: static merge/XML/resource/architecture checks passed. Windows build, .NET suites and native proof remain blocked on this Linux host without pwsh, dotnet or winapp. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
An unsaved Gateway scope starts with Dashboards. Pinning and then unpinning Connection must retain that default in both committed snapshots. Keep delayed notification ordering, distinct origins, detached values and version assertions, and assert the final current pin list. Validation: reviewed concrete CI failure and independent scoped source review; git diff --check passed. Focused and required Windows validation remains blocked locally because dotnet and PowerShell are unavailable. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Give each delivered document a fresh acknowledgement deadline, separate from proxy startup. Fence stale acknowledgement and queued timeout callbacks, cancel on teardown, and close the WebView before terminal render failure. Add deterministic owner regressions and preserve transport/relay trust rules. Validation: independent scoped source review and static negative control passed. Focused and required Windows tests could not execute on this Linux host without dotnet or PowerShell; native proof remains pending. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
…f contracts Restore the gallery heading focus opt-in lost during shared hero adoption. Account for the default pin, collapsed pane, current Inbox bell and already-visible archive viewport in native proof without widening bounds or hiding warnings. Remove retired backdrop resources/tests and duplicate icon source assertions while retaining native coverage. Validation: original exact-head failure logs and viewport artifact inspected; independent scoped source review and static XML/diff checks passed. Native tests and required Windows closeout remain pending on the authorized validation host. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Route the explicit native-input opt-in only to the fixture UI child. Capture each report and plot after measured native scrolling instead of requiring every board row in one viewport. Qualify pinned point tests with owned foreground, physical DPI and detailed native hit receipts while retaining exact button ancestry. Preserve wheel safety guards and negative controls, strict all-pass admission, keyboard-only lane selection, every OCR/plot assertion and existing product behavior. The original unnamed toggle hit remains unidentified until the qualified native rerun. Validation: independent scoped source/rubber-duck reviews, YAML and diff/guard checks passed. PowerShell/C# and native execution remain pending on the authorized Windows owner; local tooling is absent. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Keep whole-widget identity on the existing Reactor semantic group while preserving card rendering and child actions. Cover the native ancestor-to-group peer path in both themes. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Observe expanded widget geometry and overflow menu opening and closure before strict mounted assertions. Preserve bounded external widget readiness receipts without relaxing measurement or downstream proof. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Retain the independent Gateway fixture and compatibility lane, fail-closed Reactor bootstrap, explicit child-only native input, separate artifacts and required CI Gate coverage. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Restore the shared root constraints changed by the flyout fixture. Read the owned monitor work area instead of a transient maximized-window rectangle, preserving strict native proof assertions. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Integrate f059221 while preserving Dashboard routes, fixture scenarios, native proof guards and explicit theme selection. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Size the owned native client before full-bounds assertions and restore its original geometry. Keep ownership admission non-mutating and retain exact peer, child and deadline contracts. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve both Dashboard and account-menu resources and ownership ledger entries. Keep upstream chat tail behavior and Gateway browser proof intact; final simplification validation follows on the combined source. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve the native reader, ticket and permission boundaries, default pins and distinct native proofs. Collapse repeated grant branching, remove unused presentation inputs, shorten duplicate guide content, remove unrelated Inbox/package documentation hunks, and restore main-owned icon-catalog tests. Defer the baseline fixture cold-feed repair while preserving NativeInputProof authorization. Validated tree 6a32463: full build passed; Shared 5475 passed with 28 opt-in skips; Tray 5725 passed with no skips; focused reader tests 163 Shared and 109 Tray passed; ARM64 UI tests compiled without execution. Workflow, bootstrap and documentation checks passed. Earlier Piper fixture-start failure remains preserved, not claimed fixed. Current native UI proof remains open. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Merge 243f9cf normally. Retain upstream prebuilt fixture output/NoBuild behavior and Dashboard NativeInputProof child authorization. Validate their combination in the existing workflow contract. Full build, workflow contracts, unfiltered Tray 5890/5890 and Debug ARM64 UI compile passed. Local Shared became incomplete after an observed stalled run was stopped through its original tool handle at 832 seconds; no TRX or active-case sequence was produced. Hosted current-head Core/CLI and CI Gate must establish the remaining result; no skipped assertions or product workaround. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Wait for complete native peer bounds within the existing deadline, query widget groups through their selected board grid, and preserve nonfinite scroll observations without masking failures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore the selected tab and controlled-panel relation after flyout closure and layout readiness. Reveal clipped widget rectangles through actual scrolling, and qualify pinned pane input with physical transitions and an independent occluder control. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore the test-injected cancellation source before disposal so native unload observes the original owner. Adopt the reviewed finite fixture deadline option with a 900-second default and a 1200-second ordinary CI override, retaining native-input authorization and all result guards. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Resolve pane and history controls through the owned native title-bar root's direct children, avoiding descendant traversal through WebView content while preserving physical input, occlusion and keyboard proof. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Capture the Systems baseline from one fresh settled viewport after the existing scroll reset. Add the approved bounded shared reader event trace to timeout diagnostics without changing assertions, actions or deadlines. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Integrate 9d36f5c with additive fixture scenario and localization resolutions. Preserve authoritative Usage owners and existing Dashboard reader, security and validation repairs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep completed document snapshots and valid tab choices while rejecting retired-owner queued delivery. Cover real HTTP rejection and hostile ports in the native fixture lane. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>





















What Problem This Solves
Read agent-created boards and reports in Companion without opening the browser for routine viewing.
User Impact
User impact: a standalone, pinnable Dashboards reader provides an agent-scoped searchable/sortable gallery, tabs, live refresh, native reports/charts/tables, ticketed HTML (including HTML-only boards), website links and Open chat.
This is not a builder or a replacement for the web Control UI. Editing, permission grants, privileged widget actions and MCP-app hosting remain web-only; unsupported states stay explicit. Open in web opens the web gallery, not the exact board; Copy session key supplies its stable identity. That route is source-verified upstream, not proved against an installed Gateway.
Existing custom and explicitly empty pin choices survive. Scopes with no saved choice default to Dashboards; an old empty choice erased by an earlier release cannot be recovered, so those users must unpin once.
Why This Change Was Made
Keep daily board consumption native without chasing the web editor. Static gallery cards avoid per-card board requests and WebViews; websites use validated external links, while saved HTML remains readable in the bounded sandbox host. The gallery loads at most 5,000 rows and shows loaded counts honestly. See reader contracts and limits.
Feature contribution by @bkudiess; subsequent integration/readiness work preserves that contribution.
Evidence
Candidate b1e1e6f passed Build and Test, attempt 1, including required CI Gate, and CodeQL, attempt 1. Native, Tray and fixture logs identify tested merge 390c858, parents 9d36f5c + b1e1e6f, whose tree ab0da767ec53969b11c4963dac804ce6270c18df equals the candidate tree.
Independent implementation/proof-plan rubber-duck reviews covered inset ownership, retained state, responsive report layout and native capture prerequisites. The historical 108-path Opus/Astra review at 4851 found defects subsequently repaired, not a clean whole-head verdict. Separate bounded P0-P3 reviews covered all ten integration conflicts and this owner-fence implementation/proof plan, with no findings. No new whole-head dual or independent security review is claimed.
The owner repair rejects unfinished old-connection HTML at queued completion and final delivery, including before a deferred view update. Acknowledged same-document WebViews and valid selected/visited tabs remain; a changed Gateway origin replaces the document. No additional authorization RPC or blanket page remount was added. All five new native boundary cases passed.
The temporary shared reader-timeout observer only appends bounded diagnostics to existing failures. Original assertions/deadlines remain; passing CI does not establish a root-cause fix for the prior reader-top flake.
Change Type
Scope
winnodeRequired proof pools
windows-winui-interactive: navigation, focus, layout, scrolling, widget states and accessibility. Current candidate has hosted x64 mounted and real-app fixture proof, including the five owner/HTTP/bridge cases; this is not complete Windows 11 ARM64 or production Release/High Contrast acceptance.windows-11-arm64: native ARM64 WebView2/runtime behavior. Merged-source UI compilation passed; complete current-head Debug/production-shaped Release runtime acceptance is not verified.windows-wsl-gateway-e2e: real board-read/ticket authority and installed-Gateway web handoff remain unverified. Generic hosted WSL results and synthetic board fixtures do not close this boundary.Validation
Local commands ran against a frozen isolated clone matching the b1e1e6f candidate (2,409 source hashes), with fresh test builds and isolated settings roots.
$ownedResultsdenotes that run's task-owned output directory, with its private absolute location redacted..\build.ps1dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-build --no-restore --blame-hang --blame-hang-timeout 5m --blame-hang-dump-type none --logger "trx;LogFileName=Shared.trx" --results-directory "$ownedResults"dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-build --no-restore --blame-hang --blame-hang-timeout 5m --blame-hang-dump-type none --logger "trx;LogFileName=Tray.trx" --results-directory "$ownedResults" --filter "FullyQualifiedName!=OpenClaw.Tray.Tests.SettingsManagerIsolationTests.OpenClawTrayDataDirRedirectsSettingsAwayFromRealAppData"dotnet build .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false -m:2 -r win-arm64 -p:DevBuild=false -p:RequireSignedCleanupHost=falseThe excluded case independently reads normal OS-roaming settings. It was privacy-blocked locally, with no repository/CI filter change. The new tab-state-without-old-content regression and origin-bound document identity assertion passed. Documentation, skill and skill-validator checks passed.
Hosted wrapper invocations
These recorded invocations and their expanded execution are retained in the linked job logs.
Real Behavior Proof
Yes/No/N/A) Yes: the three linked jobs' uploaded test artifacts were downloaded and raw TRX inspected. This is artifact/result verification, not a new manual screenshot acceptance.Security Impact
Yes/No) No native grants, node commands or widget actions.Yes/No) Yes: short-lived Gateway view tickets are consumed for HTML reads.Yes/No) Yes: board/session reads, ticketed HTML and the Gateway sandbox.Yes/No) No: the reader does not execute widget bridge actions or host MCP apps.Yes/No) Yes: boards/reports from the active authenticated Gateway are displayed.Yes, explain the risk and mitigation: treat HTML as untrusted. Validate content-specific origins/routes, enforce size/time bounds, disable document redirects/cookies and loopback proxy inheritance, isolate WebView storage, check relay source/origin, close offered ports, and retain visible pending/rejected/unsupported states. Each delivery starts a fresh render-ack deadline. The pinned upstream contract rechecks authorization immediately before returning HTTP bytes, not continuously until rendering; there is no separate render-revalidation RPC. Windows separately fences unfinished work against local owner changes. Five passing synthetic native cases cover rejected fetches, connection replacement and hostile port disposal; real-Gateway traces remain unverified.Compatibility and Migration
Yes/No) Yes for preserved settings/pin choices; board rendering requires the supported Gateway board contract and reports unsupported/failure states explicitly.Yes/No) Yes: Dashboards becomes the default pin only for scopes with no saved choice; no new user environment variable is required.Yes/No) No manual data migration.Review Conversations
Live refresh at b1e1e6f found zero inline threads; no formal approval or bot reply is implied. The durable old-head ClawSweeper review was substantively reconciled against current source and executed proof: deadline fixed; obsolete hero test removed; icon tests unchanged from main; fetch-time authorization distinguished from the repaired and natively tested local owner fence; compatibility and live-Gateway limits retained above.