Reserve the answer slot first
答案位占位先行
When the answer isn't in yet, you can't be answer-first — "My read" is a placeholder slot (a shimmering "forming…") that Settle fills in when the model commits. Lifecycle: thinking → forming → settled.
答案没出来时不能 answer-first——「我的判断」是占位槽(微光"正在判断…"),模型提交时 Settle 填入。生命周期 thinking → forming → settled。
Motion vocabulary = streaming dynamics
动效词汇 = 流式动态
Surface a new read emerges · Sink a hypothesis is refuted and drops · Pulse a "change of mind" inflection flashes · Settle the answer firms up. Streaming is just playing these state transitions in real time.
Surface 新判断浮现 · Sink 某假设被推翻下沉 · Pulse "改主意"拐点闪现 · Settle 答案凝定。流式就是把这些状态迁移实时播放。
Stream events, not raw text
流事件,而非 raw text
Prefer streaming events/patches (node.add · confidence.update · refute · inflection · outcome.settle) over raw tokens or fragile partial-JSON. Events map naturally onto UI transitions and distinguish "tentative" from "committed."
推荐流式事件/补丁(node.add · confidence.update · refute · inflection · outcome.settle),而非 raw token 或脆弱的 partial-JSON。事件天然映射 UI 迁移,且能区分"暂定"与"已提交"。
Steady, not jittery
稳,不抖
Debounce updates to the "understanding" by semantic unit (not character by character), reserve space to prevent reflow (CLS), and respect prefers-reduced-motion. The raw stream can be fast; the understanding must be steady. Don't render an intermediate state that may get refuted as "fairly sure" too early.
对"理解"按语义单元防抖更新(非逐字),预留空间防回流(CLS),尊重 prefers-reduced-motion。原始流可以快,理解要稳。别把会被推翻的中间态过早渲染成"比较确定"。