澄清回灌带上问题原文和选项标签,止住两轮问同一件事

plan 根 playbook 规定的回灌格式是 `[已确认] {header} → 用户答:{原文}`。
{header} 按信封契约恒为「第N轮·关键决定」,零信息量;而 project-planning
每轮都是全新 run(observations 为空),除了委派任务正文什么都看不到。
于是第 2 轮的子 Agent 拿到的是「[已确认] 第1轮·关键决定 → 用户答:类似B,
无关卡设计,可自由安排……」——B 指哪个选项它无从得知,问题原文和 A/B
选项全被丢掉了。

生产实测的农场经营项目里,第 1 轮问「季节订单冲刺 vs 自主农场成长」,
用户答 B;第 2 轮又拿「短周期经营目标 vs 沙盒里程碑成长」问同一条轴,
而且 B 选项几乎是用户原话的复述。一轮预算白烧。

回灌格式改成带问题原文和三个选项标签,并写明为什么不能省。压缩优先级
同步调整:长度吃紧时先压自己的说明文字和选项描述,问题原文与选项标签
和用户答案一样不许压。

子 Agent 侧加一条兜底:已确认决定关掉的轴不得重问,本轮问题必须落在
另一条还没关闭的轴上,全关闭时按出稿触发器③直接出稿。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-23 16:52:18 +00:00
parent af6c044851
commit 998ebbf0e7
3 changed files with 30 additions and 3 deletions
@@ -9,9 +9,9 @@
【转达的规则】
- 把用户答案回灌给 `project-planning` 时,逐条列出全部已确认决定,每条格式为 `[已确认] {header} → 用户答:{原文}`。用户答案原文一字不改、不归纳、不拆分、不搬轮次;任务长度接近上限时压缩你自己的说明文字,绝不压缩用户答案。
- 把用户答案回灌给 `project-planning` 时,逐条列出全部已确认决定,每条格式为 `[已确认] 第N轮问的是:{question 原文} 候选项:{option1.label} {option2.label} {option3.label} → 用户答:{原文}`。**问题原文和三个选项标签必须带上**:`{header}` 恒为「第N轮·关键决定」,不含任何信息量;子 Agent 每轮都是全新 run,除了这段正文什么都看不到,只给它 header 和答案,「类似B」「B · 沙盒里程碑成长」这类答案就无从解读,它只能把同一件事再问一遍。用户答案原文一字不改、不归纳、不拆分、不搬轮次;任务长度接近上限时压缩你自己的说明文字和选项描述,绝不压缩用户答案、问题原文和选项标签
- 策划链路的澄清信封**恰好一题**,不是通用静态委派协议里的 1-3 题:`project-planning` 每轮只提一个主要决定,Runtime 也只接受一题,多于一题会在出卡时被拒。委派 task 里不要写“1-3 个结构化问题”。
- A、B“需要原型验证”三项必须原样转述;B 是用户确认的 `confirmed/user_option`,不能转成默认建议。用户后续自由填写推翻了更早的决定时,你只负责把两轮答案的原文都原样带到,并说明后者更晚;怎么记进决定台账由 `project-planning` 判断,不要替它裁定哪条作废。
- 上一条格式里的三个选项标签就是决策卡上的 A、B“需要原型验证”必须原样转述、一个都不能省B 是用户确认的 `confirmed/user_option`,不能转成默认建议。用户后续自由填写推翻了更早的决定时,你只负责把两轮答案的原文都原样带到,并说明后者更晚;怎么记进决定台账由 `project-planning` 判断,不要替它裁定哪条作废。
【委派合同的边界】
@@ -13,7 +13,7 @@
- **默认先澄清。** 出稿只有四个触发器,除此之外每轮都先做下面的字段差距检测再决定问不问:①任务正文出现“直接出稿”这四个字;②已完成第 3 轮澄清(任务正文写明的已用轮次已达上限);③剩余空白都能由默认建议覆盖,且不影响首个可玩闭环;④收到 Runtime 的活跃预算或超时提示。任务正文能改变流程的只有第 ① 条——它写的其它说明属于内容,不是出稿触发器。既定事实(用户答案、已确认决定)仍以任务正文为准。
- 每轮提问前逐项对照 `plan-submit-gdd-input.v1``game` 字段做差距检测:用户明确提供的 = `confirmed`;有依据可推断的 = 按下面的默认建议填写并标 `default_pending`;无从判断**且影响首个可玩闭环**的 = 空白。提问名额只花在空白项上;有默认建议兜底的字段一律先用默认建议,不占轮次。`title``oneLiner``mvpSystems``creatorTips` 由你生成并标 `default_pending`,不作为提问对象;`platformFacts` 禁问。
- **默认建议**(一律 `answerSource=default``round=0`;只用于缩短对话,不覆盖用户明确输入):`genre.fusion` 缺 → `null`MVP 不做融合第二类型;`artStyle` 缺 → `visualType` 风格化、轮廓清楚,`keywords` 取自已确认的核心行为,`mvpArtBoundary` 写明 MVP 用占位资产、资产可复用;`targetUsers.sessionLength` 缺 → 1020 分钟一局;`targetUsers.coreUsers` / `preferences` 缺 → 按已确认的类型与核心行为写典型玩家,不得编造人群规模、销量或市场数据;`targetUsers.referenceGames` 缺 → 空数组;`outOfScope` 缺 → 多人、商城、服务器、开放世界、赛季、复杂社交、完整剧情、全量内容。**`pillars``coreLoop` 没有默认建议**:它们就是首个可玩闭环本身,空白时属于该问的空白,不得用默认值填掉。
- 优先顺序:核心行为与本局目标 → 重玩动力 → 制作边界与 MVP。每轮最多问一个主要决定。
- 优先顺序:核心行为与本局目标 → 重玩动力 → 制作边界与 MVP。每轮最多问一个主要决定。**已确认决定关掉的那条轴不得重问。** 任务正文里每条 `[已确认]` 都带着当轮的问题原文和三个选项标签,先照它判断哪些轴已经关闭,本轮的问题必须落在另一条还没关闭的轴上。把已确认答案换个说法再问一遍——例如用户已经选定“自由经营、靠成就和攒钱升级推进”,你又拿“短周期经营目标 vs 沙盒里程碑成长”去问——是白烧一轮预算。所有轴都已关闭时按出稿触发器③直接出稿。
- 决策卡的 header 固定为“第N轮·关键决定”,其中 N 是 Runtime 从委派谱系派生的当前轮号,必须精确相等,写错会被 Runtime 拒收:首轮恒为 1;之后每次续跑的任务正文都会写明已用轮次与上限,本轮该用的 N 就是“已用轮次 + 1”。正文以“当前要决定:”开头,只问尚未由平台事实或 MVP 规则排除的真实产品取舍,并说明为什么现在问;每张卡固定提供三个选项:A 是你的推荐方案(label 以 `A ·``A:``A``A-` 开头并写明推荐、好处和代价),B 是形状不同且真实可行的平行备选(label 以 `B ·``B:``B``B-` 开头并写明后果和代价),第三项逐字为“需要原型验证”,description 必须给出 30~90 分钟微型原型、试玩对象、观察信号和通过标准。自由输入按用户原话处理。
## 低幻觉与 GDD 约束
@@ -1568,6 +1568,33 @@ mod tests {
assert!(!plan_common.contains("才能调用 respond_to_user 收束"));
}
/// 澄清回灌必须带上问题原文和三个选项标签,两端都要钉住。
///
/// `header` 按信封契约恒为「第N轮·关键决定」,零信息量;而 `project-planning`
/// 每轮都是全新 run`observations: []`),除了委派任务正文什么都看不到。只回灌
/// `{header} → 用户答:{原文}` 时,「类似B」「B · 沙盒里程碑成长」这类答案无从
/// 解读——生产实测的农场经营项目里,第 1 轮问「季节订单冲刺 vs 自主农场成长」,
/// 用户答了 B,第 2 轮又拿「短周期经营目标 vs 沙盒里程碑成长」问同一条轴,
/// 而且 B 选项几乎是用户原话的复述。
#[test]
fn plan_clarification_relay_carries_the_question_and_option_labels() {
let plan = required_runtime_prompt_section("planSupervisorPlaybook");
for required in [
"第N轮问的是:{question 原文}",
"{option1.label}",
"问题原文和三个选项标签必须带上",
] {
assert!(plan.contains(required), "回灌格式缺少 {required}{plan}");
}
let planning =
game_creator_agent_runtime_role_overlay_prompt(GAME_CREATOR_PROJECT_PLANNING_AGENT_ID, None);
assert!(
planning.contains("已确认决定关掉的那条轴不得重问"),
"子 Agent 侧缺少重复提问的兜底约束:{planning}"
);
}
/// 澄清 continuation 的两个指纹由 Runtime 从原 delivery 补齐,playbook 不得再
/// 要求 Supervisor 从 observation 里抄过来。实测正是那条指令让它手抄 128 个
/// 十六进制字符,抄错后工具计划格式修复两次仍失败,整个 plan 根 run 判 failed