Skip to content

fix(ios): centralize app accent colors#94627

Merged
openclaw-clownfish[bot] merged 1 commit into
openclaw:mainfrom
zats:zats/ios-centralize-accent-colors
Jun 22, 2026
Merged

fix(ios): centralize app accent colors#94627
openclaw-clownfish[bot] merged 1 commit into
openclaw:mainfrom
zats:zats/ios-centralize-accent-colors

Conversation

@zats

@zats zats commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Centralize iOS accent/status colors in design tokens.
  • Apply the app-wide accent from code through SwiftUI tint and UIKit window tint.
  • Add SwiftLint coverage to block raw SwiftUI accent/status colors outside token definitions.

Verification

  • swiftlint lint --config .swiftlint.yml --only-rule openclaw_design_colors --quiet --no-cache
  • swiftlint lint --config .swiftlint.yml --quiet --no-cache
  • git diff --check
  • xcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'platform=iOS Simulator,name=iPhone 17' -configuration Debug CODE_SIGNING_ALLOWED=NO build
  • Autoreview: clean

Real behavior proof

Behavior addressed: iOS app accent/status colors now come from shared design tokens, with app-wide accent applied from code instead of Assets.xcassets/AccentColor.

Real environment tested: local macOS iOS simulator Debug build for the OpenClaw iOS app.

Exact steps or command run after this patch: ran focused SwiftLint, full SwiftLint, git diff --check, and an iOS simulator Debug xcodebuild for the OpenClaw scheme.

Evidence after fix:

OpenClaw iOS screenshot IMG_4292 OpenClaw iOS screenshot IMG_4291 OpenClaw iOS screenshot IMG_4290

Observed result after fix: app screens render with the centralized red accent/status palette and the build accepts the code-level tint path without an asset-catalog accent color.

Example of violation in Xcode flagged by the build system:
image

What was not tested: physical device rendering and App Store/archive signing.

@openclaw-barnacle openclaw-barnacle Bot added app: ios App: ios size: S proof: supplied External PR includes structured after-fix real behavior proof. labels Jun 18, 2026
@clawsweeper

clawsweeper Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

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

Summary
The PR centralizes iOS and shared chat accent/status colors into Swift design token helpers, applies app-wide SwiftUI/UIKit tinting, and adds a SwiftLint custom rule against raw accent/status colors.

PR surface: Other +40. Total +40 across 19 files.

Reproducibility: not applicable. this is a cleanup PR rather than a reported runtime bug. Current main still has the raw color sites, and the contributor supplied after-fix simulator screenshots plus lint/build commands.

Review metrics: 1 noteworthy metric.

  • Design lint policy: 1 custom SwiftLint rule added. The PR makes raw iOS/shared chat accent and status colors a build-enforced style policy, so maintainers should notice and accept that policy before merge.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster ✨ media proof bonus
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.

Risk before merge

  • [P1] The custom SwiftLint rule turns raw iOS/shared chat accent and status colors into a build-enforced policy across app, extension, watch, widget, and shared chat paths; maintainers should accept that policy before merge.
  • [P1] GitHub currently reports security-fast failing; I did not find a diff-caused security or supply-chain issue, but required-gate handling still remains.

Maintainer options:

  1. Decide the mitigation before merge
    Land the design-token cleanup once maintainers accept the new iOS SwiftLint color policy and required checks are green or explicitly handled.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] Maintainers need to decide whether to accept the new iOS SwiftLint design-color policy and handle the failing required gate; no narrow ClawSweeper repair is identified.

Security
Cleared: The diff changes Swift UI/theme code and SwiftLint configuration only; it adds no dependency, workflow, secret, package, artifact-download, or code-execution supply-chain surface.

Review details

Best possible solution:

Land the design-token cleanup once maintainers accept the new iOS SwiftLint color policy and required checks are green or explicitly handled.

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

Not applicable: this is a cleanup PR rather than a reported runtime bug. Current main still has the raw color sites, and the contributor supplied after-fix simulator screenshots plus lint/build commands.

Is this the best way to solve the issue?

Yes for the implementation shape: central app/shared chat tokens plus root SwiftUI/UIKit tinting are the narrow maintainable fix, and the ActivityWidget-local helper respects the current target boundary. The remaining choice is whether maintainers want this SwiftLint color policy enforced now.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P3: This is a small iOS visual cleanup and lint-policy improvement with limited user-facing blast radius.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body includes after-fix iOS simulator screenshots showing the red accent palette plus a lint diagnostic screenshot, and I inspected the linked media.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix iOS simulator screenshots showing the red accent palette plus a lint diagnostic screenshot, and I inspected the linked media.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body includes after-fix iOS simulator screenshots showing the red accent palette plus a lint diagnostic screenshot, and I inspected the linked media.
Evidence reviewed

PR surface:

Other +40. Total +40 across 19 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 19 74 34 +40
Total 19 74 34 +40

What I checked:

Likely related people:

  • Solvely-Colin: Authored the merged iOS pro UI and shared chat refresh that introduced the main OpenClawBrand and OpenClawChatTheme surfaces this PR updates. (role: feature owner; confidence: high; commits: f6e51ff99af4; files: apps/ios/Sources/Design/OpenClawBrand.swift, apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatTheme.swift)
  • zats: Has prior merged work in the iOS design/build surface beyond authoring this branch, from the unused iOS code pruning PR. (role: recent area contributor; confidence: medium; commits: 233b48daaab4; files: apps/ios/Sources/Design/OpenClawBrand.swift, apps/ios/project.yml)
  • mbelinky: Authored the merged Live Activity connection-status work that introduced the ActivityWidget status-color surface changed here. (role: introduced adjacent behavior; confidence: medium; commits: bd25182d5a9f; files: apps/ios/ActivityWidget/OpenClawLiveActivity.swift)
  • ngutman: Authored recent Live Activity lifecycle work touching the same widget area. (role: recent adjacent contributor; confidence: medium; commits: b823a5a26626, 96fb42352849; files: apps/ios/ActivityWidget/OpenClawLiveActivity.swift)
  • steipete: Recent commits moved and hardened Swift config/build hygiene, which makes this a useful routing candidate for the new SwiftLint policy surface. (role: recent build/config contributor; confidence: medium; commits: e7bb5d6ddf50, b294f7c46763; files: apps/ios/.swiftlint.yml, apps/ios/project.yml, config/swiftlint.yml)
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: 🐚 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 18, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 18, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. labels Jun 18, 2026
@zats
zats force-pushed the zats/ios-centralize-accent-colors branch from a0e437c to b10da9a Compare June 22, 2026 17:41
Move iOS accent and status colors through design tokens so raw SwiftUI color literals are blocked outside token definitions.

Set the app-wide tint in SwiftUI and UIKit from code, without relying on Assets.xcassets AccentColor.
@zats
zats force-pushed the zats/ios-centralize-accent-colors branch from b10da9a to 2e7e470 Compare June 22, 2026 17:43
@openclaw-clownfish
openclaw-clownfish Bot merged commit 5d9daea into openclaw:main Jun 22, 2026
39 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 23, 2026
Move iOS accent and status colors through design tokens so raw SwiftUI color literals are blocked outside token definitions.

Set the app-wide tint in SwiftUI and UIKit from code, without relying on Assets.xcassets AccentColor.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: ios App: ios P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant