I12 · 互动推演
SSE重连与重复事件
网络重传可以重复,界面投影必须去重并保持顺序。
合成教学数据 · 未运行真实模型静态推演与完整规格
I12 SSE重连与重复事件
关联章节:M06 · 交互类型:event-replay · 状态:提供完整状态/验收规格,UI待实现
教学目标
网络重传可以重复,界面投影必须去重并保持顺序。
初始状态
{
"server_events": [
1,
2,
3,
4,
5
],
"client_seen": [
1,
2
],
"after_seq": 2
}
操作控件
断开连接
收到重传帧2/3/3/4
更改游标
请求快照
重建UI投影
状态变化规则
按(run_id,seq)去重,不按文本内容去重。
游标只在事件应用成功后推进。
游标过旧或缺失事件范围时显示resync_required,加载快照再续接。
黄金案例与反馈
duplicates
输入:
{
"seen": [
1,
2
],
"frames": [
2,
3,
3,
4
]
}
期望:
{
"projection": [
1,
2,
3,
4
],
"after_seq": 4
}
同一事件只能应用一次。
stale-cursor
输入:
{
"after_seq": 1,
"minimum_retained_seq": 10
}
期望:
{
"status": "resync_required"
}
不能跳过缺口假装完整。
完成条件
重复帧不重复渲染
说明快照与流的版本边界
反馈层次
提交预测后显示结果;允许跳过预测但记录跳过,不阻止阅读
结果同时显示状态变化、原因与被拒绝动作;不是只给红绿灯
第一次错误给边界提示,第二次提供最小反例;参考推导始终可主动打开
重置恢复固定初始状态并保留历史尝试供用户手动清除
无障碍与静态替代
全部操作有原生button/input/select替代,不依赖拖拽
图与动画提供同步文字状态表;支持prefers-reduced-motion
状态改变用aria-live=polite摘要,不逐字朗读长日志
焦点不跳走;错误提示关联输入;颜色不是唯一编码
无JavaScript时直接展示初始输入、规则和黄金案例表,读者仍能完成纸面推演。状态动画仅作解释,不能成为获取答案的唯一途径。
持久化与重置
使用版本化键agent-course:1:I12,仅保存本地学习状态。支持单卡重置和全站清除;存储失败时以内存模式继续,不阻断阅读。
必须避免的误导
演示事件不是真实网络测量,刷新连接也不等于取消任务。
执行边界
纯本地教学状态机;不执行任意代码,不连接真实资金/模型/宿主Shell。