Skip to content

spec(AST-094): the edge band's claim applies to an element no wider than the band (FR18) - #8631

Merged
cixzhang merged 7 commits into
mainfrom
spec/ast094-fr18-band-width
Oct 27, 2026
Merged

cixzhang merged 7 commits into
mainfrom
spec/ast094-fr18-band-width

Conversation

@cixzhang

Copy link
Copy Markdown
Contributor

Decided (Cindy, D13a = c; spec:AST-094 DEC-13). Record accuracy.

User impact

A screen-edge back swipe on a narrow edge element starts as the record says, at 15 px with a pan-x claim. On a wider element the record no longer promises a per-touch claim the browser can't make; an in-band touch there decides at 10 px like every other claim.

Change: spec:AST-094 FR18

  • The band's pan-x claim and 15 px start apply where the screen-edge pan is attached to an element no wider than the band. On a wider element, whose touch-action can't claim per touch (DEC-13 rejects a whole-element claim), a touch in the band decides at FR19's 10 px.
  • The FR18–FR22 verification row gains both cases.

Writing rubric results

  • R1 present tense: pass. R2 research: none. R3 verification: row extended.
  • R4 rejected alternatives: none new. R5 change references: none. R6 open questions: none.

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 6ae2638

@vercel

vercel Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Oct 27, 2026 6:35am UTC

Request Review

@astracat-bot

astracat-bot Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Oct 27, 2026, 7:26 AM UTC

@github-actions github-actions Bot added the spec-auto-merge Auto-merge was enabled by the spec owner gate label Oct 27, 2026
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

PR Analysis Report

Previews ready: Storybook and Sandbox were built with this PR's docsite. CI evidence will be added when available.

View Storybook for this PR · View Sandbox for this PR

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Oct 27, 2026

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes requested: the new FR18 sentence is owner-approved direction, but other statements in spec:AST-094 still give every screen-edge pan a 15 px start, so the record now gives two answers for a pan on an element wider than the band. Please carry the narrow-element condition through them, record the ruling in the decision log with its date, and have an engineering owner approve the new head with /approve-spec.

  • FR17's parenthetical, FR19's screen-edge clause, DEC-13 and the FR18–FR22 row's older "claims … before 15 px" failure still apply 15 px everywhere, so the row passes no wider-element implementation.
  • "No wider than the band" tests width rather than position; "an element that lies within the band" keeps the claim off touches outside the band.

[Automated review]

Comment on lines +259 to +262
other claim (DEC-13). The band's `pan-x` claim and 15 px start apply where the
screen-edge pan is attached to an element no wider than the band; on a wider
element, whose `touch-action` cannot claim per touch, a touch in the band
decides at FR19's 10 px like every other claim.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This limits the 15 px start to an element no wider than the band, but FR17 (line 243: "a screen-edge pan at 15 px"), FR19 (line 280: "a screen-edge pan, whose band leaves the browser no horizontal scroll, decides within 15 px") and DEC-13 (lines 690-691: "decides there at UIKit's 15 px") still state it for every screen-edge pan. Qualifying each to the narrow element, and recording the ruling with its date in DEC-13 or a new decision (as FR2 asks of an owner decision that departs from a measurement), gives the record one answer.

Also, "no wider than the band" is a width test: a 30 px strip offset 20 px from the edge passes it and would claim pan-x for touches outside the band. "An element that lies within the band" avoids that.

| FR13 | Resolver unit tests and a server-render test | coarse and fine pointer; narrow, wide and short; server render; hydrating render | a component that answers the conditions differently, or a touch presentation in the server or hydrating render, fails |
| FR14 | Browser tests of a sheet over a scrolled list | scrolled and at its top | a midway handoff fails |
| FR15–FR17 | Recognizer unit tests on synthetic streams with explicit timestamps | exclusive, simultaneous, require-to-fail, nested; a watcher beside a claiming winner; a blocked main thread; a pan at 10 pt per axis | a wrong winner, a late deadline, or a translation that keeps the hysteresis, or a watcher failed or cancelled by a claiming winner fails |
| FR18–FR22 | Browser tests with real touch input (`spec:AST-013` FR10) | per-axis pans beside native scrolling, page zoom, cancelled touches, clicks after taps, keyboard activation, a modal scroll lock, a control that keeps its press through a drag; a still finger with sub-pixel jitter over a scroll view; a finger moved 9 px and 10 px straight, and (7, 7) and (8, 8) diagonally; a recognizer on an element whose author `touch-action` is narrower, including one without `pinch-zoom`; a screen-edge pan landing at 40 px and at 41 px from the edge, at 14 px and 15 px of travel, and a horizontal scroll that starts outside the band; a screen-edge pan on an element no wider than the band, and on a wider element | a ghost click, a scroll or zoom blocked other than by the author's `touch-action`, or a cancelled unowned touchmove outside FR19's two exceptions, a tap cancelled by sub-pixel movement or by under 10 px of travel, a scroll that does not take the touch at 10 px, or a derived `touch-action` wider than the author's, a screen-edge pan that claims outside its band or before 15 px, or has not claimed at 15 px, or an author scroll outside the band that is blocked, a band claim of `pan-x` on an element wider than the band, or a 15 px start there, fails |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The older failure in this cell, "a screen-edge pan that claims outside its band or before 15 px, or has not claimed at 15 px", still covers a pan on a wider element, which FR18 now has decide at 10 px, while the new "a 15 px start there" fails it at 15 px, so no wider-element outcome passes. Limiting the older clause to an element no wider than the band and adding "or, on a wider element, has not claimed at 10 px" pins the new start.

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 4133359

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No changes needed: the narrowed FR18 rule is approved by an engineering owner for this revision and now reads the same in FR17, FR19, DEC-13, the new DEC-22 and the FR18–FR22 verification row, which resolves the earlier review's requested changes. Nothing else is needed from this review. As a heads-up for the implementation, the open screen-edge recognizer in #8061 currently decides its edge zone by width alone, while FR18 now requires the host to lie within the band.

[Automated review]

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec da295f6

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes requested: the narrowed FR18 rule is approved by an engineering owner for this head, but the merge of main dropped two phrases that #8628 added to the FR18–FR22 verification row, so FR19's scroll-edge exception (a sheet's pull from a list) no longer has its listed states or failure. Please restore "a sheet's pull from a list at its top, and from a list scrolled away from its top" to the representative states and "or a scroll-edge pan that cancels a move a scroller could scroll, or begins before 10 pt" to the failure expectations, beside the new band cases. A new commit needs a fresh approval, so an engineering owner then comments /approve-spec <full head SHA> on the new head; the author may do so as an engineering owner.

[Automated review]

| FR13 | Resolver unit tests and a server-render test | coarse and fine pointer; narrow, wide and short; server render; hydrating render | a component that answers the conditions differently, or a touch presentation in the server or hydrating render, fails |
| FR14 | Browser tests of a sheet over a scrolled list | scrolled and at its top | a midway handoff fails |
| FR15–FR17 | Recognizer unit tests on synthetic streams with explicit timestamps | exclusive, simultaneous, require-to-fail, nested; a watcher beside a claiming winner; a blocked main thread; a pan at 10 pt per axis | a wrong winner, a late deadline, or a translation that keeps the hysteresis, or a watcher failed or cancelled by a claiming winner fails |
| FR18–FR22 | Browser tests with real touch input (`spec:AST-013` FR10) | per-axis pans beside native scrolling, page zoom, cancelled touches, clicks after taps, keyboard activation, a modal scroll lock, a control that keeps its press through a drag; a still finger with sub-pixel jitter over a scroll view; a finger moved 9 px and 10 px straight, and (7, 7) and (8, 8) diagonally; a recognizer on an element whose author `touch-action` is narrower, including one without `pinch-zoom`; a screen-edge pan landing at 40 px and at 41 px from the edge, at 14 px and 15 px of travel, and a horizontal scroll that starts outside the band; a screen-edge pan on an element within the band, and on one that reaches beyond it | a ghost click, a scroll or zoom blocked other than by the author's `touch-action`, or a cancelled unowned touchmove outside FR19's three exceptions, a tap cancelled by sub-pixel movement or by under 10 px of travel, a scroll that does not take the touch at 10 px, or a derived `touch-action` wider than the author's, a screen-edge pan that claims outside its band or before 15 px on an element within the band, or has not claimed at 15 px, or an author scroll outside the band that is blocked, a band claim of `pan-x` on an element that reaches beyond the band, or a 15 px start there, fails |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The merge of main dropped two phrases #8628 added to this row for FR19's scroll-edge exception, which this head still grants at lines 277-282: the state "a sheet's pull from a list at its top, and from a list scrolled away from its top" and the failure "or a scroll-edge pan that cancels a move a scroller could scroll, or begins before 10 pt". Keeping both beside the new band cases restores the row's coverage of the sheet pull; the states would end "…; a screen-edge pan on an element within the band, and on one that reaches beyond it; a sheet's pull from a list at its top, and from a list scrolled away from its top", and the failures "…, or a 15 px start there, or a scroll-edge pan that cancels a move a scroller could scroll, or begins before 10 pt, fails".

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec a5ab305

@cixzhang

Copy link
Copy Markdown
Contributor Author

/approve-spec 601ad4b

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No changes needed: the narrowed FR18 band rule is approved by an engineering owner for this head, and FR17, FR19, DEC-13, the new DEC-22 and the FR18–FR22 verification row now state it consistently, with the sheet-pull states and scroll-edge failure back in the row. One optional fix before merging: the title and the body's Change bullet still say "no wider than the band", while the record tests position ("lies within the band"), and the title becomes the squash commit subject.

[Automated review]

@cixzhang
cixzhang merged commit 46353fc into main Oct 27, 2026
54 checks passed
vjeux added a commit to vjeux/astryx that referenced this pull request Oct 27, 2026
…than the band (spec:AST-094 FR18, DEC-22)

FR18 as amended in meta#8631 (DEC-22): the band's pan-x claim and 15 px start
hold only where the screen-edge pan is attached to an element within the
band; on an element that reaches beyond it, whose touch-action cannot
claim per touch, a touch in the band decides at FR19's 10 px like every
other claim. This restores the 10 px decision 3d85c30 removed and keeps
15 px on an element within the band. The cases pin DEC-22 both ways (a wide
element with a touch at x=4 begins at 10, an in-band strip at 15, and from
several edges at 10 on a wide element); the 10 px cases fail on 3d85c30.
@github-actions
github-actions Bot deleted the spec/ast094-fr18-band-width branch October 28, 2026 06:17

This branch was successfully deployed

1 active deployment
Preview — 601ad4b8 Deployed Oct 27, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot. spec-auto-merge Auto-merge was enabled by the spec owner gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant