收口P4并关闭旧版策划入口
旧 project-supervisor-plan 来源统一返回退役错误 避免旧入口启动 Runtime 或 Provider 同步收口 P4 验收状态与最简 P5 方案 记录 V1 不迁移且历史文件只读保留
This commit is contained in:
@@ -112,6 +112,7 @@ pub(crate) const AGENT_RUNTIME_ISOLATED_JOIN_SOURCE: &str = "agent-isolated-join
|
||||
pub(crate) const AGENT_RUNTIME_SUPERVISOR_GUI_SOURCE: &str = "project-supervisor-gui";
|
||||
pub(crate) const AGENT_RUNTIME_SUPERVISOR_CLI_SOURCE: &str = "project-supervisor-cli";
|
||||
pub(crate) const AGENT_RUNTIME_SUPERVISOR_PLAN_SOURCE: &str = "project-supervisor-plan";
|
||||
pub(crate) const LEGACY_PLANNING_RETIRED_ERROR: &str = "旧版策划链路已退役,请重新创建 V2 策划会话";
|
||||
pub(super) const AUTONOMOUS_GAME_BUILD_FIXED_TASK_GRAPH_STALLED_ERROR: &str =
|
||||
"自主构建任务图无法继续推进";
|
||||
pub(crate) const AGENT_RUNTIME_PLAN_AUTONOMOUS_PROFILE_UNSUPPORTED_KIND: &str =
|
||||
@@ -234,6 +235,13 @@ pub(crate) fn agent_runtime_supervisor_source_is_plan(source: &str) -> bool {
|
||||
source.trim() == AGENT_RUNTIME_SUPERVISOR_PLAN_SOURCE
|
||||
}
|
||||
|
||||
pub(crate) fn reject_legacy_planning_source(source: &str) -> Result<(), String> {
|
||||
if agent_runtime_supervisor_source_is_plan(source) {
|
||||
return Err(LEGACY_PLANNING_RETIRED_ERROR.to_string());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) fn reject_supervisor_plan_autonomous_profile(
|
||||
source: &str,
|
||||
run_profile: &str,
|
||||
|
||||
@@ -126,6 +126,7 @@ pub(crate) fn start_game_creator_supervisor_background_task_for_session_at(
|
||||
if !agent_runtime_supervisor_source_is_trusted(source) {
|
||||
return Err("Project Supervisor 提交 source 不受信任".to_string());
|
||||
}
|
||||
reject_legacy_planning_source(source)?;
|
||||
let run_profile = normalize_agent_runtime_run_profile(Some(run_profile))?;
|
||||
reject_supervisor_plan_autonomous_profile(source, &run_profile)?;
|
||||
if agent_runtime_supervisor_source_is_plan(source)
|
||||
|
||||
@@ -1390,6 +1390,7 @@ pub(crate) fn start_game_creator_supervisor_runtime_task(
|
||||
if !agent_runtime_supervisor_source_is_trusted(source) {
|
||||
return Err("Project Supervisor 提交 source 不受信任".to_string());
|
||||
}
|
||||
reject_legacy_planning_source(source)?;
|
||||
reject_supervisor_plan_autonomous_profile(source, run_profile)?;
|
||||
if agent_runtime_supervisor_source_is_plan(source)
|
||||
&& !crate::config::game_creator_planning_capability_enabled()?
|
||||
|
||||
@@ -8065,3 +8065,9 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
|
||||
- 前端以适配层复用现有聊天区、澄清输入卡、GDD 审批卡和阶段进度条;V2 hydrate 返回 `conversation` 消息,用于页面刷新和重启后恢复可见历史。
|
||||
- V2 会话使用独立 `planning-session-v2-stream` 事件,旧 Supervisor Runtime 轮询、专业 Agent 轮询和旧 Runtime 事件不会介入 V2 会话。
|
||||
- 没有 V2 authority 的项目仍按旧读取路径打开;旧链路封存、未完成旧会话强制失败和旧入口彻底关闭仍留在 P5。
|
||||
|
||||
## 2026-09-05 策划会话 Runtime V2 P4 收口
|
||||
|
||||
- Planning V2 的 P4 灰度与回归验收已通过人工校验:正常提问/回答/GDD/批准链路、GDD 修改后再次批准链路、Provider 失败恢复、非法输出失败边界、重启恢复、前端工作台展示以及编码/差异门禁均完成验证。
|
||||
- P4 收口不代表旧链路退役;旧 `project-supervisor-plan` / `project-planning` 源码和入口仍保留,旧活跃会话封存、迟到结果隔离、旧入口关闭和只读历史展示统一留在后续 P5。
|
||||
- P5 收缩为最小退役:旧 `project-supervisor-plan` caller 统一立即返回退役错误,不启动旧 Runtime/Provider;不扩展 V1 `PlanSessionV1` schema,不做旧数据迁移,旧文件继续保留只读,V2 只读取 `.agent/planning-v2`。
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 策划会话 Runtime V2 接入与旧链路退役方案
|
||||
|
||||
- 日期:2026-09-03
|
||||
- 状态:P0 合同冻结、P1 内核、P2 产物闭环和 P3 入口/UI 接入已完成;P4~P5 待实施;本文是新生产实现的目标方案与阶段验收合同
|
||||
- 状态:P0 合同冻结、P1 内核、P2 产物闭环、P3 入口/UI 接入和 P4 灰度回归验收已完成;P5 待实施;本文是新生产实现的目标方案与阶段验收合同
|
||||
- 适用范围:AGC 桌面 App 的“做方案”入口、策划会话、GDD 产物与审批
|
||||
|
||||
> 本文规定新策划 Agent 的生产接入和旧链路退役方式。P3 开始修改正式 AGC 入口与工作台,但旧 `project-supervisor-plan` / `project-planning` 源码仍保留,直到 P5 完成退役;V2 切换时旧链路直接封存,所有未完成旧会话强制失败,旧 Fast GDD 文档之后只作为历史记录依据。
|
||||
@@ -735,11 +735,11 @@ hydrate_planning_session_v2
|
||||
- 前端通过 V2 适配层复用现有聊天区、澄清卡、GDD 审批卡和阶段进度条;V2 Session 的 hydrate 结果额外携带 `conversation`,用于刷新/重启恢复历史消息。
|
||||
- 监听 `planning-session-v2-stream`,将 Provider 回合的增量投影到现有实时回复区域;旧 Runtime 轮询、专业 Agent 轮询和旧 Runtime 事件在 V2 策划会话中关闭。
|
||||
- 对已存在 V2 Session 的项目,打开项目时先 hydrate V2;没有 V2 authority 的旧项目继续走旧读取路径,避免误把旧项目数据当成 V2。
|
||||
- P3 已完成;旧会话 `legacy_retired` 封存、入口彻底关闭和真实 Provider/UI 全链路回归仍属于 P4/P5。
|
||||
- P3 已完成;P4 的真实 Provider、前端工作台、失败恢复和安全门禁验收已通过。旧会话 `legacy_retired` 封存与旧入口彻底关闭仍属于 P5。
|
||||
|
||||
P3 之后的协议修正:V2 不再用正文 JSON 输出问询/GDD;Provider 请求挂 `plan_ask_question` / `plan_submit_gdd`,`tool_choice=auto`,形状由工具 schema 承担。system prompt 只保留三项核心闭环等策略和当前问询进度;数量和字数由既有校验器在失败时回灌。`plan_submit_gdd` 的工具参数只包含决定和原型验证内容,不包含任何 Runtime 分配的 ID;Runtime 在落盘前为决定分配首项 `initial-request`、后续 `decision-{序号}`,并按 `prototype_pending` 顺序绑定原型验证项。入参不必回声 `schemaVersion`,落盘 GDD 仍写 `plan-gdd.v2`。失败结果不重复渲染,严格解析和失败不落盘成功产物的规则保持不变。历史 V2 数据不做兼容转换,按现有恢复/失败策略处理。
|
||||
|
||||
### P4:灰度、真实 Provider 与回归验收
|
||||
### P4:灰度、真实 Provider 与回归验收(已完成)
|
||||
|
||||
目标:证明 V2 的正常路径和关键失败路径可用,再关闭旧入口新建能力。
|
||||
|
||||
@@ -761,9 +761,11 @@ P3 之后的协议修正:V2 不再用正文 JSON 输出问询/GDD;Provider
|
||||
- 证实同一项目不存在两个活跃策划权威;旧活跃会话在切换后不可继续。
|
||||
- 所有失败均保留可操作状态,不以成功文案掩盖 Provider/持久化错误。
|
||||
|
||||
阶段结果:已完成人工灰度验收,包含正常提问/回答/GDD/批准链路、GDD 修改与再次批准链路、Provider 失败恢复、非法输出失败边界、重启恢复、前端展示和编码/差异门禁。P4 不包含旧链路退役;旧链路封存和入口关闭在 P5 执行。
|
||||
|
||||
依赖:P3。
|
||||
|
||||
### P5:旧链路退役
|
||||
### P5:旧链路退役(最简方案)
|
||||
|
||||
目标:停止新业务进入旧 Supervisor,并将所有未完成旧会话一次性封存为失败。
|
||||
|
||||
@@ -771,18 +773,18 @@ P3 之后的协议修正:V2 不再用正文 JSON 输出问询/GDD;Provider
|
||||
|
||||
| ID | 任务 | 产出 |
|
||||
| ---- | ---------------------------------------------------- | -------------------------------- |
|
||||
| P5-1 | 关闭新建和继续旧 `project-supervisor-plan` 的 caller | 入口门禁/路由变更 |
|
||||
| P5-2 | 执行旧 session 一次性封存 | `legacy-cutover.json` 与失败投影 |
|
||||
| P5-3 | 保留旧产物只读展示,禁止旧交互继续推进 | 历史查看能力 |
|
||||
| P5-4 | 更新生产文档和运维说明 | 旧链路退役状态、回滚边界 |
|
||||
| P5-1 | 关闭旧 `project-supervisor-plan` 新建/继续入口 | 入口统一返回退役错误 |
|
||||
| P5-2 | 旧活跃会话自动失败 | 入口拒绝后不启动旧 Runtime/Provider |
|
||||
| P5-3 | 保留旧产物只读 | 不迁移、不修复、不删除旧文件 |
|
||||
| P5-4 | 更新生产文档和最小回归测试 | 旧入口拒绝、V2 目录隔离 |
|
||||
|
||||
阶段验收:
|
||||
|
||||
- 代码搜索和运行时审计均证明新“做方案”不再调用 `start_game_creator_supervisor_runtime_task`。
|
||||
- 新项目不会创建旧 Supervisor root、child Run、delivery 或 acceptance evidence。
|
||||
- 已存在的旧活跃会话全部投影为 `legacy_retired` 失败;已终态旧产物仍可查看。
|
||||
- 旧入口或旧 continuation 若被直接调用,返回稳定的“旧链路已退役”错误,不删除旧数据。
|
||||
- 切换前已在途的旧 Provider 迟到结果不会写入 GDD、审批或 `game/fast_gdd.md`。
|
||||
- 旧入口或旧 continuation 若被直接调用,返回稳定的“旧链路已退役”错误,不启动旧 Runtime 或 Provider。
|
||||
- 旧文件和已终态旧产物保持原样,继续只读查看;不引入旧 Session schema 迁移。
|
||||
- V2 hydrate 和审批只读取 `.agent/planning-v2`,不读取旧目录。
|
||||
- 做游戏 DirectProject 和其它现役 Agent Runtime 不受影响。
|
||||
|
||||
依赖:P4 通过;确认切换窗口并完成一次性封存。
|
||||
|
||||
Reference in New Issue
Block a user