refactor(contracts): additive capability facts on the gesture family - #2460
Merged
thymikee merged 2 commits intoSep 10, 2026
Merged
Conversation
Additive capability facts on the gesture family (#2443, family 2). gestureRuntimeOperationFacts took one fact per tier, and it had five: plan, directionalFling, multiTouch, targetAuthoredDrag, viewport. The tiers split exactly where an owner's mechanics split — no tier is one every owner serves, and several owners serve none — so every tier is optional now and `unsupported` names the denial an omitted tier reports. The type still refuses a call that names no denial at all: omission is a classified refusal, never an unclassified tier and never an implied success, and an owner cannot leave the family blank. An owner states a tier only to say something the family denial does not. Web refuses every tier with one cell and names only the drag tier whose wording came from a retired closure. Vega names the two tiers whose refusals came from separate closures. Limrun's session-less and iOS branches name one denial each, where each wrote five. The owners that serve gestures keep naming what they serve: the win is the next tier, which an owner can now ignore entirely. Fact values are unchanged: every owner's gesture cells are byte-identical, and the family's own test pins an omitted tier reporting the stated denial verbatim, an owner that names nothing answering with the exhaustive shape, and the freeze.
Size Report
Startup median (7 runs, lower is better):
|
Review follow-up on the gesture family. Apple refuses gestures for two reasons depending on the leaf: watchOS and visionOS have no gesture surface at all, while every other leaf without a touch kind is the wrong device kind. One constant cannot be truthful for both, and the family denial is what the first unnamed tier will report, so it now follows the leaf. The Limrun gesture call collapsed to one source for the session-less branch, so pin the reason and hint it reports there rather than availability alone, and cover the directional-fling tier the loop had skipped.
Member
Author
thymikee
added this pull request to stack #2466
September 10, 2026 14:33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Additive capability facts on the gesture family, the second family in #2443. Stacked on #2459.
gestureRuntimeOperationFactstook one fact per tier, and it had five:plan,directionalFling,multiTouch,targetAuthoredDrag,viewport. Gesture tiers split exactly where an owner's mechanics split — no tier is one every owner serves, and several owners serve none — so every tier is optional andunsupportednames the denial an omitted tier reports. A call naming no denial is still refused: omission is a classified refusal, never an unclassified tier and never an implied success.An owner states a tier only to say something the family denial does not. Web refuses every tier with one cell and names only the drag tier, whose wording came from a retired closure; Vega names the two tiers whose refusals came from separate closures; Limrun's session-less and iOS branches name one denial each where each wrote five. The owners that serve gestures keep naming what they serve — the win is the next tier, which an owner can now ignore.
Measured
Replayed addition:
performEdgeSwipePlan, one tier named by exactly one owner (Apple), applied identically to this PR's base and to this head.unsupported+ optional tiers)The five the new shape forces are the addition and the implementing owner. The ten that disappear are the seven non-implementing owner cells, the shared unavailable record, and two cell-enumerating test doubles. No test asserting a non-supporting owner's unavailable reason was edited.
Stop rule: 10 avoided >= 2 -> gesture merges. Clipboard follows.
Refs #2443
Validation
pnpm check:affected --rungreen on the base and on head; provider integration and coverage are GitHub's to report.