fix(ios): picker adaptive onChange loop + OSLog string concatenation#40878
fix(ios): picker adaptive onChange loop + OSLog string concatenation#40878eulicesl wants to merge 6 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aca0cd114c
ℹ️ 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".
Greptile SummaryThis PR delivers two independent bug fixes for the iOS app: adding the missing
Confidence Score: 4/5
Last reviewed commit: aca0cd1 |
There was a problem hiding this comment.
Pull request overview
This PR contains two independent bug fixes for the iOS app targeting iOS 26 SDK compatibility and a SwiftUI rendering issue.
Changes:
- Added the missing
"adaptive"tag to thethinkingPickerinChatComposer.swift, preventing a SwiftUI Picker onChange loop when the backend returnsthinkingLevel = "adaptive"(an unknown tag caused SwiftUI to revert to a fallback selection and loop) - Wrapped the
streamingAssistantTextonChange scroll update inTask { @MainActor in }inChatView.swiftto defer it past the current layout pass and suppress "onChange tried to update multiple times per frame" warnings during rapid token streaming - Collapsed multi-line OSLog string concatenation in
NodeAppModel.swiftinto single-line interpolations, fixing compile errors with Xcode 17C (iOS 26 SDK) whereOSLogMessagedoes not support+between operands
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatComposer.swift |
Adds the missing "adaptive" picker tag to prevent the selection-fallback loop |
apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView.swift |
Wraps the streaming scroll update in a deferred Task to avoid same-frame multi-update warnings |
apps/ios/Sources/Model/NodeAppModel.swift |
Merges three multi-line +-concatenated OSLog strings into single-line string interpolations |
The PR description lists Sources/Chat/MessageComposerView.swift and Sources/Gateway/GatewaySettingsStore.swift as changed files, but neither has a corresponding diff. MessageComposerView.swift does not exist anywhere in the codebase. GatewaySettingsStore.swift does exist and uses Logger.info with a single-argument form (no + concatenation), so no fix was needed there — but the PR description incorrectly states it was changed. The description appears to have been generated with inaccurate file references (noted as AI-assisted).
You can also share your feedback on Copilot code review. Take the survey.
aca0cd1 to
f80073a
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f80073a1fb
ℹ️ 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".
9d31c3a to
96dae44
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 96dae44bbd
ℹ️ 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".
96dae44 to
be9e16c
Compare
fb63d73 to
47f5a83
Compare
|
Thanks for the context here. I swept through the related work, and this is now duplicate or superseded. Close as superseded: current main already replaced the picker path with metadata-driven thinking options through the merged native metadata fix, while the remaining streaming-layout work is covered by the broader open iOS chat streaming PR. Keeping this conflicting stale branch open would duplicate the canonical path and risk regressing the current picker contract. Canonical path: Close this stale branch, keep the merged metadata-driven picker implementation, and handle any remaining streaming layout/session work on #50483. So I’m closing this here and keeping the remaining discussion on #50483. Review detailsBest possible solution: Close this stale branch, keep the merged metadata-driven picker implementation, and handle any remaining streaming layout/session work on #50483. Do we have a high-confidence way to reproduce the issue? No high-confidence live current-main reproduction was established in this read-only review. Source and PR history explain the old static-picker conflict, but current main has the metadata fix and the streaming warning still lacks runtime diagnostic proof. Is this the best way to solve the issue? No, this branch is no longer the best way to solve the issue. The maintainable path is the merged metadata picker fix plus the broader streaming-layout branch, not keeping this conflicting duplicate PR open. Security review: Security review cleared: No concrete security or supply-chain concern found; the live diff is limited to SwiftUI chat UI files and does not touch dependencies, workflows, secrets, permissions, networking, or code execution. What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against d7a078f1962b. |
fe157e5 to
1327fbf
Compare
Two independent fixes: 1. **Picker adaptive tag onChange loop**: prevent infinite loop when picker selection triggers onChange which re-triggers state update 2. **OSLog concatenation**: Swift doesn't support '+' between OSLogMessage operands. Combined 3 multi-line log strings into single-line interpolations in NodeAppModel pending action logging.
Follow up on PR review by re-checking the pin-to-bottom state inside the deferred streaming scroll task. This keeps queued tasks from yanking the list back down after the user scrolls away during token streaming.\n\nAlso rebase the branch onto current origin/main and validate with a simulator build.
1327fbf to
1220fc7
Compare
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for #40878 review feedback.
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for openclaw#40878 review feedback.
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for openclaw#40878 review feedback.
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for openclaw#40878 review feedback.
|
ClawSweeper PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
|
ClawSweeper applied the proposed close for this PR.
|
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for openclaw#40878 review feedback.
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for openclaw#40878 review feedback.
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for openclaw#40878 review feedback.


Summary
Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Root Cause (if applicable)
git blame, prior PR, issue, or refactor if known): prior body text referenced additional scope, but the current rebased diff is limited to the shared chat UI fixes reflected in the changed files.Regression Test Plan (if applicable)
ChatComposerandChatViewstreaming behavior.User-visible / Behavior Changes
Diagram (if applicable)
N/A
Security Impact (required)
Yes/No): NoYes/No): NoYes/No): NoYes/No): NoYes/No): NoYes, explain risk + mitigation: N/ARepro + Verification
Environment
Steps
Expected
Actual
Evidence
Attach at least one:
Human Verification (required)
Review Conversations
If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.
Compatibility / Migration
Yes/No): YesYes/No): NoYes/No): NoRisks and Mitigations