Files

3.9 KiB

独立决策会话接入

本流程由主控执行。仅对真实待决策事项建立卡片与宿主会话;隔离 API 测试不证明真实会话、模型往返或归档已通过。

  1. 在正式看板创建有依据的决策,关联唯一任务,写明简介、完整背景、全部选项和影响。保存创建回执。没有真实事项时不要为验收制造生产决策。
  2. 先为本决策规划本机私有有限配置路径。读取宿主项目/会话清单,确认没有既有绑定,再用宿主正式创建工具建立独立真实会话。使用 assets/decision-consultation-prompt.txt 生成角色说明,替换真实决策 ID 与计划配置路径;不指定未获人类选择的模型。配置尚未准备时,初始化只等待接入,不读取普通控制凭据或生成演示回复。保存宿主返回的真实 thread ID、执行主机和工作目录。
  3. 注册 role=decision、wp=<decision_id> 的看板 session;核对宿主真实会话身份后调用 bind-session。一个决策只绑定一个真实会话,不复用入口或执行会话。保存绑定回执;数据库中的占位 ID 不是宿主创建证据。
  4. 仅绑定后,使用普通控制连接调用该决策的 consultation-credential,把返回 token 直接写入本机私有文件,不打印、不传给聊天、不存源码。写一个私有配置,形如 {"decision_id":"<真实ID>","control":{"url":"http://<已授权看板域名>:8796","token_file":"<本机私有token路径>"}}。该配置只给对应咨询会话;普通控制连接和模型认证留在执行器,不分发给会话。签发响应未知时先核查既有私有回执和文件,不反复轮换已交付凭据。
  5. 本机桥接私有配置可启用 decision_fleet: {"enabled":true,"runtime_root":"<私有目录>","max_active":3}。fleet 从正式 bindings 接口读取已绑定会话,在其实际目录运行原有 worker/mirror。它不创建模型会话、不归档、不切模型,超过上限保留等待。每个会话有独立租期、幂等回执与未知结果保护;不能重复启动第二套执行器或抢 writer 锁。
  6. 验证决策详情内的一条真实咨询进入该 thread,并核对同一 thread 的真实回复回到本决策。再验证事实核实请求、主控保存答复及绑定会话收到答复;不把投递 ACK 当实际处理。咨询内容通过既有历史投影展示,内部工具和原始通知不混进聊天。
  7. 用户提交只进入待检查。主控读取提交时的不可变快照,核实适用范围与风险,再记录接受或重议、效果与执行规划;主控检查结论由唯一人类入口简短解释并链接卡片。权限相关动作另核实真实人类授权,不能仅靠网页来源、咨询建议或 accepted 状态执行。
  8. 完成后先保存检查结论、实际完成证据和交接。核对咨询输入没有 queued/claimed/uncertain,且私有 worker 不存在 inflight、pending_completion 或 needs_reconciliation。然后用宿主受支持归档工具归档真实 thread,成功后才保存 archive-receipt。仅写归档字段不是宿主归档;归档失败保留待归档,不抹去记录或删除会话。

完成并归档后,卡片、版本、提交快照、检查结论和聊天只读保留。fleet 只停止自身桥接进程,不杀模型 writer;有未知执行状态时保留证据等待对账,不能盲重放。

有限 API 凭据约束的是服务端接口,不是宿主操作系统沙箱。咨询会话的代码/系统边界同时依赖其角色约束及宿主权限;不要声称已提供未实际配置的硬隔离。

决策通知外发前先调用 /api/decision-notifications/submitting 持久标记,再保存本机 submitting 状态并调用宿主队列。标记调用失败可幂等重试,但不发送模型输入;真实队列发送未知时先对账、不盲重发。服务端只取消未开始/未确认的过时通知,已开始或未知发送保留审计。