jsharness 1.8.2 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.harness/README.md +123 -57
  2. package/.harness/agents/{prompt-templates.md → agent-dispatcher.md} +304 -21
  3. package/.harness/agents/code-reviewer/contract.yaml +1 -1
  4. package/.harness/agents/code-reviewer/prompt.md +1 -1
  5. package/.harness/agents/code-reviewer.md +1 -1
  6. package/.harness/agents/developer/contract.yaml +0 -1
  7. package/.harness/agents/developer/prompt.md +0 -1
  8. package/.harness/agents/developer.md +0 -1
  9. package/.harness/agents/gate-controller/contract.yaml +1 -1
  10. package/.harness/agents/gate-controller/prompt.md +1 -1
  11. package/.harness/agents/gate-controller.md +1 -1
  12. package/.harness/agents/project-manager/contract.yaml +4 -1
  13. package/.harness/agents/project-manager/prompt.md +9 -1
  14. package/.harness/agents/project-manager.md +9 -1
  15. package/.harness/agents/requirements-analyst/contract.yaml +5 -3
  16. package/.harness/agents/requirements-analyst/prompt.md +39 -35
  17. package/.harness/agents/requirements-analyst.md +39 -35
  18. package/.harness/agents/solution-designer/contract.yaml +1 -1
  19. package/.harness/agents/solution-designer/prompt.md +1 -1
  20. package/.harness/agents/solution-designer.md +1 -1
  21. package/.harness/agents/tester/contract.yaml +1 -1
  22. package/.harness/agents/tester/prompt.md +1 -1
  23. package/.harness/agents/tester.md +1 -1
  24. package/.harness/commands/js/apply.md +31 -0
  25. package/.harness/commands/js/archive.md +31 -0
  26. package/.harness/commands/js/explore.md +31 -0
  27. package/.harness/commands/js/propose.md +31 -0
  28. package/.harness/dev-map/overview.md +5 -4
  29. package/.harness/doc/originRequirements/.gitkeep +0 -0
  30. package/.harness/doc/originRequirements/2026-05-22-sample-requirement.md +12 -0
  31. package/.harness/doc/originRequirements/README.md +36 -0
  32. package/.harness/doc/ttspec/README.md +33 -0
  33. package/.harness/doc/ttspec/change/.gitkeep +0 -0
  34. package/.harness/doc/ttspec/change/archive/.gitkeep +0 -0
  35. package/.harness/doc/ttspec/specs/.gitkeep +0 -0
  36. package/.harness/rules/global/process-discipline.md +10 -1
  37. package/.harness/skills/architecture-designer/SKILL.md +2 -0
  38. package/.harness/skills/docs-update/SKILL.md +2 -0
  39. package/.harness/skills/openspec-apply/SKILL.md +90 -0
  40. package/.harness/skills/openspec-archive/SKILL.md +77 -0
  41. package/.harness/skills/openspec-explore/SKILL.md +135 -0
  42. package/.harness/skills/openspec-propose/SKILL.md +178 -0
  43. package/.harness/skills/openspec-skill-creator/SKILL.md +157 -0
  44. package/.harness/skills/prd-generator/SKILL.md +584 -0
  45. package/.harness/workflow/definition.yaml +41 -8
  46. package/files/analyze-requirements.md +197 -0
  47. package/lib/index.mjs +152 -35
  48. package/package.json +1 -1
  49. package/.harness/skills/build/SKILL.md +0 -199
  50. /package/.harness/{docs → doc}/integration-test-plan.md +0 -0
  51. /package/.harness/{docs → doc}/team-guidelines/README.md +0 -0
  52. /package/.harness/{docs → doc}/team-guidelines/arch-team.md +0 -0
  53. /package/.harness/{docs → doc}/team-guidelines/collaboration.md +0 -0
  54. /package/.harness/{docs → doc}/team-guidelines/pm-team.md +0 -0
  55. /package/.harness/{docs → doc}/team-guidelines/qa-team.md +0 -0
  56. /package/.harness/{docs → doc}/team-guidelines/rd-team.md +0 -0
  57. /package/.harness/{docs → doc}/training-materials.md +0 -0
@@ -0,0 +1,33 @@
1
+ # ttspec — 变更规格管理目录
2
+
3
+ 本目录用于存放 Harness 流程中 OpenSpec 的产出物,包括变更管理(change)和能力规格(specs)。
4
+
5
+ ## 目录结构
6
+
7
+ ```
8
+ .harness/doc/ttspec/
9
+ ├── change/ # 变更目录(每个需求对应一个子目录)
10
+ │ ├── archive/ # 已归档的变更
11
+ │ └── {change-name}/ # 活跃变更
12
+ │ ├── explore-notes.md # explore 阶段产出
13
+ │ ├── proposal.md # propose 阶段产出
14
+ │ ├── design.md # 设计决策
15
+ │ ├── specs/ # 能力规格
16
+ │ └── tasks.md # 实施任务列表
17
+ └── specs/ # 全局能力规格
18
+ └── {capability}/
19
+ └── spec.md
20
+ ```
21
+
22
+ ## 变更命名规则
23
+
24
+ change 名称从原始需求文件名派生:去除日期前缀,保留 kebab-case 标题。
25
+
26
+ 示例:需求文件 `2026-05-22-user-avatar-upload.md` → change 名 `user-avatar-upload`
27
+
28
+ ## 与 openspec/ 的关系
29
+
30
+ - `openspec/` — OpenSpec CLI 原生操作目录(历史数据保持不动)
31
+ - `.harness/doc/ttspec/` — Harness 流程中的变更管理产出目录
32
+
33
+ > 本目录由 Harness Engineering 系统管理。
File without changes
File without changes
File without changes
@@ -126,12 +126,21 @@ PM Agent 的职责是**路由和协调**,不是技术判断:
126
126
 
127
127
  | 阶段 | 必须交付物 | 可选交付物 |
128
128
  |------|-----------|-----------|
129
- | **需求分析** | 需求文档(含验收标准)、TaskBoard 更新 | 竞品分析 |
129
+ | **需求分析** | explore 笔记、结构化提案(proposal/design/specs/tasks)、PRD 需求文档(含验收标准)、TaskBoard 更新 | 竞品分析 |
130
130
  | **方案设计** | 技术设计文档、接口定义 | ADR 决策记录 |
131
131
  | **开发实现** | 代码(已 Commit)、单元测试、dev-map 更新 | 技术笔记 |
132
132
  | **代码审查** | 审查报告(PASS/FAIL 结论 + 逐项打分) | 重构建议 |
133
133
  | **测试验证** | 测试报告(覆盖范围 + 结果 + 缺陷列表) | 性能报告 |
134
134
 
135
+ ### 4.2 文件存放规范
136
+
137
+ | 文档类型 | 存放路径 | 说明 |
138
+ |---------|---------|------|
139
+ | 原始需求文件 | `.harness/doc/originRequirements/` | 命名格式:`{YYYY-MM-DD}-{kebab-case-title}.md`,至少包含 `## 背景` 和 `## 期望` |
140
+ | 变更管理产出 | `.harness/doc/ttspec/change/` | 每个需求对应一个 change 目录,名称从原始需求文件名派生 |
141
+ | 能力规格 | `.harness/doc/ttspec/specs/` | 全局能力规格定义 |
142
+ | PRD 文档 | `.harness/doc/prd/` | 标准化 PRD 文档 |
143
+
135
144
  ### 4.2 交付物质量标准
136
145
 
137
146
  - 所有文档必须是 **Markdown 格式**
@@ -3,6 +3,7 @@ name: architecture-designer
3
3
  description: 专业架构设计技能 — C4 架构模型、用例图、领域模型、服务设计、ER图、类图的全套设计模板和 Mermaid 规范,支持简单/复杂需求分流
4
4
  alwaysApply: false
5
5
  enabled: true
6
+ outputPath: .harness/doc/design/
6
7
  ---
7
8
 
8
9
  # Architecture Designer Skill
@@ -10,6 +11,7 @@ enabled: true
10
11
  > **Skill 类型**: 方案设计辅助 Skill
11
12
  > **触发场景**: 系统架构方案设计、技术设计文档编写、多维度架构评审优化
12
13
  > **所属 Agent**: solution-designer(方案设计师在方案设计阶段引用本 skill)
14
+ > **输出路径**: 生成的架构设计文档写入项目根目录下 `.harness/doc/design/` 目录
13
15
 
14
16
  ---
15
17
 
@@ -3,12 +3,14 @@ name: docs-update
3
3
  description: 文档更新技能 — CHANGELOG 更新、API 文档生成(JSDoc/Swagger)、README 维护、dev-map 同步及 ADR 决策记录
4
4
  alwaysApply: false
5
5
  enabled: true
6
+ outputPath: .harness/doc/
6
7
  ---
7
8
 
8
9
  # 文档更新技能 (docs-update)
9
10
 
10
11
  > **执行角色**: 开发实现 Agent / 需求分析 Agent / 方案设计 Agent
11
12
  > **触发时机**: 每次代码变更后、阶段交付前
13
+ > **输出路径**: 文档更新产物写入项目根目录下 `.harness/doc/` 目录(CHANGELOG、ADR 等按子目录组织)
12
14
 
13
15
  ---
14
16
 
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: openspec-apply
3
+ description: 变更实施技能 — 从 ttspec change 的 tasks.md 读取任务列表并逐步实施,支持暂停条件和最小变更原则
4
+ alwaysApply: false
5
+ enabled: true
6
+ outputPath: .harness/doc/ttspec/change/
7
+ ---
8
+
9
+ # 变更实施技能 (openspec-apply)
10
+
11
+ > **Skill 类型**: 开发实施辅助 Skill
12
+ > **触发场景**: propose 产出完成且用户确认后,逐步实施 tasks.md 中的任务
13
+ > **所属 Agent**: developer / requirements-analyst
14
+ > **输出路径**: `.harness/doc/ttspec/change/{name}/tasks.md`(更新复选框状态)
15
+
16
+ ---
17
+
18
+ ## 1. 核心职责
19
+
20
+ 作为变更实施技能,核心职责是:
21
+
22
+ 1. **从 tasks.md 读取待完成任务**
23
+ 2. **逐任务实施代码/文档变更**
24
+ 3. **实时更新任务完成状态**
25
+
26
+ ### 1.1 输入
27
+
28
+ | 输入项 | 路径 | 格式 | 必须 |
29
+ |--------|------|------|------|
30
+ | 任务列表 | `.harness/doc/ttspec/change/{name}/tasks.md` | Markdown | 是 |
31
+ | 提案文档 | `.harness/doc/ttspec/change/{name}/proposal.md` | Markdown | 是 |
32
+ | 设计文档 | `.harness/doc/ttspec/change/{name}/design.md` | Markdown | 是 |
33
+ | 能力规格 | `.harness/doc/ttspec/change/{name}/specs/` | Markdown | 是 |
34
+
35
+ ### 1.2 输出
36
+
37
+ | 输出项 | 路径 | 格式 | 必须 |
38
+ |--------|------|------|------|
39
+ | 更新后的任务列表 | `.harness/doc/ttspec/change/{name}/tasks.md` | Markdown | 是 |
40
+ | 实施的代码/文档变更 | 对应源码/文档位置 | 各种 | 是 |
41
+ | 实施总结 | 终端输出 | 文本 | 是 |
42
+
43
+ ---
44
+
45
+ ## 2. 执行步骤
46
+
47
+ ### Step 1: 读取任务列表
48
+
49
+ 从 `.harness/doc/ttspec/change/{name}/tasks.md` 读取任务列表,识别所有待完成任务(标记为 `- [ ]`)。
50
+
51
+ ### Step 2: 逐任务实施
52
+
53
+ 对每个待完成任务:
54
+
55
+ 1. 读取任务描述和涉及的文件路径
56
+ 2. 读取相关的 specs 和 design 文档获取上下文
57
+ 3. 实施代码/文档变更
58
+ 4. **立即**将任务标记为已完成:将 `- [ ]` 改为 `- [x]`
59
+ 5. 继续下一个任务
60
+
61
+ ### Step 3: 暂停条件
62
+
63
+ 以下情况**必须暂停**:
64
+
65
+ | 暂停条件 | 处理方式 |
66
+ |---------|---------|
67
+ | 任务描述不清晰 | 暂停并询问用户澄清 |
68
+ | 实施中发现设计问题 | 暂停并建议更新 design/specs |
69
+ | 遇到错误或阻塞 | 暂停并报告,等待指导 |
70
+ | 用户中断 | 保存当前进度并停止 |
71
+
72
+ ### Step 4: 完成后
73
+
74
+ 所有任务完成后:
75
+
76
+ 1. 显示实施总结:
77
+ - 完成的任务总数
78
+ - 修改的文件列表
79
+ - 遗留问题(如有)
80
+ 2. 建议用户使用 `openspec-archive` Skill 归档
81
+
82
+ ---
83
+
84
+ ## 3. 约束
85
+
86
+ - **保持变更最小化** — 每个任务只做必要修改,不做额外重构
87
+ - **立即标记完成** — 完成任务后立即更新 tasks.md 中的复选框
88
+ - **遇到阻塞暂停** — 不猜测、不绕过,暂停并报告
89
+ - **顺序执行** — 按 tasks.md 中的顺序执行,不跳跃
90
+ - **所有输出使用中文**
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: openspec-archive
3
+ description: 变更归档技能 — 将已完成的 ttspec change 归档到 archive 目录,包含状态检查、归档执行和归档摘要
4
+ alwaysApply: false
5
+ enabled: true
6
+ outputPath: .harness/doc/ttspec/change/archive/
7
+ ---
8
+
9
+ # 变更归档技能 (openspec-archive)
10
+
11
+ > **Skill 类型**: 项目管理辅助 Skill
12
+ > **触发场景**: 所有任务实施完成且用户确认后,归档变更
13
+ > **所属 Agent**: project-manager / developer
14
+ > **归档路径**: `.harness/doc/ttspec/change/archive/{YYYY-MM-DD}-{name}/`
15
+
16
+ ---
17
+
18
+ ## 1. 核心职责
19
+
20
+ 作为变更归档技能,核心职责是:
21
+
22
+ 1. **验证变更状态是否可归档**
23
+ 2. **执行归档操作**
24
+ 3. **输出归档摘要**
25
+
26
+ ### 1.1 输入
27
+
28
+ | 输入项 | 路径 | 格式 | 必须 |
29
+ |--------|------|------|------|
30
+ | 变更目录 | `.harness/doc/ttspec/change/{name}/` | 目录 | 是 |
31
+ | 任务列表 | `.harness/doc/ttspec/change/{name}/tasks.md` | Markdown | 是 |
32
+
33
+ ### 1.2 输出
34
+
35
+ | 输出项 | 路径 | 格式 | 必须 |
36
+ |--------|------|------|------|
37
+ | 归档目录 | `.harness/doc/ttspec/change/archive/{YYYY-MM-DD}-{name}/` | 目录 | 是 |
38
+ | 归档摘要 | 终端输出 | 文本 | 是 |
39
+
40
+ ---
41
+
42
+ ## 2. 执行步骤
43
+
44
+ ### Step 1: 检查变更状态
45
+
46
+ 确认 `.harness/doc/ttspec/change/{name}/tasks.md` 中所有任务均已标记为 `- [x]`。
47
+
48
+ - 如果所有任务已完成 → 直接进入归档
49
+ - 如果存在未完成任务 → 提示用户是否确认归档
50
+
51
+ ### Step 2: 执行归档
52
+
53
+ 将 `.harness/doc/ttspec/change/{name}/` **整个目录**移动到 `.harness/doc/ttspec/change/archive/{YYYY-MM-DD}-{name}/`。
54
+
55
+ 归档目录将包含所有原始文件:
56
+ - `proposal.md`
57
+ - `design.md`
58
+ - `specs/` 目录
59
+ - `tasks.md`
60
+ - `explore-notes.md`(如存在)
61
+
62
+ ### Step 3: 输出归档摘要
63
+
64
+ ```
65
+ ✅ 变更 "{name}" 已归档
66
+ 归档位置:.harness/doc/ttspec/change/archive/{date}-{name}/
67
+ 包含文件:proposal.md, design.md, specs/, tasks.md
68
+ ```
69
+
70
+ ---
71
+
72
+ ## 3. 约束
73
+
74
+ - **归档是移动操作** — 原目录从活跃区消失,归档后通过 archive 目录查阅历史
75
+ - **日期格式** — 归档目录名使用 `{YYYY-MM-DD}-{name}` 格式
76
+ - **未完成任务需确认** — 存在未完成任务时必须用户明确确认才能归档
77
+ - **所有输出使用中文**
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: openspec-explore
3
+ description: 需求深度探索技能 — 四维度探索框架(范围边界/受影响角色/假设前提/风险面)、探索笔记模板、完成判定标准,产出存放于 .harness/doc/ttspec/change/{name}/explore-notes.md
4
+ alwaysApply: false
5
+ enabled: true
6
+ outputPath: .harness/doc/ttspec/change/
7
+ ---
8
+
9
+ # 需求深度探索技能 (openspec-explore)
10
+
11
+ > **Skill 类型**: 需求分析辅助 Skill
12
+ > **触发场景**: 收到新需求后、生成任何文档之前,进行需求深度探索
13
+ > **所属 Agent**: requirements-analyst(需求分析师在需求分析阶段引用本 skill)
14
+ > **输出路径**: `.harness/doc/ttspec/change/{name}/explore-notes.md`
15
+
16
+ ---
17
+
18
+ ## 1. 核心职责
19
+
20
+ 作为需求深度探索技能,核心职责是:
21
+
22
+ 1. **围绕需求进行四维度深度探索**
23
+ 2. **产出结构化探索笔记**
24
+
25
+ ### 1.1 前置条件
26
+
27
+ - 原始需求文件已存在于 `.harness/doc/originRequirements/` 目录
28
+ - 对应的 ttspec change 目录已创建于 `.harness/doc/ttspec/change/{name}/`
29
+ - change 名称 `{name}` 与原始需求文件的对应关系:change 名 `user-avatar-upload` 对应文件 `2026-05-22-user-avatar-upload.md`
30
+
31
+ ### 1.2 输入
32
+
33
+ | 输入项 | 路径 | 格式 | 必须 |
34
+ |--------|------|------|------|
35
+ | 原始需求文件 | `.harness/doc/originRequirements/{filename}` | Markdown | 是 |
36
+ | ttspec change 目录 | `.harness/doc/ttspec/change/{name}/` | 目录 | 是 |
37
+ | dev-map 参考文档 | `.harness/dev-map/` | Markdown | 否 |
38
+
39
+ ### 1.3 输出
40
+
41
+ | 输出项 | 路径 | 格式 | 必须 |
42
+ |--------|------|------|------|
43
+ | 探索笔记 | `.harness/doc/ttspec/change/{name}/explore-notes.md` | Markdown | 是 |
44
+
45
+ ---
46
+
47
+ ## 2. 四维度探索框架
48
+
49
+ 围绕以下四个维度与用户深度讨论,**所有维度必须全部覆盖**:
50
+
51
+ ### 2.1 范围边界
52
+
53
+ - **包含什么?** — 明确本次需求要做什么
54
+ - **排除什么?** — 明确本次需求不做什么
55
+ - **边界在哪?** — 哪些是灰色地带,需要用户确认
56
+
57
+ ### 2.2 受影响角色
58
+
59
+ - 哪些用户角色会受影响?
60
+ - 他们各自的诉求是什么?
61
+ - 角色之间是否存在冲突的诉求?
62
+
63
+ ### 2.3 假设与前提
64
+
65
+ - 有哪些隐含假设?
66
+ - 这些假设是否成立?
67
+ - 如果假设不成立,需求是否需要调整?
68
+
69
+ ### 2.4 风险面
70
+
71
+ - 存在哪些风险(技术/业务/组织)?
72
+ - 如何缓解这些风险?
73
+ - 哪些风险是可接受的,哪些必须规避?
74
+
75
+ ---
76
+
77
+ ## 3. 探索笔记模板
78
+
79
+ 讨论完成后,将结构化摘要写入 `.harness/doc/ttspec/change/{name}/explore-notes.md`,**必须**包含以下章节:
80
+
81
+ ```markdown
82
+ # 需求探索笔记:{change-name}
83
+
84
+ ## 来源
85
+ - 原始需求文件:.harness/doc/originRequirements/{filename}
86
+
87
+ ## 范围边界
88
+ - **包含**:...
89
+ - **排除**:...
90
+
91
+ ## 受影响角色
92
+ - 角色A:...
93
+
94
+ ## 假设与前提
95
+ - 假设1:...
96
+
97
+ ## 风险识别
98
+ - 风险1:...缓解措施:...
99
+
100
+ ## 未决问题
101
+ - 问题1:...
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 4. 执行步骤
107
+
108
+ ### Step 1: 读取原始需求
109
+
110
+ 从 `.harness/doc/originRequirements/` 中读取对应的原始需求文件。
111
+
112
+ ### Step 2: 进入探索模式
113
+
114
+ 围绕四个维度与用户深度讨论,每个维度至少有一个确认项。
115
+
116
+ ### Step 3: 产出探索笔记
117
+
118
+ 按模板格式写入 `.harness/doc/ttspec/change/{name}/explore-notes.md`。
119
+
120
+ ### Step 4: 完成判定
121
+
122
+ - 用户明确确认探索内容满意,或
123
+ - 探索轮次达到上限(maxTurns: 10)且用户同意推进
124
+
125
+ 完成后进入 propose 步骤(调用 `openspec-propose` Skill)。
126
+
127
+ ---
128
+
129
+ ## 5. 约束
130
+
131
+ - **禁止跳过** — 新需求必须先 explore 再 propose
132
+ - **禁止编造** — 信息不足则追问,不编造假设
133
+ - **四个维度必须全覆盖** — 缺少任何一个维度的探索都视为未完成
134
+ - **轮次上限** — 最多 10 轮讨论,达到上限时总结当前发现并询问是否推进
135
+ - **所有输出使用中文**
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: openspec-propose
3
+ description: 结构化提案技能 — 从探索笔记生成 proposal/design/specs/tasks 的完整流程、产出物规范、与 PRD 的衔接,产出存放于 .harness/doc/ttspec/change/{name}/
4
+ alwaysApply: false
5
+ enabled: true
6
+ outputPath: .harness/doc/ttspec/change/
7
+ ---
8
+
9
+ # 结构化提案技能 (openspec-propose)
10
+
11
+ > **Skill 类型**: 需求分析辅助 Skill
12
+ > **触发场景**: explore 探索完成后,生成结构化提案
13
+ > **所属 Agent**: requirements-analyst(需求分析师在需求分析阶段引用本 skill)
14
+ > **输出路径**: `.harness/doc/ttspec/change/{name}/`(proposal.md, design.md, specs/, tasks.md)
15
+
16
+ ---
17
+
18
+ ## 1. 核心职责
19
+
20
+ 作为结构化提案技能,核心职责是:
21
+
22
+ 1. **基于探索笔记生成结构化提案**
23
+ 2. **衔接 PRD 生成**
24
+
25
+ ### 1.1 前置条件
26
+
27
+ - explore 笔记已存在于 `.harness/doc/ttspec/change/{name}/explore-notes.md`
28
+ - 禁止跳过 explore 直接 propose
29
+
30
+ ### 1.2 输入
31
+
32
+ | 输入项 | 路径 | 格式 | 必须 |
33
+ |--------|------|------|------|
34
+ | 探索笔记 | `.harness/doc/ttspec/change/{name}/explore-notes.md` | Markdown | 是 |
35
+ | 原始需求文件 | `.harness/doc/originRequirements/{filename}` | Markdown | 否(已含在探索笔记中) |
36
+ | dev-map 参考文档 | `.harness/dev-map/` | Markdown | 否 |
37
+
38
+ ### 1.3 输出
39
+
40
+ | 输出项 | 路径 | 格式 | 必须 |
41
+ |--------|------|------|------|
42
+ | 提案文档 | `.harness/doc/ttspec/change/{name}/proposal.md` | Markdown | 是 |
43
+ | 设计文档 | `.harness/doc/ttspec/change/{name}/design.md` | Markdown | 是 |
44
+ | 能力规格 | `.harness/doc/ttspec/change/{name}/specs/{capability}/spec.md` | Markdown | 是 |
45
+ | 任务列表 | `.harness/doc/ttspec/change/{name}/tasks.md` | Markdown | 是 |
46
+
47
+ ---
48
+
49
+ ## 2. 产出物规范
50
+
51
+ ### 2.1 proposal.md — 提案文档
52
+
53
+ **必须**包含以下章节:
54
+
55
+ ```markdown
56
+ ## 为什么
57
+ <!-- 变更动机和背景 -->
58
+
59
+ ## 变更内容
60
+ <!-- 具体要做什么 -->
61
+
62
+ ## 能力
63
+
64
+ ### 新增能力
65
+ - `<capability-name>`: <简要描述>
66
+
67
+ ### 修改能力
68
+ - `<existing-capability>`: <变更什么>
69
+
70
+ ## 影响
71
+ | 影响域 | 具体内容 |
72
+ |--------|----------|
73
+ ```
74
+
75
+ **强制要求**:proposal 必须包含 `来源: .harness/doc/originRequirements/{filename}` 引用。
76
+
77
+ ### 2.2 design.md — 设计文档
78
+
79
+ **必须**包含以下章节:
80
+
81
+ ```markdown
82
+ ## 背景
83
+ <!-- 当前状况和问题 -->
84
+
85
+ ## 目标 / 非目标
86
+ **目标:**
87
+ <!-- 本设计要达成什么 -->
88
+
89
+ **非目标:**
90
+ <!-- 明确排除什么 -->
91
+
92
+ ## 设计决策
93
+ ### 决策 1: <标题>
94
+ **选择**: ...
95
+ **替代方案**: ...
96
+ **理由**: ...
97
+
98
+ ## 风险与权衡
99
+ | 风险 | 缓解措施 |
100
+ |------|---------|
101
+ ```
102
+
103
+ ### 2.3 specs/{capability}/spec.md — 能力规格
104
+
105
+ 为每个能力(在 proposal 的"能力"章节中列出)生成独立规格文件。
106
+
107
+ **必须**遵循以下格式:
108
+
109
+ ```markdown
110
+ ## ADDED Requirements
111
+
112
+ ### Requirement: <需求名称>
113
+ <需求描述,使用 SHALL/MUST>
114
+
115
+ #### Scenario: <场景名称>
116
+ - **WHEN** <条件>
117
+ - **THEN** <预期结果>
118
+ ```
119
+
120
+ **关键规则**:
121
+ - 每个 Requirement 必须至少有一个 Scenario
122
+ - Scenario 必须使用 `####`(4 个井号)
123
+ - 使用 WHEN/THEN 格式描述验收条件
124
+
125
+ ### 2.4 tasks.md — 任务列表
126
+
127
+ **必须**遵循以下格式:
128
+
129
+ ```markdown
130
+ ## 1. <任务分组名>
131
+
132
+ - [ ] 1.1 <任务描述>
133
+ - [ ] 1.2 <任务描述>
134
+ ```
135
+
136
+ **关键规则**:
137
+ - 使用 `- [ ]` 复选框格式(apply 阶段依赖此格式追踪进度)
138
+ - 任务足够小,可在一次会话中完成
139
+ - 按依赖顺序排列
140
+ - 包含涉及的文件路径
141
+
142
+ ---
143
+
144
+ ## 3. 执行步骤
145
+
146
+ ### Step 1: 读取探索笔记
147
+
148
+ 从 `.harness/doc/ttspec/change/{name}/explore-notes.md` 读取探索结果。
149
+
150
+ ### Step 2: 生成 proposal.md
151
+
152
+ 基于探索笔记(而非原始需求文本)生成提案文档。
153
+
154
+ ### Step 3: 生成 design.md
155
+
156
+ 基于提案生成设计决策文档。
157
+
158
+ ### Step 4: 生成 specs/
159
+
160
+ 为每个能力生成独立的 spec.md 文件。
161
+
162
+ ### Step 5: 生成 tasks.md
163
+
164
+ 生成实施任务列表。
165
+
166
+ ### Step 6: 衔接 PRD
167
+
168
+ 所有 propose 产出完成后,调用 `prd-generator` 技能,以探索笔记和 propose 产出作为输入上下文,在 `.harness/doc/prd/requirements-{task-id}.md` 生成标准化 PRD。
169
+
170
+ ---
171
+
172
+ ## 4. 约束
173
+
174
+ - **必须基于探索笔记生成** — 禁止跳过 explore 直接 propose
175
+ - **proposal 必须引用来源** — 包含 `来源: .harness/doc/originRequirements/{filename}`
176
+ - **specs 必须使用 WHEN/THEN 格式** — 确保可测试
177
+ - **tasks 必须使用复选框格式** — 确保 apply 阶段可追踪
178
+ - **所有输出使用中文**