Skip to content

fix(control-ui): apply seamColor bootstrap config#93699

Merged
vincentkoc merged 1 commit into
openclaw:mainfrom
goutamadwant:fix/56068-control-ui-seam-color
Jun 29, 2026
Merged

fix(control-ui): apply seamColor bootstrap config#93699
vincentkoc merged 1 commit into
openclaw:mainfrom
goutamadwant:fix/56068-control-ui-seam-color

Conversation

@goutamadwant

@goutamadwant goutamadwant commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Summary

What problem does this PR solve?

  • Wires the existing ui.seamColor config value into the Control UI bootstrap payload.
  • Applies validated seam color values to Control UI accent CSS variables during browser bootstrap.
  • Removes server-applied accent variables when the bootstrap color is absent or invalid so theme defaults recover cleanly.

Why does this matter now?

What is the intended outcome?

  • A configured ui.seamColor changes Control UI accent styling through the existing bootstrap config path.

What is intentionally out of scope?

  • No new config keys, theme picker changes, docs rewrites, or broader theme refactor.
  • No changes to macOS/TUI seam color behavior.

What does success look like?

  • /control-ui-config.json includes seamColor when configured.
  • The browser loader applies the accent variables for valid hex colors and removes them for invalid or missing values.
  • Existing bootstrap identity, media, embed, width, and time-format behavior remains unchanged.

What should reviewers focus on?

  • Whether the CSS variables covered are the right Control UI accent surface.
  • The strict hex validation and cleanup behavior in the browser loader.
  • The gateway bootstrap payload contract.

Linked context

Which issue does this close?

Closes #56068

Which issues, PRs, or discussions are related?

Related #84599

Was this requested by a maintainer or owner?

No direct maintainer request. ClawSweeper marked #56068 as source-reproducible, queueable, and fix-shape-clear.

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: ui.seamColor was accepted by config and exposed through talk.config, but the Control UI bootstrap JSON and browser loader did not carry or apply it.
  • Real environment tested: Local OpenClaw checkout on the rebased branch, using the real Control UI HTTP bootstrap handler and production Control UI build.
  • Exact steps or command run after this patch: Started a one-shot local Node HTTP server that invoked handleControlUiHttpRequest with ui.seamColor: "#1A2b3C", then fetched /control-ui-config.json.
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output): Copied live output from a local OpenClaw runtime HTTP handler:
    {"status":200,"seamColor":"#1A2b3C","assistantName":"Proof","assistantAvatar":"P"}
  • Observed result after fix: The bootstrap response now returns the configured seamColor, which gives the browser loader a valid server-provided accent color to apply.
  • What was not tested: Full pnpm check, full pnpm test, and a manual browser screenshot from a long-running packaged gateway.
  • Proof limitations or environment constraints: Proof used a local runtime HTTP handler plus focused browser-loader coverage rather than a screenshot from a persistent local Gateway session.
  • Before evidence (optional but encouraged): On current main, ControlUiBootstrapConfig, the bootstrap JSON payload, and loadControlUiBootstrapConfig had no seamColor field/application path.

Tests and validation

Which commands did you run?

  • node scripts/run-vitest.mjs ui/src/ui/controllers/control-ui-bootstrap.test.ts
  • node scripts/run-vitest.mjs src/gateway/control-ui.http.test.ts
  • node scripts/run-vitest.mjs src/gateway/server.talk-config.test.ts src/config/config-misc.test.ts
  • ./node_modules/.bin/oxfmt --check --threads=1 src/gateway/control-ui-contract.ts src/gateway/control-ui.ts src/gateway/control-ui.http.test.ts ui/src/ui/controllers/control-ui-bootstrap.ts ui/src/ui/controllers/control-ui-bootstrap.test.ts
  • node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/gateway/control-ui-contract.ts src/gateway/control-ui.ts src/gateway/control-ui.http.test.ts ui/src/ui/controllers/control-ui-bootstrap.ts ui/src/ui/controllers/control-ui-bootstrap.test.ts
  • OPENCLAW_BUILD_ALL_NO_PNPM=1 node scripts/build-all.mjs qaRuntime
  • OPENCLAW_BUILD_ALL_NO_PNPM=1 node scripts/ui.js build

What regression coverage was added or updated?

  • Gateway HTTP bootstrap coverage now asserts configured ui.seamColor is included in the JSON payload.
  • Control UI bootstrap coverage now asserts valid seam colors apply accent CSS variables and invalid/missing values remove them.

What failed before this fix, if known?

  • Source-level repro: the Control UI bootstrap contract/payload omitted seamColor, and the frontend loader had no CSS variable application path.

If no test was added, why not?

  • Tests were added for both the gateway payload and frontend loader behavior.

Risk checklist

Did user-visible behavior change? (Yes/No)

Yes. Configured ui.seamColor now affects Control UI accent styling.

Did config, environment, or migration behavior change? (Yes/No)

No. This uses the existing validated ui.seamColor config key.

Did security, auth, secrets, network, or tool execution behavior change? (Yes/No)

No. This adds a non-secret theme color to the existing Control UI bootstrap payload.

What is the highest-risk area?

The highest-risk area is overriding theme CSS variables too broadly or leaving stale inline variables after the server stops sending a valid color.

How is that risk mitigated?

The loader accepts only 6-digit hex colors, sets a bounded list of accent variables, and removes that same list when the value is invalid or absent. Focused tests cover both apply and cleanup paths.

Current review state

What is the next action?

Ready for maintainer review after GitHub checks finish.

What is still waiting on author, maintainer, CI, or external proof?

Waiting on GitHub CI and maintainer review. A manual browser screenshot can be added if reviewers want visual proof beyond the local HTTP/bootstrap and browser-loader evidence.

Which bot or reviewer comments were addressed?

The PR body now includes copied live output in the Real behavior proof section so the proof gate can evaluate after-fix evidence from the PR description.

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. size: S triage: blank-template Candidate: PR template appears mostly untouched. proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 16, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. labels Jun 19, 2026
@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 21, 2026, 11:17 PM ET / 03:17 UTC.

Summary
The branch adds seamColor to the Control UI bootstrap contract/payload, applies or clears accent CSS variables in the browser loader, and adds gateway/frontend regression tests.

PR surface: Source +55, Tests +101. Total +156 across 5 files.

Reproducibility: yes. Source inspection on current main shows ui.seamColor is validated and exposed through talk.config, but the Control UI bootstrap contract, HTTP response, and frontend loader do not carry or apply it.

Review metrics: 1 noteworthy metric.

  • Bootstrap payload fields: 1 added (seamColor). The PR extends the gateway-to-Control UI bootstrap contract, which maintainers should notice even though it uses an existing config key.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #56068
Summary: The linked issue is the canonical report for ignored Control UI ui.seamColor; this PR is the active open fix candidate, while earlier similar PRs are closed unmerged.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
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:

  • none.

Mantis proof suggestion
A short browser proof would add visual confidence for the configured accent color and fallback behavior, although it is not required to understand the patch. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify that setting ui.seamColor changes Control UI accent styling and removing it restores theme defaults.

Next step before merge

  • [P2] No repair lane is needed because this PR already implements the focused candidate fix; maintainer review and normal merge gates remain.

Security
Cleared: The diff only adds a non-secret color field to an existing authenticated bootstrap payload and validates strict hex before writing CSS variables; no supply-chain or security-boundary concern was found.

Review details

Best possible solution:

Land this focused bootstrap/frontend wiring after maintainer review and normal merge gates, then let #56068 close when the fix merges.

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

Yes. Source inspection on current main shows ui.seamColor is validated and exposed through talk.config, but the Control UI bootstrap contract, HTTP response, and frontend loader do not carry or apply it.

Is this the best way to solve the issue?

Yes. The existing authenticated bootstrap endpoint is the narrow owner boundary for early Control UI runtime settings, and using it is cleaner than adding a second frontend talk.config fetch path.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal user-visible Control UI configuration bug fix with limited blast radius.
  • 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. Sufficient (live_output): The PR body includes copied after-fix live output from a real local Control UI HTTP bootstrap handler showing seamColor in the JSON response, with focused loader coverage for CSS application and cleanup.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied after-fix live output from a real local Control UI HTTP bootstrap handler showing seamColor in the JSON response, with focused loader coverage for CSS application and cleanup.
Evidence reviewed

PR surface:

Source +55, Tests +101. Total +156 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 3 55 0 +55
Tests 2 102 1 +101
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 5 157 1 +156

What I checked:

Likely related people:

  • steipete: GitHub commit metadata shows d2ac672f47cd introduced ui.seamColor, and 3b4096e02e7e / c6e6023e3ac6 introduced and shared the Control UI bootstrap contract path. (role: introduced behavior and bootstrap path; confidence: high; commits: d2ac672f47cd, 3b4096e02e7e, c6e6023e3ac6; files: src/config/zod-schema.ts, src/gateway/control-ui-contract.ts, src/gateway/control-ui.ts)
  • BunsDev: Commit 5fce2f6b0fb1 threaded another existing Control UI setting through the same config, bootstrap payload, frontend state, docs, and tests path. (role: adjacent config/bootstrap contributor; confidence: medium; commits: 5fce2f6b0fb1; files: src/gateway/control-ui-contract.ts, src/gateway/control-ui.ts, ui/src/ui/controllers/control-ui-bootstrap.ts)
  • ZengWen-DT: Commit 7208567382f8 recently threaded agents.defaults.timeFormat through the same bootstrap contract, gateway response, frontend loader, and tests. (role: recent adjacent contributor; confidence: medium; commits: 7208567382f8; files: src/gateway/control-ui-contract.ts, src/gateway/control-ui.ts, ui/src/ui/controllers/control-ui-bootstrap.ts)
  • Alix-007: Commit f5dd33c975e5 recently repaired Control UI bootstrap config endpoint routing adjacent to this payload change. (role: recent bootstrap route contributor; confidence: medium; commits: f5dd33c975e5; files: src/gateway/control-ui-contract.ts, src/gateway/control-ui.ts, src/gateway/control-ui.http.test.ts)
  • vincentkoc: Local blame points to recent fixture/forward-port work touching the central Control UI bootstrap files, though older GitHub history is more specific for the feature path. (role: recent area contributor; confidence: low; commits: 2732f5821561; files: src/gateway/control-ui-contract.ts, src/gateway/control-ui.ts, ui/src/ui/controllers/control-ui-bootstrap.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.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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 rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. labels Jun 19, 2026
@vincentkoc
vincentkoc merged commit 5715744 into openclaw:main Jun 29, 2026
298 of 330 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 29, 2026
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 gateway Gateway runtime P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. triage: blank-template Candidate: PR template appears mostly untouched.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UI seamColor config setting is ignored by frontend

2 participants