Skip to content

feat(design): waiting-state spectrum 1 — toast overshoot + streaming sweep (D6) - #471

Merged
jackwener merged 1 commit into
mainfrom
design/waiting-state-spectrum-1
Jul 3, 2026
Merged

feat(design): waiting-state spectrum 1 — toast overshoot + streaming sweep (D6)#471
jackwener merged 1 commit into
mainfrom
design/waiting-state-spectrum-1

Conversation

@jackwener

Copy link
Copy Markdown
Member

D6「等待感全谱」第一批(taste v1 §9 谱系):

  1. Toast 到达 overshoot:toast 此前零动画瞬间出现 → 240ms 上升+轻微过冲回落(Emil toast 档 200-300ms;reduced-motion 全局钳制生效)。退场动画需要 toast.tsx 的 dismissal 窗口(现在是瞬间卸载)—— 留组件级批次
  2. Composer 流式扫光:生成中 composer 壳顶边 1px status-running 流光(2.2s 循环)——「在干活」始终可见于用户注意力回归处
  3. 两个动画名进 chore(ui): design system refactor — close gap with Craft Agents #406 functionalMotion 白名单(带理由注释)

1696/1696;streaming-answer fixture 验证。

…sweep (D6)
First installment of the D6 full-spectrum decision (taste-skill v1 §9
'AI product feel' motion specs):
- Toast arrival overshoot: toasts previously popped into existence
with zero motion. 240ms rise + slight over-scale settle
(maka-toast-enter) reads as 'something arrived' — Emil's toast tier
is 200-300ms; the global reduced-motion clamp applies. Exit motion
needs a dismissal window in toast.tsx (instant unmount today) —
deferred to a component-level pass.
- Composer streaming sweep: while the assistant streams, a 1px
status-running light sweep crosses the composer shell top edge —
'working' stays visible exactly where the user's attention returns.
Functional infinite motion, status-token derived.
- Both animation names added to the #406 functionalMotion whitelist
with rationale; composer-inner gains the data-streaming attribute.
Desktop suite 1696/1696; streaming-answer fixture verified.
@jackwener
jackwener merged commit e8cf577 into mainJul 3, 2026
@jackwener
jackwener deleted the design/waiting-state-spectrum-1 branch July 3, 2026 09:51
jackwener added a commit that referenced this pull request Jul 3, 2026
)
Two queue items from the round-2 study:
Toast exit (completes #471's lifecycle): dismissal is now two-phase —
the entry is marked exiting, a 180ms shrink/fade plays (exit = enter
240ms x 75%, roadmap motion rule), then the entry unmounts. Toasts no
longer vanish mid-glance; exiting toasts drop pointer-events. Exit
keyframes whitelisted in the #406 functional-motion contract.
Lucide stroke governance (decision D5): call sites had EIGHT different
strokeWidth values (1.5/1.6/1.65/1.7/1.75/1.8/1.85/2) across 143
usages plus the default 2 wherever unspecified. One rule
(svg.lucide { stroke-width: 1.75 }) overrides every SVG presentation
attribute, unifying all glyphs at the distribution's modal weight with
zero call-site churn. icon-system-contract gains the positive
assertion; its size-hammer ban regex gets (?<!-) so the governed
stroke-width rule doesn't false-positive on "width".
Markdown parse caching (queue item) evaluated and DOWNGRADED: memoized
MessageBody already prevents re-parsing committed turns; the streaming
turn's re-parse is essential work. Noted here so it isn't re-proposed.
Desktop suite 1697/1697 (+1 contract).
Sign up for freeto 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

@jackwener