0.5.208: on phone viewports the YOU step is taller than the screen and /scroll returns 200 without moving it
0.5.208's band fix works on mobile — this is the next thing behind it, not a regression. Both Android and iOS now expose all three bands, where 0.5.206 exposed none on Android and only age_band_declined on iOS. bb76e51 reached every platform.
What blocks both mobile targets now is that the rest of the YOU step cannot be reached.
Evidence
Run #34147279506, 0.5.208, both mobile legs:
android [FAIL] you_step: Input 'input_username' failed after scrolling:
input_username is composed but off screen;
on screen and drivable now:
[age_band_adult, age_band_declined, age_band_minor, btn_next]
ios [FAIL] you_step: Input 'input_username' failed after scrolling:
input_username is composed but off screen;
on screen and drivable now:
[age_band_adult, age_band_declined, age_band_minor, btn_next,
opt_run_with_ai, opt_run_without_ai]
Both desktop legs pass the same step in ~1.3s, so this is viewport height, not a layout fault: input_username, input_fedid_label and (on Android) both AI options are composed but off screen, and the visible window is the age row plus Next.
/scroll is present and answers 200, and nothing moves
This is the part worth your attention. 90ad6f3e9 added the Android route and I confirmed it in the shipped artifact — extracting route strings from each classes.jar:
0.5.206 aar: /click /health /input /screen /tree /undrivable /wait
0.5.208 aar: /click /health /input /screen /scroll /tree /undrivable /wait
So the 404s we saw on 0.5.206 are gone. There is not one scroll refused line anywhere in the 0.5.208 Android leg — our harness prints that only on a non-200, per the refusal contract you shipped in 0.5.207. The scrolls are being accepted and are not bringing the element on screen.
We try both directions (six attempts, 300px, down then up), so "we scrolled the wrong way past it" is ruled out. The two readings we cannot separate from outside:
/scroll resolves to a scrollable ancestor that is not the one the setup form actually scrolls in, so it scrolls a container with no overflow and truthfully reports success; or
- the form is not in a scrollable container at all on mobile, and the overflow is simply clipped — in which case a human on a phone cannot reach the username field either, and this is a user-facing bug rather than an automation one.
We cannot tell those apart through the HTTP surface, and the difference matters a great deal: (2) means the mobile wizard is unusable, (1) means only our gate is blocked. A screenshot of the Android YOU step at emulator height would probably settle it in seconds on your side — shots/android.png in our artifact is captured after the failure if that helps.
What would make this self-evident from outside
Not a request, a suggestion, and only if it is cheap: if a 200 from /scroll reported what it actually did — the resolved scrollable's id, and the offset before/after — then "accepted but nothing moved" would be visible in the response rather than inferred from a later failure. The 0.5.207 refusal contract already made refusals legible; this is the same idea for the success path. Today a 200 that moved nothing and a 200 that scrolled correctly are byte-identical to us.
Status of the rest, for context
| leg |
no-AI |
with-AI |
| windows |
6/7, blocked on #43 |
separate port bug, ours, fixed |
| linux |
6/7, blocked on #43 |
green, live model response |
| macos |
6/7, blocked on #43 |
green, live model response |
| android |
blocked here |
blocked here |
| ios |
blocked here |
blocked here |
The desktop with-AI path is fully green on 0.5.208 end to end, including a real answer on screen. Mobile is blocked at this step, and both mobile legs are blocked at only this step.
0.5.208: on phone viewports the YOU step is taller than the screen and
/scrollreturns 200 without moving it0.5.208's band fix works on mobile — this is the next thing behind it, not a regression. Both Android and iOS now expose all three bands, where 0.5.206 exposed none on Android and only
age_band_declinedon iOS.bb76e51reached every platform.What blocks both mobile targets now is that the rest of the YOU step cannot be reached.
Evidence
Run #34147279506, 0.5.208, both mobile legs:
Both desktop legs pass the same step in ~1.3s, so this is viewport height, not a layout fault:
input_username,input_fedid_labeland (on Android) both AI options are composed but off screen, and the visible window is the age row plus Next./scrollis present and answers 200, and nothing movesThis is the part worth your attention.
90ad6f3e9added the Android route and I confirmed it in the shipped artifact — extracting route strings from eachclasses.jar:So the 404s we saw on 0.5.206 are gone. There is not one
scroll refusedline anywhere in the 0.5.208 Android leg — our harness prints that only on a non-200, per the refusal contract you shipped in 0.5.207. The scrolls are being accepted and are not bringing the element on screen.We try both directions (six attempts, 300px, down then up), so "we scrolled the wrong way past it" is ruled out. The two readings we cannot separate from outside:
/scrollresolves to a scrollable ancestor that is not the one the setup form actually scrolls in, so it scrolls a container with no overflow and truthfully reports success; orWe cannot tell those apart through the HTTP surface, and the difference matters a great deal: (2) means the mobile wizard is unusable, (1) means only our gate is blocked. A screenshot of the Android YOU step at emulator height would probably settle it in seconds on your side —
shots/android.pngin our artifact is captured after the failure if that helps.What would make this self-evident from outside
Not a request, a suggestion, and only if it is cheap: if a 200 from
/scrollreported what it actually did — the resolved scrollable's id, and the offset before/after — then "accepted but nothing moved" would be visible in the response rather than inferred from a later failure. The 0.5.207 refusal contract already made refusals legible; this is the same idea for the success path. Today a 200 that moved nothing and a 200 that scrolled correctly are byte-identical to us.Status of the rest, for context
The desktop with-AI path is fully green on 0.5.208 end to end, including a real answer on screen. Mobile is blocked at this step, and both mobile legs are blocked at only this step.