Skip to content

spec(AST-105, AST-108): glides follow the theme's character and tempo; the measured spring becomes character 'native' - #9663

Open
ernestt wants to merge 1 commit into
mainfrom
spec/glide-follows-character
Open

ernestt wants to merge 1 commit into
mainfrom
spec/glide-follows-character

Conversation

@ernestt

@ernestt ernestt commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Exact decision needed

Which motion times the animated-layout glide (the content after a size change, with the changed element, the in-place swap and the edge reveal) under a theme's motion knobs. Today spec:AST-105 (animated layout) FR4 plays the measured springs.settle role under every pointer and every character, so a theme's character and tempo never reach its glides, and a mouse gets a spring that keeps moving after the CSS motion around it has landed.

Existing authority searched

Decision

  • The glide, the swap and the edge reveal play --ease-move over --duration-medium-min under every pointer, so character (crisp, standard, expressive) shapes the curve and tempo scales the duration. At the defaults that is cubic-bezier(0.24, 1, 0.4, 1) over 310 ms.
  • character gains 'native'. The CSS tokens and spring bounces keep their 'standard' values, and a motion that offers both a curve and a measured spring plays the spring: today, the glide, swap and edge reveal on springs.settle, at the theme's tempo.
  • Unchanged: the opt-in handle (FR1, FR2), every pointer (FR5), Reduce Motion (a cross-fade under a coarse primary pointer, an immediate change otherwise), one clock with the changed element (spec:AST-108 FR4a), the measured springs of touch presentations, and every other motion.
  • Compatibility: no API is removed. Opted-in glides get faster at the defaults; a theme that wants today's timing sets character: 'native'.
  • Owner: cixzhang for all four records. Each new DEC-2 names her as decider and takes effect with her approval.

Rejected alternatives

  • Keep springs.settle as every theme's glide: a theme's character and tempo never reach its glides, and with a mouse the glide lands long after the CSS motion around it.
  • A separate knob for spring motion: a second axis for a choice character already makes.
  • 'instant' as a character: whether to animate is already the opt-in handle per area, or reducedMotion: 'always' per theme; character stays how lively motion feels.

Claim scope and non-goals

  • Touch presentations (sheets, menus, alerts) keep their measured springs at every character; spec:AST-094 is unchanged.
  • No new token, no change to which elements glide (Coverage), and no implementation in this pull request.

Evidence and implementation relationship

Measured in Chrome on the current canary build, with the glide opted in on Collapsible, TreeList and Table row expansion, and on the SideNav rail: the content after the change reaches 90% of its travel at about 314 ms, settles within half a pixel at about 580–660 ms, and keeps animating until about 765 ms. The theme's CSS transitions around it take 175–550 ms. --ease-move over 310 ms reaches 90% at about 123 ms and lands at 310 ms.

Implementation follows in a separate pull request once this is approved: the animated-layout module reads the theme's move curve and duration (the animator already plays any closed-form curve, so the running-glide carry-over in Coverage stays), and the motion knobs add 'native'.

Writing rubric results

  • R1 narration: none in the requirements. The Current-state impact bullets name the gap between the records and the code, and spec:AST-108 DEC-2 states that it amends DEC-1's three steps, as DEC-1 states what it supersedes.
  • R2 research in the record: none; the timing measurements stay in this description.
  • R3 evidence naming a change: none.
  • R4 rejected alternatives over one line or outside a decision: one line in each new DEC-2.
  • R5 pull request or issue references remaining: none in the records.
  • R6 ruled open questions still listing options: none; both records' open questions are unchanged.

Scope

  • This PR contains specification records only.
  • It records observable behavior and preserves equivalent internal implementations.
  • Any named internal mechanism is intentionally public, names its dependent caller/system, and explains why an equivalent implementation would not satisfy the contract.
  • Verification states the evidence layer and failure signal without prescribing CI job/workflow topology.
  • It records one intentional durable decision, not a rescue for a separable tagalong.
  • The canonical knowledge owner, affected current claims, and overlapping open work are named; any ownership collision is resolved or called out for human decision.
  • Adjacent API, visual, accessibility, composition, and implementation facts remain outside scope unless this exact decision depends on them.
  • Public text and artifacts contain no internal Meta context.

Validation

  • pnpm check:knowledge: "Knowledge templates and records are aligned."
  • Prettier on the four records
  • git diff --check: clean

…; the measured spring becomes character 'native'

The animated-layout glide, swap and edge reveal play --ease-move over
--duration-medium-min under every pointer, so a theme's character and tempo
reach them like every other move. character gains 'native', which keeps the
standard tokens and bounces and plays the measured springs.settle role where
a motion offers both a curve and a spring. SideNav FR6 and AppShell FR17 now
defer to AST-105 FR4 for the motion.
@vercel

vercel Bot commented Nov 3, 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 Nov 3, 2026 12:22am UTC

Request Review

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

astracat-bot Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
❓ Needs maintainer input (for maintainers only) Nov 3, 2026, 12:34 AM UTC

@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Nov 3, 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.

Approval of this spec change waits on an engineering owner's decision. It intentionally rewrites current claims (AST-105 FR4's springs.settle glide, AST-108 FR1's three character values, SideNav FR6 and AppShell FR17), and no engineering owner has approved this head yet. An engineering owner records the decision by commenting /approve-spec <full head SHA> on this pull request; the author may do so if they are an engineering owner. That decision should also settle whether touch glides leave the measured spring by default, and whether 'native' reaches anything beyond the glide, swap and edge reveal.

Required changes, whatever the decision:

  • AST-108 FR5 and its first Current-state impact bullet still say existing themes render exactly as before, though under the new FR4 every theme without 'native' changes its glides, SideNav rail collapse, AppShell content swap and resizable LayoutPanel collapse; name that exception and 'native' as the way back.
  • architecture:theme-authoring-contract INV15 still lists character as crisp, standard, expressive; amend it in this pull request, as SideNav FR6 and AppShell FR17 already are, so two current records do not disagree.

[Automated review]

Comment on lines +165 to +169
- `character` gains `'native'`. The animated-layout glide, swap and edge
reveal play `--ease-move` over `--duration-medium-min` at every other
character (`spec:AST-105` FR4), and the motion, easing-token and theme
docs, the theme template, the theme-authoring guide and
`architecture:theme-authoring-contract` describe the fourth value (FR7).

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 bullet changes every theme's animated-layout motion, but FR5 (lines 121–123) and the first impact bullet (lines 151–152) still say existing themes render exactly as before. Name the exception there, with character: 'native' as the way to keep today's spring.

Comment on lines +65 to +70
- `character` is `'crisp'`, `'standard'` (default), `'expressive'`, or
`'native'`; it picks the entrance and move curves and the spring bounce.
`'native'` keeps the `'standard'` curves and bounce, and a motion that
plays a curve at every other character plays its measured spring instead,
such as the animated-layout glide (`spec:AST-105` FR4). A continuous
bounce is not offered;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

architecture:theme-authoring-contract INV15 still lists character as crisp, standard, expressive. Amend it in this pull request so the two current records agree. "Such as the animated-layout glide" also leaves open which other motions 'native' reaches. Naming them (today the glide, swap and edge reveal) would settle it.

@cixzhang

cixzhang commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Updated: Decision from Cindy (via her agent): glide timing approved. Under Cindy's gesture rule, a glide is non-gesture motion and plays the theme's motion tokens, so please drop the 'native' character from this PR and keep the glide timing change. A 'fluid' character will follow in a separate spec as a full token preset.

This branch was successfully deployed

1 active deployment
Preview — cd365d06 Deployed Nov 3, 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. needs:spec-owner-review Current knowledge records await owner approval

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants