Repository navigation
Closed
Labels
V1.0Milestone v1.0; mirrors the GitHub milestoneMilestone v1.0; mirrors the GitHub milestoneenhancementNew feature or requestNew feature or requestready-for-agentFully specified, ready for an AFK agentFully specified, ready for an AFK agent
Milestone
Description
Parent and scope
- Related orchestrator: [Retired] Orchestrator: V1.0 PersonaBot Activity、Presence 与 Output Events #119
- Downstream consumers: UI Tracer: Channel composer island 与 PersonaBot activity region #129, Bot activity: shared snapshot and live DM presence #120, Bot activity: safe tool summaries and effects #122, Group activity: live facepile, safe summaries and details #124
- Milestone: v1.0
Objective
为 BotHarness Client 建立唯一的、application-defined 产品级 Motion Preference。用户不必完全服从操作系统设置,而是在 BotHarness 设置中选择以下三态:
- Follow system(默认):继承 prefers-reduced-motion,并在系统设置变化时实时更新。
- Reduce motion:在 BotHarness 内强制减少动效。
- 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
- Settings 中提供三态 selector 和一个 bounded motion preview/status sample,用来验证 effective policy、即时更新与可访问 fallback。
- preview 只验证 Motion Policy,不伪造 PersonaBot Activity Projection。
- 本票不接入 sidebar avatar、Channel composer 或 Group facepile;这些由 Bot activity: shared snapshot and live DM presence #120/Bot activity: safe tool summaries and effects #122/Group activity: live facepile, safe summaries and details #124 消费共享 API。
- 为避免与当前 M3: Channel 移动(原生拖拽跨 section + 右键「移动到」子菜单) #56 后续工作冲突,本票不修改 bot-sidebar 的排序/拖拽/Channel row。后续 consumer ticket 在各自 worktree 接入。
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
- 设置 UI 提供 Follow system / Reduce motion / Full motion,默认 Follow system。
- preference 在刷新和 Host restart 后保持,并且是 BotHarness Client 的单一 authority。
- Follow system 响应 prefers-reduced-motion 的初始值与运行时变化。
- Reduce motion 在 OS 为 no-preference 时仍关闭 BotHarness preview 的连续/空间动效。
- Full motion 在 OS 为 reduce 时仍允许完整 preview 动效,且是用户显式选择。
- UI Tracer: Channel composer island 与 PersonaBot activity region #129/Bot activity: shared snapshot and live DM presence #120/Bot activity: safe tool summaries and effects #122/Group activity: live facepile, safe summaries and details #124 可通过同一 API 获得 effective policy,不自行查询或持久化偏好。
- light/dark、键盘操作、screen reader、listener cleanup 与三种 preference × 两种 system preference 有 focused tests。
- 真实 web-dev Settings 中切换三态时,preview/status sample 与可访问文案立即同步;不依赖未来 Activity UI。
- 本票不修改 bot-sidebar 的拖拽、排序或 Channel row implementation。
References
- Beautiful UI Loading State: https://www.beautifului.dev/r/loading-state.json
- Beautiful UI Thinking State: https://www.beautifului.dev/r/thinking-state.json
- Prompt Bar reference: https://www.beautifului.dev/r/prompt-bar.json
- glimm 当前是 WebGL transition dependency;任何采用都必须先完成 registry/source 与 bundle external contract 审计,不作为本票默认依赖。
Non-goals
- 不改变 PersonaBot Activity Projection 或 Session ownership。
- 不为不同 activity 引入 configurable priority。
- 不发布 Host/Cordis motion event。
- 不实现每个组件自己的 reduced-motion toggle。
- 不提前实现 UI Tracer: Channel composer island 与 PersonaBot activity region #129/Bot activity: shared snapshot and live DM presence #120/Bot activity: safe tool summaries and effects #122/Group activity: live facepile, safe summaries and details #124 的消费界面。
Metadata
Metadata
Assignees
Labels
V1.0Milestone v1.0; mirrors the GitHub milestoneMilestone v1.0; mirrors the GitHub milestoneenhancementNew feature or requestNew feature or requestready-for-agentFully specified, ready for an AFK agentFully specified, ready for an AFK agent
Type
Projects
- StatusShow more project fieldsDone
Activity
DoodleBears commentedon Sep 21, 2026
Completed by #136. The product-level System / Reduce / Full motion preference, shared effective policy, settings preview, and regression coverage are now merged.