Skip to content

refactor(ui): share responsive page presentation - #2085

Merged
bkudiess merged 4 commits into
openclaw:mainfrom
bkudiess:bkudiess-shared-page-foundation
Nov 9, 2026
Merged

bkudiess merged 4 commits into
openclaw:mainfrom
bkudiess:bkudiess-shared-page-foundation

Conversation

@bkudiess

@bkudiess bkudiess commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

What Problem This Solves

Upcoming native page redesigns need one shared presentation foundation so they can land independently without competing hero, spacing and Settings-host implementations.

User Impact

User impact: this foundation does not enable the redesigned pages; existing Settings navigation, Back to app, Escape handling, pane preferences and current-Gateway Dashboard routing remain intact. Reveal highlights preserve theme-dependent backgrounds after completion or cancellation.

Open for review, not a merge-readiness claim. Required Axe/accessibility results and native invocation/focus coverage of the relocated Workspace collapse/reopen buttons on an existing pinned page remain pending. Keyboard Dashboard-search proof was blocked by Windows foreground ownership. Actual OS high-contrast palette and consuming-page pointer/backdrop integration are not certified. Required current-head CI and any subsequent landing reconciliation remain separate gates.

Why This Change Was Made

Provide canonical opt-in page heroes, summary tiles, responsive sizing and exact-once history-band allocation. Hero actions keep their native parent across resize; reveal skips controls that cannot take focus. The highlight uses a temporary native animation value rather than replacing the underlying background style, theme resource or binding. Existing shell owners still apply layout and own navigation.

Includes shared presentation, minimal host integration, directly related documentation and regression coverage. Excludes page-specific features, Sessions, adaptive Settings rail behavior, catalog expansion, Reactor/package upgrades, CI changes and unrelated Settings rewrites. The implementation uses the existing Reactor preview.16 and FunctionalUI helpers.

The simplification pass retained this boundary: pure sizing/allocation tests and mounted native lifecycle/layout tests protect distinct failures without adding production test hooks.

Evidence

On the exact source tree now committed as 38721600a293fb76b3c631ad8a34596795dba160: full Debug build passed; Shared had 4,875 passes and 25 ordinary opt-in/hardware skips; all 5,342 Tray tests passed. All 16 selected mounted foundation tests passed in both Debug and non-Dev Release. The four new regression cases failed the old implementation specifically at the post-reveal theme switch, after first proving that each fixture's resource followed theme changes before reveal.

The Hanselman review used claude-opus-5.5 (default context) and gpt-6-astra (long context), both at high reasoning effort, through independent read-only review agents. Opus identified the MEDIUM theme-restoration defect and Astra confirmed it during reconciliation. Both rechecked the immutable three-file repair and reported no remaining actionable finding in it. The badge-name accessibility candidate was withdrawn against observed native UIA evidence. These are source-review results, not independent test execution.

Earlier foundational source review and independent implementation/proof-plan review covered the shared scope and identified the pending Axe/accessibility and relocated Workspace-button coverage. Earlier isolated-app Back-to-app, pane preference/restart and non-keyboard Dashboard routing results belong to pre-repair tree aac463e097edef3ce9c61d4911751b78f1aa79d1; they are not represented as newly executed runs on this update.

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: shared native page presentation, focus, motion, theme behavior and Settings-host allocation. Selected native checks ran; this does not claim that the entire pool is complete.

Validation

Windows ARM64, .NET SDK 10.0.403. Test data roots were isolated; actual executed counts were verified from TRX rows.

Exact command Result
.\build.ps1 Passed all five projects, native ARM64 Debug; included documentation/proof-pool documentation-flow checks
dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore 4,875 passed, 0 failed, 25 ordinary skips; total 4,900
dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore Unfiltered: 5,342 passed, 0 failed/skipped
.\build.ps1 -Project WinUI -Configuration Release Passed, non-Dev Release, verified existing signed cleanup-helper input and signature gates retained
git diff --check Passed

Debug native selection: 16 passed, 0 failed/skipped.

dotnet test .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -r win-arm64 --no-restore --filter 'FullyQualifiedName~PageHeroTests|FullyQualifiedName~SettingsPageInsetTests'

Non-Dev Release native selection: 16 passed, 0 failed/skipped.

dotnet test .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -c Release -r win-arm64 -p:DevBuild=false --no-restore --filter 'FullyQualifiedName~PageHeroTests|FullyQualifiedName~SettingsPageInsetTests'

Before-fix negative control: four failed, as expected, at the post-reveal theme switch, covering Reactor ThemeRef and direct XAML ThemeResource after completion and cancellation. The same cases pass after repair. Earlier fixture compile/resource-setup failures were retained separately and are not claimed as product reproductions.

dotnet test .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -r win-arm64 --no-restore --filter 'FullyQualifiedName~PageHeroTests.Reveal_PreservesThemeResource'
Release signing prerequisite and historical proof limits

Release supplied OpenClawSignedCleanupHostPath using the existing openclaw-signed-cleanup-host artifact (ID 13636164470) from successful CI run 42528818286, source e70292487958be9e70170e2f3affe7afc42056e8. Its helper source subtree and ancestor build inputs match the foundation. PE metadata confirmed AnyCPU. The official OpenClaw Foundation Authenticode signature and embedded resource's identical SHA256 were verified by Test-CleanupHostSignature.ps1 -RequireSigned. Helper SHA256: A4FB6D0371DB8C5FA8D17507D09E4461534AB17C44D549426D2AB0AE69F8A469. The signature was reverified for this update. No gate was weakened; the downloaded helper was not executed to inspect it. This is not a signed installer/distribution claim.

Earlier foundational checks on tree aac463e097edef3ce9c61d4911751b78f1aa79d1 included 226 focused sizing/allocation/navigation passes, 13 Debug native foundation passes, five existing app-navigation passes and 17 Release native/fixture passes. Those results are historical; the current-source commands and counts are listed above.

The earlier corrected Dashboard keyboard-search selection had one passed inset case and one failed keyboard case: Windows refused foreground ownership and the guard stopped before a shortcut was sent. It was not bypassed. Separate non-keyboard current-Gateway routing/retry passed on that earlier tree; it does not substitute for the keyboard path.

Earlier manual Light/Dark observations and local native-control captures also belong to the foundation tree. No media was uploaded, and no new visual capture pass is claimed for this repair. Early offscreen/transitional captures were rejected as settled visual evidence.

Real Behavior Proof

  • Environment tested: native Windows ARM64, Debug and non-Dev Release, isolated native test profiles.

  • PR head or commit tested: tests and repair reviews ran before commit, against merged head cf4d038744bf528874d932cf149870a5602ae8ec (base 1c7901f6cb1e743ad42e8528780824ffd23af214) plus local source tree 8f6bbbe114f9054c57e079ccea9603c8ad337f10. Commit 38721600a293fb76b3c631ad8a34596795dba160 has that exact Git tree, verified after commit. Source equality establishes correspondence, not a newly executed run.

  • Exact steps or command run: the native selections above mounted and resized heroes, retained action focus/identity, measured tile widths/gaps/spans, exercised reveal restart/cancel/completion and external background updates, checked Settings inset delivery, and switched Light to Dark after reveals on both style-based and directly assigned theme resources.

  • Evidence after fix:

    Debug: Passed! Failed: 0, Passed: 16, Skipped: 0, Total: 16
    Release: Passed! Failed: 0, Passed: 16, Skipped: 0, Total: 16
    
  • Observed result: resources followed theme changes before and after the reveal; Reactor targets retained an unset local Background value. Repeated reveals, cancellation and later page background changes preserved their expected values. Four equivalent cases failed the original implementation at the post-reveal theme change.

  • Screenshot or artifact links verified? (Yes/No/N/A) N/A for local test/capture artifacts: no public media proof URL claimed. The signed-helper workflow link identifies an existing prerequisite artifact, not this PR's execution.

  • Not verified or blocked: required Axe/accessibility lane has no supplied result; relocated Workspace collapse/reopen buttons lack demonstrated native invocation/focus coverage on an existing pinned page (the earlier preference tests toggle the separate Settings pane); Dashboard keyboard-search foreground ownership; actual Windows high-contrast palette; pointer hit-testing over a real consuming page's full-frame backdrop; integration of upcoming page features; current-head hosted CI and any further landing reconciliation. The mounted Settings test exercises the production applicator with a test viewport, not a fabricated product page. Control-template visual states, live data-binding updates and a theme change during an active highlight were not separately exercised.

Security Impact

  • New permissions or capabilities? (Yes/No) No
  • Secrets or tokens handling changed? (Yes/No) No
  • New or changed network calls? (Yes/No) No
  • Command or tool execution surface changed? (Yes/No) No
  • Data access scope changed? (Yes/No) No
  • If any answer is Yes, explain the risk and mitigation: N/A

Compatibility and Migration

  • Backward compatible? (Yes/No) Yes for existing pages and navigation; new presentation and inset APIs are opt-in. During a reveal, a page background update becomes visible when the temporary animation ends (at most 1.2 seconds), without being overwritten.
  • Config or environment changes? (Yes/No) No product configuration changes. Release validation used the repository's existing signed-helper build input.
  • Migration needed? (Yes/No) No
  • If yes, list the exact upgrade steps: N/A. Follow-up page branches should retain this shared foundation and current main's navigation rather than importing their old entire Settings/Workspace files.

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.

Open for review at the author's request. Hosted reviews, CI and the stated proof gaps remain separate from this status transition.

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

clawsweeper Bot commented Nov 9, 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.

@roboclaw-bot roboclaw-bot added the status: 🚢 actively landing A maintainer or agent is actively driving this item through implementation, validation, or merge. label Nov 9, 2026
Integrate main at 1c7901f without modifying the PR patch.

Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
@roboclaw-bot

Copy link
Copy Markdown
Contributor

Merged current main (1c7901f6cb1e743ad42e8528780824ffd23af214) into this branch with history-preserving commit cf4d038744bf528874d932cf149870a5602ae8ec. No conflicts or manual source edits were needed. The original 17-file PR patch is byte-for-byte unchanged against the new base, and the incoming main patch is unchanged as well. git diff --check passed; hosted readback confirms the new head and mergeable: true.

This completes the main reconciliation noted in the description, not merge readiness. The PR remains draft. Fresh local build, Shared tests, and Tray tests are blocked in this Linux session: PowerShell and .NET are unavailable, and no Windows node is connected. The existing Windows results still apply to the original tested tree, not this merged tree. New-head CI has started; the previously documented accessibility, Workspace-button focus/invocation, keyboard, high-contrast, and consuming-page proof gaps remain open.

@roboclaw-bot roboclaw-bot removed the status: 🚢 actively landing A maintainer or agent is actively driving this item through implementation, validation, or merge. label Nov 9, 2026
@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Nov 9, 2026
@clawsweeper

clawsweeper Bot commented Nov 9, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

This PR adds shared responsive page presentation and opt-in Settings content insets while retaining existing shell navigation owners.

Example: An opted-in pinned page opens with the Workspace pane collapsed.

  • Before: The shell places the entire page below a 56-DIP outer margin.
  • After: The backdrop can fill the frame while page content reserves the same 56-DIP history band internally.

Review scores

Measure Result What it means
Overall readiness 🦪 silver shellfish (2/6) The source is coherent and has meaningful native regression coverage, but scoped evidence is incomplete for the changed shell interaction.
Proof confidence 🦪 silver shellfish (2/6) Real behavior proof is not required for maintainer- or bot-authored pull requests.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Refactor · Worth it: Yes · Fix scope: Complete
User problem: Upcoming native page redesigns need consistent presentation and host spacing without duplicating shell behavior.
Reason: The collaborator-authored direction authorizes this independently landable foundation, and the diff preserves existing routing, preferences and page ownership.

Merge readiness

✅ Ready for maintainer review

Keep this useful, collaborator-authored foundation PR open as a draft; the introduced diff has no discrete correctness or security finding.

Priority: P3
Reviewed head: cf4d038744bf528874d932cf149870a5602ae8ec

Before merge

None.

Findings

None.

Tests

  • Missing end-to-end proof: The remaining changed-path gap is current-head native collapse/reopen invocation and focus on an existing pinned page, together with the pending accessibility result.
Agent review details

How this fits together

The native WinUI presentation layer receives caller-owned content, host dimensions and pane state, then produces Reactor controls and shell layout allocations.

flowchart TD
A[Page content and host width] --> B[PageHero and responsive layout]
B --> C[Native Reactor controls]
D[Workspace pane state] --> E[WorkspaceSettingsLayout]
E --> F[WorkspaceWindow and SettingsShellView]
F --> C
Loading

Technical review

Best possible solution:

Retain the focused shared presentation foundation and existing shell owners, then complete its documented native validation before landing.

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

This is a staged refactor rather than a current-main bug report; source inspection confirms the proposed helpers and inset contract are new.

Is this the best way to solve the issue?

The implementation keeps sizing policy pure, rendering opt-in and native control application in existing shells; no unnecessary competing owner or unrelated change was established.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 7bcd9f57caba.

Provenance checked

  • Embedded Settings allocation keeps the original intent (7967d50: Pinned pages reuse the Settings host beside Workspace navigation, with a collapsed-pane history band.)
  • Settings pane preference restoration keeps the original intent (63d4be7: Returning from content-only hosting must restore the user's saved Settings-pane choice.)
  • Workspace toggle geometry keeps the original intent (1270165: Zero padding and an unconstrained glyph preserve rounding clearance at display scales.)

Testing

Proof path: in-process harness.

Security

None.

Evidence

What I checked:

  • Pinned introduction and current main: Reviewed the introduced base-to-head hunks; PageHero and PageResponsiveLayout are absent from fetched main 7bcd9f5, so this contribution is not already implemented there. (cf4d038744bf)
  • Exact-once allocation: Ordinary embedded pages retain their 56-DIP outer allocation; opted-in pages receive that allocation internally, and open panes require neither allocation. (src/OpenClaw.Tray.WinUI/Presentation/WorkspaceSettingsLayout.cs:13, cf4d038744bf)
  • Existing shell ownership preserved: SettingsShellView delivers insets only to opted-in content; existing preference restoration remains in the shell rather than moving into the presentation helpers. (src/OpenClaw.Tray.WinUI/Controls/SettingsShellView.xaml.cs:429, cf4d038744bf)
  • Pane-toggle provenance: The relocated buttons retain their handlers, automation IDs, 40-DIP targets, zero padding and unconstrained glyphs, preserving the display-scale repair described in fix: prevent sidebar toggle icon clipping at display scales #1690. (src/OpenClaw.Tray.WinUI/Windows/WorkspaceWindow.xaml:194, 127016568ef2)
  • Validation and explicit draft boundary: The full PR body reports Windows ARM64 build, Shared, Tray and mounted-native passes on the original source tree, while explicitly leaving native pane-button invocation/focus and accessibility coverage pending; the reconciliation comment distinguishes those results from the merged head. (cf4d038744bf)
  • Current-head workflow state: GitHub reports the reviewed head as draft and mergeable; core and tray checks have passed, while the UI/accessibility and setup E2E jobs remain in progress, with no observed failed check to attribute to the diff. (cf4d038744bf)

Likely related people:

  • Barbara Kudiess: Raw commit 7967d50 adds src/OpenClaw.Tray.WinUI/Windows/WorkspaceWindow.xaml.cs:1126 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 7967d509886f; files: src/OpenClaw.Tray.WinUI/Windows/WorkspaceWindow.xaml.cs)

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
Introduced change size Production +567/-16; tests +492/-1; documentation +35/-0 Growth supplies the authorized opt-in foundation; native tests protect focus, layout and animation lifecycle failures distinct from pure sizing tests.

Labels

Label changes:

  • add P3: This is an internal presentation foundation without an established urgent user-facing failure.
  • add rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish 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 is an internal presentation foundation without an established urgent user-facing failure.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

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 9, 2026, 12:28 AM ET / 05:28 UTC.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bkudiess
bkudiess marked this pull request as ready for review November 9, 2026 06:00
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bkudiess
bkudiess merged commit 338719e into openclaw:main Nov 9, 2026
26 checks passed
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. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. 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.

2 participants