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
@@ -23,7 +23,7 @@ permissions:
23
23
  safetyLevel: low
24
24
  dependencies:
25
25
  - developer
26
- outputFormat: review-report-pr-{n}.md
26
+ outputFormat: .harness/doc/codereview/review-report-pr-{n}.md
27
27
  ---
28
28
 
29
29
  # 代码审查 Agent
@@ -37,7 +37,6 @@ safetyLevel: medium
37
37
  dependencies:
38
38
  - solution-designer
39
39
  - code-reviewer
40
- outputFormat: "src/**/*.{ts,tsx,java,vue}"
41
40
 
42
41
  responsibilities:
43
42
  - 按设计文档编写代码
@@ -31,7 +31,6 @@ safetyLevel: medium
31
31
  dependencies:
32
32
  - solution-designer
33
33
  - code-reviewer
34
- outputFormat: src/**/*.{ts,tsx,java,vue}
35
34
  ---
36
35
 
37
36
  # 开发实现 Agent
@@ -31,7 +31,6 @@ safetyLevel: medium
31
31
  dependencies:
32
32
  - solution-designer
33
33
  - code-reviewer
34
- outputFormat: src/**/*.{ts,tsx,java,vue}
35
34
  ---
36
35
 
37
36
  # 开发实现 Agent
@@ -32,7 +32,7 @@ safetyLevel: medium
32
32
  dependencies:
33
33
  - solution-designer
34
34
  - code-reviewer
35
- outputFormat: gate-decision.json
35
+ outputFormat: .harness/doc/gate-report/gate-decision.json
36
36
 
37
37
  responsibilities:
38
38
  - 评估技术方案的可行性
@@ -26,7 +26,7 @@ safetyLevel: medium
26
26
  dependencies:
27
27
  - solution-designer
28
28
  - code-reviewer
29
- outputFormat: gate-decision.json
29
+ outputFormat: .harness/doc/gate-report/gate-decision.json
30
30
  ---
31
31
 
32
32
  # 闸门总控 Agent
@@ -26,7 +26,7 @@ safetyLevel: medium
26
26
  dependencies:
27
27
  - solution-designer
28
28
  - code-reviewer
29
- outputFormat: gate-decision.json
29
+ outputFormat: .harness/doc/gate-report/gate-decision.json
30
30
  ---
31
31
 
32
32
  # 闸门总控 Agent
@@ -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
- - 产出需求文档、验收标准列表和TaskBoard更新
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
- - 原始需求(来自 PM 路由)
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. 需求文档(requirements-{task-id}.md
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
- ## 验收标准(AC)
87
- - AC-1: [Given/When/Then 格式的可测试条件]
88
- - AC-2: [...]
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
- - 原始需求(来自 PM 路由)
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. 需求文档(requirements-{task-id}.md
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
- ## 验收标准(AC)
87
- - AC-1: [Given/When/Then 格式的可测试条件]
88
- - AC-2: [...]
89
- - AC-n: [...]
90
- ```
92
+ > **强制**:所有需求文档必须使用 `prd-generator` 技能生成标准化 PRD,该技能提供了十大章节的完整模板(背景、用户角色、业务主流程、用户故事、系统用户与功能结构、功能清单、功能详细描述、产品运行分析、非功能性需求、附录),确保需求分析的完整性和可追溯性。
93
+ >
94
+ > 不得使用简化版模板或自定义格式,所有需求必须按照 PRD 标准版输出。
@@ -32,7 +32,7 @@ permissions:
32
32
  safetyLevel: low
33
33
  dependencies:
34
34
  - requirements-analyst
35
- outputFormat: design-{task-id}.md
35
+ outputFormat: .harness/doc/design/design-{task-id}.md
36
36
 
37
37
  responsibilities:
38
38
  - 基于需求文档输出完整技术方案
@@ -26,7 +26,7 @@ permissions:
26
26
  safetyLevel: low
27
27
  dependencies:
28
28
  - requirements-analyst
29
- outputFormat: design-{task-id}.md
29
+ outputFormat: .harness/doc/design/design-{task-id}.md
30
30
  ---
31
31
 
32
32
  # 方案设计 Agent
@@ -26,7 +26,7 @@ permissions:
26
26
  safetyLevel: low
27
27
  dependencies:
28
28
  - requirements-analyst
29
- outputFormat: design-{task-id}.md
29
+ outputFormat: .harness/doc/design/design-{task-id}.md
30
30
  ---
31
31
 
32
32
  # 方案设计 Agent
@@ -36,7 +36,7 @@ safetyLevel: medium
36
36
  dependencies:
37
37
  - developer
38
38
  - code-reviewer
39
- outputFormat: test-report-{task-id}.md
39
+ outputFormat: .harness/doc/test-report/test-report-{task-id}.md
40
40
 
41
41
  responsibilities:
42
42
  - 制定测试策略和计划
@@ -30,7 +30,7 @@ safetyLevel: medium
30
30
  dependencies:
31
31
  - developer
32
32
  - code-reviewer
33
- outputFormat: test-report-{task-id}.md
33
+ outputFormat: .harness/doc/test-report/test-report-{task-id}.md
34
34
  ---
35
35
 
36
36
  # 测试验证 Agent
@@ -30,7 +30,7 @@ safetyLevel: medium
30
30
  dependencies:
31
31
  - developer
32
32
  - code-reviewer
33
- outputFormat: test-report-{task-id}.md
33
+ outputFormat: .harness/doc/test-report/test-report-{task-id}.md
34
34
  ---
35
35
 
36
36
  # 测试验证 Agent
@@ -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/` | test-unit(JUnit5+Mockito+JaCoCo)/lint-check(Checkstyle+PMD+SpotBugs+SonarQube)/test-api(REST Assured+WireMock)/test-e2e(Testcontainers+Spring Profiles) 均含 Java 章节;build 已废弃→分流到 java-build / vue-frontend-build |
255
- | 🔄 Workflow | `.harness/workflow/definition.yaml` | 条件引用 `java-build | vue-frontend-build`;output_formats 含 .java;rules 引用 java-backend.md + frontend-vue3.md |
256
- | 🤖 Agents | `.harness/agents/` | Developer contract 输出格式含 .java / *Test.java;编码流程含双技术栈说明;质量要求双列(前端标准/后端Java标准)|
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/project/` | **java-backend.md**(四层架构/9种类后缀/Mapper纯接口/SM4加密/Nacos/VT/22项审查清单) + **frontend-vue3.md**(Composition API强制/Pinia/Element Plus/TS类型安全/7项禁止清单) 双规则集 |
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,12 @@
1
+ # 用户头像上传功能
2
+
3
+ ## 背景
4
+
5
+ 当前系统中用户只有默认头像,无法自定义个人头像。用户反馈希望在个人中心页面上传自己的头像,以增强个性化体验和社交属性。竞品 A 和竞品 B 均已支持此功能。
6
+
7
+ ## 期望
8
+
9
+ 1. 用户可以在个人中心上传头像(支持 JPG/PNG 格式,最大 5MB)
10
+ 2. 上传后可以裁剪调整头像显示区域
11
+ 3. 头像上传后即时生效,在评论、消息等场景同步更新
12
+ 4. 支持更换和删除头像
@@ -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 系统管理。