refactor: migrate the gesture family to the request-bound device runtime - #1952
Conversation
Size Report
npm unpacked components
Startup median (7 runs, lower is better):
Top changed chunks:
Top changed packed files
|
|
Not ready at |
|
Addressed at 1. Apple 2. Live coverage of the claimed denominator. Ran the four owners I can reach locally. Full
That is six owners with live coverage. Three genuinely could not be covered here:
Your call, and I'll do either: authorize the two provider cells and I'll run them for real, or I 3. Size/body metadata. Body now carries the exact CI numbers — +12.0 kB unpacked, +2.5 kB
|
|
The Apple extraction and local-owner evidence address the earlier points. One blocker remains: this head still changes the direct WebDriver and Limrun runtime cells, while its evidence expressly omits live runs for both. ADR 0019’s unit denominator includes direct provider runtimes, so we cannot narrow the claim in prose while those migrations ship. Please either run one representative changed command/refusal cell through each provider (record exact head and result), or remove those provider migrations from this unit; then re-request review. |
|
Code review is clean at Residual blocker to merge-ready status: this unit changes direct |
|
New blocker after main moved: this head is now 12 commits behind and conflicts across runtime/registry/dispatch surfaces. Rebase must preserve #1969’s granular contracts architecture: the PR’s new value imports from wide Also remove the type workaround in All green CI and +12 kB size evidence is against the old base. After rebase, rerun the full exact-head suite and remeasure/rejustify size. |
6cdff5c to
420d6e1
Compare
|
Rebased onto #1955 collided head-on, so this is a real reconciliation rather than a replay:
Three test expectations changed for real reasons, not to make them pass:
One process note worth flagging: the first rebase attempt silently reverted #1955's additions in The open question from your review is unchanged: Linux and the two cloud providers still have no live coverage — say the word and I'll either run the provider cells or narrow the unit's claims. |
|
Request changes at 420d6e1. The rebase resolves the conflicts and granular-contract import blocker, but the prior scroll proof blocker remains. scrollEdgeUse correctly requires captureSnapshot; resolveBoundScrollRuntime then executes identical plan.kind branches, widens both results to BoundScrollOperations with optional capture, and repairs the lost edge guarantee with a runtime missing-operation guard. That is not ADR 0019's selected non-optional operation projection. Split the direction/edge execution closures or use a discriminated generic helper so the edge closure receives captureSnapshot non-optionally and ordinary scroll cannot expose it; delete the widened type and runtime proof repair. Add a type-level/structural regression rather than only testing unavailable facts. Readiness also still lacks changed-path live evidence for the direct WebDriver and Limrun gesture/scroll facts and bindings. Run representative direct changed cells/refusals for both, or remove those provider migrations from this unit. Current deterministic gates are green, but native smoke lanes remain pending. Refresh the size figures after the final change (current diff is 76 files and CI reports about +11.4 kB unpacked). |
|
Addressed at 1. Scroll's edge proof is now staticYou were right that the previous shape gave up the guarantee. Fixed properly:
Both executors route their pass through a single Type-level regression added in
Restored byte-identical. 2. Direct provider evidence — I need a decision from youI checked whether I could run these locally rather than ask for spend. I cannot:
And I do not think "remove those provider migrations from this unit" is available, for two reasons — please tell me if you read either differently:
So the compliant paths are, as I see it:
I have not spent anything. Say which and I will finish it. 3. Size refreshedPR body now carries the post-rebase CI figures: +11.4 kB unpacked, +2.9 kB tarball, +3.0 kB gzip, 76 files — measured against For the record, CI on the previous head |
|
Bound shapes are derived, not restated. The two hand-written type BoundScrollDirection = BoundDeviceRuntime<
Extract<ScrollRuntimePlan, { kind: 'direction' }>['use']
>;
type BoundScrollEdge = BoundDeviceRuntime<Extract<ScrollRuntimePlan, { kind: 'edge' }>['use']>;Each binding now comes straight from its declared use, so the file no longer repeats what the use already says — and the non-optional Ceremony removed:
I kept The planted mutant still fails in the same two places after the simplification: demoting
On the provider item: I read "this requires authorization for cloud spend" as stating the constraint rather than granting it, so I have not spent anything. To be unambiguous — reply "authorized" and I will run one representative changed cell plus one refusal on BrowserStack/AWS Device Farm and on Limrun, recording exact head and results. If you would rather not spend on this unit, say so and I will record the two provider cells as an explicit accepted gap in the PR body and the tracker entry instead. |
71ac805 to
860ceda
Compare
|
Rebased onto Coverage was failing for a real reason, not flake. #1965 landed the per-package eager-closure probe (for this same tracker) and #1990 replaced the façade closure test with lint + budget rows. My branch pushed 16 rows over their pins. That probe is not in the local Most of it was a genuine loading-shape regression, so I fixed the imports rather than moving pins:
What genuinely grew, with the reason each row moved:
And two rows the ratchet asked me to lower, which this unit earns:
Three new rows added for the new export surfaces:
The scroll simplification from Provider evidence is still the one open item — I have not spent anything, and I am still holding for an explicit yes or no on cloud spend. |
|
Direct provider evidence recorded — run live at head
|
| Cell | Result |
|---|---|
scrollDirection (bound) |
Airplane Mode rect y 499 → off-screen; visible set became Display & Brightness / Home Screen & App Library |
performGesturePlan (bound, via swipe) |
"Flung"; Airplane Mode came back to y 499 |
performMultiTouchGesturePlan |
REFUSED — gesture pinch is not supported on physical iOS devices + "Two-finger gesture synthesis is iOS-simulator only — not available on physical iOS devices." |
That is exactly what webDriverMultiTouchCell declares: the provider owns physical devices only, so two-contact synthesis is denied while every other tier executes.
provider-limrun — Android instance
| Cell | Result |
|---|---|
scrollDirection |
Network & internet rect y 558 → off-screen |
performMultiTouchGesturePlan (gesture pinch 2.0) |
18.9% of pixels changed |
performGesturePlan (swipe) |
visible set Navigate up / Use location / Recent access → Tap to set up / Phone / Contacts |
provider-limrun — iOS instance
The deliberate behavior change, observed live. All four tiers refuse at admission now, each carrying the interactor's own wording verbatim:
| Cell | Message | Hint |
|---|---|---|
gesture pinch |
gesture pinch is not supported on physical iOS devices |
Limrun iOS direct sessions do not expose portable gesture execution yet. |
gesture pan |
gesture pan is not supported on ios |
same |
swipe |
gesture fling is not supported on ios |
same |
gesture drag |
gesture drag is not supported on ios |
same |
scrollDirection |
admitted — General rect y 13.7 → off-screen |
— |
That last row is the point of the split: Limrun's iOS session exposes scrolling directly, so scroll keeps working while the gesture tiers refuse. The message subjects also differ exactly as the unit's subject table says — multi-touch reports physical iOS devices, the other tiers report raw ios.
Billing hygiene
Baseline checked before allocating (no RUNNING sessions). All three sessions closed via agent-device close. Post-run AWS orphan check is empty; no provider device remains in any state directory. Each provider ran under its own isolated AGENT_DEVICE_STATE_DIR.
One honesty note: I confirmed Limrun teardown through the CLI close plus the absence of any Limrun device in devices, not through an independent Limrun-side listing — the API endpoint I tried did not return JSON. If you want a belt-and-braces check on their dashboard, that is the one thing I could not verify from here.
Remaining
platform-linux is the only owner still without a live run — there is no Linux target on this macOS host. Its bound execution is exercised end-to-end in request-handler-chain.test.ts against the real createLocalLinuxToolProvider drag primitive, and the CI Linux lane covers the runtime path.
Deterministic gates green; CI was 28/28 on this head before this run, which touched no code.
|
Still not merge-ready at
The AWS Device Farm and Limrun evidence does resolve the prior provider blocker and matches the migrated facts/bindings. Refreshing the stale size/file-count prose is non-blocking. |
Readiness check per
Suggested order: rebase onto current |
11fbd16 to
5216bdd
Compare
5216bdd to
d00bb6c
Compare
|
Re-reviewed exact head |
|
Summary
Move
gesture,swipe, andscrollto the request-bound platform runtime.Each request binds only the operations it can execute.
swipeuses the one-contact gesture plan with an admitted snapshot fallback, edge scrolling binds snapshot capture with scrolling, and the legacy scroll dispatcher and capability admission are removed. The result composes with the touch-runtime migration already onmain.Validation
Verified gesture and scroll behavior on Apple, Android, HarmonyOS, Web, Vega, AWS Device Farm, and Limrun before the rebase. The rebuilt head passes the full affected repository gate. Linux remains covered by contracts and provider scenarios; expanded live Linux gesture testing is intentionally deferred.