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.
@@ -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
- - 产出需求文档、验收标准列表和TaskBoard更新
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
- - 原始需求(来自 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
  - 使用简洁清晰的中文
@@ -35,26 +35,51 @@ outputFormat: .harness/doc/prd/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
  - 使用简洁清晰的中文
@@ -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,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 系统管理。
@@ -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
+ - **所有输出使用中文**