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,36 @@
1
+ # 交付
2
+
3
+ ## Phase ship
4
+
5
+ 创建 PR + 更新 @specwf/state.md。
6
+
7
+ PR 正文应包含:
8
+ - Phase scope 概述
9
+ - 包含的 change 列表(每个 change 的 scope 摘要 + 产出文件)
10
+ - 变更统计(文件数、行数)
11
+ - 测试覆盖状态(vitest run 结果)
12
+ - Checklist(所有 change 已 verify passed、已 archive)
13
+
14
+ ## Milestone ship
15
+
16
+ 发布 release tag + 更新 @specwf/project.md 版本号。
17
+
18
+ Release notes 应包含:
19
+ - 版本号与里程碑名称
20
+ - 变更总览(按 phase 分组)
21
+ - Breaking changes(如有)
22
+ - Git diff 统计(+/- 行数、文件数)
23
+ - 测试结果汇总
24
+
25
+ ## 上下文
26
+
27
+ ```bash
28
+ specwf state
29
+ specwf continue change <last-change-name>
30
+ ```
31
+
32
+ ## 下一步
33
+
34
+ ```bash
35
+ specwf continue
36
+ ```
@@ -0,0 +1,16 @@
1
+ # Change 拆分
2
+
3
+ 将 phase 拆分为多个 change,确定依赖图。
4
+
5
+ ## 上下文
6
+
7
+ ```bash
8
+ specwf context split
9
+ specwf state
10
+ ```
11
+
12
+ ## 下一步
13
+
14
+ ```bash
15
+ specwf continue
16
+ ```
@@ -0,0 +1,22 @@
1
+ # 测试验证
2
+
3
+ 运行测试,诊断根因,路由回环。
4
+
5
+ ## 上下文
6
+
7
+ ```bash
8
+ specwf context verify
9
+ specwf state
10
+ ```
11
+
12
+ ## 回环路由
13
+
14
+ - 计划缺陷 → `specwf continue`(回 plan)
15
+ - 实现缺陷 → 回 apply 重实现
16
+ - 规格缺陷 → 标记 spec 待修
17
+
18
+ ## 下一步
19
+
20
+ ```bash
21
+ specwf continue
22
+ ```
@@ -0,0 +1,53 @@
1
+ # 创建临时 Change 工作流指引
2
+
3
+ ## 概述
4
+
5
+ 临时 Change 是与 milestone/phase 无关的独立变更,直接走标准 Change 循环。适用于紧急修复、独立改进等场景。
6
+
7
+ ## 前置条件
8
+
9
+ - specwf 项目已初始化
10
+ - 变更名称已确定
11
+
12
+ ## 执行步骤
13
+
14
+ ### 1. 创建 change 目录
15
+
16
+ ```bash
17
+ specwf change new <name>
18
+ ```
19
+
20
+ 自动生成:
21
+ - `specwf/changes/<name>/proposal.md`
22
+ - `specwf/changes/<name>/design.md`
23
+ - `specwf/changes/<name>/tasks.md`
24
+ - `specwf/changes/<name>/specs/` 目录
25
+
26
+ ### 2. 填写 proposal.md
27
+
28
+ ### 3. 继续推进
29
+
30
+ ```bash
31
+ specwf continue
32
+ ```
33
+
34
+ ## 产物
35
+
36
+ - proposal.md / design.md / tasks.md
37
+ - state.md adhoc 记录
38
+
39
+ ## 验证
40
+
41
+ - [ ] change 目录存在
42
+ - [ ] 模板文件已生成
43
+ - [ ] specwf state 能看到新 change
44
+
45
+ ## 常见陷阱
46
+
47
+ - 临时 change 归档后统一存放在 specwf/archive/ 下
48
+ - 临时 change 不走 milestone/phase 的 discuss/research-phase/split 流程
49
+ - 如果需要关联到 phase,使用 `specwf change new --phase <id>`
50
+
51
+ ## 参考
52
+
53
+ - specwf 工作流设计中的「临时 Change」章节
@@ -0,0 +1,134 @@
1
+ # Change 实现工作流指引
2
+
3
+ ## 概述
4
+
5
+ 按 tasks.md 实现代码。TDD 强制执行:type:behavior 任务必须走 RED→GREEN→REFACTOR 循环。
6
+
7
+ Apply 阶段由 specwf-executor agent 在隔离环境中执行,支持多任务分组并发和原子提交。
8
+
9
+ ## 前置条件
10
+
11
+ - plan 阶段已完成,tasks.md、design.md、delta-specs 已就位
12
+ - specwf context apply 已获取上下文
13
+ - 隔离环境已准备(git worktree 或 OMP isolated mode)
14
+
15
+ ## 执行步骤
16
+
17
+ ### 1. 读取上下文
18
+
19
+ 运行 \`specwf context apply\`:
20
+ - design.md — 技术方案
21
+ - tasks.md — 实现清单
22
+ - delta-specs — 行为契约
23
+ - 依赖的 specs/ — 已有全局规范
24
+
25
+ ### 2. 分组执行
26
+
27
+ 根据 tasks.md 中的依赖关系分组,每组作为一次提交(或一组相关提交):
28
+
29
+ **组内串行**:依赖关系强制顺序
30
+ **组间并行**:无依赖的任务由不同 executor agent 并行执行
31
+
32
+ \`\`\`
33
+ # 分组示例
34
+ Group 1(并行): task A, task B(无依赖)
35
+ ├── task A → 代码 + 测试 → commit
36
+ └── task B → 代码 + 测试 → commit
37
+
38
+ Group 2(串行): task C → task D
39
+ ├── task C → 代码 + 测试 → commit
40
+ └── task D → 代码 + 测试 → commit
41
+ \`\`\`
42
+
43
+ ### 3. TDD 执行流程(type:behavior 任务)
44
+
45
+ 每个 type:behavior 任务严格执行:
46
+
47
+ **RED — 写失败测试**
48
+ \`\`\`
49
+ 1. 根据 delta-spec 的 SHALL/MUST 条目编写测试
50
+ 2. 测试应该明确断言行为契约
51
+ 3. 运行测试 → 预期失败(红色)
52
+ 4. 提交消息格式: \`test(<domain>): add failing test for <feature>\`
53
+ \`\`\`
54
+
55
+ **GREEN — 最小实现**
56
+ \`\`\`
57
+ 1. 写恰好让测试通过的最少量代码
58
+ 2. 不要过度工程,不要提前优化
59
+ 3. 运行测试 → 预期通过(绿色)
60
+ 4. 提交消息格式: \`feat(<domain>): implement <feature>\`
61
+ \`\`\`
62
+
63
+ **REFACTOR — 重构改进**
64
+ \`\`\`
65
+ 1. 在测试保护下重构代码结构
66
+ 2. 测试应该仍然通过
67
+ 3. 提交消息格式: \`refactor(<domain>): improve <aspect>\`
68
+ 4. REFACTOR 不改变行为,不修改测试
69
+ \`\`\`
70
+
71
+ ### 4. 原子提交协议
72
+
73
+ 每个任务完成后执行原子提交:
74
+
75
+ \`\`\`
76
+ # 提交原则
77
+ - 每个提交是一个逻辑单元,可独立 review
78
+ - RED/GREEN/REFACTOR 每个阶段至少一个提交
79
+ - 不混合不同任务的改动在一个提交中
80
+ - 提交消息使用 Conventional Commits 格式
81
+
82
+ # 提交消息格式
83
+ <type>(<scope>): <description>
84
+
85
+ [optional body — why]
86
+ \`\`\`
87
+
88
+ ### 5. 非 TDD 任务(type:config/refactor/docs/scaffolding)
89
+
90
+ 直接实现,单次提交即可:
91
+ \`\`\`
92
+ chore(config): add ESLint rule for ...
93
+ docs(api): add JSDoc to ...
94
+ refactor(core): extract validateInput helper
95
+ \`\`\`
96
+
97
+ ### 6. 各组完成检查
98
+
99
+ 每组完成后运行:
100
+ - [ ] 所有测试通过
101
+ - [ ] 代码风格一致(运行 formatter)
102
+ - [ ] delta-specs 中的每个 SHALL/MUST 有对应测试覆盖
103
+ - [ ] 无 lint 错误
104
+ - [ ] 无死代码/注释掉的代码
105
+
106
+ ## 产物
107
+
108
+ - 实现代码(按 design.md 和 delta-specs)
109
+ - 测试代码(type:behavior 任务)
110
+ - 原子提交记录
111
+
112
+ ## 验证
113
+
114
+ - [ ] 所有 type:behavior 任务已完成 RED→GREEN→REFACTOR
115
+ - [ ] 所有非 TDD 任务已实现
116
+ - [ ] 所有测试通过
117
+ - [ ] 每个 delta-spec 的 SHALL/MUST 有对应测试
118
+ - [ ] 代码无 lint/类型错误
119
+
120
+ ## 常见陷阱
121
+
122
+ - GREEN 阶段只做「恰好通过」的实现 — 不要提前写 REFACTOR 的内容
123
+ - 不要在 RED 和 GREEN 之间插入无关改动
124
+ - 不要跳过 RED 直接写实现 — 先写测试再写代码
125
+ - 如果测试无法先写(IO 密集型、UI 代码),标注为 \`type:refactor\` 或 \`type:scaffolding\`
126
+ - 一个提交涵盖多个不相关改动 → 无法原子回滚
127
+ - 跨 change 共享代码使用依赖约定或 key_links,不要复制粘贴
128
+
129
+ ## 参考
130
+
131
+ - TDD (Test-Driven Development) by Kent Beck
132
+ - Conventional Commits 规范
133
+ - GSD Core 的 execute phase
134
+ - OpenSpec 的 atomic commit 协议
@@ -0,0 +1,109 @@
1
+ # 归档工作流指引
2
+
3
+ ## 概述
4
+
5
+ Change 循环的收尾阶段。负责两件事:(1) 将 delta-specs 确定性合并到全局 specs/;(2) 从代码 diff 中提取新的行为和约束,回灌到 specs/ 中。
6
+
7
+ 归档完成后,Change 的工作永久记录在 specs/ 中,供后续 Change 参考和使用。
8
+
9
+ ## 前置条件
10
+
11
+ - verify 阶段已通过(passed 状态)
12
+ - 合并目标分支的准备已完成(ship 阶段前)
13
+
14
+ ## 执行步骤
15
+
16
+ ### 1. 读取上下文
17
+
18
+ 读取以下文件清单:
19
+ \`\`\`
20
+ changes/<change-name>/specs/<domain>/spec.md — delta-specs
21
+ specs/<domain>/spec.md — 全局 specs(目标)
22
+ changes/<change-name>/tasks.md — 任务清单(确认 REFACTOR 阶段可以删除的实现细节 delta)
23
+ changes/<change-name>/VERIFICATION.md — 验证报告(确认哪些通过了)
24
+ \`\`\`
25
+
26
+ ### 2. Delta-Spec 合并
27
+
28
+ 将 delta-specs 合并到全局 specs/ 中:
29
+
30
+ **合并规则**:
31
+ - **新增条目**:直接追加到对应域名的 specs/ 文件中
32
+ - **修改条目**:替换或修订全局 specs/ 中的对应 ID
33
+ - **删除条目**:从全局 specs/ 中移除(标记 \`[DELETED: <change-name>]\`)
34
+ - **冲突**:如果全局 specs/ 中的条目与 delta-spec 矛盾,标记 \`[CONFLICT: <change-name>]\` 并列出冲突双方
35
+
36
+ **合并流程**:
37
+ \`\`\`
38
+ 1. 读取 changes/<change>/specs/ 下的所有 spec 文件
39
+ 2. 对每个文件:
40
+ a. 按 SHALL/MUST 编号索引
41
+ b. 对全局 specs/ 执行新增/修改/删除
42
+ c. 记录变更日志在 spec 文件头部
43
+ 3. 处理冲突(见冲突规则)
44
+ 4. 写入更新后的 specs/
45
+ \`\`\`
46
+
47
+ ### 3. 代码认知提取
48
+
49
+ 从代码 diff 中提取未在 delta-specs 中预写的行为和约束:
50
+
51
+ **提取来源**:
52
+ - 新增的函数、方法、模块的公共 API(类型签名、注释、实现)
53
+ - 测试中隐含的行为约束(如「一个用户只有一个 active session」)
54
+ - 配置文件、常量中的业务规则
55
+ - 错误消息中体现的领域概念
56
+
57
+ **提取规则**:
58
+ - **系统行为**(什么是系统做的) → 提取为 SHALL 条目
59
+ - **业务约束**(必须遵守的限制) → 提取为 MUST 条目
60
+ - **用户可见行为**(API 响应格式、错误码) → 提取为 SHOULD 条目
61
+ - **实现细节**(内部变量名、helper 函数) → 不提取
62
+
63
+ **AUTO-EXTRACTED 标记**:
64
+ 每个自动提取的条目在末尾添加:
65
+ \`\`\`
66
+ # AUTO-EXTRACTED from <change-name> on <timestamp>
67
+ # Source: <file>:<line>
68
+ \`\`\`
69
+
70
+ 标记的目的是:
71
+ - 标识是工具自动生成的,不是人工编写的
72
+ - 便于后续人工 review 时定位和验证
73
+ - 在后续归档中,如果人工 review 确认正确,移除 \`AUTO-EXTRACTED\` 标记
74
+
75
+ ### 4. 最终检查
76
+
77
+ - [ ] 所有 delta-specs 已合并或标记冲突
78
+ - [ ] 已扫描代码 diff 并提取认知
79
+ - [ ] 提取的条目有 \`AUTO-EXTRACTED\` 标记
80
+ - [ ] 全局 specs/ 文件无格式损坏
81
+ - [ ] change 目录保留为历史记录(不删除)
82
+
83
+ ## 产物
84
+
85
+ - \`specs/<domain>/spec.md\`(更新) — 合并后的全局规范
86
+ - \`specs/<domain>/spec.md\`(追加) — 代码认知提取后的新增条目
87
+
88
+ ## 验证
89
+
90
+ - [ ] delta-specs 已正确合并到全局 specs/
91
+ - [ ] 冲突已标记 \`[CONFLICT: <change>]\` 且列出双方
92
+ - [ ] 代码提取条目有 \`AUTO-EXTRACTED\` 标记
93
+ - [ ] 全局 specs/ 可被 parseSpec 读取(无格式错误)
94
+ - [ ] change 目录保留
95
+
96
+ ## 常见陷阱
97
+
98
+ - 不要删除 change 目录 — 它是 git 历史之外的辅助审计轨迹
99
+ - 不要覆盖全局 specs/ — 只追加、替换对应 ID、或标记删除
100
+ - 代码提取不是 code review — 提取行为契约,不是判断代码好坏
101
+ - 提取要克制 — 只有「系统行为/约束」才提取,「实现方式」不提取
102
+ - AUTO-EXTRACTED 条目需要人肉 review 确认,不是最终版
103
+ - 如果一个 extract 发现的行为明确违反现有 specs/ 或 conventions/,额外标记 \`[FLAG: conflict with <existing-spec-ref>]\`
104
+
105
+ ## 参考
106
+
107
+ - OpenSpec 的 delta-merge 流程
108
+ - Trellis 的代码认知回灌概念(仅参考)
109
+ - GSD Core 的 archive 阶段
@@ -0,0 +1,97 @@
1
+ # 自动推进工作流指引
2
+
3
+ ## 概述
4
+
5
+ 读取 STATE.md,由状态机确定当前状态,自动触发对应的下一个 slash command。
6
+
7
+ Continue 是整个工作流的自动导航器。它不执行任何业务逻辑,只负责判断「现在该做什么」并触发。
8
+
9
+ ## 前置条件
10
+
11
+ - specwf/STATE.md 存在且格式正确
12
+ - specwf 已初始化
13
+
14
+ ## 执行步骤
15
+
16
+ ### 1. 读取 STATE.md
17
+
18
+ \`\`\`
19
+ specwf state
20
+ \`\`\`
21
+
22
+ STATE.md 包含:
23
+ - 当前 milestone / phase / change 的位置
24
+ - 各个实体的状态
25
+ - 下一步提示(如果有)
26
+
27
+ ### 2. 查询特定 change 的状态
28
+
29
+ \`\`\`
30
+ specwf continue change <name>
31
+ \`\`\`
32
+
33
+ 查询指定 change 或临时 change 的当前状态和下一步建议。
34
+
35
+ ### 3. 状态机匹配
36
+
37
+ 根据 STATE.md 数据,状态引擎自动匹配合法转移。每个步骤对应一个 slash command:
38
+
39
+ | 层级 | 当前步骤 | 下一步命令 | 子代理 |
40
+ |------|---------|-----------|--------|
41
+ | 项目层 | initialized | /specwf:grill | — |
42
+ | 项目层 | requirements-defined | /specwf:research | researcher |
43
+ | 项目层 | researched | /specwf:roadmap | — |
44
+ | 项目层 | roadmap-defined | /specwf:discuss | — |
45
+ | Phase | phase-discuss | /specwf:research-phase | researcher |
46
+ | Phase | phase-research | /specwf:split | — |
47
+ | Phase | phase-split 后 | /specwf:plan → apply → review → verify → archive | 各步对应 subagent |
48
+ | Phase | change-archived | /specwf:ship | — |
49
+ | Phase | phase-shipped | /specwf:ship(milestone)或 /specwf:discuss(下一 phase)| — |
50
+ | 临时 change | adhoc-proposal | /specwf:plan | planner |
51
+
52
+ 完整的状态转移表见 `src/types/state.ts`。
53
+
54
+ ### 3. 输出下一步
55
+
56
+ 输出格式:
57
+ \`\`\`
58
+ # Continue 结果
59
+
60
+ ## 当前状态
61
+ - Project: <name>
62
+ - Milestone: <ms-name>(<status>)
63
+ - Phase: <ph-name>(<status>)
64
+ - Change: <change-name>(<status>)
65
+
66
+ ## 下一步
67
+ - 命令: /specwf:<next-step>
68
+ - 前置条件: ...
69
+ \`\`\`
70
+
71
+ ### 4. 触发(可选)
72
+
73
+ 如果配置了 \`auto_advance: true\`,自动加载对应的 skill 并开始执行。
74
+
75
+ ## 产物
76
+
77
+ - (无永久文件输出)
78
+ - 控制台输出下一步建议(或自动触发)
79
+
80
+ ## 验证
81
+
82
+ - [ ] 正确识别当前状态
83
+ - [ ] 正确匹配下一步
84
+ - [ ] STATE.md 格式可解析
85
+ - [ ] 无状态机死循环风险
86
+
87
+ ## 常见陷阱
88
+
89
+ - 如果 STATE.md 内容不完整或格式损坏,不要猜测 — 提示用户运行 \`specwf init\` 或手动修复
90
+ - 如果多个 change 存在且状态不一致,优先处理最深的未完成 change
91
+ - 不要自动推进跳过 review → verify → archive 的流程(review 必须由用户触发来确认质量)
92
+ - auto_advance 模式不跳过 review — 只是自动触发 review 命令,仍需要 reviewer agent
93
+
94
+ ## 参考
95
+
96
+ - state-machine 模块的状态转换表
97
+ - OMP 的 continue 命令设计
@@ -0,0 +1,95 @@
1
+ # Phase 讨论工作流指引
2
+
3
+ ## 概述
4
+
5
+ 为当前 Phase 做详细的实现决策讨论。这是进入技术实现前的最后一道设计关卡 — 确定 Phase 的目标、范围、设计方案和实现决策,产出 context.md 作为后续所有 change 的决策依据。
6
+
7
+ Discuss 不直接产出代码,但它决定了后续 coding 的质量和方向。
8
+
9
+ ## 前置条件
10
+
11
+ - 路线图 ROADMAP.md 已确定
12
+ - 当前 phase 的依赖 phase 已完成
13
+ - 相关的 specs 和 conventions 已就位
14
+
15
+ ## 执行步骤
16
+
17
+ ### 1. 确定 Phase 范围和边界
18
+
19
+ - 回顾 ROADMAP.md 中当前 phase 的描述
20
+ - 确认 phase 的输入和输出
21
+ - 明确与其他 phase 的接口边界
22
+
23
+ ### 2. 讨论技术决策
24
+
25
+ 逐项讨论以下决策,每项达成共识后记录:
26
+
27
+ **架构决策**
28
+ - 模块划分和分层
29
+ - 接口设计模式
30
+ - 数据流方向
31
+
32
+ **技术实现决策**
33
+ - 关键数据结构
34
+ - 异常处理策略
35
+ - 测试策略
36
+
37
+ **质量要求**
38
+ - 性能指标
39
+ - 安全要求
40
+ - 可维护性要求
41
+
42
+ ### 3. 记录 context.md
43
+
44
+ 将讨论结果写入 \`specwf/context.md\`:
45
+
46
+ \`\`\`markdown
47
+ # Phase: <名称>
48
+
49
+ ## 目标
50
+ ## 范围
51
+ ## 架构决策
52
+ - ADR-001: <决策项>
53
+ - 上下文: ...
54
+ - 决策: ...
55
+ - 理由: ...
56
+
57
+ ## 接口契约
58
+ ## 数据模型
59
+ ## 关键实现约束
60
+ ## 测试要求
61
+ ## 未解决问题
62
+ \`\`\`
63
+
64
+ 如果 context.md 已存在,追加或更新当前 phase 的部分。
65
+
66
+ ### 4. 识别灰色地带
67
+
68
+ 对尚未明确的决策点标记 \`[TODO: discuss]\`,可以先搁置但需记录:
69
+ - 不确定的点
70
+ - 需要进一步调研的领域
71
+ - 可以延后决定的事项
72
+
73
+ ## 产物
74
+
75
+ - \`specwf/context.md\`(更新)— 实现决策文档
76
+
77
+ ## 验证
78
+
79
+ - [ ] 所有架构决策都有记录和理由
80
+ - [ ] 接口边界清晰
81
+ - [ ] 灰色地带已标记
82
+ - [ ] context.md 与 ROADMAP.md 不矛盾
83
+
84
+ ## 常见陷阱
85
+
86
+ - 不要跳过「看起来简单」的决策 — 记录所有选择
87
+ - 如果决策依赖未完成的 phase,标记为 \`[DEFERRED]\`
88
+ - 避免过度设计 — 只讨论当前 phase 需要的决策
89
+ - 如果反复无法达成决策,使用 specwf-advisor agent 提供建议
90
+
91
+ ## 参考
92
+
93
+ - ADR(Architecture Decision Record)模式
94
+ - GSD Core 的 discuss 工作流
95
+ - OpenSpec 的 context.md 格式
@@ -0,0 +1,90 @@
1
+ # 需求探讨工作流指引
2
+
3
+ ## 概述
4
+
5
+ 通过无限制细节提问,与用户深入探讨需求,直到对项目的目标、范围、约束和技术方向达成共识。Grill 阶段不需要代码 — 它的产出一份扎实的 proposal.md,供后续 research 和 roadmap 使用。
6
+
7
+ 核心原则:不问「是/否」,而是「为什么」「在什么场景下」「现在的方案是什么」「成功怎么衡量」。
8
+
9
+ ## 前置条件
10
+
11
+ - 至少有一个初步想法或需求方向
12
+ - (可选)已读完用户提供的任何参考资料
13
+
14
+ ## 执行步骤
15
+
16
+ ### 1. 理解背景
17
+
18
+ 先让用户描述他想做什么。用简短问题确认:
19
+ - 项目核心目标是什么?
20
+ - 目标用户是谁?
21
+ - 当前状态(从零开始 / 改进现有 / 重构)?
22
+
23
+ ### 2. 深挖细节(5W1H)
24
+
25
+ 针对每个模糊点持续追问,直到边界清晰:
26
+
27
+ **What**
28
+ - 具体要做什么功能?不做什么(明确排除范围)
29
+ - 有什么输入/输出?
30
+
31
+ **Why**
32
+ - 为什么需要这个?业务驱动力是什么?
33
+ - 有什么必须满足的约束(合规、性能、部署环境)?
34
+
35
+ **Who**
36
+ - 谁用这个系统?用户角色和权限模型?
37
+ - 谁维护?维护者的技术栈?
38
+
39
+ **When**
40
+ - 时间线?里程碑节奏?
41
+ - 最短可用的范围是什么?
42
+
43
+ **Where**
44
+ - 部署环境(云端/私有化/边缘)?
45
+ - 是否已有基础设施(数据库、消息队列、CI/CD)?
46
+
47
+ **How**
48
+ - 偏好的技术栈倾向?
49
+ - 对开发流程有要求吗(TDD、review 强度等)?
50
+
51
+ ### 3. 产出 proposal.md
52
+
53
+ 将讨论共识整理为 proposal.md:
54
+ \`\`\`markdown
55
+ # <项目名称> Proposal
56
+
57
+ ## 概述
58
+ ## 目标和成功标准
59
+ ## 范围(含排除项)
60
+ ## 用户角色
61
+ ## 技术倾向
62
+ ## 非功能需求
63
+ ## 风险与不确定性
64
+ \`\`\`
65
+
66
+ ### 4. 确认共识
67
+
68
+ 与用户逐项回顾 proposal.md,确认无误后进入 research 阶段。
69
+
70
+ ## 产物
71
+
72
+ - \`specwf/proposal.md\` — 需求共识文档
73
+
74
+ ## 验证
75
+
76
+ - [ ] 用户对 proposal.md 所有条目确认无歧义
77
+ - [ ] 排除范围清晰表述
78
+ - [ ] 风险项已知且列出
79
+
80
+ ## 常见陷阱
81
+
82
+ - 不要太快跳到技术方案 — 先确认「做什么」再讨论「怎么做」
83
+ - 不要默认用户的术语和你一致 — 每遇到专业术语都问一次定义
84
+ - 如果用户有明显的先验假设,温和地指出并确认
85
+ - 当用户说「简单」或「标准」时,一定追问具体是什么
86
+
87
+ ## 参考
88
+
89
+ - The Mom Test 提问方法论
90
+ - GSD Core 的 grill 流程