- speak 兜底定时器先于 speak 注册 + try/catch:speak 抛异常不再导致 剧情永久卡死(估时/forceNext 未注册的失败模式) - speak onEnd 与估时闭包加行号守卫(lineIndex===i && !ended):迟到的 上一句 onEnd 不再提前放行当前句 - SceneTheater 估时封顶 20s(与 MAX_LINE_MS 对齐),注释同步 v2.2 语义 - plan Task 10 更新为实际实现(SetServerRoot + /static 挂载) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>