49d19d9b59
HITL 持久化中断后审批可跨重启、等数小时,但前端 ApprovalBar 只绑定内存里的 live run:用户一刷新页面/重开 app,run 清空 → 审批条消失 → 那个 waiting 任务 再也点不到批准(历史页只读回放、无审批入口)。这是 durable 模型下的真实 UX 洞。 - App: 抽出 attachRun(状态轮询 + exec 流 + token 流),新发起与恢复共用。 - 登录后探测 waiting 任务并 attachRun 挂回 → 全局审批条重现、可批准/拒绝, 续跑 token 经重订阅的流回显(网关从 Redis 回放 exec 补回审批摘要)。 - 坑:StrictMode(dev)双调用 effect,原 cancelled 守卫会把首次 async 的恢复误吞 (restoredRef 已保证只跑一次,App 是根组件不卸载)→ 去掉 cancelled。 真实 UI 验证(preview 驱动 :5173):提交 HITL 任务→waiting→刷新页面→审批条 自动重现→点批准→从 checkpoint 续跑→done,真实出稿 + 评测 1.00。tsc + vitest 绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>