Skip to content

UI Foundation: BotHarness motion preference(System / Reduce / Full) #128

Closed

Description

@DoodleBears

Parent and scope

Objective

为 BotHarness Client 建立唯一的、application-defined 产品级 Motion Preference。用户不必完全服从操作系统设置,而是在 BotHarness 设置中选择以下三态:

  1. Follow system(默认):继承 prefers-reduced-motion,并在系统设置变化时实时更新。
  2. Reduce motion:在 BotHarness 内强制减少动效。
  3. Full motion:用户显式允许完整动效,即使操作系统当前偏好 reduced motion。

这与 light / dark / follow system 的语义一致。DSH SessionEvent、PersonaBot Activity Projection 和 Cordis Event 不携带该偏好;它只是 Human-owned UI preference。

Authority and UI contract

  • 通过实现时已验证的 DSH Client settings seam 持久化;不得让每个组件各建 localStorage 或独立开关。
  • Client 暴露一个共享 motion policy/hook,所有 BotHarness 动效只消费其 effective policy。
  • 只有共享 policy 读取 prefers-reduced-motion;Avatar、Loading、Thinking、composer、facepile 等组件不得各自直接建立第二 authority。
  • 设置变更即时生效,不需要刷新;Plugin dispose 时移除 media-query/listener。
  • Full motion 只覆盖偏好,不覆盖能力与安全降级:WebGL 不可用、渲染失败或资源限制时仍须无损降级。
  • 所有颜色、间距、控件和状态表达遵循 dsh-ui token/primitives/native inset contract。

Independent tracer boundary

本票必须能在 #129/#120 之前独立关闭:

Reduced presentation rules

Reduce motion 下:

  • 禁止持续 Blobatar deformation、循环 shimmer、bounce/dots、sweep、parallax 和自动空间重排。
  • 保留静态 Activity Frame、状态图标、ARIA 文本和可见的 working/thinking/waiting/attention 文案。
  • 状态切换可使用即时更新或最小 opacity transition,但不能依赖动画才能理解。
  • Loading elapsed time 和进度信息可以继续更新,但不得制造持续位移动画。
  • Group facepile 顺序稳定,不用动画重排成员。

Acceptance criteria

References

Non-goals

Activity

  1. added this to the v1.0 milestone on Sep 21, 2026
  2. DoodleBears commented on Sep 21, 2026

    @DoodleBears
    ContributorAuthor

    Completed by #136. The product-level System / Reduce / Full motion preference, shared effective policy, settings preview, and regression coverage are now merged.

  3. added
    V1.0Milestone v1.0; mirrors the GitHub milestone
    on Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    V1.0Milestone v1.0; mirrors the GitHub milestoneenhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions