Skip to content

refactor(capture): carry the gesture no-effect fact on the snapshot tree - #2868

Closed
thymikee wants to merge 2 commits into
fix/2853-unsettled-selector-interactionsfrom
refactor/2856-gesture-no-effect-stamp
Closed

thymikee wants to merge 2 commits into
fix/2853-unsettled-selector-interactionsfrom
refactor/2856-gesture-no-effect-stamp

Conversation

@thymikee

Copy link
Copy Markdown
Member

Summary

Closes #2856. Stacked on #2864. Review only the top commit until #2864 merges.

A proven no-effect gesture (gestureNoEffect, #1600) reached the agent only through capture annotations. selector-capture-runtime and the interaction capture drop annotations, so only snapshot ever showed the warning.

  • The fact now rides SnapshotState.gestureNoEffect. It is stamped in resolvedPostGestureCapture beside unsettledGesture, and the annotation channel for it is gone.
  • withGestureNoEffectWarning and src/daemon/gesture-no-effect.ts are deleted.
  • Every route derives the disclosure from the stamp:
  • formatGestureNoEffectWarning now takes a PostGestureAction, the same as the unsettled formatter.

12 files. Production is +58/−56, which is not a net deletion: the 21-line wrapper is gone, but the new read and interaction disclosure costs about the same.

Validation

Tested SHA e7dc1f8318. pnpm check:affected --run: passed (852 test files).

  • is-runtime.test.ts: an is visible after a scroll that moved nothing carries gestureNoEffect and the warning. The test fails when the stamp line is removed, and when the disclosure passes undefined for the fact.
  • snapshot.test.ts: the snapshot warning is now derived from the stamp.
  • Live run on an iOS 26.2 sim with the fixture app: Catalog at the top, scroll up, then is exists or get text 'label="Catalog scroll: top"' --json.

…actions

A selector click, press, or fill right after a scroll whose surface never
settled missed on that moving tree and answered a plain selector_not_found.
The request's capture proof now records the unsettledGesture fact beside the
foreground repair, first fact wins, and the interaction route discloses both
on every response it builds.

Closes #2853
A proven no-effect gesture reached the agent only through capture
annotations, which selector reads and interactions drop, so is, get, and
find never showed it. The fact now rides SnapshotState.gestureNoEffect
beside unsettledGesture and every route derives its disclosure from that
stamp. withGestureNoEffectWarning and its annotation channel are gone.

Closes #2856
@github-actions

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
Installed (including dependencies) 4.80 MB 4.80 MB +194 B
Package (unpacked) 4.79 MB 4.79 MB +194 B
Package (download) 1.43 MB 1.43 MB +17 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 27.3 ms 27.4 ms +0.1 ms
CLI --help 81.1 ms 81.8 ms +0.7 ms

@github-actions

Copy link
Copy Markdown
PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://callstack.github.io/agent-device/pr-preview/pr-2868/

Built to branch gh-pages at 2026-09-24 07:56 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

@thymikee

Copy link
Copy Markdown
Member Author

Folded into #2864. The review unified unsettledGesture and gestureNoEffect into one postGestureOutcome field, which changes #2864's public shape, so both issues close there.

@thymikee thymikee closed this Sep 24, 2026
@thymikee
thymikee deleted the refactor/2856-gesture-no-effect-stamp branch September 24, 2026 08:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant