Improve iPad and iPhone control surfaces#91557
Conversation
|
Codex review: needs maintainer review before merge. Reviewed June 9, 2026, 1:05 PM ET / 17:05 UTC. Summary PR surface: Source +34, Tests +106, Other +8272. Total +8412 across 50 files. Reproducibility: not applicable. this is a feature PR with supplied after-fix simulator proof rather than a current-main bug reproduction. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land only after maintainers explicitly accept the universal iPhone+iPad release posture for the app, share extension, and activity widget. Do we have a high-confidence way to reproduce the issue? Not applicable; this is a feature PR with supplied after-fix simulator proof rather than a current-main bug reproduction. Is this the best way to solve the issue? Yes, with a product caveat: the implementation follows existing iOS/gateway ownership and preserves Workboard compatibility, while the unresolved question is whether universal iPad distribution should ship now. AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 56d201fa670b. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +34, Tests +106, Other +8272. Total +8412 across 50 files. View PR surface stats
Acceptance criteria:
What I checked:
Likely related people:
What the crustacean ranks mean
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
|
|
Updated after the review note:
Verification after the fix: @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
34367e8 to
d21e89b
Compare
|
Refreshed the branch and added the package proof ClawSweeper asked for. What changed since the prior review:
Verification after refresh: Package proof:
Autoreview: @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR adds board-scoped Workboard dispatching (tool/gateway/CLI + store + dispatcher) and significantly expands the iOS “Pro” shell to better support iPad layouts, previews, and new settings surfaces.
Changes:
- Add
boardIdfiltering to Workboard dispatch across tool, gateway method, CLI, store, and dispatcher logic (with tests). - Introduce/expand iOS iPad-oriented navigation shell (sidebar + phone control hub), new design components, and broader preview/test coverage.
- Enable iPad device family for iOS targets and update app icon set metadata accordingly.
Reviewed changes
Copilot reviewed 44 out of 48 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| extensions/workboard/src/tools.ts | Adds boardId parameter to the Workboard dispatch tool call. |
| extensions/workboard/src/store.ts | Extends dispatch to accept options (board scoping + timestamp normalization) and scopes list calls by board. |
| extensions/workboard/src/store.test.ts | Adds test ensuring dispatch mutations can be scoped by board. |
| extensions/workboard/src/gateway.ts | Allows gateway dispatch method to accept an optional boardId param. |
| extensions/workboard/src/gateway.test.ts | Adds coverage for dispatch when gateway params are omitted. |
| extensions/workboard/src/dispatcher.ts | Threads boardId through dispatch/start flow and introduces candidate scoping for start selection. |
| extensions/workboard/src/dispatcher.test.ts | Adds test ensuring worker starts are scoped to the selected board. |
| extensions/workboard/src/cli.ts | Adds --board option and forwards it to gateway/local dispatch fallbacks. |
| apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView+Previews.swift | Adds chat UI preview transport and preview matrix scenarios. |
| apps/ios/project.yml | Enables iPad device family for app + extensions. |
| apps/ios/Tests/SwiftUIRenderSmokeTests.swift | Expands smoke tests to cover additional device/layout scenarios and screens. |
| apps/ios/Tests/RootTabsSourceGuardTests.swift | Adds source-guard tests to lock in navigation/shell structure. |
| apps/ios/Tests/RootTabsSidebarRegressionTests.swift | Adds regression tests for sidebar behavior and layout updates. |
| apps/ios/Tests/RootTabsPresentationTests.swift | Adds extensive presentation logic tests for new navigation model and UI rules. |
| apps/ios/Tests/GatewayStatusBuilderTests.swift | Adds test coverage for gateway pill labeling logic. |
| apps/ios/Tests/CommandCenterTabLayoutTests.swift | Adds layout tests for command center split/stack behavior. |
| apps/ios/SwiftSources.input.xcfilelist | Updates source list to include new screens/components and remove deleted dialog. |
| apps/ios/Sources/Status/GatewayActionsDialog.swift | Removes legacy gateway actions dialog extension. |
| apps/ios/Sources/RootTabsNavigation.swift | Adds shared navigation model types/constants for RootTabs (sidebar destinations, layout rules). |
| apps/ios/Sources/RootTabs.swift | Implements new adaptive shell (sidebar on iPad, phone control hub), routing, previews. |
| apps/ios/Sources/Model/NodeAppModel.swift | Adds hasOperatorAdminScope helper for admin-gated operations. |
| apps/ios/Sources/Design/TalkProTab.swift | Adds optional sidebar header leading action slot support. |
| apps/ios/Sources/Design/SettingsProTabSupport.swift | Adds Settings route for channels and preview matrix scaffolding. |
| apps/ios/Sources/Design/SettingsProTabSections.swift | Updates settings header to adaptive header row and adds channels destination routing. |
| apps/ios/Sources/Design/SettingsProTabActions.swift | Adds subtitle support per settings route and names the new channels route. |
| apps/ios/Sources/Design/SettingsProTab.swift | Adds navigation path/initial route handling and refactors lifecycle/modal presentation. |
| apps/ios/Sources/Design/SettingsChannelsDestination.swift | Introduces Channels/Integrations UI (status + per-account actions + previews). |
| apps/ios/Sources/Design/RootTabsPhoneControlHub.swift | Adds phone-centric control hub navigation for non-sidebar tab layouts. |
| apps/ios/Sources/Design/OpenClawProComponents.swift | Refines design system and adds new shared header/action/pill components. |
| apps/ios/Sources/Design/OpenClawDocsScreen.swift | Adds docs screen with gateway pill and external links. |
| apps/ios/Sources/Design/IPadSidebarScreenChrome.swift | Adds shared chrome wrapper for iPad sidebar feature screens. |
| apps/ios/Sources/Design/IPadSidebarFeatureScreens.swift | Adds shared params/errors for iPad sidebar feature screens. |
| apps/ios/Sources/Design/IPadSidebarFeaturePreviews.swift | Adds preview matrices for activity/workboard/workshop and phone row states. |
| apps/ios/Sources/Design/IPadActivityScreen.swift | Adds activity screen (metrics + recent sessions feed) integrated with gateway transport/demo. |
| apps/ios/Sources/Design/CommandCenterTab.swift | Updates command center layout/header rules and exposes helpers used by new screens. |
| apps/ios/Sources/Design/CommandCenterSupport.swift | Aligns command backgrounds/panels/rows with updated design tokens. |
| apps/ios/Sources/Design/ChatProTab.swift | Refactors header/pill logic and adds hooks for sidebar reveal + gateway settings action. |
| apps/ios/Sources/Design/AgentProTab.swift | Adds direct/initial routing, new agents destination, and shared header integration. |
| apps/ios/Sources/Design/AgentProTab+Overview.swift | Updates overview header to adaptive header row and renames nodes→instances routing. |
| apps/ios/Sources/Design/AgentProTab+Destinations.swift | Adds agents destination and renames nodes destination to instances. |
| apps/ios/Sources/Design/AgentProNodesDestination.swift | Renames “Nodes” UI copy to “Instances” throughout. |
| apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json | Adds iPad idiom icon entries for updated device family support. |
Comments suppressed due to low confidence (2)
extensions/workboard/src/dispatcher.ts:1
params.store.list()is called twice on every dispatch. WhenboardIdisundefined,candidateswill be equivalent tocards, so this doubles the store read cost unnecessarily. Consider only fetchingcandidateswhenboardIdis provided (otherwise reusecards).
apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView+Previews.swift:1- A 60s sleep in a preview transport can significantly slow SwiftUI previews and iteration. Consider reducing this to a very short delay (or simulate loading via immediate empty payload + a separate loading state) so previews remain responsive.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d4cd8b59bd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Fixed the post-ready CI lint issue on the latest head. What changed:
Verification:
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
* feat(ios): expand iPad layout support Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: improve iPad and iPhone control surfaces * fix: preserve workboard dispatch compatibility * fix: keep Talk reachable on iPad * fix: add universal iPad app icons * fix: address ready-review iOS feedback * fix: avoid workboard board id shadowing * fix ios sidebar separators --------- Co-authored-by: Solvely-Colin <211764741+Solvely-Colin@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
…26.6.6) (#1040) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.5` → `2026.6.6` | --- ### Release Notes <details> <summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary> ### [`v2026.6.6`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#202666) [Compare Source](openclaw/openclaw@v2026.6.5...v2026.6.6) ##### Highlights - Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. ([#​91529](openclaw/openclaw#91529), [#​91618](openclaw/openclaw#91618), [#​91615](openclaw/openclaw#91615), [#​91619](openclaw/openclaw#91619), [#​91741](openclaw/openclaw#91741), [#​91745](openclaw/openclaw#91745), [#​91746](openclaw/openclaw#91746), [#​91748](openclaw/openclaw#91748), [#​91749](openclaw/openclaw#91749), [#​91750](openclaw/openclaw#91750), [#​91751](openclaw/openclaw#91751), [#​91752](openclaw/openclaw#91752), [#​91763](openclaw/openclaw#91763), [#​89938](openclaw/openclaw#89938)) Thanks [@​joshavant](https://github.com/joshavant), [@​pgondhi987](https://github.com/pgondhi987), [@​mmaps](https://github.com/mmaps), [@​eleqtrizit](https://github.com/eleqtrizit), [@​shakkernerd](https://github.com/shakkernerd), and [@​drobison00](https://github.com/drobison00). - Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, `/compact` works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. ([#​91189](openclaw/openclaw#91189), [#​88682](openclaw/openclaw#88682), [#​89588](openclaw/openclaw#89588), [#​90212](openclaw/openclaw#90212), [#​91876](openclaw/openclaw#91876), [#​91874](openclaw/openclaw#91874), [#​91904](openclaw/openclaw#91904), [#​91478](openclaw/openclaw#91478), [#​91915](openclaw/openclaw#91915)) Thanks [@​codysai001](https://github.com/codysai001), [@​alexzhu0](https://github.com/alexzhu0), [@​joelnishanth](https://github.com/joelnishanth), [@​snowzlm](https://github.com/snowzlm), [@​obviyus](https://github.com/obviyus), and [@​sallyom](https://github.com/sallyom). - iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. ([#​91335](openclaw/openclaw#91335), [#​91449](openclaw/openclaw#91449), [#​88969](openclaw/openclaw#88969), [#​88530](openclaw/openclaw#88530), [#​91783](openclaw/openclaw#91783), [#​91785](openclaw/openclaw#91785)) Thanks [@​omarshahine](https://github.com/omarshahine), [@​jmissig](https://github.com/jmissig), and [@​colmbrogan](https://github.com/colmbrogan). - Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile `cdpUrl` handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. ([#​91422](openclaw/openclaw#91422), [#​89851](openclaw/openclaw#89851), [#​91736](openclaw/openclaw#91736), [#​91747](openclaw/openclaw#91747), [#​91451](openclaw/openclaw#91451), [#​80143](openclaw/openclaw#80143)) Thanks [@​pgondhi987](https://github.com/pgondhi987), [@​anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia), [@​lifuyue](https://github.com/lifuyue), [@​eleqtrizit](https://github.com/eleqtrizit), [@​LiuwqGit](https://github.com/LiuwqGit), and [@​HemantSudarshan](https://github.com/HemantSudarshan). - Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. ([#​91531](openclaw/openclaw#91531), [#​91538](openclaw/openclaw#91538), [#​91568](openclaw/openclaw#91568), [#​91583](openclaw/openclaw#91583), [#​91598](openclaw/openclaw#91598)) - Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. ([#​91830](openclaw/openclaw#91830), [#​91882](openclaw/openclaw#91882), [#​91590](openclaw/openclaw#91590), [#​88630](openclaw/openclaw#88630), [#​88768](openclaw/openclaw#88768), [#​91696](openclaw/openclaw#91696)) Thanks [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@​joshavant](https://github.com/joshavant), [@​bdjben](https://github.com/bdjben), and [@​Coder-Wangyankun](https://github.com/Coder-Wangyankun). ##### Changes - CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. ([#​89834](openclaw/openclaw#89834), [#​90883](openclaw/openclaw#90883)) Thanks [@​anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia). - Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. ([#​91256](openclaw/openclaw#91256), [#​91568](openclaw/openclaw#91568), [#​91583](openclaw/openclaw#91583)) Thanks [@​amknight](https://github.com/amknight). - Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. ([#​91574](openclaw/openclaw#91574), [#​91591](openclaw/openclaw#91591), [#​90004](openclaw/openclaw#90004), [#​90927](openclaw/openclaw#90927), [#​90838](openclaw/openclaw#90838)) Thanks [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@​brokemac79](https://github.com/brokemac79), and [@​lonexreb](https://github.com/lonexreb). - Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. ([#​91324](openclaw/openclaw#91324), [#​89138](openclaw/openclaw#89138), [#​90457](openclaw/openclaw#90457), [#​91837](openclaw/openclaw#91837), [#​91851](openclaw/openclaw#91851)) Thanks [@​osolmaz](https://github.com/osolmaz), [@​mushuiyu886](https://github.com/mushuiyu886), [@​ai-hpc](https://github.com/ai-hpc), and [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. ([#​91423](openclaw/openclaw#91423), [#​91557](openclaw/openclaw#91557), [#​89909](openclaw/openclaw#89909)) Thanks [@​cxyhhhhh](https://github.com/cxyhhhhh), [@​Solvely-Colin](https://github.com/Solvely-Colin), and [@​baskduf](https://github.com/baskduf). - Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. ([#​90782](openclaw/openclaw#90782), [#​89978](openclaw/openclaw#89978), [#​91580](openclaw/openclaw#91580), [#​91531](openclaw/openclaw#91531)) Thanks [@​RomneyDa](https://github.com/RomneyDa) and [@​ai-hpc](https://github.com/ai-hpc). ##### Fixes - Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. ([#​85679](openclaw/openclaw#85679), [#​91450](openclaw/openclaw#91450), [#​91566](openclaw/openclaw#91566), [#​91840](openclaw/openclaw#91840), [#​91590](openclaw/openclaw#91590), [#​91361](openclaw/openclaw#91361), [#​91895](openclaw/openclaw#91895)) Thanks [@​openperf](https://github.com/openperf), [@​yetval](https://github.com/yetval), [@​joshavant](https://github.com/joshavant), [@​wangmiao0668000666](https://github.com/wangmiao0668000666), and [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native `/compact` replies through source suppression. ([#​89151](openclaw/openclaw#89151), [#​91422](openclaw/openclaw#91422), [#​91425](openclaw/openclaw#91425), [#​91529](openclaw/openclaw#91529), [#​90212](openclaw/openclaw#90212)) Thanks [@​joelnishanth](https://github.com/joelnishanth), [@​pgondhi987](https://github.com/pgondhi987), [@​joshavant](https://github.com/joshavant), and [@​snowzlm](https://github.com/snowzlm). - Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. ([#​85823](openclaw/openclaw#85823), [#​89659](openclaw/openclaw#89659), [#​91684](openclaw/openclaw#91684), [#​91649](openclaw/openclaw#91649), [#​90263](openclaw/openclaw#90263), [#​91686](openclaw/openclaw#91686), [#​90426](openclaw/openclaw#90426)) Thanks [@​itsuzef](https://github.com/itsuzef), [@​ladygege](https://github.com/ladygege), [@​jacobtomlinson](https://github.com/jacobtomlinson), [@​fuller-stack-dev](https://github.com/fuller-stack-dev), and [@​shushushv](https://github.com/shushushv). - Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. ([#​90666](openclaw/openclaw#90666), [#​90678](openclaw/openclaw#90678)) Thanks [@​ai-hpc](https://github.com/ai-hpc). - Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in `config.patch`, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. ([#​87105](openclaw/openclaw#87105), [#​91551](openclaw/openclaw#91551), [#​91219](openclaw/openclaw#91219), [#​91614](openclaw/openclaw#91614), [#​91740](openclaw/openclaw#91740), [#​91978](openclaw/openclaw#91978)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev) and [@​scotthuang](https://github.com/scotthuang). - Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 `reasoning_content`, and avoid guardian review for local models. ([#​91390](openclaw/openclaw#91390), [#​91709](openclaw/openclaw#91709), [#​91507](openclaw/openclaw#91507), [#​91567](openclaw/openclaw#91567), [#​88630](openclaw/openclaw#88630), [#​91696](openclaw/openclaw#91696)) Thanks [@​hxy91819](https://github.com/hxy91819), [@​brokemac79](https://github.com/brokemac79), [@​RomneyDa](https://github.com/RomneyDa), [@​joshavant](https://github.com/joshavant), and [@​Coder-Wangyankun](https://github.com/Coder-Wangyankun). - Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. ([#​91581](openclaw/openclaw#91581), [#​91599](openclaw/openclaw#91599), [#​91547](openclaw/openclaw#91547), [#​91591](openclaw/openclaw#91591)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev), [@​sallyom](https://github.com/sallyom), and [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen). - UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. ([#​91480](openclaw/openclaw#91480)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle). - Android: avoid the `dataSync` foreground-service type for persistent nodes. ([#​80082](openclaw/openclaw#80082)) Thanks [@​davelutztx](https://github.com/davelutztx). - Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. ([#​91550](openclaw/openclaw#91550)) Thanks [@​joshavant](https://github.com/joshavant). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1040
Summary
workboard.cards.dispatchgateway calls and adds regression coverage for that compatibility path.Real behavior proof
Behavior addressed: iPad and iPhone control navigation now expose the macOS-aligned core destinations without placeholder screens, with responsive sidebar/bottom-tab behavior and connected Workboard/Skill Workshop data.
Real environment tested: XcodeBuildMCP iPadOS 26.2 and iOS 26.2 simulators paired through the real iOS setup-code flow against local gateway
ws://127.0.0.1:18789; setup/bootstrap token was not included in logs or this PR.Exact steps or command run after this patch: built the app, ran focused Workboard regression tests, ran the iOS SwiftUI/source-guard test slice, paired both simulators, opened Gateway/Workboard/Skill Workshop in dark and light mode, and recorded phone tab switching.
Evidence after fix: proof media is hosted as release assets on the contributor fork so no screenshots/GIFs are committed to the OpenClaw branch: https://github.com/Solvely-Colin/openclaw/releases/tag/pr-91557-proof
Observed result after fix: Gateway shows connected on iPad and iPhone; Workboard shows
Gateway Onlineand live board data; Skill Workshop showsGateway Online, Aiden scope, and live proposal counts; phone bottom tabs switch Control -> Chat -> Talk -> Agents -> Settings -> Control.What was not tested: physical iPhone/iPad screenshots were not captured for this PR body; simulator proof was used for visual coverage, and device install/pairing had been validated during the branch work.
Visual proof
iPad connected surfaces GIF
Gateway -> Workboard -> Skill Workshop on the connected iPad simulator.
iPhone tabs changing
iPad connected surfaces
iPhone connected surfaces
Connected proof
openclaw gateway status --deep --json: service running, gateway0.0.0.0:18789, RPC admin-capable.openclaw devices list --json: paired count moved from58to60, with new approvedopenclaw-iosnode rows foriPadOS 26.2.0andiOS 26.2.0; no pending devices.connect attempt ... ws://127.0.0.1:18789,operator gateway connected host=127.0.0.1 scheme=ws, andgateway connected host=127.0.0.1 scheme=wsfor both iPad and iPhone simulator runs.Universal target package proof
origin/main(0933726574) and force-pushed to headd21e89b345.OpenClaw,OpenClawShareExtension, andOpenClawActivityWidgetall reportTARGETED_DEVICE_FAMILY = 1,2,SUPPORTED_PLATFORMS = iphoneos iphonesimulator, and deployment target18.0.xcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -configuration Release -destination 'platform=iOS Simulator,id=CEA6895B-A87E-41A3-B071-CD19009B59FE' build CODE_SIGNING_ALLOWED=NOsucceeded.PlugIns/OpenClawShareExtension.appexandPlugIns/OpenClawActivityWidget.appex.Info.plistUIDeviceFamilyvalues:OpenClaw.app:[1, 2]OpenClawShareExtension.appex:[1, 2]OpenClawActivityWidget.appex:[1, 2]Verification
pnpm buildgit diff --checkOPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs extensions/workboard/src/gateway.test.ts extensions/workboard/src/dispatcher.test.ts extensions/workboard/src/store.test.ts— 3 files, 87 tests passedtest_simwith:-only-testing:OpenClawTests/RootTabsSourceGuardTests-only-testing:OpenClawTests/RootTabsPresentationTests-only-testing:OpenClawTests/RootTabsSidebarRegressionTests-only-testing:OpenClawTests/SwiftUIRenderSmokeTests.agents/skills/autoreview/scripts/autoreview --mode local— clean, no accepted/actionable findingsKnown notes
2026.6.2-beta.1, current CLI2026.6.2. It did not block simulator pairing, RPC, screenshots, or tests.