Skip to content

improve(ui): nest Settings pages under /settings routes#100928

Merged
shakkernerd merged 6 commits into
openclaw:mainfrom
vyctorbrzezowski:brzezowski/settings-routing
Jul 7, 2026
Merged

improve(ui): nest Settings pages under /settings routes#100928
shakkernerd merged 6 commits into
openclaw:mainfrom
vyctorbrzezowski:brzezowski/settings-routing

Conversation

@vyctorbrzezowski

@vyctorbrzezowski vyctorbrzezowski commented Jul 6, 2026

Copy link
Copy Markdown
Member

What Problem This Solves

In the pre-change routing model, Control UI Settings pages live at several top-level URLs, so Settings navigation does not have a single canonical URL namespace. This PR proposes /settings/* as the canonical Settings route family while preserving existing top-level deep links.

Why This Change Was Made

In this PR, Settings route metadata points navigation and programmatic route generation at /settings/general, /settings/worktrees, /settings/appearance, and the rest of the /settings/* pages. Existing top-level paths such as /config, /worktrees, /appearance, /channels, /debug, and /logs remain registered as aliases so old links still resolve to the same route ids.

This intentionally does not change Settings layout, sidebar structure, visual styling, form placement, or content organization.

User Impact

In this PR, Settings URLs are canonicalized under /settings/*; existing bookmarks and direct links to the older top-level Settings paths continue to work.

Screenshots

Desktop /settings/general in this PR:

Desktop Settings route

Mobile /settings/general in this PR:

Mobile Settings route

Evidence

Validated in this refresh:

  • git diff --check
  • oxfmt --check --threads=1 ui/src/app-navigation-groups.test.ts ui/src/app-navigation.test.ts ui/src/app-route-paths.ts ui/src/pages/worktrees/route.ts
  • Resolver smoke confirmed pathForRoute("worktrees") -> /settings/worktrees, /settings/worktrees -> worktrees, /worktrees -> worktrees, /settings/general -> config, and /config -> config.
  • Browser smoke loaded /settings/worktrees, /worktrees, /settings/general, and /config in the mock Control UI dev server.

Updated tests cover the new Worktrees canonical route and legacy alias behavior.

@vyctorbrzezowski
vyctorbrzezowski marked this pull request as ready for review July 6, 2026 14:18
@vyctorbrzezowski

Copy link
Copy Markdown
Member Author

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@vyctorbrzezowski vyctorbrzezowski changed the title improve(ui): propose Settings route cleanup improve(ui): nest Settings pages under /settings routes Jul 6, 2026
@clawsweeper

clawsweeper Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 7, 2026, 8:53 AM ET / 12:53 UTC.

Summary
The PR changes Control UI Settings route metadata so Settings pages generate /settings/* canonical paths while retaining the old top-level paths as aliases.

PR surface: Source +5, Tests +34. Total +39 across 8 files.

Reproducibility: not applicable. as a cleanup/UX PR: the current-main baseline uses top-level Settings paths, and the PR changes generated route metadata plus tests to /settings/* while preserving aliases.

Review metrics: 1 noteworthy metric.

  • Settings route namespace coverage: 11 canonical paths changed, 11 legacy aliases retained. The metric shows the PR updates the full current Settings route family while preserving old deep links.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🌊 off-meta tidepool
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Confirm /settings/* as the canonical Settings URL namespace before merge.
  • Refresh the branch against current main before final merge review.

Risk before merge

  • [P1] The user-visible canonical URL namespace still needs maintainer acceptance; aliases reduce compatibility risk but do not decide the product direction.
  • [P1] The branch is behind current main while GitHub reports it mergeable, so it needs a current-base refresh before final merge review.

Maintainer options:

  1. Decide the mitigation before merge
    Land the narrow route metadata change only after maintainers accept /settings/* as the generated canonical Settings URL family with legacy aliases retained.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • Manual review is appropriate because the PR is maintainer-labeled and the remaining question is canonical Control UI URL product direction, not an automation-repairable defect.

Maintainer decision needed

  • Question: Should Control UI Settings pages use /settings/* as their generated canonical URL namespace while retaining the old top-level paths as aliases?
  • Rationale: The patch looks mechanically sound, but selecting the canonical URL model is user-visible product direction for a maintainer-labeled PR.
  • Likely owner: steipete — Recent Settings/Worktrees navigation commits make this the strongest current ownership signal for the URL product decision.
  • Options:
    • Accept /settings/* canonical URLs (recommended): Merge the narrow route metadata change after a current-base refresh, keeping all old top-level Settings paths registered as aliases.
    • Fold into broader Settings layout work: Defer the URL namespace decision until the broader Settings sidebar/layout PR settles the full navigation model.
    • Keep top-level Settings URLs: Decline this cleanup and continue generating the existing top-level Settings paths.

Security
Cleared: The diff changes Control UI route metadata and tests only; it does not touch CI, dependencies, lockfiles, secrets, permissions, or code-execution surfaces.

Review details

Best possible solution:

Land the narrow route metadata change only after maintainers accept /settings/* as the generated canonical Settings URL family with legacy aliases retained.

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

Not applicable as a cleanup/UX PR: the current-main baseline uses top-level Settings paths, and the PR changes generated route metadata plus tests to /settings/* while preserving aliases.

Is this the best way to solve the issue?

Yes mechanically: shared route metadata and page definitions are the right layer for generated URLs and router aliases; maintainer acceptance of the canonical namespace remains the open decision.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against a9582a1bb62a.

Label changes

Label justifications:

  • P3: This is a low-risk Control UI URL cleanup with legacy aliases retained and no blocking correctness finding.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The external-contributor proof gate does not apply to this MEMBER-authored PR; the PR body still includes useful screenshots and route/browser smoke evidence.
Evidence reviewed

PR surface:

Source +5, Tests +34. Total +39 across 8 files.

View PR surface stats
Area Files Added Removed Net
Source 6 28 23 +5
Tests 2 35 1 +34
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 8 63 24 +39

What I checked:

  • Root and scoped policy read: Root AGENTS.md and ui/AGENTS.md were read fully; their review-depth and UI scoped guidance apply to this UI route review. (AGENTS.md:1, a9582a1bb62a)
  • Current main baseline: Current main still defines Settings-related routes as top-level paths such as /channels, /config, /worktrees, /debug, and /logs. (ui/src/app-route-paths.ts:9, a9582a1bb62a)
  • PR head route table: The PR head changes every current Settings route in APP_ROUTE_DEFINITIONS to a /settings/* canonical path while retaining the prior top-level alias. (ui/src/app-route-paths.ts:9, dc71f12dd913)
  • Page route definitions aligned: The Worktrees page now registers /settings/worktrees and keeps /worktrees as an alias, addressing the earlier review concern about a one-sided Settings namespace. (ui/src/pages/worktrees/route.ts:4, dc71f12dd913)
  • Resolver coverage: The PR head adds assertions for generated /settings/* paths, legacy aliases, and mounted base-path handling. (ui/src/app-navigation.test.ts:176, dc71f12dd913)
  • Router alias contract: @openclaw/[email protected] exposes PageDefinition.aliases and compileRoutes registers canonical paths plus aliases into its path lookup map. (@openclaw/[email protected]/package/dist/index.js:398)

Likely related people:

  • steipete: Recent merged Settings/Worktrees navigation PRs touched the route/navigation test surface this PR builds on. (role: recent area contributor; confidence: high; commits: 161e66f7bdb7, 89f911f322c9; files: ui/src/app-navigation.ts, ui/src/app-navigation.test.ts, ui/src/app-navigation-groups.test.ts)
  • shakkernerd: The Control UI architecture refactor introduced the central route table, app router wrapper, and settings workspace surface edited here. (role: introduced route architecture; confidence: high; commits: 65e12328aa20; files: ui/src/app-route-paths.ts, ui/src/app-routes.ts, ui/src/components/settings-workspace.ts)
  • vincentkoc: Recent UI cleanup touched the app route wrapper and navigation tests near the changed route surface. (role: recent adjacent refactor contributor; confidence: medium; commits: 55a0012c44b5, 60f0749b7fb3; files: ui/src/app-routes.ts, ui/src/app-navigation.ts, ui/src/app-navigation.test.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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 keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (4 earlier review cycles)
  • reviewed 2026-07-06T14:37:52.033Z sha f5b28fa :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-07T08:40:54.727Z sha 6569808 :: needs real behavior proof before merge. :: [P2] Include Worktrees in the Settings route namespace
  • reviewed 2026-07-07T09:29:51.762Z sha 6569808 :: found issues before merge. :: [P2] Include Worktrees in the Settings route namespace
  • reviewed 2026-07-07T12:41:47.392Z sha dc71f12 :: needs maintainer review before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. labels Jul 6, 2026
@vyctorbrzezowski
vyctorbrzezowski force-pushed the brzezowski/settings-routing branch from f5b28fa to 6569808 Compare July 7, 2026 08:21
@openclaw-barnacle openclaw-barnacle Bot added the maintainer Maintainer-authored PR label Jul 7, 2026
@clawsweeper clawsweeper Bot added the proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. label Jul 7, 2026
@vyctorbrzezowski
vyctorbrzezowski marked this pull request as draft July 7, 2026 09:10
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 7, 2026
@vyctorbrzezowski
vyctorbrzezowski force-pushed the brzezowski/settings-routing branch from 6569808 to dc71f12 Compare July 7, 2026 12:10
@vyctorbrzezowski
vyctorbrzezowski marked this pull request as ready for review July 7, 2026 12:16
@clawsweeper clawsweeper Bot added 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 proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 7, 2026
@shakkernerd shakkernerd self-assigned this Jul 7, 2026
@shakkernerd
shakkernerd force-pushed the brzezowski/settings-routing branch from dc71f12 to 2652c73 Compare July 7, 2026 15:50
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation gateway Gateway runtime size: M and removed size: S labels Jul 7, 2026
@shakkernerd
shakkernerd merged commit 70de9ff into openclaw:main Jul 7, 2026
70 of 76 checks passed
@shakkernerd

Copy link
Copy Markdown
Member

Merged using rebase.

What changed after review:

  • Kept configuration pages under canonical /settings/* routes with legacy aliases.
  • Added authoritative configured mount-path metadata so reloads resolve the correct Control UI base path.
  • Kept Debug and Logs at /debug and /logs, and updated focused route, sidebar, and MCP documentation coverage.

Verification:

  • Rebased/refreshed onto current origin/main before pushing.
  • AWS Crabbox run_f8c6db98e528: 463 focused Gateway/UI tests passed and the production Control UI build completed.
  • AWS Crabbox run_62e9f274e65a: 2/2 sidebar Playwright cases passed; run_6abc85741b69: targeted format/lint passed.
  • Auto-review: clean after accepted findings were resolved.
  • GitHub checks: no required checks configured; completed current-head checks were green at merge.

Landed on main:

Thanks @vyctorbrzezowski!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui docs Improvements or additions to documentation gateway Gateway runtime maintainer Maintainer-authored PR P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M 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