Files
DevFlow/docs/02-架构设计/无人值守可靠性专项设计-20261006.md

3.1 KiB
Raw Permalink Blame History

无人值守可靠性专项设计(2026-10-06 swarm 产出)

对象:会话侧挂机护栏四条 + 任务侧 V49 断点续跑收尾。标准:合理·兼容·优雅·可扩张。 侦察/设计产出:temp/V49断点续跑设计-20261006.md(详设)+ 本档(总纲与任务单)。

一、本质定性

挂机≠无人值守:挂机是行为模式,无人值守是它最危险的子场景(无人工兜底)。 今天三案例:09:48 桌面纠偏(在场,安全)/ 11:23 汇报失实(离机,自报≠事实)/ 09:51 跨端互斥(正确但话术吞因)。 结论:在场靠「过程可见」,离机靠「机制护栏」——本专项只做机制,不做提示词说教。

二、会话侧护栏四条(落点全部现成,最小增量)

H1 汇报附 git 实测

落点:chat.rs:919-941 单一发出点——组装 summary 前调 tools/git.rs exec_git_exit 取 branch/HEAD/未提交计数,追加「实测附录」段。 收益:飞书 watcher 与桌面任务卡零改动同享(单一事实源)。

H2 token 预算闸

落点:主 loop 抄 sub_agent.rs:346 round_budget_stop 三闸(轮数/token/挂钟),挂 agentic/mod.rs:1115 for 头部(tokens.total() 现成)。 超限走既有 emit_task_parked("token_budget")——前端词表已预留,零新契约。

H3 外部干预感知

落点:mod.rs:1119 轮首——loop_epoch 之外轻量 git 实测(HEAD 是否仍为自己上次记录),变更即 emit_task_parked("external_change")。 ConvStateStore.transition 唯一写口,补干预事件 emit。

H4 产出审计

落点:AiToolCallStarted/Completed 已全量双写 event_bus——加审计 subscriber(event_bus.rs:157)或挂 audit 落库点,不动 loop。

三、任务侧 V49(详见 temp/V49断点续跑设计-20261006.md)

核心选型:①防覆盖=独立单列 UPDATE+摘除 SET 列(单写者根除,非乐观锁)②list_parked 补唯一 IPC ai_list_recoverable(完备真相查询,兼飞书投影源)③续跑新命令 ai_recover_parked(进程死后复活与进程内流断路径不同,禁混一个命令)。 状态机:LoopState{Idle,Running,Parked}(持久层,跨重启真相)/ ConvState{Idle,Generating,Stopping,Error}(进程内)分层;写点收敛 6 处全走 set_loop_state 单方法。 新识别 P4:重启后 parked 会话无 DB→内存重建+重 spawn 路径——闭环最后一块。

四、与异步架构(13/14/16/17)兼容性

  • H1 单点改动:飞书/桌面零改动 ✔
  • H2 走既有 emit_task_parked:前端零新契约 ✔
  • 13 过程流式白得事件源:AiTaskProgress(每 5 轮,mod.rs:1119)已存在,飞书 refresher 补消费即可
  • 14 委托引擎的 watcher 与 H1/H3 同通道,零竞态新增 ✔
  • 16 纠偏注入与 H3 互补(人在场=16,离机=H3) ✔

五、实施序(4 批次,S/M/L/S 全可独立交付)

B1(S):H1 汇报 git 实测 + 看门狗口径修正(inflight 覆盖 spawn 窗口) B2(M):H2 token 三闸 + H4 审计 subscriber B3(M):V49 防覆盖定稿+回归单测 + ai_list_recoverable IPC + 桌面「可恢复」入口 B4(L):ai_recover_parked 重启恢复路径 + H3 外部干预感知