# 用户决策点协议

规范路径：`comet/reference/decision-point.md`

本协议由所有包含用户决策点的 comet 子 skill 共享。凡标注为“阻塞点”或“用户决策点”的步骤，都必须按本协议处理。

## 核心规则

- 决策点是阻塞点。到达决策点时必须暂停，等待用户明确选择后才能继续
- 必须使用当前平台可用的用户输入/确认机制获取选择；Claude Code 等平台提供 `AskUserQuestion` 时，优先使用 `AskUserQuestion` 展示单选/多选选项
- 若当前工具列表没有 `AskUserQuestion`，或第一次调用 `AskUserQuestion` 失败，则判定本会话结构化提问不可用；本会话后续决策点不得反复重试 `AskUserQuestion`，直接使用文本选项降级模式
- 若当前平台没有结构化提问工具，则必须在对话中提出明确选项并停止流程，等待用户回复
- 不得用推荐规则、默认值、历史偏好或“用户应该会同意”的推断代替当前确认
- 用户明确选择前，不得写入对应状态字段、执行对应分支操作或自动继续下一阶段

## `AskUserQuestion` 优先策略

使用结构化提问时：

- 单选决策点用 `AskUserQuestion` 的单选问题；多选决策点用多选问题
- 选项必须携带简短标签和影响说明；推荐项只能作为说明，不能自动选择
- 若工具调用成功，等待用户通过该问题作答；不得同时再输出一套文本选项
- 若工具不存在、工具调用失败或宿主报错，记录“本会话结构化提问不可用”，然后进入文本选项降级模式

## 最低呈现要求

- 说明当前决策点正在决定什么
- 给出清晰可选项；需要用户单选时，选项必须互斥且可执行
- 文本降级模式必须明确写出“单选”或“多选”、编号选项、每项影响，并要求用户回复编号；随后停止流程，等待用户回复
- 如有推荐，只能作为说明，不能替代用户确认
- 用户选择后，再执行对应命令或状态更新
