Skip to content

feat(ios): PR1 brand color palette overhaul#98930

Merged
steipete merged 6 commits into
openclaw:mainfrom
joelnishanth:feat/ios-pr1-brand-colors
Jul 2, 2026
Merged

feat(ios): PR1 brand color palette overhaul#98930
steipete merged 6 commits into
openclaw:mainfrom
joelnishanth:feat/ios-pr1-brand-colors

Conversation

@joelnishanth

@joelnishanth joelnishanth commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

The iOS app still used legacy accent/semantic colors (#C63E38 era accent, raw .orange/.green/.red, and systemBlue on Talk controls) instead of the design-guide palette. PR1 centralizes consumed tokens in OpenClawBrand and routes the hardcoded call sites through them.

Supersedes closed #98919 after maintainer feedback (stale after screenshots + committed proof assets).

Why This Change Was Made

Design-system PR 1 of 8: palette + hardcoded color cleanup only. Follow-up PRs own typography, spacing, and unused surface/text/teal tokens.

Reopened cleanly: branch rebased on current main (Liquid Glass + navigation/settings refresh) and proof regenerated on that UI.

User Impact

  • Primary Talk actions and glass toggles use Claw Red (#E8302A) instead of system blue.
  • Push-relay sheet, gateway/talk banners, and privacy status rows use brand semantic colors.
  • Sheet chrome graphite values align to design-guide void/obsidian dark surfaces.

Evidence

Automated

  • OpenClawBrandTestsTEST SUCCEEDED (iPhone 17 Simulator, patched upstream/main + this diff)
  • Talk CTA pixel scan on current main UI: before 38,879 blue / 0 Claw Red → after 0 blue / 37,324 Claw Red (#E8302A)
  • Push-relay sheet render: before 108,675 blue pixels → after 0 blue / 108,196 Claw Red

Why Settings tab before/after looked identical

The Settings tab screenshot already used OpenClawBrand.accent on main; PR1 mostly retunes token values (#C63E38#E8302A, dark graphite/ok shifts). That is only ~0.2–0.5% of pixels on the full Settings screen — too subtle for a side-by-side full-page compare. The user-visible regressions this PR fixes are on surfaces that still had hardcoded systemBlue or UIKit semantic colors (Talk CTA, push-relay sheet, gateway/talk banners, privacy rows).

Before / after (simulator + isolated SwiftUI render)

Proof PNGs are hosted on fork branch pr-assets-98930 (not part of this PR diff): https://github.com/joelnishanth/openclaw/tree/pr-assets-98930

Talk — Start Talk CTA (systemBlue → Claw Red)

Talk CTA compare

Before After
talk light before crop talk light after crop

Talk — dark mode CTA crop

Before After
talk dark before crop talk dark after crop

Talk — full screen context

Before After
talk light before talk light after
Before After
talk dark before talk dark after

Push relay disclosure sheet (systemBlue → Claw Red)

Before After
push relay before push relay after

Files changed (6)

  • apps/ios/Sources/Design/OpenClawBrand.swift — consumed tokens only (no unused follow-up palette surface)
  • TalkProTab.swift — primary CTA + glass toggle tint
  • SettingsProTab.swift — push relay sheet accent
  • GatewayProblemView.swift, TalkRuntimeIssueBanner.swift, PrivacyAccessSectionView.swift — semantic colors

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: iOS brand accent/semantic palette alignment (PR1)
  • Real environment tested: macOS, Xcode 16, iPhone 17 Simulator (iOS 26.3.1), Debug build on current upstream/main UI shell
  • Exact steps or command run after this patch:
    xcrun simctl launch booted ai.openclawfoundation.app     --openclaw-screenshot-mode     --openclaw-appearance light     --openclaw-initial-tab talk     --openclaw-initial-destination talk     --openclaw-sidebar-visibility hidden
    xcrun simctl io booted screenshot talk-after.png
    Push-relay sheet renders used SwiftUIRenderSmokeTests.exportProofSnapshotWhenRequested against HostedPushRelayDisclosureSheet on unpatched vs patched SettingsProTab.swift.
  • Evidence after fix: Talk CTA crops + push-relay before/after PNGs above (hosted on pr-assets-98930); pixel verification on Talk CTA and push-relay renders
  • Observed result after fix: Talk primary/glass controls and push-relay sheet use Claw Red; semantic rows use brand ok/warn/danger
  • What was not tested: physical device; live Settings flow to open push-relay sheet; Watch approve buttons
  • Proof limitations or environment constraints: tab screenshots use debug screenshot fixture mode; Settings full-page compare omitted because main already used brand accent (change is token-level only); proof images hosted outside this PR diff per repo artifact policy

Review follow-up (from #98919)

  • Removed committed .github/proof PNGs from the branch
  • Trimmed unused follow-up tokens so Periphery/dead-code lane stays narrow
  • Rebased on main with Peter’s navigation/settings UI refresh before regenerating after screenshots

Joel Nishanth · offlyn.AI

@clawsweeper

clawsweeper Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 2, 2026, 3:09 AM ET / 07:09 UTC.

Summary
The PR updates iOS brand color tokens and routes several hardcoded SwiftUI color usages through OpenClawBrand tokens.

PR surface: Other +62. Total +62 across 14 files.

Reproducibility: not applicable. this is a visual design-token PR rather than a runtime bug report. The reviewable check is whether current source, tests, PR text, and screenshots agree on the final palette.

Review metrics: none identified.

Root-cause cluster
Relationship: canonical
Canonical: #98930
Summary: This PR is the active replacement for the earlier closed iOS palette submission.

Members:

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

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦐 gold shrimp
Patch quality: 🦐 gold shrimp
Result: blocked until stronger real behavior proof is added.

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

Rank-up moves:

  • Align OpenClawBrand.uiAccent, the PR body, and screenshot or pixel proof on the same final palette.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: Screenshots show a real red visual change, but they do not match the latest contrast-preserving token values in source; update the proof/body for the current head, redacting private details, then trigger or request re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Mantis proof suggestion
A visual proof lane would help because the remaining blocker is verifying the iOS palette rendered by the latest head. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify the latest iOS head renders Talk CTA and push-relay controls with the intended final OpenClawBrand accent palette.

Risk before merge

  • [P1] Merging now could land a darker contrast-preserving accent while the PR body and screenshots still claim #E8302A.
  • [P1] Green CI does not settle the product/design choice between the advertised bright brand red and the contrast-preserving fill tokens.

Maintainer options:

  1. Refresh Proof For Current Tokens
    If the darker contrast-preserving tokens are intended, update the PR body and screenshots or pixel counts so reviewers can verify that exact final head.
  2. Restore The Advertised Palette
    If #E8302A is the desired token, change OpenClawBrand.uiAccent accordingly and keep the foreground and fill contrast tests green.
  3. Pause For Design Direction
    If maintainers have not chosen between brand fidelity and contrast-preserving fills, pause this PR until the iOS design owner picks the palette contract.

Next step before merge

  • [P1] The remaining blocker is a maintainer iOS design/proof decision, not a safe automated repair because the target palette must be chosen.

Security
Cleared: The diff is limited to iOS Swift UI source, tests, and native i18n inventory and does not change dependencies, workflows, permissions, secrets, or code-execution paths.

Review findings

  • [P2] Align the proof with the token contract — apps/ios/Sources/Design/OpenClawBrand.swift:60-61
Review details

Best possible solution:

Pick the intended iOS accent contract, then either regenerate the PR body/proof for the contrast-safe tokens or restore the advertised #E8302A palette with contrast coverage.

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

Not applicable; this is a visual design-token PR rather than a runtime bug report. The reviewable check is whether current source, tests, PR text, and screenshots agree on the final palette.

Is this the best way to solve the issue?

No; routing hardcoded colors through OpenClawBrand is the right shape, but the branch is not yet the best merge shape because final code and public proof describe different accent colors.

Full review comments:

  • [P2] Align the proof with the token contract — apps/ios/Sources/Design/OpenClawBrand.swift:60-61
    The PR body and proof say Talk and push-relay now use Claw Red #E8302A, but the latest source defines uiAccent as the darker #B73833 light / #C63E38 dark values. Please either update the proof/body for the contrast-preserving tokens or change the tokens back to the advertised palette with contrast coverage.
    Confidence: 0.89

Overall correctness: patch is incorrect
Overall confidence: 0.89

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🦐 gold shrimp.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.

Label justifications:

  • P3: This is low-risk iOS visual design-system polish rather than an urgent runtime regression.
  • merge-risk: 🚨 other: The source and public proof disagree on the palette that would actually be merged, which normal CI cannot resolve.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: Screenshots show a real red visual change, but they do not match the latest contrast-preserving token values in source; update the proof/body for the current head, redacting private details, then trigger or request re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Screenshots show a real red visual change, but they do not match the latest contrast-preserving token values in source; update the proof/body for the current head, redacting private details, then trigger or request re-review.
Evidence reviewed

PR surface:

Other +62. Total +62 across 14 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 14 109 47 +62
Total 14 109 47 +62

What I checked:

  • Repository policy read: Root AGENTS.md and apps/ios/AGENTS.md were read fully; the applicable guidance requires deep PR review, matched before/after evidence for visual changes, and iOS release guardrails. (AGENTS.md:1, be5906e19dd7)
  • Current main still has the targeted visual gap: Current main still uses Color(uiColor: .systemBlue) for the Talk glass toggle and primary Talk action, so the central visual cleanup is not already implemented on main. (apps/ios/Sources/Design/TalkProTab.swift:204, be5906e19dd7)
  • Current main push-relay sheet still uses system blue: Current main still uses Color(uiColor: .systemBlue) for the hosted push relay icon and sheet tint. (apps/ios/Sources/Design/SettingsProTab.swift:289, be5906e19dd7)
  • Design guide supports the direction: The iOS design guide says semantic colors should be used and that visual changes need matched before/after evidence. (apps/ios/DESIGN.md:10, be5906e19dd7)
  • Latest PR head preserves darker accent fills: The latest PR head defines uiAccent as light (183, 56, 51) and dark (198, 62, 56), not the #E8302A palette claimed in the PR body and proof text. (apps/ios/Sources/Design/OpenClawBrand.swift:60, 97ebdf2d89a6)
  • Latest PR head routes Talk controls through the token: The PR correctly routes the Talk toggle and primary action through OpenClawBrand.accent, so the remaining blocker is the token/proof contract rather than the call-site shape. (apps/ios/Sources/Design/TalkProTab.swift:204, 97ebdf2d89a6)

Likely related people:

  • steipete: Recent merged iOS contrast, Liquid Glass, navigation, and settings work touched the same OpenClawBrand and design surfaces, and this account authored the contrast-preserving commits on this PR branch. (role: recent iOS design contributor and branch repair author; confidence: high; commits: eb151b3550f7, 0bb4119612f1, 313560d5b98e; files: apps/ios/Sources/Design/OpenClawBrand.swift, apps/ios/Sources/Design/SettingsProTab.swift, apps/ios/Sources/Design/TalkProTab.swift)
  • zats: Merged PR history for fix(ios): centralize app accent colors moved iOS accent and status colors through OpenClawBrand, directly adjacent to this PR's color-token contract. (role: accent-token feature owner; confidence: high; commits: 2e7e4704576d; files: apps/ios/Sources/Design/OpenClawBrand.swift, apps/ios/Sources/Design/ChatProTab.swift, apps/ios/Sources/OpenClawApp.swift)
  • Solvely-Colin: Merged iOS pro UI work added much of the current apps/ios/Sources/Design surface that this PR now retunes. (role: introduced current iOS pro UI surfaces; confidence: high; commits: 0d62f6bd49f0, 64ead505627a; files: apps/ios/Sources/Design/OpenClawBrand.swift, apps/ios/Sources/Design/OpenClawProComponents.swift, apps/ios/Sources/Design/TalkProTab.swift)
  • ngutman: CONTRIBUTING.md lists this handle for the iOS app, and this account merged the broad iOS pro UI PR that introduced relevant design surfaces. (role: listed iOS app area owner and merger of adjacent UI work; confidence: high; commits: 0d62f6bd49f0; files: CONTRIBUTING.md, apps/ios/Sources/Design/OpenClawBrand.swift, apps/ios/Sources/Design/TalkProTab.swift)
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. 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. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. labels Jul 2, 2026
@steipete steipete self-assigned this Jul 2, 2026
@steipete
steipete requested a review from a team as a code owner July 2, 2026 06:33
@openclaw-barnacle openclaw-barnacle Bot added channel: matrix Channel integration: matrix app: web-ui App: web-ui gateway Gateway runtime agents Agent runtime and tooling extensions: anthropic-vertex size: XL and removed size: XS labels Jul 2, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. 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 2, 2026
@steipete
steipete force-pushed the feat/ios-pr1-brand-colors branch from 37df738 to 31c787f Compare July 2, 2026 06:41
@openclaw-barnacle openclaw-barnacle Bot removed channel: matrix Channel integration: matrix app: web-ui App: web-ui gateway Gateway runtime agents Agent runtime and tooling extensions: anthropic-vertex size: XL labels Jul 2, 2026
@steipete
steipete force-pushed the feat/ios-pr1-brand-colors branch from 31c787f to 97ebdf2 Compare July 2, 2026 06:55
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jul 2, 2026
@steipete

steipete commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

OpenClaw QA Artifacts

Summary

Matched iPhone 17 / iOS 26.5 screenshot-fixture captures.

  • Before: current origin/main at capture time, 75240f4385.
  • After: repaired image tree at 80f9a2ae1c; exact PR head d2a6c30a7fadfb4ea405689b70452928e1217495 preserves the same palette and Talk code shown here while also incorporating newer current-main Chat refinements and native-i18n state.
  • Visible change: Talk primary and enabled speakerphone controls move from system blue to the app palette.
  • Accessibility repair: brand foreground tokens meet 4.5:1 contrast on plain and self-tinted grouped surfaces; accent fills retain 4.5:1 contrast for white content.

Evidence

@steipete

steipete commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Land-ready maintainer verification

Exact head: d2a6c30a7fadfb4ea405689b70452928e1217495

Maintainer repair completed before landing:

  • split accent fill and foreground roles so small labels and white-on-fill controls both retain 4.5:1 contrast;
  • restored the established warning/danger semantics;
  • migrated audited foreground consumers and expanded contrast coverage to plain and self-tinted grouped surfaces;
  • synced native-i18n inventory.

Before / after

Before After
Talk light before Talk light after
Talk dark before Talk dark after

Artifact manifest

Verification

  • xcodebuild test -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'platform=iOS Simulator,id=D0C1D2D4-4B0C-40ED-9BDD-5B705690F2A7' -configuration Debug -derivedDataPath /tmp/openclaw-98930-brand-tests -only-testing:OpenClawTests/OpenClawBrandTests CODE_SIGNING_ALLOWED=NO -quiet
  • swiftformat --lint --config config/swiftformat apps/ios/Sources/Design/OpenClawBrand.swift apps/ios/Tests/OpenClawBrandTests.swift
  • Fresh complete-branch autoreview: no accepted/actionable findings.
  • Exact-head hosted gates: CI 28573905230, Testbox 28573905582, ARM Testbox 28573905346, Build Artifacts Testbox 28573905324, and Workflow Sanity 28573905422: terminal green. The artifact gate passed on attempt 3 after two unrelated cache-miss tsdown OOMs and a transient runner startup failure.

Known proof gaps: none.

@openclaw-barnacle openclaw-barnacle Bot added scripts Repository scripts agents Agent runtime and tooling size: L and removed size: S labels Jul 2, 2026
@openclaw-barnacle openclaw-barnacle Bot added channel: mattermost Channel integration: mattermost size: XL and removed size: L labels Jul 2, 2026
@steipete
steipete merged commit 133ce01 into openclaw:main Jul 2, 2026
115 of 121 checks passed
@steipete

steipete commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Merged via squash.

joelnishanth added a commit to joelnishanth/openclaw that referenced this pull request Jul 2, 2026
Add OpenClawTypography with bundled Plus Jakarta Sans / DM Sans / JetBrains Mono
fonts and Dynamic Type support. Add OpenClawSpacing, OpenClawRadius, OpenClawMotion
tokens. Add shared OpenClawStatusBadge, OpenClawToggle, and button tier components.
Migrate ~30 views to OpenClawType tokens. Add new color tokens (teal, void, obsidian,
slate, stone, text tiers) without changing existing accent/semantic RGB values from openclaw#98930.

Co-authored-by: Cursor <[email protected]>
joelnishanth added a commit to joelnishanth/openclaw that referenced this pull request Jul 2, 2026
After screenshots now use the original accent RGB values from openclaw#98930
(no brighter red). Only typography changes visible in before/after.

Co-authored-by: Cursor <[email protected]>
joelnishanth added a commit to joelnishanth/openclaw that referenced this pull request Jul 2, 2026
Add OpenClawTypography with bundled Plus Jakarta Sans / DM Sans / JetBrains Mono
fonts and Dynamic Type support. Add OpenClawSpacing, OpenClawRadius, OpenClawMotion
tokens. Add shared OpenClawStatusBadge, OpenClawToggle, and button tier components.
Migrate ~30 views to OpenClawType tokens. Add new color tokens (teal, void, obsidian,
slate, stone, text tiers) without changing existing accent/semantic RGB values from openclaw#98930.

Co-authored-by: Cursor <[email protected]>
joelnishanth added a commit to joelnishanth/openclaw that referenced this pull request Jul 2, 2026
Add OpenClawTypography with bundled Plus Jakarta Sans / DM Sans / JetBrains Mono
fonts and Dynamic Type support. Add OpenClawSpacing, OpenClawRadius, OpenClawMotion
tokens. Add shared OpenClawStatusBadge, OpenClawToggle, and button tier components.
Migrate ~30 views to OpenClawType tokens. Add new color tokens (teal, void, obsidian,
slate, stone, text tiers) without changing existing accent/semantic RGB values from openclaw#98930.

Co-authored-by: Cursor <[email protected]>
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 3, 2026
* feat(ios): align brand color tokens with design guide (PR1)

* fix(ios): preserve brand contrast

* fix(ios): cover tinted palette surfaces

* chore(ios): sync native i18n inventory

* chore(ios): sync native i18n inventory

* chore(ios): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: ios App: ios channel: mattermost Channel integration: mattermost merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. scripts Repository scripts size: XL status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants