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.
- package/.harness/README.md +123 -57
- package/.harness/agents/{prompt-templates.md → agent-dispatcher.md} +304 -21
- package/.harness/agents/code-reviewer/contract.yaml +1 -1
- package/.harness/agents/code-reviewer/prompt.md +1 -1
- package/.harness/agents/code-reviewer.md +1 -1
- package/.harness/agents/developer/contract.yaml +0 -1
- package/.harness/agents/developer/prompt.md +0 -1
- package/.harness/agents/developer.md +0 -1
- package/.harness/agents/gate-controller/contract.yaml +1 -1
- package/.harness/agents/gate-controller/prompt.md +1 -1
- package/.harness/agents/gate-controller.md +1 -1
- package/.harness/agents/project-manager/contract.yaml +4 -1
- package/.harness/agents/project-manager/prompt.md +9 -1
- package/.harness/agents/project-manager.md +9 -1
- package/.harness/agents/requirements-analyst/contract.yaml +5 -3
- package/.harness/agents/requirements-analyst/prompt.md +39 -35
- package/.harness/agents/requirements-analyst.md +39 -35
- package/.harness/agents/solution-designer/contract.yaml +1 -1
- package/.harness/agents/solution-designer/prompt.md +1 -1
- package/.harness/agents/solution-designer.md +1 -1
- package/.harness/agents/tester/contract.yaml +1 -1
- package/.harness/agents/tester/prompt.md +1 -1
- package/.harness/agents/tester.md +1 -1
- 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/dev-map/overview.md +5 -4
- 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/architecture-designer/SKILL.md +2 -0
- package/.harness/skills/docs-update/SKILL.md +2 -0
- 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/skills/prd-generator/SKILL.md +584 -0
- package/.harness/workflow/definition.yaml +41 -8
- package/files/analyze-requirements.md +197 -0
- package/lib/index.mjs +152 -35
- package/package.json +1 -1
- package/.harness/skills/build/SKILL.md +0 -199
- /package/.harness/{docs → doc}/integration-test-plan.md +0 -0
- /package/.harness/{docs → doc}/team-guidelines/README.md +0 -0
- /package/.harness/{docs → doc}/team-guidelines/arch-team.md +0 -0
- /package/.harness/{docs → doc}/team-guidelines/collaboration.md +0 -0
- /package/.harness/{docs → doc}/team-guidelines/pm-team.md +0 -0
- /package/.harness/{docs → doc}/team-guidelines/qa-team.md +0 -0
- /package/.harness/{docs → doc}/team-guidelines/rd-team.md +0 -0
- /package/.harness/{docs → doc}/training-materials.md +0 -0
|
@@ -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,10 +28,11 @@ triggers:
|
|
|
26
28
|
|
|
27
29
|
permissions:
|
|
28
30
|
- read
|
|
31
|
+
- write
|
|
29
32
|
|
|
30
33
|
safetyLevel: low
|
|
31
34
|
dependencies: []
|
|
32
|
-
outputFormat: routing-decision.md
|
|
35
|
+
outputFormat: .harness/doc/project/routing-decision.md
|
|
33
36
|
|
|
34
37
|
responsibilities:
|
|
35
38
|
- 接收需求,判断其类型(新功能/Bug/热修复/文档等)
|
|
@@ -23,7 +23,7 @@ permissions:
|
|
|
23
23
|
- read
|
|
24
24
|
safetyLevel: low
|
|
25
25
|
dependencies: []
|
|
26
|
-
outputFormat: routing-decision.md
|
|
26
|
+
outputFormat: .harness/doc/project/routing-decision.md
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
# PM 路由 Agent
|
|
@@ -50,6 +50,14 @@ outputFormat: 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]
|
|
@@ -23,7 +23,7 @@ permissions:
|
|
|
23
23
|
- read
|
|
24
24
|
safetyLevel: low
|
|
25
25
|
dependencies: []
|
|
26
|
-
outputFormat: routing-decision.md
|
|
26
|
+
outputFormat: .harness/doc/project/routing-decision.md
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
# PM 路由 Agent
|
|
@@ -50,6 +50,14 @@ outputFormat: 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]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: requirements-analyst
|
|
2
|
-
description: 需求分析Agent
|
|
2
|
+
description: 需求分析Agent,将原始需求转化为结构化需求文档、验收标准和用户故事,使用 prd-generator 技能生成标准化 PRD
|
|
3
3
|
version: "1.0.0"
|
|
4
4
|
|
|
5
5
|
tools:
|
|
@@ -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
|
|
@@ -30,12 +31,13 @@ permissions:
|
|
|
30
31
|
safetyLevel: low
|
|
31
32
|
dependencies:
|
|
32
33
|
- project-manager
|
|
33
|
-
outputFormat: requirements-{task-id}.md
|
|
34
|
+
outputFormat: .harness/doc/prd/requirements-{task-id}.md
|
|
34
35
|
|
|
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:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: requirements-analyst
|
|
3
|
-
description: 需求分析Agent
|
|
3
|
+
description: 需求分析Agent,将原始需求转化为结构化需求文档、验收标准和用户故事,使用 prd-generator 技能生成标准化 PRD
|
|
4
4
|
tools:
|
|
5
5
|
- search_content
|
|
6
6
|
- read_file
|
|
@@ -24,7 +24,7 @@ permissions:
|
|
|
24
24
|
safetyLevel: low
|
|
25
25
|
dependencies:
|
|
26
26
|
- project-manager
|
|
27
|
-
outputFormat: requirements-{task-id}.md
|
|
27
|
+
outputFormat: .harness/doc/prd/requirements-{task-id}.md
|
|
28
28
|
---
|
|
29
29
|
|
|
30
30
|
# 需求分析 Agent
|
|
@@ -35,26 +35,51 @@ outputFormat: 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
|
- 使用简洁清晰的中文
|
|
@@ -63,28 +88,7 @@ outputFormat: requirements-{task-id}.md
|
|
|
63
88
|
- 用户故事遵循"作为...我想要...以便于..."格式
|
|
64
89
|
|
|
65
90
|
## 需求文档模板
|
|
66
|
-
```markdown
|
|
67
|
-
# 需求文档:{标题}
|
|
68
|
-
|
|
69
|
-
## 背景(Why)
|
|
70
|
-
- 业务背景和动机
|
|
71
|
-
- 当前痛点
|
|
72
|
-
- 期望达到的效果
|
|
73
|
-
|
|
74
|
-
## 目标(What)
|
|
75
|
-
- 功能性需求(FR-001 ~ FR-n)
|
|
76
|
-
- 非功能性需求(NFR-001 ~ NFR-n)
|
|
77
|
-
|
|
78
|
-
## 范围边界
|
|
79
|
-
- **包含**: 本次要做的事
|
|
80
|
-
- **不包含**: 明确排除的范围(防止范围蔓延)
|
|
81
|
-
- **依赖**: 外部依赖和前置条件
|
|
82
|
-
|
|
83
|
-
## 用户故事
|
|
84
|
-
作为 {角色},我想要 {功能},以便于 {价值}
|
|
85
91
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
- AC-n: [...]
|
|
90
|
-
```
|
|
92
|
+
> **强制**:所有需求文档必须使用 `prd-generator` 技能生成标准化 PRD,该技能提供了十大章节的完整模板(背景、用户角色、业务主流程、用户故事、系统用户与功能结构、功能清单、功能详细描述、产品运行分析、非功能性需求、附录),确保需求分析的完整性和可追溯性。
|
|
93
|
+
>
|
|
94
|
+
> 不得使用简化版模板或自定义格式,所有需求必须按照 PRD 标准版输出。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: requirements-analyst
|
|
3
|
-
description: 需求分析Agent
|
|
3
|
+
description: 需求分析Agent,将原始需求转化为结构化需求文档、验收标准和用户故事,使用 prd-generator 技能生成标准化 PRD
|
|
4
4
|
tools:
|
|
5
5
|
- search_content
|
|
6
6
|
- read_file
|
|
@@ -24,7 +24,7 @@ permissions:
|
|
|
24
24
|
safetyLevel: low
|
|
25
25
|
dependencies:
|
|
26
26
|
- project-manager
|
|
27
|
-
outputFormat: requirements-{task-id}.md
|
|
27
|
+
outputFormat: .harness/doc/prd/requirements-{task-id}.md
|
|
28
28
|
---
|
|
29
29
|
|
|
30
30
|
# 需求分析 Agent
|
|
@@ -35,26 +35,51 @@ outputFormat: 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
|
- 使用简洁清晰的中文
|
|
@@ -63,28 +88,7 @@ outputFormat: requirements-{task-id}.md
|
|
|
63
88
|
- 用户故事遵循"作为...我想要...以便于..."格式
|
|
64
89
|
|
|
65
90
|
## 需求文档模板
|
|
66
|
-
```markdown
|
|
67
|
-
# 需求文档:{标题}
|
|
68
|
-
|
|
69
|
-
## 背景(Why)
|
|
70
|
-
- 业务背景和动机
|
|
71
|
-
- 当前痛点
|
|
72
|
-
- 期望达到的效果
|
|
73
|
-
|
|
74
|
-
## 目标(What)
|
|
75
|
-
- 功能性需求(FR-001 ~ FR-n)
|
|
76
|
-
- 非功能性需求(NFR-001 ~ NFR-n)
|
|
77
|
-
|
|
78
|
-
## 范围边界
|
|
79
|
-
- **包含**: 本次要做的事
|
|
80
|
-
- **不包含**: 明确排除的范围(防止范围蔓延)
|
|
81
|
-
- **依赖**: 外部依赖和前置条件
|
|
82
|
-
|
|
83
|
-
## 用户故事
|
|
84
|
-
作为 {角色},我想要 {功能},以便于 {价值}
|
|
85
91
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
- AC-n: [...]
|
|
90
|
-
```
|
|
92
|
+
> **强制**:所有需求文档必须使用 `prd-generator` 技能生成标准化 PRD,该技能提供了十大章节的完整模板(背景、用户角色、业务主流程、用户故事、系统用户与功能结构、功能清单、功能详细描述、产品运行分析、非功能性需求、附录),确保需求分析的完整性和可追溯性。
|
|
93
|
+
>
|
|
94
|
+
> 不得使用简化版模板或自定义格式,所有需求必须按照 PRD 标准版输出。
|
|
@@ -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。
|
|
@@ -251,11 +251,12 @@ project-root/ # 项目根目录
|
|
|
251
251
|
| 规范层级 | 入口 | 与本项目的对应关系 |
|
|
252
252
|
|---------|------|-------------------|
|
|
253
253
|
| ⚡ Gate 门禁 | `.harness/gate/checks/` | 自动检测 pom.xml→Java门禁(build-gates-java.js: mvn compile/test/checkstyle/spotbugs/jacoco) / package.json→前端门禁(build-gates-frontend.js: tsc/npm/eslint/audit) |
|
|
254
|
-
| 📘 Skills 技能 | `.harness/skills/` |
|
|
255
|
-
| 🔄 Workflow | `.harness/workflow/definition.yaml` | 条件引用 `java-build
|
|
256
|
-
| 🤖 Agents | `.harness/agents/` |
|
|
254
|
+
| 📘 Skills 技能 | `.harness/skills/` | 12个技能:architecture-designer(C4/领域模型)/prd-generator(PRD生成)/code-review(前端+后端)/test-unit/lint-check/test-api/test-e2e/java-build/vue-frontend-build/docker-build/docs-update/task-board-maintenance |
|
|
255
|
+
| 🔄 Workflow | `.harness/workflow/definition.yaml` | 条件引用 `java-build \| vue-frontend-build`;7阶段状态机+4流程变体;rules引用java-backend.md+frontend-vue3.md+design-document-boundary.md |
|
|
256
|
+
| 🤖 Agents | `.harness/agents/` | 7个Agent三件套(.md+prompt.md+contract.yaml):PM→需求分析→方案设计→闸门→开发→审查→测试;输出统一到 `.harness/doc/` |
|
|
257
257
|
| 🔌 MCP 工具 | `.harness/mcp/config.yaml` | 注册 SonarQube(metrics/quality_gate)、Maven(dependency_info/central_search)、Jenkins(maven_job_status) 工具定义 |
|
|
258
|
-
| 📋 Rules | `.harness/rules
|
|
258
|
+
| 📋 Rules | `.harness/rules/` | **global**: coding-standard(A01-A31)/commit-convention/security-baseline(SM4/注入/脱敏)/process-discipline(三步验证)/design-document-boundary(复杂度分流);**project**: java-backend(22项CR)+frontend-vue3(7项禁止)+web-specific(i18n/API) |
|
|
259
|
+
| 📄 输出文档 | `.harness/doc/` | prd/ / design/ / gate-report/ / codereview/ / test-report/ / project/ |
|
|
259
260
|
|
|
260
261
|
## 维护纪律
|
|
261
262
|
|
|
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 系统管理。
|