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.
- package/.harness/agents/project-manager/contract.yaml +3 -0
- package/.harness/agents/project-manager/prompt.md +8 -0
- package/.harness/agents/project-manager.md +8 -0
- package/.harness/agents/requirements-analyst/contract.yaml +3 -1
- package/.harness/agents/requirements-analyst/prompt.md +34 -9
- package/.harness/agents/requirements-analyst.md +34 -9
- package/.harness/commands/js/apply.md +31 -0
- package/.harness/commands/js/archive.md +31 -0
- package/.harness/commands/js/explore.md +31 -0
- package/.harness/commands/js/propose.md +31 -0
- package/.harness/doc/originRequirements/.gitkeep +0 -0
- package/.harness/doc/originRequirements/2026-05-22-sample-requirement.md +12 -0
- package/.harness/doc/originRequirements/README.md +36 -0
- package/.harness/doc/ttspec/README.md +33 -0
- package/.harness/doc/ttspec/change/.gitkeep +0 -0
- package/.harness/doc/ttspec/change/archive/.gitkeep +0 -0
- package/.harness/doc/ttspec/specs/.gitkeep +0 -0
- package/.harness/rules/global/process-discipline.md +10 -1
- package/.harness/skills/openspec-apply/SKILL.md +90 -0
- package/.harness/skills/openspec-archive/SKILL.md +77 -0
- package/.harness/skills/openspec-explore/SKILL.md +135 -0
- package/.harness/skills/openspec-propose/SKILL.md +178 -0
- package/.harness/skills/openspec-skill-creator/SKILL.md +157 -0
- package/.harness/workflow/definition.yaml +41 -8
- package/lib/index.mjs +151 -4
- package/package.json +1 -1
|
@@ -5,7 +5,9 @@ version: "1.0.0"
|
|
|
5
5
|
tools:
|
|
6
6
|
- search_content
|
|
7
7
|
- read_file
|
|
8
|
+
- write_to_file
|
|
8
9
|
- list_files
|
|
10
|
+
- search_file
|
|
9
11
|
- ask_followup_question
|
|
10
12
|
|
|
11
13
|
model: lite
|
|
@@ -26,6 +28,7 @@ triggers:
|
|
|
26
28
|
|
|
27
29
|
permissions:
|
|
28
30
|
- read
|
|
31
|
+
- write
|
|
29
32
|
|
|
30
33
|
safetyLevel: low
|
|
31
34
|
dependencies: []
|
|
@@ -50,6 +50,14 @@ outputFormat: .harness/doc/project/routing-decision.md
|
|
|
50
50
|
## 你的工作流
|
|
51
51
|
收到需求 → 分类 → 选流程变体 → 分配给需求分析师 → 更新 TaskBoard → 追踪进度
|
|
52
52
|
|
|
53
|
+
## 需求发现与路由(新增)
|
|
54
|
+
当收到新需求时,PM 必须执行以下流程:
|
|
55
|
+
|
|
56
|
+
1. **扫描原始需求目录** — 检查 `.harness/doc/originRequirements/` 中是否有新的需求文件(格式:`{YYYY-MM-DD}-{kebab-case-title}.md`)
|
|
57
|
+
2. **创建 ttspec change** — 为每个新需求在 `.harness/doc/ttspec/change/` 下创建对应 change,名称从文件名派生(去除日期前缀)
|
|
58
|
+
3. **路由给需求分析师** — 将原始需求文件路径和 ttspec change 目录路径一起传递给需求分析师
|
|
59
|
+
4. **追踪 change 状态** — 关注 change 从 explore → propose → prd 的推进
|
|
60
|
+
|
|
53
61
|
## 输出格式
|
|
54
62
|
每次操作必须输出结构化的路由决策:
|
|
55
63
|
- decision: [route_type]
|
|
@@ -50,6 +50,14 @@ outputFormat: .harness/doc/project/routing-decision.md
|
|
|
50
50
|
## 你的工作流
|
|
51
51
|
收到需求 → 分类 → 选流程变体 → 分配给需求分析师 → 更新 TaskBoard → 追踪进度
|
|
52
52
|
|
|
53
|
+
## 需求发现与路由(新增)
|
|
54
|
+
当收到新需求时,PM 必须执行以下流程:
|
|
55
|
+
|
|
56
|
+
1. **扫描原始需求目录** — 检查 `.harness/doc/originRequirements/` 中是否有新的需求文件(格式:`{YYYY-MM-DD}-{kebab-case-title}.md`)
|
|
57
|
+
2. **创建 ttspec change** — 为每个新需求在 `.harness/doc/ttspec/change/` 下创建对应 change,名称从文件名派生(去除日期前缀)
|
|
58
|
+
3. **路由给需求分析师** — 将原始需求文件路径和 ttspec change 目录路径一起传递给需求分析师
|
|
59
|
+
4. **追踪 change 状态** — 关注 change 从 explore → propose → prd 的推进
|
|
60
|
+
|
|
53
61
|
## 输出格式
|
|
54
62
|
每次操作必须输出结构化的路由决策:
|
|
55
63
|
- decision: [route_type]
|
|
@@ -7,6 +7,7 @@ tools:
|
|
|
7
7
|
- read_file
|
|
8
8
|
- write_to_file
|
|
9
9
|
- list_files
|
|
10
|
+
- search_file
|
|
10
11
|
- ask_followup_question
|
|
11
12
|
|
|
12
13
|
model: standard
|
|
@@ -35,7 +36,8 @@ outputFormat: .harness/doc/prd/requirements-{task-id}.md
|
|
|
35
36
|
responsibilities:
|
|
36
37
|
- 将模糊的原始需求转化为结构化规格说明
|
|
37
38
|
- 确保每个需求都有明确可测试的验收标准
|
|
38
|
-
-
|
|
39
|
+
- 先 explore(深度探索),再 propose(结构化提案),最后 prd-generation(标准化 PRD)
|
|
40
|
+
- 产出 explore-notes.md、proposal/design/specs/tasks 和标准化 PRD
|
|
39
41
|
- 用户故事拆分
|
|
40
42
|
|
|
41
43
|
constraints:
|
|
@@ -35,26 +35,51 @@ outputFormat: .harness/doc/prd/requirements-{task-id}.md
|
|
|
35
35
|
- 你必须确保每个需求都有明确、可测试的验收标准
|
|
36
36
|
|
|
37
37
|
## 你的输入
|
|
38
|
-
-
|
|
38
|
+
- 原始需求文件路径(`.harness/doc/originRequirements/{filename}`)
|
|
39
|
+
- ttspec change 目录路径(`.harness/doc/ttspec/change/{name}/`)
|
|
39
40
|
- TaskBoard(了解已有任务避免冲突)
|
|
40
41
|
- dev-map(了解项目现有功能域)
|
|
41
42
|
|
|
42
43
|
## 你的输出(必须全部交付)
|
|
43
|
-
1.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
2. 验收标准列表(acceptance-criteria.md)
|
|
48
|
-
- Given/When/Then 格式
|
|
49
|
-
- 每条都可独立验证
|
|
50
|
-
3. TaskBoard 更新
|
|
44
|
+
1. explore 笔记(`.harness/doc/ttspec/change/{name}/explore-notes.md`)
|
|
45
|
+
2. 结构化提案(`.harness/doc/ttspec/change/{name}/` 下的 proposal/design/specs/tasks)
|
|
46
|
+
3. 需求文档(`.harness/doc/prd/requirements-{task-id}.md`,使用 prd-generator 技能)
|
|
47
|
+
4. TaskBoard 更新
|
|
51
48
|
|
|
52
49
|
## 你的约束
|
|
53
50
|
- ❌ 不做技术方案设计
|
|
54
51
|
- ❌ 不评估技术可行性细节
|
|
55
52
|
- ❌ 不写代码
|
|
53
|
+
- ❌ 禁止跳过任何步骤(必须 explore → propose → prd 顺序执行)
|
|
56
54
|
- ✅ 每个需求至少有一个验收标准
|
|
57
55
|
- ✅ 明确写出"不做什么"
|
|
56
|
+
- ✅ 所有产出使用中文
|
|
57
|
+
|
|
58
|
+
## 你的工作流
|
|
59
|
+
|
|
60
|
+
**强制三步顺序流程,禁止跳过任何步骤:**
|
|
61
|
+
|
|
62
|
+
### Step 1: explore(深度探索)
|
|
63
|
+
1. 读取原始需求文件(来自 `.harness/doc/originRequirements/{filename}`)
|
|
64
|
+
2. 进入对应 ttspec change(`.harness/doc/ttspec/change/{name}/`)的 explore 模式
|
|
65
|
+
3. 与用户深度讨论:范围边界、受影响角色、假设与前提、风险面
|
|
66
|
+
4. 产出 `explore-notes.md` 存放在 change 目录下
|
|
67
|
+
5. 用户确认后才能进入下一步
|
|
68
|
+
|
|
69
|
+
### Step 2: propose(结构化提案)
|
|
70
|
+
1. 基于 explore 笔记(而非原始需求文本)生成结构化提案
|
|
71
|
+
2. 在 `.harness/doc/ttspec/change/{name}/` 下生成:
|
|
72
|
+
- `proposal.md` — 变更动机、内容、能力、影响
|
|
73
|
+
- `design.md` — 设计决策
|
|
74
|
+
- `specs/` — 能力规格
|
|
75
|
+
- `tasks.md` — 实施任务列表
|
|
76
|
+
3. proposal 必须包含 `来源: .harness/doc/originRequirements/{filename}` 引用
|
|
77
|
+
4. 用户确认后才能进入下一步
|
|
78
|
+
|
|
79
|
+
### Step 3: prd-generation(标准化 PRD)
|
|
80
|
+
1. 调用 `prd-generator` 技能
|
|
81
|
+
2. 以 explore 笔记和 propose 产出作为输入上下文
|
|
82
|
+
3. 在 `.harness/doc/prd/requirements-{task-id}.md` 生成标准化 PRD
|
|
58
83
|
|
|
59
84
|
## 写作原则
|
|
60
85
|
- 使用简洁清晰的中文
|
|
@@ -35,26 +35,51 @@ outputFormat: .harness/doc/prd/requirements-{task-id}.md
|
|
|
35
35
|
- 你必须确保每个需求都有明确、可测试的验收标准
|
|
36
36
|
|
|
37
37
|
## 你的输入
|
|
38
|
-
-
|
|
38
|
+
- 原始需求文件路径(`.harness/doc/originRequirements/{filename}`)
|
|
39
|
+
- ttspec change 目录路径(`.harness/doc/ttspec/change/{name}/`)
|
|
39
40
|
- TaskBoard(了解已有任务避免冲突)
|
|
40
41
|
- dev-map(了解项目现有功能域)
|
|
41
42
|
|
|
42
43
|
## 你的输出(必须全部交付)
|
|
43
|
-
1.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
2. 验收标准列表(acceptance-criteria.md)
|
|
48
|
-
- Given/When/Then 格式
|
|
49
|
-
- 每条都可独立验证
|
|
50
|
-
3. TaskBoard 更新
|
|
44
|
+
1. explore 笔记(`.harness/doc/ttspec/change/{name}/explore-notes.md`)
|
|
45
|
+
2. 结构化提案(`.harness/doc/ttspec/change/{name}/` 下的 proposal/design/specs/tasks)
|
|
46
|
+
3. 需求文档(`.harness/doc/prd/requirements-{task-id}.md`,使用 prd-generator 技能)
|
|
47
|
+
4. TaskBoard 更新
|
|
51
48
|
|
|
52
49
|
## 你的约束
|
|
53
50
|
- ❌ 不做技术方案设计
|
|
54
51
|
- ❌ 不评估技术可行性细节
|
|
55
52
|
- ❌ 不写代码
|
|
53
|
+
- ❌ 禁止跳过任何步骤(必须 explore → propose → prd 顺序执行)
|
|
56
54
|
- ✅ 每个需求至少有一个验收标准
|
|
57
55
|
- ✅ 明确写出"不做什么"
|
|
56
|
+
- ✅ 所有产出使用中文
|
|
57
|
+
|
|
58
|
+
## 你的工作流
|
|
59
|
+
|
|
60
|
+
**强制三步顺序流程,禁止跳过任何步骤:**
|
|
61
|
+
|
|
62
|
+
### Step 1: explore(深度探索)
|
|
63
|
+
1. 读取原始需求文件(来自 `.harness/doc/originRequirements/{filename}`)
|
|
64
|
+
2. 进入对应 ttspec change(`.harness/doc/ttspec/change/{name}/`)的 explore 模式
|
|
65
|
+
3. 与用户深度讨论:范围边界、受影响角色、假设与前提、风险面
|
|
66
|
+
4. 产出 `explore-notes.md` 存放在 change 目录下
|
|
67
|
+
5. 用户确认后才能进入下一步
|
|
68
|
+
|
|
69
|
+
### Step 2: propose(结构化提案)
|
|
70
|
+
1. 基于 explore 笔记(而非原始需求文本)生成结构化提案
|
|
71
|
+
2. 在 `.harness/doc/ttspec/change/{name}/` 下生成:
|
|
72
|
+
- `proposal.md` — 变更动机、内容、能力、影响
|
|
73
|
+
- `design.md` — 设计决策
|
|
74
|
+
- `specs/` — 能力规格
|
|
75
|
+
- `tasks.md` — 实施任务列表
|
|
76
|
+
3. proposal 必须包含 `来源: .harness/doc/originRequirements/{filename}` 引用
|
|
77
|
+
4. 用户确认后才能进入下一步
|
|
78
|
+
|
|
79
|
+
### Step 3: prd-generation(标准化 PRD)
|
|
80
|
+
1. 调用 `prd-generator` 技能
|
|
81
|
+
2. 以 explore 笔记和 propose 产出作为输入上下文
|
|
82
|
+
3. 在 `.harness/doc/prd/requirements-{task-id}.md` 生成标准化 PRD
|
|
58
83
|
|
|
59
84
|
## 写作原则
|
|
60
85
|
- 使用简洁清晰的中文
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apply
|
|
3
|
+
description: 变更实施命令 — 从 ttspec change 的 tasks.md 读取任务列表并逐步实施,调用 openspec-apply Skill 执行
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
enabled: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 变更实施命令(apply)
|
|
9
|
+
|
|
10
|
+
> **触发时机**: propose 产出完成且用户确认后
|
|
11
|
+
> **执行 Skill**: `openspec-apply`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 使用方式
|
|
16
|
+
|
|
17
|
+
propose 产出的 tasks.md 准备好后,使用本命令逐步实施任务。
|
|
18
|
+
|
|
19
|
+
参数:
|
|
20
|
+
- `{name}` — ttspec change 名称
|
|
21
|
+
|
|
22
|
+
## 前置条件
|
|
23
|
+
|
|
24
|
+
- propose 产出已完成(proposal.md, design.md, specs/, tasks.md)
|
|
25
|
+
- 用户已确认提案
|
|
26
|
+
|
|
27
|
+
## 执行
|
|
28
|
+
|
|
29
|
+
调用 `openspec-apply` Skill 从 `.harness/doc/ttspec/change/{name}/tasks.md` 读取任务列表并逐步实施。
|
|
30
|
+
|
|
31
|
+
详细执行逻辑(逐任务实施、暂停条件、最小变更原则)详见 `openspec-apply` Skill。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: archive
|
|
3
|
+
description: 变更归档命令 — 将已完成的 ttspec change 归档到 archive 目录,调用 openspec-archive Skill 执行
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
enabled: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 变更归档命令(archive)
|
|
9
|
+
|
|
10
|
+
> **触发时机**: 所有任务实施完成且用户确认后
|
|
11
|
+
> **执行 Skill**: `openspec-archive`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 使用方式
|
|
16
|
+
|
|
17
|
+
change 的所有任务完成后,使用本命令归档。
|
|
18
|
+
|
|
19
|
+
参数:
|
|
20
|
+
- `{name}` — ttspec change 名称
|
|
21
|
+
|
|
22
|
+
## 前置条件
|
|
23
|
+
|
|
24
|
+
- tasks.md 中所有任务已完成(建议全部标记为 `- [x]`)
|
|
25
|
+
- 用户确认可以归档
|
|
26
|
+
|
|
27
|
+
## 执行
|
|
28
|
+
|
|
29
|
+
调用 `openspec-archive` Skill 执行归档,产出存放于 `.harness/doc/ttspec/change/archive/{YYYY-MM-DD}-{name}/`。
|
|
30
|
+
|
|
31
|
+
详细执行逻辑(状态检查、归档执行、归档摘要)详见 `openspec-archive` Skill。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explore
|
|
3
|
+
description: 需求深度探索命令 — 在需求分析阶段进行需求澄清、矛盾发现、方案对比、风险识别,调用 openspec-explore Skill 执行
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
enabled: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 需求深度探索命令(explore)
|
|
9
|
+
|
|
10
|
+
> **触发时机**: 收到新需求后、生成任何文档之前
|
|
11
|
+
> **执行 Skill**: `openspec-explore`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 使用方式
|
|
16
|
+
|
|
17
|
+
当用户或 PM 指定一个需求需要分析时,使用本命令进入深度探索模式。
|
|
18
|
+
|
|
19
|
+
参数:
|
|
20
|
+
- `{name}` — ttspec change 名称(从原始需求文件名派生,去除日期前缀)
|
|
21
|
+
|
|
22
|
+
## 前置条件
|
|
23
|
+
|
|
24
|
+
- 原始需求文件已存在于 `.harness/doc/originRequirements/`
|
|
25
|
+
- 对应的 ttspec change 目录已创建于 `.harness/doc/ttspec/change/{name}/`
|
|
26
|
+
|
|
27
|
+
## 执行
|
|
28
|
+
|
|
29
|
+
调用 `openspec-explore` Skill 执行深度探索,产出存放于 `.harness/doc/ttspec/change/{name}/explore-notes.md`。
|
|
30
|
+
|
|
31
|
+
详细执行逻辑(四维度探索框架、探索笔记模板、完成判定标准)详见 `openspec-explore` Skill。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: propose
|
|
3
|
+
description: 结构化提案命令 — 基于 explore 探索结果生成 proposal/design/specs/tasks,调用 openspec-propose Skill 执行
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
enabled: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 结构化提案命令(propose)
|
|
9
|
+
|
|
10
|
+
> **触发时机**: explore 步骤完成后
|
|
11
|
+
> **执行 Skill**: `openspec-propose`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 使用方式
|
|
16
|
+
|
|
17
|
+
explore 步骤完成后,使用本命令生成结构化提案。
|
|
18
|
+
|
|
19
|
+
参数:
|
|
20
|
+
- `{name}` — ttspec change 名称
|
|
21
|
+
|
|
22
|
+
## 前置条件
|
|
23
|
+
|
|
24
|
+
- explore 笔记已存在于 `.harness/doc/ttspec/change/{name}/explore-notes.md`
|
|
25
|
+
- 禁止跳过 explore 直接 propose
|
|
26
|
+
|
|
27
|
+
## 执行
|
|
28
|
+
|
|
29
|
+
调用 `openspec-propose` Skill 执行结构化提案生成,产出存放于 `.harness/doc/ttspec/change/{name}/`(proposal.md, design.md, specs/, tasks.md)。
|
|
30
|
+
|
|
31
|
+
详细执行逻辑(产出物规范、与 PRD 的衔接)详见 `openspec-propose` Skill。
|
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 原始需求文件目录
|
|
2
|
+
|
|
3
|
+
本目录用于存放所有原始需求文件,是 Harness 需求分析的统一入口。
|
|
4
|
+
|
|
5
|
+
## 文件命名规则
|
|
6
|
+
|
|
7
|
+
格式:`{YYYY-MM-DD}-{kebab-case-title}.md`
|
|
8
|
+
|
|
9
|
+
示例:
|
|
10
|
+
- `2026-05-22-user-avatar-upload.md`
|
|
11
|
+
- `2026-06-15-order-export-feature.md`
|
|
12
|
+
|
|
13
|
+
## 最小内容要求
|
|
14
|
+
|
|
15
|
+
每个需求文件至少包含以下两个章节:
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
# 需求标题
|
|
19
|
+
|
|
20
|
+
## 背景
|
|
21
|
+
|
|
22
|
+
描述需求的业务背景、当前痛点和动机。
|
|
23
|
+
|
|
24
|
+
## 期望
|
|
25
|
+
|
|
26
|
+
描述期望达到的效果或目标。
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 工作流
|
|
30
|
+
|
|
31
|
+
1. 用户在此目录下创建需求文件
|
|
32
|
+
2. PM Agent 扫描发现新文件
|
|
33
|
+
3. PM 在 `.harness/doc/ttspec/change/` 下创建对应 change
|
|
34
|
+
4. 需求分析师按 explore → propose → prd 三步执行分析
|
|
35
|
+
|
|
36
|
+
> 本目录由 Harness Engineering 系统管理。
|
|
@@ -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 格式**
|
|
@@ -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
|
+
- **所有输出使用中文**
|