Recording touch overlay exports at ~220x480 or all-black whenever touches are drawn
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 56/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- ios, typescript
- Domain
- cli, documentation, mobile-dev, testing-qa
Research direction
Start at the record transport and compare the default overlay path with --hide-touches, using the raw capture path as the size reference. Add a regression test for track-size equality with a scripted tap and ensure overlay failure is reported rather than producing black output. Correct the claims in docs/adr/0025-foldable-apple-panels.md and docs/agents/device-verification.md, then re-measure the listed non-rot90 and iPhone Duo cases.
Written by the indexing model from the issue text.
Description
Purpose
record with the default touch overlay produces an unusable export as soon as the recording contains an interaction: the track collapses to roughly 220x480 regardless of the device's native capture size, and on a long recording it comes out entirely black. Touch indicators are therefore unavailable for exactly the recordings that need them, and the caller gets exit code 0 either way.
This is the recording transport, not the display-selection path. The raw capture honors --display correctly since #2703.
Observed
iPhone 17 simulator 0E0FCBDC-88E2-4CB6-A1DA-E148F77743F4 (iOS 27.0, non-rot90 panel), Xcode 27.1 beta, agent-device at 057dfb7c1. Mean luma measured over sampled frames; content changes across frames are marked where they occur.
| Overlay | Interactions during capture | Exported size | Result |
|---|---|---|---|
--hide-touches |
none | 1206x2622 |
correct |
| default | none | 1206x2622 |
correct |
| default | two tab taps | 220x480 |
bright, content changes present |
--hide-touches |
two tab taps | 1206x2622 |
correct, content changes present |
| default | taps, scroll, 97s | 480x220 |
meanLuma=0.00 every frame |
Two things follow from the matrix. The trigger is the overlay drawing touch events, not the interactions themselves — --hide-touches stays full size while recording the same taps. And it is not orientation-dependent: the failing device here has a normal portrait panel.
The overlay does draw something, since the small export tracks the screen. Only the geometry and, in the long case, the frame content are lost.
Required behavior
- A recording with touches exports at the same track size as the same recording without touches.
- A recording never exports all-black. If the overlay compositor cannot produce frames, fail the command or drop the overlay and say so in the result, rather than returning a black file with exit 0.
- The choice to drop the overlay must be reported on the response, not inferred from pixel dimensions by whoever notices later.
Completion conditions
- Table above re-measured on a non-rot90 target and on the iPhone Duo inner panel, with the overlay rows matching the
--hide-touchesrows for size and non-blackness. - A regression test asserts exported track size equals the raw path's for a scripted tap, since "file exists and is non-zero bytes" would have passed all four broken rows above.
docs/adr/0025-foldable-apple-panels.mdand the--hide-touchesnote indocs/agents/device-verification.mdcurrently state that the defect is specific torot90inner-panel tracks and that the same path works on non-rotated panels. That claim is wrong and was written before this matrix existed; both need correcting as part of this work.
Dependencies
None. Reproducible on main.
- Dominant language
- TypeScript
- Stars
- 4.7k
- Forks
- 304
- Avg merge
- 11h 46m
- Merged PRs (30d)
- 471
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from callstack/agent-device
-
mutation-model: indirect-ownership self-test pins a test that stopped reaching scroll-edge-state Openbug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
callstack/agent-device#2547 ·
-
refactor
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
callstack/agent-device#2530 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
callstack/agent-device#1869 ·
-
needs-triage
Difficulty 4/5 3-5 days Newbie friendliness 55/100
callstack/agent-device#2714 ·
-
iOS smoke fails in verify-installed-snapshot-bridge when a cold xcrun probe eats the shared deadline Openneeds-triage
Difficulty 4/5 3-5 days Newbie friendliness 48/100
callstack/agent-device#2712 ·
All issues in callstack/agent-device
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
area:tools bug good first issue help wanted priority:P2
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
TaewoooPark/Motifcode#14 ·
-
bug 🐞
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
[Bounty proposal] fix(web): memory insights count an evening memory on the next day ($25 proposed) Open
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
BasedHardware/omi#15320 ·
-
Difficulty 2/5 Half a day Newbie friendliness 78/100
vercel/vercel-plugin#199 ·