Skip to content

030 · Studio chat 内 Claude 后台 Workflow 随 agent 进程退出被杀 — 无 drain/keepalive,resume 也活不过下一轮 #96

Description

@nanxingw

Severity: HIGH · triage: needs-triage · 记录日期: 2026-07-15
(docs-only tracker 存档:docs/issues/030-studio-chat-kills-background-workflow.md,commit eadb203

现象(2026-07-14 23:22 起,work w_20260714_2317_f24 复现两次)

Studio chat 里的 Claude agent 用 Workflow 工具启动后台多 subagent 编排(run wf_296ee812-c04:6 research + 12 verify + 1 synthesize)。预期:主 turn 结束后后台任务继续跑,完成时以 task-notification 回调。实际:

时间线 结局
1 23:22 启动 → 23:32 journal 最后写入 下一 turn 收到 status=stopped:"may have been running when the previous Claude Code process exited"。research 完成 5/6,verify 完成 1/12
2 resumeFromRunId 续跑 同样死法。journal 终态 48 行(36 started / 12 results):research 6/6,verify 1/12,synthesize 未启动

两次都是 turn 结束后不久 agent 进程退出,后台任务随进程死亡;不是 workflow 脚本错误(journal 里已完成 agent 的结果全部正常)。

根因假设(未证实,待 diagnose)

  1. Studio 的 agent session 生命周期(ws-bridge / killSession / per-message respawn)在轮次之间回收 claude 进程,后台任务被连带杀死。
  2. 回收前没有 drain:不等待、不迁移、不持久化 harness-tracked background tasks,也不通知任何人。

影响

  • .claude/rules/e2e-testing.md Hard rule 0 要求 E2E 必须经 Workflow 多纬 subagent 编排——该纪律在 Studio chat 环境里事实不可执行。
  • 深度调研/多 agent 任务只能退化为主轮内同步执行(占住整轮)。

Workaround(已实操验证)

从 journal.jsonl 收割已完成 agent 的缓存结果 → 主轮内 run_in_background:false 同步 fan-out 补跑剩余 agent。

Acceptance criteria

  • 预设测试先行落盘并证红(session 生命周期单测:存在运行中后台任务时走 drain/持久化分支而非直接 kill)
  • chat agent 进程存在运行中后台任务时不被立即回收:keepalive 至 drain 完,或优雅终止并持久化为可 resume 状态
  • 任务被终止时向 chat 流广播用户可见事件(配合 031 · Studio 前端对 agent 后台 subagent/Workflow 零可见性 — 无状态、无进度、被杀无提示 #97 前端可见性)
  • E2E(Workflow 多纬编排):chat 内启动后台 workflow → 结束 turn → 下一 turn 收到完成通知且 journal 含全部 results

Code-area hints

  • src/server agent session / ws-bridge 生命周期(killSession、per-message spawn 路径)
  • 历史参考:chat model-tier switcher 曾用 killSession(alias 切换即杀 session)——同一机制可能就是凶手

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions