specwf 0.2.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 (55) hide show
  1. package/README.md +79 -0
  2. package/bin/specwf.js +2 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +1800 -0
  5. package/dist/templates/agents/archiver.md +112 -0
  6. package/dist/templates/agents/executor.md +125 -0
  7. package/dist/templates/agents/planner.md +114 -0
  8. package/dist/templates/agents/researcher.md +104 -0
  9. package/dist/templates/agents/reviewer.md +98 -0
  10. package/dist/templates/agents/verifier.md +129 -0
  11. package/dist/templates/artifacts/context.md +151 -0
  12. package/dist/templates/artifacts/design.md +224 -0
  13. package/dist/templates/artifacts/goal-review.md +95 -0
  14. package/dist/templates/artifacts/project.yml +117 -0
  15. package/dist/templates/artifacts/proposal.md +124 -0
  16. package/dist/templates/artifacts/quality-review.md +131 -0
  17. package/dist/templates/artifacts/research.md +127 -0
  18. package/dist/templates/artifacts/spec-review.md +84 -0
  19. package/dist/templates/artifacts/state.md +158 -0
  20. package/dist/templates/artifacts/summary.md +129 -0
  21. package/dist/templates/artifacts/tasks.md +109 -0
  22. package/dist/templates/artifacts/verification.md +113 -0
  23. package/dist/templates/commands/adhoc.md +38 -0
  24. package/dist/templates/commands/apply.md +20 -0
  25. package/dist/templates/commands/archive.md +21 -0
  26. package/dist/templates/commands/continue.md +27 -0
  27. package/dist/templates/commands/discuss.md +24 -0
  28. package/dist/templates/commands/grill.md +24 -0
  29. package/dist/templates/commands/init.md +20 -0
  30. package/dist/templates/commands/milestone.md +27 -0
  31. package/dist/templates/commands/plan.md +22 -0
  32. package/dist/templates/commands/research-phase.md +20 -0
  33. package/dist/templates/commands/research.md +24 -0
  34. package/dist/templates/commands/review.md +20 -0
  35. package/dist/templates/commands/roadmap.md +23 -0
  36. package/dist/templates/commands/ship.md +36 -0
  37. package/dist/templates/commands/split.md +16 -0
  38. package/dist/templates/commands/verify.md +22 -0
  39. package/dist/templates/skills/adhoc.md +53 -0
  40. package/dist/templates/skills/apply.md +134 -0
  41. package/dist/templates/skills/archive.md +109 -0
  42. package/dist/templates/skills/continue.md +97 -0
  43. package/dist/templates/skills/discuss.md +95 -0
  44. package/dist/templates/skills/grill.md +90 -0
  45. package/dist/templates/skills/init.md +116 -0
  46. package/dist/templates/skills/milestone.md +36 -0
  47. package/dist/templates/skills/plan.md +144 -0
  48. package/dist/templates/skills/research-phase.md +66 -0
  49. package/dist/templates/skills/research.md +76 -0
  50. package/dist/templates/skills/review.md +148 -0
  51. package/dist/templates/skills/roadmap.md +104 -0
  52. package/dist/templates/skills/ship.md +94 -0
  53. package/dist/templates/skills/split.md +96 -0
  54. package/dist/templates/skills/verify.md +147 -0
  55. package/package.json +56 -0
@@ -0,0 +1,151 @@
1
+ # Phase Context: {{phase-name}}
2
+
3
+ > **填表指引**:本文档在 Phase 启动时编写,记录该 Phase 的目标、关键决策和 Change 拆分。它既是实现者的工作指引,也是未来回顾时的依据。每节附填写指引。
4
+
5
+ ---
6
+
7
+ > **讨论时间**: {{date}}
8
+ > **决策来源**: {{会议链接 / RFC 文档 / 讨论记录链接}}
9
+
10
+ ---
11
+
12
+ ## Phase 目标
13
+
14
+ <!--
15
+ 填写指引:
16
+ 1. 本 Phase 要完成什么?产出的 Changes 加起来覆盖了什么能力?
17
+ 2. 一句话概括目标,然后用 2-3 条具体说明。
18
+ 3. 本 Phase 的边界在哪里?
19
+
20
+ 格式示例:
21
+ 本 Phase 实现列表页滚动性能优化,具体包括:
22
+ - 新增 OptimizedList 组件封装 FlatList
23
+ - 新增 useScrollPerformance 滚动性能监控 hook
24
+ - 更新 Performance Reporter 支持新数据字段
25
+ - 不涉及后端 API 变更
26
+ -->
27
+
28
+ {{phase-goal}}
29
+
30
+ ---
31
+
32
+ ## 实现决策
33
+
34
+ <!--
35
+ 填写指引:
36
+ 记录讨论中产生的关键决策。每个决策有独立编号(D1, D2, ...)。
37
+ 包含决策内容、理由、影响范围。
38
+
39
+ 不是所有实现细节都需要记录——只记录:
40
+ - 有多个候选方案时做的选择
41
+ - 影响后续 phase 或项目架构的决策
42
+ - 与直觉相反的权衡
43
+ -->
44
+
45
+ ### D1: {{决策标题}}
46
+
47
+ - **决策**: {{具体的决策内容。做什么?选什么方案?}}
48
+ - **理由**: {{为什么选这个决策?关键约束是什么?}}
49
+ - **影响文件/模块**: {{受影响的文件或模块列表}}
50
+
51
+ ### D2: {{决策标题}}
52
+
53
+ - **决策**: {{具体的决策内容}}
54
+ - **理由**: {{决策理由}}
55
+ - **影响文件/模块**: {{受影响的文件或模块列表}}
56
+
57
+ ### D3: {{决策标题}}
58
+
59
+ - **决策**: {{具体的决策内容}}
60
+ - **理由**: {{决策理由}}
61
+ - **影响文件/模块**: {{受影响的文件或模块列表}}
62
+
63
+ ---
64
+
65
+ ## Decisions
66
+
67
+ <!--
68
+ 填写指引:
69
+ 所有锁定决策的汇总表格。与上面的 D1/D2/... 章节保持一致。
70
+ -->
71
+
72
+ | 编号 | 决策 | 理由 | 状态 |
73
+ |---|---|---|---|
74
+ | D1 | {{决策摘要}} | {{理由摘要}} | <span style="color:green">✓ Locked</span> |
75
+ | D2 | {{决策摘要}} | {{理由摘要}} | <span style="color:green">✓ Locked</span> |
76
+ | D3 | {{决策摘要}} | {{理由摘要}} | <span style="color:green">✓ Locked</span> |
77
+
78
+ > 状态说明:**Locked** = 已确定且不可逆;**Deferred** = 延迟到后续 phase;**Open** = 待进一步讨论。
79
+
80
+ ---
81
+
82
+ ## Deferred Ideas
83
+
84
+ <!--
85
+ 填写指引:
86
+ 列出讨论过但决定暂不实施的想法。这是"idea parking lot"——防止好想法丢失。
87
+ 每个 idea 附:内容、暂缓原因、可能的实施时机(可选)。
88
+ -->
89
+
90
+ 1. **{{idea-title-1}}**:{{idea 描述}}
91
+ - 暂缓原因:{{为什么现在不做}}
92
+ - 可能时机:{{optional: 什么条件下可以重新考虑}}
93
+
94
+ 2. **{{idea-title-2}}**:{{idea 描述}}
95
+ - 暂缓原因:{{为什么现在不做}}
96
+ - 可能时机:{{optional: 什么条件下可以重新考虑}}
97
+
98
+ ---
99
+
100
+ ## Claude's Discretion
101
+
102
+ <!--
103
+ 填写指引:
104
+ 列出实现者在实现过程中可以自行判断而不需要额外沟通的方面。
105
+ 这给了实现者灵活性,同时避免"没问过"造成的意外。
106
+ -->
107
+
108
+ - {{实现者可自行决定的方面 1,如:错误处理方式的选择}}
109
+ - {{实现者可自行决定的方面 2,如:次要 UI 细节的视觉调整}}
110
+ - {{实现者可自行决定的方面 3,如:局部变量命名风格}}
111
+
112
+ ---
113
+
114
+ ## Change 拆分
115
+
116
+ <!--
117
+ 填写指引:
118
+ 将 Phase 拆分为 1-3 个 Change。每个 Change 是一个独立可交付单元。
119
+ 格式:编号 + 名称 + 简短描述。
120
+ 如果 Change 之间有依赖关系,用箭头标注。
121
+
122
+ 格式示例:
123
+ 这个 Phase 包含 2 个 Change:
124
+
125
+ 1. **optimize-list-scroll** ← 核心性能优化(先做)
126
+ - 描述:实现 OptimizedList 组件 + getItemLayout 配置
127
+ - 依赖:无(基础 change)
128
+
129
+ 2. **add-scroll-metrics** ← 监控能力增强(后做)
130
+ - 描述:新增 useScrollPerformance hook + 数据上报
131
+ - 依赖:optimize-list-scroll(需要 OptimizedList 组件)
132
+ -->
133
+
134
+ 1. **{{change-name-1}}** — {{change-description-1}}
135
+ - 依赖:{{dependencies}} <!-- 无则填"无" -->
136
+
137
+ 2. **{{change-name-2}}** — {{change-description-2}}
138
+ - 依赖:{{dependencies}}
139
+
140
+ ---
141
+
142
+ ## 非目标
143
+
144
+ <!--
145
+ 填写指引:
146
+ 明确不属于本 Phase 的工作项。这些可能在 roadmap 上但不在本轮。
147
+ -->
148
+
149
+ - {{非目标 1:为什么不在本 phase 做}}
150
+ - {{非目标 2:为什么不在本 phase 做}}
151
+ - {{非目标 3:为什么不在本 phase 做}}
@@ -0,0 +1,224 @@
1
+ # Design: {{name}}
2
+
3
+ > **填表指引**:本文档是 Change Design,在 proposal 批准后编写,描述如何实现。每节均附填写指引,请按指引填写。写完此文档后进入 tasks 拆分解段。
4
+
5
+ ---
6
+
7
+ ## 背景与目标
8
+
9
+ <!--
10
+ 填写指引:
11
+ 1. 简要描述背景——什么上下文?有什么约束?
12
+ 2. 本设计的核心目标是什么?不超过 3 条。
13
+ 3. 与 proposal 中的 Intent 和 Must-haves 保持一致。
14
+
15
+ 示例:
16
+ 当前 FlatList 在 1000+ 条数据场景下帧率降至 20fps。
17
+ 本设计目标是:
18
+ - 通过 getItemLayout + 固定行高将帧率恢复至 55fps+
19
+ - 新增滚动性能监控,为后续优化提供数据依据
20
+ - 不改变现有数据获取和渲染逻辑
21
+ -->
22
+
23
+ {{background-and-goals}}
24
+
25
+ ---
26
+
27
+ ## 技术方案
28
+
29
+ ### 架构图
30
+
31
+ <!--
32
+ 填写指引:
33
+ 用 ASCII art 绘制模块/组件关系图,展示:
34
+ - 新增模块与现有模块的关系
35
+ - 数据流方向(用箭头标注)
36
+ - 文件/模块边界
37
+
38
+ 示例:
39
+ ```
40
+ ┌─────────────────────────────────────────────────┐
41
+ │ 页面层 │
42
+ │ ┌──────────┐ ┌──────────────────┐ │
43
+ │ │ PageHome │───>│ OptimizedList │ │
44
+ │ │ │ │ (新增 wrapper) │ │
45
+ │ └──────────┘ └────────┬─────────┘ │
46
+ │ │ │
47
+ │ ┌──────▼─────────┐ │
48
+ │ │ useScrollPerf │ │
49
+ │ │ (新增 hook) │ │
50
+ │ └──────┬─────────┘ │
51
+ └───────────────────────────┼──────────────────────┘
52
+
53
+ ┌─────────▼─────────┐
54
+ │ Performance │
55
+ │ Reporter │
56
+ │ (已有, 扩展) │
57
+ └───────────────────┘
58
+ ```
59
+
60
+ 绘图原则:
61
+ - 方框标注模块/文件/组件
62
+ - 箭头标注数据流或控制流
63
+ - 标注"新增"、"修改"、"已有"区分
64
+ -->
65
+
66
+ ```text
67
+ {{architecture-diagram}}
68
+ ```
69
+
70
+ ### 核心数据结构
71
+
72
+ <!--
73
+ 填写指引:
74
+ 列出本设计新增或修改的关键类型/接口/数据结构定义。
75
+ 用 TypeScript 接口格式展示。每个类型附简要说明。
76
+
77
+ 格式示例:
78
+ ```typescript
79
+ // 列表配置接口(新增)
80
+ interface ListOptimizationConfig {
81
+ /** 固定行高,单位 px。设此值启用 getItemLayout */
82
+ itemHeight?: number;
83
+ /** 可见窗口外预渲染的行数(默认 10) */
84
+ windowSize?: number;
85
+ /** 是否启用滚动性能采集 */
86
+ enableScrollMetrics?: boolean;
87
+ }
88
+
89
+ // 滚动性能快照(新增)
90
+ interface ScrollPerfSnapshot {
91
+ avgFps: number;
92
+ droppedFrames: number;
93
+ totalFrames: number;
94
+ scrollDistance: number;
95
+ timestamp: number;
96
+ }
97
+ ```
98
+ -->
99
+
100
+ {{data-structures}}
101
+
102
+ ### 数据流
103
+
104
+ <!--
105
+ 填写指引:
106
+ 用步骤式描述说明数据如何流转。从触发源头到最终效果,每一步写清。
107
+
108
+ 格式示例:
109
+ 1. 用户下拉列表 → FlatList 触发 onScroll
110
+ 2. OptimizedList 读取 itemHeight 配置 → 启用 getItemLayout
111
+ 3. 布局引擎跳过动态测量 → 直接使用固定行高计算 offset
112
+ 4. useScrollPerformance 每 500ms 采集一次帧率
113
+ 5. 帧率数据 → Performance Reporter → 上报后端
114
+ 6. 渲染线程不再因布局计算阻塞 → 帧率恢复
115
+ -->
116
+
117
+ {{data-flow}}
118
+
119
+ ### 接口设计
120
+
121
+ <!--
122
+ 填写指引:
123
+ 列出本设计对外暴露的 API 签名,包括:
124
+ - 函数/方法名
125
+ - 参数列表(名称 + 类型 + 说明)
126
+ - 返回值类型
127
+ - 是否 async/sync
128
+
129
+ 格式示例:
130
+
131
+ ```typescript
132
+ // OptimizedList 组件 props
133
+ interface OptimizedListProps<T> {
134
+ data: T[];
135
+ renderItem: (item: T, index: number) => React.ReactElement;
136
+ /** 固定行高(px),必填以启用 getItemLayout */
137
+ itemHeight: number;
138
+ /** 窗口外预渲染行数(可选,默认 10) */
139
+ windowSize?: number;
140
+ /** 启用滚动性能采集(可选,默认 false) */
141
+ enableScrollMetrics?: boolean;
142
+ /** 滚动性能回调(可选) */
143
+ onPerfSnapshot?: (snapshot: ScrollPerfSnapshot) => void;
144
+ }
145
+
146
+ // useScrollPerformance hook
147
+ function useScrollPerformance(
148
+ listRef: React.RefObject<FlatList>,
149
+ options?: { intervalMs?: number }
150
+ ): { avgFps: number; isJanking: boolean };
151
+ ```
152
+ -->
153
+
154
+ {{api-signatures}}
155
+
156
+ ---
157
+
158
+ ## 文件清单
159
+
160
+ <!--
161
+ 填写指引:
162
+ 列出所有需创建或修改的文件,用表格组织。
163
+ -->
164
+
165
+ | 文件路径 | 内容描述 | 操作 |
166
+ |---|---|---|
167
+ | `{{file-path-1}}` | {{description}} | 创建 |
168
+ | `{{file-path-2}}` | {{description}} | 修改 |
169
+ | `{{file-path-3}}` | {{description}} | 创建 |
170
+
171
+ ---
172
+
173
+ ## 测试策略
174
+
175
+ <!--
176
+ 填写指引:
177
+ 按测试层次描述覆盖范围。不需要写具体用例——tasks 文件负责拆解。
178
+ -->
179
+
180
+ ### 单元测试
181
+ - <!-- 哪些模块需要单元测试?需要 mock 什么? -->
182
+
183
+ ### 集成测试
184
+ - <!-- 哪些流程需要集成测试?需要准备什么 fixture? -->
185
+
186
+ ### TDD 任务
187
+ - <!-- 列出需要走 RED→GREEN→REFACTOR 的 type:behavior 任务 -->
188
+
189
+ ---
190
+
191
+ ## 备选方案
192
+
193
+ <!--
194
+ 填写指引:
195
+ 列出评估过但未选择的方案,说明为什么放弃。
196
+
197
+ | 方案 | 优点 | 缺点 | 不选原因 |
198
+ |---|---|---|---|
199
+ | {{方案 A}} | {{优点}} | {{缺点}} | {{原因}} |
200
+ | {{方案 B}} | {{优点}} | {{缺点}} | {{原因}} |
201
+ -->
202
+
203
+ | 方案 | 优点 | 缺点 | 不选原因 |
204
+ |---|---|---|---|
205
+ | {{alt-name-1}} | {{pros}} | {{cons}} | {{reason}} |
206
+ | {{alt-name-2}} | {{pros}} | {{cons}} | {{reason}} |
207
+
208
+ ---
209
+
210
+ ## 风险点
211
+
212
+ <!--
213
+ 填写指引:
214
+ 识别实现风险并评估影响。
215
+
216
+ | 风险 | 概率 | 影响 | 缓解措施 |
217
+ |---|---|---|---|
218
+ | {{风险描述}} | 高/中/低 | 高/中/低 | {{措施}} |
219
+ -->
220
+
221
+ | 风险 | 概率 | 影响 | 缓解措施 |
222
+ |---|---|---|---|
223
+ | {{risk-1}} | {{probability}} | {{impact}} | {{mitigation}} |
224
+ | {{risk-2}} | {{probability}} | {{impact}} | {{mitigation}} |
@@ -0,0 +1,95 @@
1
+ # Goal Review: {{change-name}}
2
+
3
+ > 审查时间: {{date}}
4
+ > 审查者: {{reviewer | agent/human}}
5
+
6
+ ## Change 目标
7
+
8
+ 从 proposal.md 中提取的 must-haves(强制目标)和 nice-to-haves(非强制目标)列表。目标应以可观测、可验证的方式表述。
9
+
10
+ ### Must-haves(强制目标)
11
+
12
+ <!-- 逐条列出 proposal.md "Scope" → "In scope" 中的条目,或 proposal.md 中标记为必须实现的目标 -->
13
+
14
+ 1. **目标 1**: <!-- 可观测行为描述,如"用户可以通过邮箱注册账号" -->
15
+ 2. **目标 2**: <!-- 如"未登录用户无法访问 /dashboard" -->
16
+ 3. **目标 3**: <!-- ... -->
17
+
18
+ ### Nice-to-haves(可选目标)
19
+
20
+ <!-- 列出 proposal.md 中标记为可选的目标,或 Scope → "Out of scope" 之外的合理期望 -->
21
+
22
+ 1. **期望 1**: <!-- ... (如果未实现不需要 FAIL) -->
23
+
24
+ **填写指引:**
25
+ - 目标必须从 proposal.md 原文提取,不自行发明或解释
26
+ - 目标必须以可观测行为描述——不写"模块设计好"而写"接口签名满足 X 和 Y"
27
+ - 强制目标(must-haves)和可选目标(nice-to-haves)分开列出
28
+ - 如果 proposal.md 没有明确定义 must-haves,则回退到 tasks.md 中的所有 task acceptance 条件
29
+
30
+ ## 达成情况
31
+
32
+ 每行对应一个目标项,检查代码实现是否实际产生了预期的可观测行为。
33
+
34
+ | 目标项 | 可观测行为 | 达成状态 | 证据 | 备注 |
35
+ |--------|------------|----------|------|------|
36
+ | 目标 1: | <!-- 预期的可观测行为描述 --> | ✅ 达成 / ❌ 未达成 / ⚠️ 部分达成 | <!-- 测试通过、演示录屏、截图、日志等 --> | <!-- 偏离项说明 --> |
37
+ | 目标 2: | <!-- ... --> | ✅ 达成 | <!-- test/login.test.ts:12-30 PASS --> | |
38
+ | API 响应时延 < 200ms | 接口 95 分位响应时间 | ❌ 未达成 | loadtest result: p95=450ms | 已在 plan 中添加性能优化任务 |
39
+
40
+ **达成状态判定标准:**
41
+
42
+ | 状态 | 标准 |
43
+ |------|------|
44
+ | ✅ 达成 | 对应的可观测行为已经实现并通过验证 |
45
+ | ❌ 未达成 | 目标对应的行为没有实现或验证失败 |
46
+ | ⚠️ 部分达成 | 主要行为实现但存在偏差(如缺少某些边界处理) |
47
+
48
+ **证据要求:**
49
+ - ✅ 必须附证据——通过的测试用例、截图、性能测试数据、用户验收记录等
50
+ - 不写"代码已实现"作为证据——要证明的是"行为可观测",而不是"代码存在"
51
+ - ❌ 和 ⚠️ 必须在下方的"未达成项详情"中分析根因
52
+
53
+ ## 未达成项详情
54
+
55
+ 对于 ❌ 未达成 和 ⚠️ 部分达成 的目标项,逐项展开分析。
56
+
57
+ ### {{目标项}}: {{目标描述}}
58
+
59
+ - **预期行为**: <!-- proposal.md 或 tasks.md 中定义的验收标准 -->
60
+ - **实际行为**: <!-- 当前代码的行为 -->
61
+ - **差距分析**: <!-- 为什么有差距 -->
62
+ - **根因**: <!-- 是设计漏了、实现遗漏、还是需求变更了 -->
63
+ - **修复方向**: <!-- 达成目标具体需要做啥 -->
64
+ - **是否影响其他目标**: <!-- 修复这个会不会导致其他目标失效 -->
65
+
66
+ ### <!-- 下一个未达成项 -->
67
+
68
+ <!-- 无 ❌/⚠️ 项时写"所有目标均已达成,无不达成项。" -->
69
+
70
+ ## Scope Creep 检查
71
+
72
+ 检查实现中是否包含了 proposal.md 范围之外的功能。
73
+
74
+ | 发现的功能 | 对应代码位置 | 是否可接受 | 说明 |
75
+ |------------|-------------|------------|------|
76
+ | <!-- 额外实现的功能 --> | <!-- 文件+行号 --> | 可接受 / 需移除 | <!-- 理由 --> |
77
+
78
+ **填写指引:**
79
+ - 超出 proposal 范围的功能不等于坏代码,但需要在 change 上下文中评估
80
+ - 如果 scope creep 影响了原目标的交付或增加了风险,应标记为"需移除"
81
+ - 发现非预期的 side effect(如修改了不该改的模块)也在此记录
82
+
83
+ ## 结论
84
+
85
+ - [ ] **PASS** — 所有 must-haves 目标达成,无 scope creep 风险
86
+ - [ ] **FAIL** — 存在未达成的 must-haves 目标:
87
+ - <!-- 列出具体未达成的目标项 -->
88
+ - <!-- 建议:窄化 change 范围 or 增加 commit 完成剩余目标 -->
89
+
90
+ **审查总结:**
91
+ - 总目标: <!-- N --> 个 must-have, <!-- M --> 个 nice-to-have
92
+ - 达成: <!-- 数量 --> / <!-- N --> must-haves 完成
93
+ - 未达成: <!-- 数量 --> / <!-- N -->
94
+ - Scope Creep: <!-- 数量 --> 处
95
+ - 整体评估: <!-- 该 change 是否值得发布 / 需要修补 / 建议拆分 -->
@@ -0,0 +1,117 @@
1
+ # specwf project configuration
2
+ # Generated by specwf init
3
+ #
4
+ # 本文件定义项目级别的工作流配置。修改后的配置在下次 specwf 命令执行时生效。
5
+
6
+ # 配置文件格式版本号 —— 由 specwf 管理,不要手动修改
7
+ version: 1
8
+
9
+ # ============================================================
10
+ # 平台配置
11
+ # ============================================================
12
+ # 项目运行的目标平台列表。specwf 根据平台加载对应的集成适配器。
13
+ # 可选值:
14
+ # - omp Oh My Pi 集成(默认,含 specwf CLI 完整支持)
15
+ # - claude Claude Code 环境中运行
16
+ # - standalone 纯 CLI 模式,无平台依赖
17
+ platform:
18
+ - omp
19
+
20
+ # ============================================================
21
+ # 项目配置模板
22
+ # ============================================================
23
+ # 项目级别设定。profile 决定默认开启哪些功能集合。
24
+ # 可选值: standard, minimal, advanced, custom
25
+ # standard — 开启所有基础功能(research/tdd/triple_review/auto_advance/spec_injection)
26
+ # minimal — 只开启最基础流程,适合实验性项目
27
+ # advanced — 在 standard 基础上增加 plan_check、严格校验
28
+ # custom — 自行通过 workflow.* 开关配置
29
+ profile: standard
30
+
31
+ # ============================================================
32
+ # 项目描述上下文
33
+ # ============================================================
34
+ # 项目描述文本,会被注入到每个 specwf agent 的系统提示中,作为项目背景知识。
35
+ # 请填写项目名称、技术栈、测试框架等关键信息。
36
+ # 格式: YAML 多行字符串(| 注意缩进)
37
+ context: |
38
+ 项目: {{name}}
39
+ 技术栈: <!-- TypeScript, Node.js, React, PostgreSQL 等 -->
40
+ 测试框架: <!-- vitest, jest, playwright 等 -->
41
+
42
+ # ============================================================
43
+ # 工作流开关
44
+ # ============================================================
45
+ # 各阶段的启用/禁用。true=启用,false=跳过。
46
+ # 单个开关设置为 false 后,对应阶段在 specwf run 时被跳过但仍可通过 specwf run --step <name> 显式执行。
47
+ workflow:
48
+ # 是否启用 Plan 前的调研阶段(research.md)
49
+ research: true
50
+ # 是否在 plan 生成后自动执行 plan_check(验证 plan 完整性)
51
+ plan_check: true
52
+ # 是否强制 TDD(type:behavior 任务必须 RED→GREEN→REFACTOR)
53
+ tdd: true
54
+ # 是否启用三重并行审查(规格审查 + 质量审查 + 目标审查)
55
+ triple_review: true
56
+ # 审查全部通过后是否自动前进到 verify 阶段
57
+ auto_advance: true
58
+ # 是否在执行 change 时注入全局 specs/conventions 到 agent 提示
59
+ spec_injection: true
60
+
61
+ # ============================================================
62
+ # 审查阶段配置
63
+ # ============================================================
64
+ review:
65
+ # 审查阈值模式:
66
+ # all-pass — 三重审查全部 PASS 才能进入 verify(最严格)
67
+ # severity — 没有 HIGH/CRITICAL 问题即可
68
+ # report-only — 审查结果仅供参考,不阻塞
69
+ # majority-vote — 三份报告有两份以上 PASS 即可推进
70
+ gate: all-pass
71
+ # 是否并行执行三种审查(true=同时启动三个 reviewer,false=串行)
72
+ parallel: true
73
+
74
+ # ============================================================
75
+ # Change 执行配置
76
+ # ============================================================
77
+ change:
78
+ # 多 Change 并发执行模式:
79
+ # single — 每次只执行一个 Change
80
+ # dependency-graph — 按依赖图调度 Change(默认,推荐的平衡模式)
81
+ # concurrent — 不做依赖检查,全部 Change 同时执行
82
+ parallel: dependency-graph
83
+ # 是否隔离 Change 的执行环境(git worktree / 临时目录等)
84
+ isolation: true
85
+
86
+ # ============================================================
87
+ # Git 版本管理配置
88
+ # ============================================================
89
+ git:
90
+ # 分支策略:
91
+ # none — 不自动管理分支,在当前分支上直接提交
92
+ # auto — 自动为每个 Change/Phase 创建和切换分支
93
+ # per-change — 每个 Change 创建独立分支
94
+ # per-phase — 每个 Phase 创建独立分支
95
+ branching: none
96
+ # 完成 Phase 时是否创建 git tag
97
+ create_tag: true
98
+
99
+ # ============================================================
100
+ # 规范注入配置
101
+ # ============================================================
102
+ conventions:
103
+ # 是否在 apply 时将全局 conventions/ 注入到 agent 提示
104
+ inject: true
105
+
106
+ # ============================================================
107
+ # LLM 模型配置(可选)
108
+ # ============================================================
109
+ # 指定不同阶段的模型。
110
+ # 格式: <阶段名>: <模型 ID>
111
+ # 模型 ID 取决于运行平台和本地可用的模型
112
+ # 示例:
113
+ # plan: claude-sonnet-4
114
+ # apply: claude-haiku-3.5
115
+ # review: gpt-4o
116
+ # 留空 {} 使用平台默认模型
117
+ models: {}