Files
Agent-System/.doc/ops/short-term/2026-09-28-refresh-task-state-recovery.md
T
weichen 5bc88faf4f docs(test): 记录刷新恢复的短测与前端构建
短测、前端测试和构建已通过。架构边界失败来自基线上的 coordinator 导入,浏览器与真实 PI 链路尚未在新代码上复验。
2026-09-28 06:14:35 +00:00

2.9 KiB

title, task_id, status, created, updated, owner, task_type, policy_revision, branch, worktree, base_dev_sha, write_scope, mutex, review_state, integration_state, deployment, cleanup, remote_sync
title task_id status created updated owner task_type policy_revision branch worktree base_dev_sha write_scope mutex review_state integration_state deployment cleanup remote_sync
刷新后恢复任务进度并纠正进度问询 refresh-task-state-recovery-2026-09-28 in_progress 2026-09-28 2026-09-28 Cursor fix AGENTS.md + agent-worktree-workflow @ 2026-09-21 fix/refresh-task-state-recovery-2026-09-28 .worktrees/refresh-task-state-recovery-2026-09-28 4c42d1bf74
internal
web
.doc
refresh-task-state-recovery pending branch_only not_loaded pending not_requested

刷新后恢复任务进度并纠正进度问询

用户目标与授权

用户发起调研报告后,聊天下方的任务进度在刷新页面时消失。随后两次询问「调研报告编写进度怎么样了」,没有看到调研报告生成。用户要求浏览器和服务器同时记下进行中的任务:刷新或重连后先显示本地缓存,再按会话和任务标识向服务器收敛。授权范围同时包含进度问句被当成新任务,以及 11:27 / 11:38 两次步骤被判空输出失败。

检索

  • 问题台账命中 ISSUE-20260928-task-run-replay-502(历史失败气泡重放 502)。本轮给重放补了退避,并保持终态 replay_only。
  • catalog overlap 探测无硬重叠。mutex 为 refresh-task-state-recovery,不占用 chat+coordinator 与 bizdev+docflow。

根因

  1. run_id 与阶段快照只在任务终态写回助手消息。窗口缓存只保存服务端窗口,刷新后没有锚点,进度卡片无法重放。
  2. 「调研报告编写进度怎么样了」含写动词「编写」和任务名词「调研报告」。matchTriggerTask 排在进度查询之前,于是又启动了 research。进度回复只读模板,不读真实 run。
  3. 步骤判定把 runner 的 Success=false 当成失败,即使盘上已经有正文。连接错误留下的文件仍可能是截断的,这条不能放宽。

修复

  • run 启动和绑定助手消息时写入 {run_id, task_status: running}。
  • GET /api/v1/tasks/runs?session_id=&active=1 只返回当前用户、当前会话里仍为 pending/running 的 run。
  • 浏览器 smdf_agent_workbench_v6_active_tasks 在窗口就绪后先画出进行中卡片,再用活跃列表收敛;终态删除缓存。
  • 有 run 锚点但还没有 task_status 和阶段快照时,消息保持 streaming_status。终态重放对 502 退避,401/404 不再试。
  • 疑问进度句让行 QUERY_PROGRESS。回复读取该会话最近一次 run 的真实状态。
  • 盘上已有非空正文,且失败原因不是传输/可重试错误时,步骤接受该文件。空 patch 不覆盖已有 output.md。

验证

见 测试报告。

五态

合入与 dev 重载完成后回写。当前仍是任务分支上的实现。