--- name: openspec-lock-consensus description: 锁定共识 - 在探索讨论后,将讨论结果锁定为正式共识文档。防止后续提案偏离讨论内容。 license: MIT compatibility: Requires openspec CLI. metadata: author: junhong version: "1.1" --- # 共识锁定 Skill 在 `/opsx:explore` 讨论后,使用此 skill 将讨论结果锁定为正式共识。共识文档是后续所有 artifact 的基础约束。 ## 触发方式 ``` /opsx:lock ``` 或在探索结束后,AI 主动提议: > "讨论已经比较清晰了,要锁定共识吗?" --- ## 工作流程 ### Step 1: 整理讨论要点 从对话中提取以下四个维度的共识: | 维度 | 说明 | 示例 | |------|------|------| | **要做什么** | 明确的功能范围 | "支持批量导入 IoT 卡" | | **不做什么** | 明确排除的内容 | "不支持实时同步,仅定时批量" | | **关键约束** | 技术/业务限制 | "必须使用 Asynq 异步任务" | | **验收标准** | 如何判断完成 | "导入 1000 张卡 < 30s" | ### Step 2: 使用 Question_tool 逐维度确认 **必须使用 Question_tool 进行结构化确认**,每个维度一个问题: ```typescript // 示例:确认"要做什么" Question_tool({ questions: [{ header: "确认:要做什么", question: "以下是整理的功能范围,请确认:\n\n" + "1. 功能点 A\n" + "2. 功能点 B\n" + "3. 功能点 C\n\n" + "是否准确完整?", options: [ { label: "确认无误", description: "以上内容准确完整" }, { label: "需要补充", description: "有遗漏的功能点" }, { label: "需要删减", description: "有不应该包含的内容" } ], multiple: false }] }) ``` **如果用户选择"需要补充"或"需要删减"**: - 用户会通过自定义输入提供修改意见 - 根据反馈更新列表,再次使用 Question_tool 确认 **确认流程**: ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Question_tool: 确认"要做什么" │ │ ├── 用户选择"确认无误" → 进入下一维度 │ │ └── 用户选择其他/自定义 → 修改后重新确认 │ ├─────────────────────────────────────────────────────────────────────┤ │ Question_tool: 确认"不做什么" │ │ ├── 用户选择"确认无误" → 进入下一维度 │ │ └── 用户选择其他/自定义 → 修改后重新确认 │ ├─────────────────────────────────────────────────────────────────────┤ │ Question_tool: 确认"关键约束" │ │ ├── 用户选择"确认无误" → 进入下一维度 │ │ └── 用户选择其他/自定义 → 修改后重新确认 │ ├─────────────────────────────────────────────────────────────────────┤ │ Question_tool: 确认"验收标准" │ │ ├── 用户选择"确认无误" → 生成 consensus.md │ │ └── 用户选择其他/自定义 → 修改后重新确认 │ └─────────────────────────────────────────────────────────────────────┘ ``` ### Step 3: 生成 consensus.md 所有维度确认后,创建文件: ```bash # 检查 change 是否存在 openspec list --json # 如果 change 不存在,先创建 # openspec new # 写入 consensus.md ``` **文件路径**: `openspec/changes//consensus.md` --- ## Question_tool 使用规范 ### 每个维度的问题模板 **1. 要做什么** ```typescript { header: "确认:要做什么", question: "以下是整理的【功能范围】:\n\n" + items.map((item, i) => `${i+1}. ${item}`).join('\n') + "\n\n请确认是否准确完整?", options: [ { label: "确认无误", description: "功能范围准确完整" }, { label: "需要补充", description: "有遗漏的功能点" }, { label: "需要删减", description: "有不应该包含的内容" } ] } ``` **2. 不做什么** ```typescript { header: "确认:不做什么", question: "以下是明确【排除的内容】:\n\n" + items.map((item, i) => `${i+1}. ${item}`).join('\n') + "\n\n请确认是否正确?", options: [ { label: "确认无误", description: "排除范围正确" }, { label: "需要补充", description: "还有其他需要排除的" }, { label: "需要删减", description: "有些不应该排除" } ] } ``` **3. 关键约束** ```typescript { header: "确认:关键约束", question: "以下是【关键约束】:\n\n" + items.map((item, i) => `${i+1}. ${item}`).join('\n') + "\n\n请确认是否正确?", options: [ { label: "确认无误", description: "约束条件正确" }, { label: "需要补充", description: "还有其他约束" }, { label: "需要修改", description: "约束描述不准确" } ] } ``` **4. 验收标准** ```typescript { header: "确认:验收标准", question: "以下是【验收标准】(必须可测量):\n\n" + items.map((item, i) => `${i+1}. ${item}`).join('\n') + "\n\n请确认是否正确?", options: [ { label: "确认无误", description: "验收标准清晰可测量" }, { label: "需要补充", description: "还有其他验收标准" }, { label: "需要修改", description: "标准不够清晰或无法测量" } ] } ``` ### 处理用户反馈 当用户选择非"确认无误"选项或提供自定义输入时: 1. 解析用户的修改意见 2. 更新对应维度的内容 3. 再次使用 Question_tool 确认更新后的内容 4. 重复直到用户选择"确认无误" --- ## consensus.md 模板 ```markdown # 共识文档 **Change**: **确认时间**: **确认人**: 用户 --- ## 1. 要做什么 - [x] 功能点 A(已确认) - [x] 功能点 B(已确认) - [x] 功能点 C(已确认) ## 2. 不做什么 - [x] 排除项 A(已确认) - [x] 排除项 B(已确认) ## 3. 关键约束 - [x] 技术约束 A(已确认) - [x] 业务约束 B(已确认) ## 4. 验收标准 - [x] 验收标准 A(已确认) - [x] 验收标准 B(已确认) --- ## 讨论背景 <简要总结讨论的核心问题和解决方向> ## 关键决策记录 | 决策点 | 选择 | 原因 | |--------|------|------| | 决策 1 | 选项 A | 理由... | | 决策 2 | 选项 B | 理由... | --- **签字确认**: 用户已通过 Question_tool 逐条确认以上内容 ``` --- ## 后续流程绑定 ### Proposal 生成时 `/opsx:continue` 生成 proposal 时,**必须**: 1. 读取 `consensus.md` 2. 确保 proposal 的 Capabilities 覆盖"要做什么"中的每一项 3. 确保 proposal 不包含"不做什么"中的内容 4. 确保 proposal 遵守"关键约束" ### 验证机制 如果 proposal 与 consensus 不一致,输出警告: ``` ⚠️ Proposal 验证警告: 共识中"要做什么"但 Proposal 未提及: - 功能点 C 共识中"不做什么"但 Proposal 包含: - 排除项 A 建议修正 Proposal 或更新共识。 ``` --- ## Guardrails - **必须使用 Question_tool** - 不要用纯文本确认 - **逐维度确认** - 四个维度分开确认,不要合并 - **不要跳过确认** - 每个维度都必须让用户明确确认 - **不要自作主张** - 只整理讨论中明确提到的内容 - **避免模糊表述** - "尽量"、"可能"、"考虑"等词汇需要明确化 - **验收标准必须可测量** - 避免"性能要好"这类无法验证的标准 --- ## 与其他 Skills 的关系 | Skill | 关系 | |-------|------| | `openspec-explore` | 探索结束后触发 lock | | `openspec-new-change` | lock 后触发 new(如果 change 不存在)| | `openspec-continue-change` | 生成 proposal 时读取 consensus 验证 | | `openspec-generate-acceptance-tests` | 从 consensus 的验收标准生成测试骨架 |