| name | ohos-req-arch-decision |
| description | Use when selecting an OHOS solution direction in Phase 0.3, especially for 03-arch-decision-record.md, candidate options comparison, or when the main session needs structured ADR output with user-provided decision. Do NOT use for feasibility analysis (ohos-req-feasibility-analysis), feature baseline (ohos-req-feature-baseline), or review gate (ohos-req-review-gate). |
| metadata | {"author":"openharmony","scope":"common","stage":"requirements","capability":"arch-decision","version":"0.3.0","status":"draft","tags":["sdd","requirements"]} |
OHOS 方案选型决策分析
Announce at start: "我正在使用 ohos-req-arch-decision skill 生成 03-arch-decision-record.md。"
定位
03-arch-decision-record.md 记录候选方案对比和用户决策结论,为 SIG 初审提供选型依据。OHOS SIG 采用集体评审制度,方案选型权归属 SIG 评审会议(由 SIG Maintainer + 领域 Owner 组成),AI 仅提供候选方案对比和推荐倾向参考,不代行决策权——决策结论必须由用户(代表 SIG 评审结论)提供。
核心原则 ⭐
决策结论必须由用户提供,AI 不替代用户做决策。
两阶段执行:
- 阶段 A(候选方案分析):生成候选方案对比表和 AI 推荐倾向,输出草稿供用户决策参考。
- 阶段 B(决策定稿):用户提供决策结论后,填入 §5-§6,输出定稿。
⚠️ 阶段 A 完成后必须暂停,主 Session 向用户展示候选方案并等待用户决策。不允许跳过用户决策直接推进到阶段 B 或后续 Step。
输入
{docs_dir}/01-requirement.md
{docs_dir}/02-feasibility.md
- 阶段 B 额外输入:用户决策结论(选定方案、理由、决策者)+ 用户评审会议认定的遗留问题清单
自省提示(Mindset Prompts)
在执行关键步骤前,自问以下问题。这些问题把 SIG 评审会议的真实约束传递给 AI——方案选型权归属评审会议,AI 只负责候选对比与推荐倾向参考,任何一步替用户决策都会让未评审的方案进入下游。
- Before writing §1 (背景与问题), ask yourself: am I reading constraints from 01-requirement.md,还是在自行推断硬约束?硬约束应一行简述,不展开为表格。
- Before constructing §3 (候选方案对比表), ask yourself: 候选方案是 feasibility 给出的客观路径,还是我在自行扩充/裁剪?每个方案是否都有一句话描述 + 工作量 + 优势 + 劣势 + 风险 + AI 推荐倾向?对比表是否中立呈现,未夹带选型结论?
- Before writing §5 (决策结论), ask yourself: 这份结论来自用户(代表 SIG 评审),还是我在替用户拍板?§5 是否仍为占位?
- Before writing §6 (遗留问题), ask yourself: 这份清单是评审会议提供的,还是我在从 feasibility 条件项/风险自动推演?AI 推演会引入虚构风险项。
- Before pausing after 阶段 A, ask yourself: 我是否真的暂停等待用户决策了,还是直接推进到了阶段 B?status 是否保持
PendingDecision?
- Before triggering 单方案快速路径, ask yourself: feasibility §6 是否明确标注其他路径 ❌不可行 且有证据支撑?还是只有一个方案被标 ✅ 而其余未排除?触发条件不满足时必须回到标准两阶段流程。
- Before writing §6 占位 in 阶段 B(用户未提供遗留问题), ask yourself: 我是否保留了
[待用户评审会议后填写] 并保持 status=PendingDecision,而不是自行补全 §6 凑闭环?
阶段 A:候选方案分析(subagent 执行)
- 读取
reference/arch-decision-record.md 和输入文件。模板文件不带 03- 阶段编号前缀;03-arch-decision-record.md 仅作为 {docs_dir} 下的产物文件名。模板只定义产物结构(6个章节),流程规则(两阶段写入、AI不代行决策等)全部由本 skill 控制,不在模板中呈现。
- 定义决策问题和硬约束 → 写入 §1 背景与问题(约束条件写为一行简述,不展开为表格)。
- 从 feasibility 候选路径中提取方案,生成候选方案对比表(一句话描述 + 工作量 + 主要优势 + 主要劣势 + 主要风险 + AI 推荐倾向)→ 写入 §3 候选方案对比。
- §5 决策结论、§6 遗留问题 留空占位(标注
[待用户评审会议决策后填写])。注意:§5和§6均由用户提供,AI不代行。§5来自用户方案选型决策,§6来自用户评审会议认定的遗留问题清单。模板中 §5/§6 无阶段提示注释,这些流程规则由本 skill 控制。
- 输出到
{docs_dir}/03-arch-decision-record.md,frontmatter 添加 status: PendingDecision(模板 frontmatter 不含 status 字段,由 skill 注入)。
阶段 A 回传
≤15 行:路径 + 候选方案 A/B/C 一句话 + AI 推荐倾向 + 关键风险 + 阻塞条件。
阶段 B:决策定稿(subagent 执行)
前置条件: 用户已在 Step 0.3.2 明确提供决策结论。
- 读取
{docs_dir}/03-arch-decision-record.md(阶段 A 草稿)。
- 读取用户决策结论(由主 Session 注入 task 描述):
- 选定方案:方案 A / B / C(或自定义)
- 决策理由:用户给出的选择理由
- 决策者:拍板人姓名/角色
- 将用户结论写入 §5 决策结论(选定方案 + 理由 + 决策者)。
- 读取用户评审会议认定的遗留问题清单(由主 Session 注入 task 描述),写入 §6 决策后遗留问题。表格列结构:
| 遗留项 | 描述 | 负责人 | 解决动作 | 计划关闭时间 | 状态 |(与模板 arch-decision-record.md §6 一致)。每条遗留项必须包含:描述、负责人、解决动作、计划关闭时间。
- ⚠️ §6遗留问题必须由用户提供,AI 不代行生成。 AI不得从feasibility条件项或风险自动推演遗留问题。如用户未提供遗留问题清单,§6保留占位标注
[待用户评审会议后填写],status 保持 PendingDecision,不允许推进到后续 Step。
- 更新 frontmatter
status: Accepted(由 skill 注入,模板不含 status 字段)。
- 输出到
{docs_dir}/03-arch-decision-record.md。
阶段 B 回传
≤15 行:路径 + 选定方案 + 决策理由一句话 + 遗留问题数 + status(Accepted)。
阶段判定规则
| 阶段 | 触发条件 | status 值 | 产出 |
|---|
| A | Step 0.3.1(requirement+feasibility 就绪) | PendingDecision | §1-§3 填充,§5-§6 占位 |
| B | Step 0.3.3(用户提供决策结论 + 遗留问题清单) | Accepted | §5 填充(用户决策),§6 填充(用户遗留问题),全文定稿 |
不允许在阶段 A 直接输出 status: Accepted 或自行填写 §5 决策结论。
不允许在阶段 B 用户未提供遗留问题清单时输出 status: Accepted 或自行填充 §6。
强制规则
- 遗留问题闭环门禁:§6 每条遗留项必须有负责人、解决动作、计划关闭时间。任一遗留项缺少这三字段 → 阻断 Phase 0→1-9 交接。
- AI 推荐倾向仅为参考:§3候选方案对比表的"AI 推荐倾向"列仅供用户决策参考,不是最终结论。
单方案例外
只有一个客观可行方案时允许不构造虚假备选,但必须写明其他路径不可行的证据。
单方案快速路径(简化两阶段为一阶段):
当 feasibility 阶段已明确排除其他方案(客观上只有一条可行路径)时,可跳过候选方案对比表,采用简化流程:
- 阶段 A 简化:直接呈现唯一方案分析(方案描述 + 工作量 + 优势 + 不可行证据),不生成候选方案对比表(§3 标注"单方案场景,无可行备选")
- 单次确认:向用户一次性呈现唯一方案 + 其他路径不可行证据,用户一次确认采纳即可,无需两阶段暂停
- 用户确认采纳后直接定稿 §5(选定方案 + 理由:"唯一可行方案,无备选" + 决策者),status 直接设为
Accepted
触发条件:feasibility.md §6 结论中仅有一个方案标记为 ✅可行 或 ⚠️有条件可行,其余方案均标记为 ❌不可行,且不可行有证据支撑。
不满足触发条件时(≥2 个可行方案),仍执行标准两阶段流程。
职责边界
本 skill 只产出方案选型决策,不产出 Feature 评审基线(目标/非目标/AC/交付影响),这些由 ohos-req-feature-baseline skill 负责。
NEVER
- 禁止 AI 代行决策:§5 选定方案、决策理由和决策者由用户提供,AI 不代行(原因:方案选型权归属 SIG 评审会议,AI 推荐倾向仅为参考)
- 禁止 AI 生成遗留问题:§6 遗留问题由用户评审会议输入,不得从 feasibility 条件项或风险自动推演(原因:遗留问题反映用户认定的开放风险,AI 推演会引入虚构风险项)
- 禁止阶段 A 直接定稿:不允许在阶段 A 输出
status: Accepted 或自行填写 §5(原因:跳过用户决策会导致未评审的方案进入下游)
- 禁止用户未提供遗留问题时填充 §6:阶段 B 时如用户未提供,§6 保留占位,status 保持
PendingDecision(原因:遗留问题未经评审会议认定则不构成闭环)
自检
错误处理
| 场景 | 行为 |
|---|
| 01-02 未就绪 | 提示用户先完成上游 Step 0.1-0.2,列出缺失文档 |
| 用户未提供候选方案 | 追问用户:"请提供至少 2 个候选方案用于比较" |
| 用户未做决策(阶段A后) | 保持 status: PendingDecision,追问:"请提供评审会议决策结论" |
| 遗留问题未提供 | §6 保留占位符 [待用户评审会议后填写],不自行填充 |
输出
- 路径:
{docs_dir}/03-arch-decision-record.md
- 阶段 A 回传:路径、候选方案概要、AI 推荐倾向、关键风险、阻塞条件
- 阶段 B 回传:路径、选定方案、决策理由、遗留问题数、status