fix(ios): block omitted share attachments#104842
Conversation
cb3057a to
63af225
Compare
|
Exact-head proof for Validation run on this head: What this proves:
Host limitation for simulator proof: this macOS 12 host only has Apple Command Line Tools. @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Codex review: needs real behavior proof before merge. Reviewed July 13, 2026, 6:53 AM ET / 10:53 UTC. Summary PR surface: Other +162. Total +162 across 6 files. Reproducibility: yes. at source level: current main deterministically caps accepted images at three and discards the attachment-class counters. A before-fix native run on current main was not supplied, so this is source-reproducible rather than a fully executed current-main reproduction. Review metrics: none identified. Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Land a clean iOS-only branch that preserves controller-level fail-closed enforcement, rebases onto current main, and includes redacted exact-head simulator proof for normal images, excess images, and at least one unsupported video or file share. Do we have a high-confidence way to reproduce the issue? Yes at source level: current main deterministically caps accepted images at three and discards the attachment-class counters. A before-fix native run on current main was not supplied, so this is source-reproducible rather than a fully executed current-main reproduction. Is this the best way to solve the issue? Yes in direction: blocking the send at the controller boundary is safer and narrower than silently delivering partial content or expanding the gateway media contract. The final solution should exclude unrelated macOS test behavior and be proven on the exact mergeable head. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 801252c66e77. Label changesLabel justifications:
Evidence reviewedPR surface: Other +162. Total +162 across 6 files. View PR surface stats
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
Review history (12 earlier review cycles; latest 8 shown)
|
63af225 to
ee6c879
Compare
|
Updated exact-head proof for Validation run on this head: CI failure follow-up from the previous head:
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
ee6c879 to
5dda904
Compare
|
Updated exact-head proof for Validation run on this head: Fix since the prior review:
Remaining known proof gap: this host still cannot run simulator/device UI proof because it lacks full Xcode and @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Exact-head native simulator proof for Environment: iPhone 17 Pro simulator, iOS 26.2 ( Six-image omission path
Normal one-image control
Focused commands: The UI-test additions were a local proof harness only; no test or product files were pushed to the contributor branch. @clawsweeper re-review |
1b8709d to
9856240
Compare
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Closing this PR under my current contribution standard: it is still missing current-head native proof, has a dirty/uncertain merge state, and includes unrelated macOS timeout scope alongside the iOS share fix. I am going to avoid spending more review/CI cycles on a branch that is unlikely to merge in this form. |
|
Superseded by #106513 and landed as |


What Problem This Solves
Fixes #103363.
The iOS Share Extension accepted at most three image attachments and ignored videos, files, PDFs, and unknown attachment providers while still moving toward the normal send flow. That let a user share partial content without any visible explanation.
Why This Change Was Made
This keeps the current gateway media contract unchanged: the share route still sends image attachments only, and it does not attempt to add video/PDF/file transport in this PR.
Instead, extraction now records selected image count, accepted image count, and unsupported attachment classes. If the extension would omit selected content, the compose card enters the existing blocked state with a concrete recovery message, so send stays disabled until the user removes omitted items and shares again.
User Impact
Only 3 of 6 images can be sent. Remove omitted items and share again.Evidence
Focused local proof:
Validation run:
Real proof
Exact-head native simulator proof for
5dda9040ac66350805428609bca660dd5373e6f6.Environment: iPhone 17 Pro simulator, iOS 26.2 (
23C54), Xcode 27.0. The installed app'sOpenClawGitCommitis the exact PR head above. Both scenarios used the real Photos → Share Sheet → OpenClaw Share Extension path.Six-image omission path
Only 3 of 6 images can be sent. Remove omitted items and share again.Compare all six images, Send remained disabled.39.91s).Normal one-image control
Describe this image, Send enabled normally.27.65s).Focused commands:
The UI-test additions were a local proof harness only; no test or product files were pushed to the contributor branch.
Source proof comment: #104842 (comment)