feat(ios): clarify talk realtime fallback#91201
Conversation
|
Codex review: needs maintainer review before merge. Reviewed June 7, 2026, 12:09 PM ET / 16:09 UTC. Summary PR surface: Source +117, Tests +239, Other +860. Total +1216 across 15 files. Reproducibility: yes. by source inspection: current main falls back to native speech with plain Listening status and can set Ready after relay close without preserving a structured realtime failure issue. 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 after maintainer review confirms the realtime startup timing and safe gateway issue messaging are acceptable across supported relay providers. Do we have a high-confidence way to reproduce the issue? Yes by source inspection: current main falls back to native speech with plain Listening status and can set Ready after relay close without preserving a structured realtime failure issue. Is this the best way to solve the issue? Yes: additive gateway issue metadata plus iOS-owned runtime/fallback state is the right layer, and no existing config, docs, or CLI setting solves the visibility problem. AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 66b91d78feb3. Label changesLabel justifications:
Evidence reviewedPR surface: Source +117, Tests +239, Other +860. Total +1216 across 15 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
|
|
Merged via squash.
Thanks @ngutman! |
Merged via squash. Prepared head SHA: b6fd32e Local prep note: pnpm build passed. pnpm check hit the npm shrinkwrap guard because @anthropic-ai/sdk@0.100.1 is no longer resolvable before 2026-05-24T20:18:43Z; the same shrinkwrap guard failure reproduces on current origin/main at ecd11a4, and this PR does not touch dependency manifests or lockfiles. Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com> Reviewed-by: @ngutman
Merged via squash. Prepared head SHA: b6fd32e Local prep note: pnpm build passed. pnpm check hit the npm shrinkwrap guard because @anthropic-ai/sdk@0.100.1 is no longer resolvable before 2026-05-24T20:18:43Z; the same shrinkwrap guard failure reproduces on current origin/main at 66b91d7, and this PR does not touch dependency manifests or lockfiles. Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com> Reviewed-by: @ngutman
Summary
Linked context
Requested by maintainer in this thread after testing the confusing fallback cases on iOS.
Real behavior proof (required for external PRs)
pnpm test src/gateway/talk-realtime-relay.test.ts src/gateway/server-methods/talk.test.tsxcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination "platform=iOS Simulator,name=iPhone 17" -configuration Debug -derivedDataPath apps/ios/build/simulator -only-testing:OpenClawTests/RealtimeTalkRelaySessionTests -only-testing:OpenClawTests/TalkModeManagerTests testswiftformat --lint --config config/swiftformat apps/ios/Sources/Voice/RealtimeTalkRelaySession.swift apps/ios/Tests/RealtimeTalkRelaySessionTests.swiftswiftlinton touched iOS source files via script input filesgit diff --checkcodex review --uncommittedbefore commit.agents/skills/autoreview/scripts/autoreview --mode localafter simplifying fallback issuesxcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination "id=00008140-000848A92EE3001C" -configuration Debug -derivedDataPath apps/ios/build/phone buildxcrun devicectl device install app --device 6A19D82B-4EA6-5D67-B3A7-0AB3B71B550C apps/ios/build/phone/Build/Products/Debug-iphoneos/OpenClaw.appxcrun devicectl device process launch --device 6A19D82B-4EA6-5D67-B3A7-0AB3B71B550C ai.openclaw.ios.test.guti-gzs353x62eTests and validation
RealtimeTalkRelaySessionTestsandTalkModeManagerTests.git diff --check: clean.Regression coverage added/updated:
Risk checklist
Did user-visible behavior change? (
Yes/No)Yes.
Did config, environment, or migration behavior change? (
Yes/No)No.
Did security, auth, secrets, network, or tool execution behavior change? (
Yes/No)Yes, only in error reporting for talk provider/auth failures. No secrets are surfaced; diagnostics use a generic issue code plus safe issue metadata.
What is the highest-risk area?
Realtime relay startup sequencing and generic failure propagation between gateway events and iOS fallback.
How is that risk mitigated?
The iOS relay now subscribes before session creation, waits for provider ready before reporting realtime startup success, preserves the first realtime issue, and the gateway keeps lifecycle events non-droppable. Focused gateway and iOS tests cover these cases.
Current review state
What is the next action?
Maintainer review and GitHub checks.
What is still waiting on author, maintainer, CI, or external proof?
Waiting on PR CI and maintainer review. No known author-side loose ends.
Which bot or reviewer comments were addressed?
Local Codex review findings were addressed before this PR: startup cancellation hang, droppable lifecycle events, and startup wait budget shorter than gateway provider connect budget. Maintainer feedback to remove semantic failure classification was addressed by collapsing fallback reporting to one generic
realtime_unavailableissue.Agent Transcript
Redacted codex session transcript