Skip to content

Polish iOS onboarding and chat critique fixes#99243

Merged
steipete merged 7 commits into
openclaw:mainfrom
jcooley8:codex/openclaw-ios-pincushion-pins
Jul 4, 2026
Merged

Polish iOS onboarding and chat critique fixes#99243
steipete merged 7 commits into
openclaw:mainfrom
jcooley8:codex/openclaw-ios-pincushion-pins

Conversation

@jcooley8

@jcooley8 jcooley8 commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

The iOS critique baseline identified real friction in two user paths: a connected but empty chat gave no useful starting point, and onboarding exposed pairing/completion controls whose outcomes were unclear. It also exposed a chat refresh bug during simulator verification: an immediate send acknowledgement could render both the optimistic user row and its canonical history row.

This PR uses the original contribution as an idea baseline while preserving the stock SwiftUI navigation/settings work already landed in #99231.

Why This Change Was Made

The useful findings belong at three existing owners:

  • Shared chat UI renders reusable starter-prompt actions and reconciles optimistic/canonical rows.
  • The iOS chat surface owns OpenClaw-specific prompt text and the agent badge fallback.
  • iOS onboarding owns pairing-command copy feedback and the completion route into Chat.

The original branch is not landed verbatim. The repair intentionally rejects overlapping or misleading changes: collapsing Talk into Chat, renaming an image-only attachment control to More, switch visuals for mutually exclusive choices, hiding the device-trust disclosure, and the nonexistent openclaw pair token command.

User Impact

  • Connected empty chat offers three useful starter prompts; tapping one sends the full prompt through the existing chat path.
  • A literal ? agent emoji is treated as missing, allowing the existing initials fallback to render.
  • /pair qr has a real copy action with readable and accessible copied feedback.
  • Successful onboarding shows one endpoint and Go to Chat actually selects Chat before dismissing onboarding.
  • Immediate send-ack history refreshes no longer duplicate the user message; unmatched and repeated same-text optimistic sends remain preserved.

Evidence

Exact repaired head: 307e754e8794b3334491cb3b29fa774c0ba18d2f

  • swift test --package-path apps/shared/OpenClawKit --filter 'does not duplicate user message when refresh returns canonical timestamp' — 1 passed.
  • swift test --package-path apps/shared/OpenClawKit --filter 'optimistic user message' — 3 passed.
  • xcodebuild ... -only-testing:OpenClawTests/GatewayStatusBuilderTests test — 5 passed.
  • iPhone simulator UI: empty prompt send/response plus pairing copy/completion — 2 passed.
  • iPad simulator UI: empty prompt send/response — 1 passed.
  • node --import tsx scripts/native-app-i18n.ts checkentries=2465 changed=false.
  • git diff --check origin/main...HEAD — clean.
  • Fresh structured autoreview — no actionable findings, 0.92 confidence.

Before / After

The simulator flows exercise the real app UI, navigation, clipboard, and chat state machinery with the repository's local review fixture. They do not claim a live external Gateway round trip.

@clawsweeper

clawsweeper Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper review: did not complete due to Codex infrastructure failure. Reviewed July 4, 2026, 3:35 AM ET / 07:35 UTC.

Summary
Review failed before ClawSweeper could summarize the requested change.

PR surface: Tests +23, Other +2653. Total +2676 across 18 files.

Reproducibility: unclear. The review failed before ClawSweeper could establish a reproduction path.

Review metrics: none identified.

Merge readiness
Not assessed.
Failure reason: codex execution failed.

This is a ClawSweeper/Codex infrastructure failure, not a PR readiness or patch-quality verdict.
Keep any merge decision on the normal maintainer review path until ClawSweeper can complete a fresh review.

Risk before merge

  • [P1] No close action taken because the review did not complete.

Maintainer options:

  1. Decide the mitigation before merge
    Retry the Codex review after fixing the execution failure.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • Review did not complete, so no work-lane recommendation was made.
Review details

Best possible solution:

Retry the Codex review after fixing the execution failure.

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

Unclear. The review failed before ClawSweeper could establish a reproduction path.

Is this the best way to solve the issue?

Unclear. Retry the review first so ClawSweeper can evaluate the actual issue and fix direction.

AGENTS.md: unclear because the file could not be read completely.

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

Label changes

Label changes:

  • remove proof: sufficient: Current real behavior proof status is not_applicable, not sufficient.
  • remove P3: Current review triage priority is none.
  • remove rating: 🦞 diamond lobster: Current review failed before PR readiness was assessed, so no rating label should remain.
  • remove status: 👀 ready for maintainer look: Current PR status no longer selects a status label.
  • remove proof: 📸 screenshot: Current real behavior proof evidence kind is not_applicable.
Evidence reviewed

PR surface:

Tests +23, Other +2653. Total +2676 across 18 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 1 23 0 +23
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 17 3067 414 +2653
Total 18 3090 414 +2676

What I checked:

  • failure reason: codex execution failed.
  • codex failure detail: Codex review failed for this PR with exit 1.
  • codex stderr: No stderr captured.
  • codex stdout: {"type":"thread.started","thread_id":"019f2c0d-f0de-7281-88c8-36618af99bae"}.

Likely related people:

  • unknown: Codex failed before it could trace repository history. (role: review did not complete; confidence: low)
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 (1 earlier review cycle)
  • reviewed 2026-07-04T06:59:07.490Z sha e972174 :: needs maintainer review before merge. :: none

@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. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 2, 2026
@jcooley8

jcooley8 commented Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Added the generated native i18n inventory in 620e1fe194.

Local proof after the original UI patch:

pnpm native:i18n:check
native-app-i18n: entries=2368 changed=false
xcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'platform=iOS Simulator,name=iPhone 17' -configuration Debug CODE_SIGNING_ALLOWED=NO build
SwiftFormat completed in 0.03s.
Done linting! Found 5 violations, 0 serious in 153 files.
** BUILD SUCCEEDED **
xcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'platform=iOS Simulator,name=iPhone 17' -configuration Debug CODE_SIGNING_ALLOWED=NO -only-testing:OpenClawTests/RootTabsPresentationTests -only-testing:OpenClawTests/RootTabsSourceGuardTests test
Test run with 79 tests in 2 suites passed after 0.660 seconds.
** TEST SUCCEEDED **

@clawsweeper

clawsweeper Bot commented Jul 2, 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.

@jcooley8
jcooley8 force-pushed the codex/openclaw-ios-pincushion-pins branch from 620e1fe to 9968797 Compare July 2, 2026 22:07
@jcooley8

jcooley8 commented Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Rebased onto current main; the native i18n inventory fix is now in 99687978ac.

Current CI proof for the previously failing check:

native-i18n pass 38s
https://github.com/openclaw/openclaw/actions/runs/28624622802/job/84888192788

@clawsweeper

clawsweeper Bot commented Jul 2, 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.

@clawsweeper clawsweeper Bot added status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 3, 2026
@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Simulator before / after proof

Before: Pincushion mobile critique baseline. The original branch was treated as an idea baseline, not landed verbatim: overlapping or misleading changes (collapsed Talk navigation, a generic More control that only accepted images, switch visuals for exclusive choices, hidden trust disclosure, and the nonexistent openclaw pair token command) were rejected.

After — iPhone empty chat and sent starter response

clipboard clipboard

After — pairing command copy confirmation and successful completion to Chat

clipboard clipboard

After — iPad empty chat and sent starter response

clipboard clipboard

Visual inspection: no clipping or duplicate rows; the copied state is readable without label overlap; connected success shows one endpoint and a real Go to Chat transition. Simulator clipboard independently returned exactly /pair qr. The response path also exposed and fixed an immediate send-ack reconciliation bug that duplicated the optimistic user row.

Automated proof: iPhone UI 2/2, iPad UI 1/1, focused OpenClawKit reconciliation tests 4/4, iOS unit tests 5/5. Exact commands and exact-head CI will follow after the repaired branch is pushed.

@steipete
steipete force-pushed the codex/openclaw-ios-pincushion-pins branch from 9968797 to 307e754 Compare July 4, 2026 02:09
@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. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 4, 2026
@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Land-ready verification

Exact reviewed head: 050f187bb2ece0884f7c8a42a5734aaba6177e1f.

The contributor branch was used as a baseline and rebuilt around current main. The accepted result adds localized connected empty-chat starter prompts, valid pairing-command copy feedback, a single onboarding success endpoint with a real Chat transition, avatar-initial fallback, and exact optimistic/canonical message reconciliation across ACK, final, refresh, history reordering, transformed canonical user text, reused run IDs, steering rows, and delayed durable projections. Overlapping regressions in navigation, attachment labeling, selection controls, trust disclosure, and command guidance were intentionally excluded.

Exact-head local proof:

  • swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests — 105/105 passed.
  • iOS integration tests (GatewayStatusBuilderTests + IOSGatewayChatTransportTests) — 16/16 passed; result bundle /tmp/openclaw-ios-99243-050f-unit.xcresult.
  • iPhone simulator UI: starter send/response, German localized starter, and onboarding copy through Go to Chat — 3/3 passed; result bundle /tmp/openclaw-ios-99243-050f-ui-phone.xcresult.
  • iPad simulator UI: starter send/response — 1/1 passed; result bundle /tmp/openclaw-ios-99243-050f-ui-ipad.xcresult.
  • Native i18n inventory — 2,489 entries, unchanged; both Apple catalogs contain 53 keys across all 21 locales.
  • Native i18n extractor tests — 5/5 passed.
  • SwiftFormat on the touched Swift surface and git diff --check — clean.

The final structured Codex autoreview found no actionable issues (0.99 confidence). A focused negative control temporarily disabled exact user identity matching and made the transformed/stale-history regression fail deterministically; restoring the fix returned the 105-test suite to green. Native review artifacts validate against this exact pushed head.

Fresh exact-head screenshots were exported from the passing phone and iPad result bundles and visually inspected: changed surfaces have no clipping, overlap, broken localization, or dead controls. Before/after simulator screenshots and the accepted/rejected baseline split: #99243 (comment)

Hosted exact-head CI: https://github.com/openclaw/openclaw/actions/runs/28699011663

Known proof boundary: the deterministic simulator transport proves app routing, rendering, localized payloads, copy state, send/reconciliation behavior, and phone/iPad layout; it does not claim a physical-camera or live external Gateway round trip. Physical QR scanning remains separately gated on #99572.

@steipete
steipete force-pushed the codex/openclaw-ios-pincushion-pins branch from 307e754 to e43ee98 Compare July 4, 2026 02:40
@steipete
steipete force-pushed the codex/openclaw-ios-pincushion-pins branch from 5e87fa4 to 8efedf4 Compare July 4, 2026 04:11
@openclaw-barnacle openclaw-barnacle Bot added scripts Repository scripts size: XL and removed size: L labels Jul 4, 2026
@steipete
steipete force-pushed the codex/openclaw-ios-pincushion-pins branch 2 times, most recently from c3e2273 to e972174 Compare July 4, 2026 06:44
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jul 4, 2026
@steipete
steipete force-pushed the codex/openclaw-ios-pincushion-pins branch from e972174 to 050f187 Compare July 4, 2026 07:23
@clawsweeper clawsweeper Bot removed proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 4, 2026
@steipete
steipete merged commit e43c729 into openclaw:main Jul 4, 2026
152 of 162 checks passed
@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 5, 2026
* fix(ios): polish onboarding and empty chat

Co-authored-by: Josh <[email protected]>

* fix(ios): correlate pending chat echoes

* fix(ios): ship localized chat starters

* fix(ios): preserve chat echo identity

* fix(ios): adopt late correlated chat echoes

* fix(ios): reconcile reused chat runs

* fix(ios): preserve transformed chat history

---------

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

app: ios App: ios P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. scripts Repository scripts size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants