@@ -36,6 +36,9 @@ extension RunnerTests {
3636 /// (the default) to run inside the scroll idle-timeout + quiescence-skip wrapper; synthesis
3737 /// gestures (pinch/rotate/transform) pass `false` because RunnerSynthesizedGesture governs its
3838 /// own timing. Returns the captured timing and the action's outcome.
39+ ///
40+ /// NOTE: a new SYNTHESIS gesture must pass `idleTimeout: false` — the default `true` would wrap
41+ /// it in the scroll idle-timeout/quiescence-skip path and change its runtime behavior.
3942 private func performGesture(
4043 _ app: XCUIApplication ,
4144 idleTimeout: Bool = true ,
@@ -411,6 +414,8 @@ extension RunnerTests {
411414 }
412415 let touchFrame = resolvedTouchVisualizationFrame ( app: activeApp, x: x, y: y)
413416 do {
417+ // mouseClick throws (it has no RunnerInteractionOutcome), so it keeps raw measureGesture
418+ // and only routes the success payload through gestureResponse.
414419 var clickError : Error ?
415420 let timing = measureGesture {
416421 do {
@@ -580,6 +585,8 @@ extension RunnerTests {
580585 guard let direction = command. direction else {
581586 return Response ( ok: false , error: ErrorPayload ( message: " swipe requires direction " ) )
582587 }
588+ // swipe returns an optional frame (tvOS-only) rather than a RunnerInteractionOutcome, so it
589+ // keeps raw measureGesture and only routes the success payload through gestureResponse.
583590 var executedFrame : DragVisualizationFrame ?
584591 let timing = measureGesture {
585592 withTemporaryScrollIdleTimeoutIfSupported ( activeApp) {
0 commit comments