Add revisioned decisions and scoped consultation lifecycle

This commit is contained in:
aiagent
2026-10-19 22:28:53 -07:00
parent 0fcfe1c024
commit 6e4178dc79
27 changed files with 1431 additions and 192 deletions
+23 -1
View File
@@ -81,7 +81,7 @@ source+event_id+status持久幂等,相同故障重复不打扰;恢复必须
GET /api/state的decisions保存卡片与响应。POST /api/decisions登记固定id/title/question及impact/priority/details/recommendation/options/deadline/requires_authorization/task_id;同ID相同规范正文幂等,不同内容冲突。options是{id,label,description}数组,不指定真实thread或任意命令。
POST /api/decisions/<id>/respond提交{option_id,comment,idempotency_key}。有选项须选择合法项,无选项至少写意见;第一次提交原子保存,同key同正文返回原响应,冲突重用或其他提交拒绝。普通状态为decided,权限相关为pending_verification;响应含authorization:false,不能作为提权批准。GET /api/decision-notifications提供最早100条待投递,POST /api/decision-notifications/ack以notification_id幂等确认。
POST /api/decisions/<id>/respond提交{expected_revision,option_id|null,comment,idempotency_key},允许选择合法方案或仅填写非空意见,至少一项。仅open/needs_reconsideration接受提交,保存内容及选项快照,状态统一pending_review;同key/body/revision幂等,不同返回409。旧decided/pending_verification且有response映射pending_review,不能伪造已接受。响应不授予运维权限。通知及ACK路径继续兼容,新增事件规则见下文。
桥接私有配置decision_notifications:true启用notifier投递到notification_targets.control。保存回执与完整输入哈希,未知投递先对账,不盲重发;投递确认不代表方案执行。通知只携带问题、实际选项与意见,背景仍由总控通过API读取,避免塞满会话。沟通展示使用/api/conversation;后台继续用原始/api/messages做恢复与审计。
@@ -146,3 +146,25 @@ created_at由服务端在新建任务时记录,拒绝客户端输入及更新/
本轮验收包括旧数据默认、创建和更新非法归属、被引用交付降级、报告字段保护;前端纯逻辑覆盖长链、多依赖、无依赖、筛选与汇合门禁。执行负责人以既有持久报告流程上报真实证据,收到落库回执后等待集成;集成负责人另做真实浏览器验证和发布,不能以执行完成代替正式验收。
执行会话可按人类已授权的项目协作范围,使用宿主支持的定向消息就共享接口与交接点相互协调;无需每次抄送副主控。唯一事项负责人把关键决定、版本、影响与交接回执落库;范围或归属冲突才交直属副主控。普通进度只更新状态,不制造互相唤醒链。副主控的判断可由推理模型结合明确规则承担,具体模型、费用与执行权限分别核实;用户仅询问模型能力不构成切换型号或购买服务的授权。
## 决策生命周期接口契约
状态为open/pending_review/accepted/completed/needs_reconsideration。对象增加summary、task_id、revision正整数、session_id/session_thread_id可空、archive_status(none/pending/archived)、review/completion可空、supersedes_id及related_decision_ids。GET /api/decisions/<id>读取当前对象,GET /history返回{history:[版本、提交、检查、完成、绑定、归档事件]},所有版本与提交快照保留。创建支持简介、关联任务及替代来源并持久生成session_required;仅创建真实需求。
PATCH当前对象携expected_revision、reason及允许内容字段,乐观锁成功增版本,禁止覆盖response/submissions/review/binding。影响已提交问题或方案的实质改动保留旧选择并转needs_reconsideration,必须重新确认新版本。POST /review携expected_revision/idempotency_key/outcome(accept或reconsider)/reason/impact/execution_plan,可附authorization_evidence;仅检查当前revision真实pending_review提交,转accepted或needs_reconsideration。授权证据只是记录,须主控核对真实人类消息,不能自动执行。
POST /complete携expected_revision/idempotency_key/conclusion/handoff/evidence可选列表,仅有review的accepted/needs_reconsideration可完成并置archive_status=pending。POST /archive-receipt携thread_id/idempotency_key/receipt,仅completed且review/completion/handoff齐备;先由根调用宿主真实归档,再登记回执。
POST /bind-session携expected_revision/idempotency_key/session_id/thread_id,仅普通控制凭据。会话须已注册role=decision、wp=decision.id,真实thread UUID不复用其他决策、主会话或执行者;仅首次或严格重复绑定,禁止静默换绑。真实存在另由宿主工具验证。GET /consultation返回{messages:[既有conversation projection]},POST携text/client_key仅发送绑定session,不接受替代sid;完成归档后只读。GET /api/decision-bridge-bindings仅控制凭据,返回bindings内decision_id/session_id/thread_id/worktree/status/archive_status;fleet只接已有真实thread,不创建模型会话。
POST /consultation-credential由普通凭据签发专用token,数据库只存hash;该token仅允许本决策GET当前/history/consultation、PATCH内容和POST /facts,其余403,completed后禁写仍可读历史。不得向咨询agent分发普通panel token。POST /facts携idempotency_key/question/context可选,持久去重核实请求;POST /facts/<request_id>/answer由普通凭据提交idempotency_key/answer/evidence可选,写历史并通知绑定咨询thread,回复不是用户批准。
通知保留原GET /api/decision-notifications及ACK;工作流事件用独立持久表避免旧decision_id唯一约束。返回notification_id/target(control、human、decision)/通知创建时不可变decision与event快照(含kind、revision及相关字段),event_key幂等。GET不得重写为最新对象,避免破坏持久输入哈希;已提交/未知发送标记和历史保留。只有fact_answered可target=decision,绑定thread由真实session_thread_id确定。session_required、submitted、fact_requested、archive_required送control;reviewed送human仅简述影响与计划;fact_answered送decision,由notifier按已核实绑定定位。绑定后未发session_required、已答facts、已归档请求不再出队;已实际入宿主队列的旧输入按版本核对,不伪称撤回。普通决策事件不能一律路由control覆盖上述目标。
已有唯一人类入口时,所有主控、副主控、执行者的问题/选择/授权/关键结论定向交入口,不能直接使用用户提问工具绕过;入口理解后直接交主控,不经下层事件队列。独立咨询只限该决策内嵌页面,不成为一般项目沟通入口。真实会话创建、绑定核实和归档由根按既定授权执行。
验收覆盖两种检查分支、版本并发、不可改提交快照、选项变化重确认、关联新决策、有限凭据与任务/会话隔离、归档前置及幂等;真实咨询绑定与往返单独验收。暂无真实事项时仅做隔离测试,保留未验证限制,不造生产事项。
完成与归档前须检查绑定咨询session消息:有queued/claimed/uncertain未完成输入时返回409,保持可交流;completed立即拒绝新咨询POST,历史GET保留。fleet仅在archive_status=archived且本机worker无inflight/pending_completion/needs_reconciliation时停止自有子进程,不终止模型writer。已入队旧通知接收者fresh GET核对revision,过期静默停止,不能由快照直接执行。有限CLI及fleet负责已有绑定的桥接,不自行创建或归档宿主会话。
真实决策独立会话的创建、绑定后签发有限凭据、桥接、事实核实和完成归档步骤见 [独立决策会话接入](decision-sessions.md)。notifier调用决策通知submitting接口后才向宿主队列外发,保留不可变快照与未知结果保护;不能仅清应用队列冒充取消宿主输入。