jsharness 1.8.3 → 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.
@@ -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
+ - **所有输出使用中文**
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: openspec-skill-creator
3
+ description: Skill 创建辅助技能 — 在 Harness 体系内创建新 Skill 的模板和流程,包含命名校验、Agent 关联和标准 SKILL.md 模板
4
+ alwaysApply: false
5
+ enabled: true
6
+ outputPath: .harness/skills/
7
+ ---
8
+
9
+ # Skill 创建辅助技能 (openspec-skill-creator)
10
+
11
+ > **Skill 类型**: 工程基础设施 Skill
12
+ > **触发场景**: 需要在 Harness 体系内创建新的 Skill
13
+ > **所属 Agent**: developer / solution-designer
14
+ > **输出路径**: `.harness/skills/{skill-name}/SKILL.md`
15
+
16
+ ---
17
+
18
+ ## 1. 核心职责
19
+
20
+ 作为 Skill 创建辅助技能,核心职责是:
21
+
22
+ 1. **生成符合 Harness 规范的 SKILL.md 文件**
23
+ 2. **校验 Skill 命名和冲突**
24
+
25
+ ### 1.1 输入
26
+
27
+ | 输入项 | 说明 | 必须 |
28
+ |--------|------|------|
29
+ | Skill 名称 | kebab-case 格式(如 `user-profile-export`) | 是 |
30
+ | Skill 描述 | 中文简要描述 | 是 |
31
+ | 所属 Agent | 可调用此 Skill 的 Agent 角色 | 是 |
32
+ | 输出路径 | Skill 产出的目标目录 | 否(有默认值) |
33
+
34
+ ### 1.2 输出
35
+
36
+ | 输出项 | 路径 | 格式 |
37
+ |--------|------|------|
38
+ | SKILL.md 文件 | `.harness/skills/{skill-name}/SKILL.md` | Markdown |
39
+
40
+ ---
41
+
42
+ ## 2. 命名校验
43
+
44
+ ### 2.1 格式校验
45
+
46
+ Skill 名称**必须**为 kebab-case 格式:
47
+
48
+ - ✅ 正确:`user-profile-export`、`data-sync`、`api-gateway`
49
+ - ❌ 错误:`UserProfileExport`、`user_profile_export`、`userProfileExport`
50
+
51
+ 如果用户提供的名称不符合格式,建议转换:
52
+ - `UserProfileExport` → `user-profile-export`
53
+ - `user_profile_export` → `user-profile-export`
54
+
55
+ ### 2.2 冲突校验
56
+
57
+ 检查 `.harness/skills/` 目录下是否已存在同名 Skill:
58
+ - 如果存在 → 拒绝创建,报告冲突并提示已有 Skill 的路径
59
+ - 如果不存在 → 继续创建
60
+
61
+ ---
62
+
63
+ ## 3. SKILL.md 标准模板
64
+
65
+ 生成的 SKILL.md 文件**必须**遵循以下模板结构:
66
+
67
+ ```markdown
68
+ ---
69
+ name: {skill-name}
70
+ description: {中文描述}
71
+ alwaysApply: false
72
+ enabled: true
73
+ outputPath: {输出路径}
74
+ ---
75
+
76
+ # {Skill 标题} ({skill-name})
77
+
78
+ > **Skill 类型**: {类型描述}
79
+ > **触发场景**: {何时使用}
80
+ > **所属 Agent**: {agent-name}
81
+ > **输出路径**: {输出路径}
82
+
83
+ ---
84
+
85
+ ## 1. 核心职责
86
+
87
+ 作为 {技能定位},核心职责是:
88
+
89
+ 1. **{职责1}**
90
+ 2. **{职责2}**
91
+
92
+ ### 1.1 输入
93
+
94
+ | 输入项 | 路径/说明 | 格式 | 必须 |
95
+ |--------|----------|------|------|
96
+ | {输入1} | {路径} | {格式} | 是 |
97
+
98
+ ### 1.2 输出
99
+
100
+ | 输出项 | 路径/说明 | 格式 | 必须 |
101
+ |--------|----------|------|------|
102
+ | {输出1} | {路径} | {格式} | 是 |
103
+
104
+ ---
105
+
106
+ ## 2. 执行步骤
107
+
108
+ ### Step 1: {步骤1描述}
109
+
110
+ {步骤1详细说明}
111
+
112
+ ### Step 2: {步骤2描述}
113
+
114
+ {步骤2详细说明}
115
+
116
+ ---
117
+
118
+ ## 3. 约束
119
+
120
+ - **{约束1}**
121
+ - **{约束2}**
122
+ - **所有输出使用中文**
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 4. 执行步骤
128
+
129
+ ### Step 1: 获取 Skill 信息
130
+
131
+ 与用户确认:
132
+ 1. Skill 名称(kebab-case)
133
+ 2. Skill 描述(中文)
134
+ 3. 所属 Agent
135
+ 4. 输出路径(可选,默认 `.harness/doc/`)
136
+
137
+ ### Step 2: 执行命名校验
138
+
139
+ 1. 检查名称是否符合 kebab-case 格式
140
+ 2. 检查是否与已有 Skill 冲突
141
+
142
+ ### Step 3: 生成 SKILL.md
143
+
144
+ 基于标准模板生成 SKILL.md 文件,填入用户提供的信息。
145
+
146
+ ### Step 4: 确认
147
+
148
+ 展示生成的 SKILL.md 内容摘要,请用户确认。
149
+
150
+ ---
151
+
152
+ ## 5. 约束
153
+
154
+ - **仅在 Harness 体系内创建** — 产出路径必须在 `.harness/skills/` 下
155
+ - **遵循命名规范** — 名称必须 kebab-case,不得与已有 Skill 冲突
156
+ - **遵循模板结构** — 必须包含 frontmatter、核心职责、输入输出、执行步骤、约束五个部分
157
+ - **所有输出使用中文**
@@ -52,9 +52,15 @@ workflow:
52
52
  max_turns: 10
53
53
 
54
54
  inputs:
55
- - name: "原始需求"
56
- source: "pm_routing"
57
- format: "natural_language / issue"
55
+ - name: "原始需求文件"
56
+ source: "origin_requirements"
57
+ path: ".harness/doc/originRequirements/{filename}"
58
+ format: "markdown"
59
+ required: true
60
+ - name: "ttspec change 目录"
61
+ source: "ttspec_change"
62
+ path: ".harness/doc/ttspec/change/{name}/"
63
+ format: "directory"
58
64
  required: true
59
65
  - name: "TaskBoard 状态"
60
66
  source: "task_board"
@@ -65,17 +71,44 @@ workflow:
65
71
  format: "markdown"
66
72
  required: true
67
73
 
74
+ internal_steps:
75
+ - step: 1
76
+ name: "explore"
77
+ description: "深度探索需求 — 范围边界、受影响角色、假设与前提、风险面"
78
+ input: "原始需求文件"
79
+ output: ".harness/doc/ttspec/change/{name}/explore-notes.md"
80
+ command: "explore"
81
+ max_turns: 10
82
+ - step: 2
83
+ name: "propose"
84
+ description: "生成结构化提案 — proposal/design/specs/tasks"
85
+ input: "explore-notes.md"
86
+ output: ".harness/doc/ttspec/change/{name}/ (proposal.md, design.md, specs/, tasks.md)"
87
+ command: "propose"
88
+ - step: 3
89
+ name: "prd-generation"
90
+ description: "使用 prd-generator 技能生成标准化 PRD"
91
+ input: "explore-notes.md + propose 产出"
92
+ output: ".harness/doc/prd/requirements-{task-id}.md"
93
+ skill: "prd-generator"
94
+
68
95
  outputs:
69
- - name: "需求文档"
96
+ - name: "explore 笔记"
70
97
  format: "markdown"
71
- template: ".harness/templates/requirements.md"
98
+ path: ".harness/doc/ttspec/change/{name}/explore-notes.md"
99
+ required: true
100
+ - name: "结构化提案"
101
+ format: "directory"
102
+ path: ".harness/doc/ttspec/change/{name}/"
72
103
  required: true
73
- - name: "验收标准列表"
104
+ - name: "需求文档(PRD)"
74
105
  format: "markdown"
106
+ path: ".harness/doc/prd/requirements-{task-id}.md"
107
+ template: ".harness/skills/prd-generator/SKILL.md"
75
108
  required: true
76
- - name: "用户故事集"
109
+ - name: "TaskBoard 更新"
77
110
  format: "markdown"
78
- required: false
111
+ required: true
79
112
 
80
113
  transitions:
81
114
  - to: solution-design