@chenguangyao/devflow-kit 0.1.43

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 (198) hide show
  1. package/CHANGELOG.md +232 -0
  2. package/LICENSE +21 -0
  3. package/README.md +539 -0
  4. package/bin/devflow.js +9 -0
  5. package/docs/RFC-001-devflow-kit.md +617 -0
  6. package/docs/RFC-002-workflow-kernel.md +134 -0
  7. package/docs/enterprise-integration-supplement.md +274 -0
  8. package/docs/internal-gitlab-setup.md +426 -0
  9. package/docs/marketplace-skills.md +231 -0
  10. package/docs/migration-from-arb.md +232 -0
  11. package/docs/tooling-overview.md +774 -0
  12. package/docs/workflow-orchestration.md +695 -0
  13. package/docs/workflow-ui-prototype.html +271 -0
  14. package/package.json +52 -0
  15. package/schemas/config.schema.json +51 -0
  16. package/schemas/delta.schema.json +22 -0
  17. package/schemas/state.schema.json +130 -0
  18. package/schemas/status-surface.schema.json +197 -0
  19. package/schemas/workflow-confirmation-surface.schema.json +70 -0
  20. package/schemas/workflow-picker.schema.json +94 -0
  21. package/scripts/postinstall.js +101 -0
  22. package/scripts/render-workflow-ui-prototype.js +271 -0
  23. package/skills/apply/SKILL.md +313 -0
  24. package/skills/apply/references/discipline-checklist.md +145 -0
  25. package/skills/apply/references/subagent-implementer-prompt.md +113 -0
  26. package/skills/apply/references/subagent-orchestration.md +150 -0
  27. package/skills/apply/references/subagent-reviewer-prompt.md +180 -0
  28. package/skills/apply/references/tdd-loop.md +287 -0
  29. package/skills/apply/references/when-plan-is-wrong.md +279 -0
  30. package/skills/apply/references/worktree-swarm.md +292 -0
  31. package/skills/archive/SKILL.md +229 -0
  32. package/skills/archive/references/conflict-resolution.md +336 -0
  33. package/skills/archive/references/knowledge-deposit.md +381 -0
  34. package/skills/archive/references/spec-merge.md +365 -0
  35. package/skills/brainstorm/SKILL.md +123 -0
  36. package/skills/brainstorm/references/proposal-template.md +244 -0
  37. package/skills/brainstorm/references/question-catalog.md +168 -0
  38. package/skills/brainstorm/references/session-template.md +184 -0
  39. package/skills/ci-fix/SKILL.md +63 -0
  40. package/skills/ci-fix/references/loop.md +25 -0
  41. package/skills/code-review/SKILL.md +279 -0
  42. package/skills/code-review/references/escalation-playbook.md +192 -0
  43. package/skills/code-review/references/language-cheatsheets/go.md +175 -0
  44. package/skills/code-review/references/language-cheatsheets/java-spring-mybatis.md +246 -0
  45. package/skills/code-review/references/language-cheatsheets/python.md +170 -0
  46. package/skills/code-review/references/language-cheatsheets/vue.md +199 -0
  47. package/skills/code-review/references/output-template.md +275 -0
  48. package/skills/code-review/references/review-checklist.md +251 -0
  49. package/skills/complexity-grading/SKILL.md +259 -0
  50. package/skills/deliver/SKILL.md +271 -0
  51. package/skills/deliver/references/delivery-modes.md +299 -0
  52. package/skills/deliver/references/notify.md +359 -0
  53. package/skills/deliver/references/pr-description.md +319 -0
  54. package/skills/dependency-upgrade/SKILL.md +57 -0
  55. package/skills/dependency-upgrade/references/risk-matrix.md +38 -0
  56. package/skills/df-orchestrator/SKILL.md +407 -0
  57. package/skills/df-orchestrator/references/complexity-grading.md +177 -0
  58. package/skills/df-orchestrator/references/escalation-matrix.md +191 -0
  59. package/skills/df-orchestrator/references/routing-rules.md +290 -0
  60. package/skills/df-orchestrator/references/workflow-state-machine.md +208 -0
  61. package/skills/frontend-quality/SKILL.md +61 -0
  62. package/skills/frontend-quality/references/checklist.md +35 -0
  63. package/skills/handoff-resume/SKILL.md +59 -0
  64. package/skills/handoff-resume/references/handoff-template.md +54 -0
  65. package/skills/plan/SKILL.md +166 -0
  66. package/skills/plan/references/task-breakdown.md +207 -0
  67. package/skills/plan/references/task-sequencing.md +143 -0
  68. package/skills/plan/references/task-template.md +248 -0
  69. package/skills/requirement-analysis/SKILL.md +499 -0
  70. package/skills/requirement-analysis/references/acceptance-criteria.md +183 -0
  71. package/skills/requirement-analysis/references/code-recon.md +151 -0
  72. package/skills/requirement-analysis/references/edge-case-catalog.md +164 -0
  73. package/skills/requirement-analysis/references/requirement-template.md +339 -0
  74. package/skills/requirement-analysis/references/scope-negotiation.md +162 -0
  75. package/skills/security-hardening/SKILL.md +60 -0
  76. package/skills/security-hardening/references/checklist.md +42 -0
  77. package/skills/tech-spec/SKILL.md +388 -0
  78. package/skills/tech-spec/references/api-contract-design.md +172 -0
  79. package/skills/tech-spec/references/decision-records.md +110 -0
  80. package/skills/tech-spec/references/design-template.md +301 -0
  81. package/skills/tech-spec/references/rollout-and-rollback.md +203 -0
  82. package/skills/tech-spec/references/spec-delta-conventions.md +250 -0
  83. package/skills/tech-spec/references/transaction-patterns.md +212 -0
  84. package/skills/test-spec/SKILL.md +219 -0
  85. package/skills/test-spec/references/coverage-strategy.md +218 -0
  86. package/skills/test-spec/references/edge-case-to-test.md +143 -0
  87. package/skills/test-spec/references/test-case-template.md +276 -0
  88. package/skills/verify/SKILL.md +232 -0
  89. package/skills/verify/references/nfr-verification.md +292 -0
  90. package/skills/verify/references/report-templates.md +510 -0
  91. package/skills/verify/references/self-test-guide.md +240 -0
  92. package/skills/verify/references/verify-rollback-map.md +247 -0
  93. package/src/cli/commands/_helpers.js +108 -0
  94. package/src/cli/commands/_submit.js +718 -0
  95. package/src/cli/commands/apply.js +198 -0
  96. package/src/cli/commands/archive.js +180 -0
  97. package/src/cli/commands/checkpoint.js +113 -0
  98. package/src/cli/commands/deliver.js +377 -0
  99. package/src/cli/commands/deploy.js +504 -0
  100. package/src/cli/commands/design.js +158 -0
  101. package/src/cli/commands/disable.js +21 -0
  102. package/src/cli/commands/doctor.js +178 -0
  103. package/src/cli/commands/enable.js +21 -0
  104. package/src/cli/commands/flow.js +645 -0
  105. package/src/cli/commands/help.js +93 -0
  106. package/src/cli/commands/ingest.js +602 -0
  107. package/src/cli/commands/init.js +341 -0
  108. package/src/cli/commands/knowledge.js +523 -0
  109. package/src/cli/commands/logs.js +43 -0
  110. package/src/cli/commands/new.js +202 -0
  111. package/src/cli/commands/plan.js +49 -0
  112. package/src/cli/commands/propose.js +27 -0
  113. package/src/cli/commands/provider.js +698 -0
  114. package/src/cli/commands/report.js +143 -0
  115. package/src/cli/commands/requirement.js +227 -0
  116. package/src/cli/commands/review.js +301 -0
  117. package/src/cli/commands/skills.js +457 -0
  118. package/src/cli/commands/status.js +925 -0
  119. package/src/cli/commands/switch.js +27 -0
  120. package/src/cli/commands/sync.js +47 -0
  121. package/src/cli/commands/test.js +366 -0
  122. package/src/cli/commands/uninstall.js +32 -0
  123. package/src/cli/commands/update.js +74 -0
  124. package/src/cli/commands/verify.js +354 -0
  125. package/src/cli/commands/worktree.js +78 -0
  126. package/src/cli/index.js +72 -0
  127. package/src/cli/parse-args.js +102 -0
  128. package/src/core/autodetect.js +271 -0
  129. package/src/core/change.js +208 -0
  130. package/src/core/checkpoint.js +217 -0
  131. package/src/core/config.js +60 -0
  132. package/src/core/delta.js +290 -0
  133. package/src/core/markers.js +59 -0
  134. package/src/core/paths.js +173 -0
  135. package/src/core/plan-tasks.js +36 -0
  136. package/src/core/project-routing.js +285 -0
  137. package/src/core/projects.js +200 -0
  138. package/src/core/state.js +200 -0
  139. package/src/core/workflow-check.js +177 -0
  140. package/src/core/workflow-init.js +34 -0
  141. package/src/core/workflow-picker.js +154 -0
  142. package/src/core/workflow-policy.js +119 -0
  143. package/src/core/workflow-suggest.js +181 -0
  144. package/src/core/workflow-verify.js +88 -0
  145. package/src/core/workflow.js +433 -0
  146. package/src/core/worktree.js +241 -0
  147. package/src/knowledge/categories.js +107 -0
  148. package/src/knowledge/classify.js +125 -0
  149. package/src/knowledge/deposit.js +414 -0
  150. package/src/knowledge/migrate.js +149 -0
  151. package/src/knowledge/mr.js +219 -0
  152. package/src/knowledge/query.js +131 -0
  153. package/src/knowledge/registry.js +151 -0
  154. package/src/knowledge/sync.js +179 -0
  155. package/src/providers/base.js +74 -0
  156. package/src/providers/drivers/api-yapi.js +78 -0
  157. package/src/providers/drivers/ci-jenkins.js +109 -0
  158. package/src/providers/drivers/intake-confluence.js +544 -0
  159. package/src/providers/drivers/kb-git.js +549 -0
  160. package/src/providers/drivers/kb-weknora.js +472 -0
  161. package/src/providers/drivers/notify-smtp.js +515 -0
  162. package/src/providers/drivers/observability-oss.js +43 -0
  163. package/src/providers/drivers/observability-sls.js +50 -0
  164. package/src/providers/lifecycle.js +135 -0
  165. package/src/providers/loader.js +132 -0
  166. package/src/providers/local.js +190 -0
  167. package/src/providers/userconfig.js +283 -0
  168. package/src/reports/aggregate.js +185 -0
  169. package/src/reports/coverage.js +163 -0
  170. package/src/reports/detect.js +143 -0
  171. package/src/reports/parse.js +236 -0
  172. package/src/templates/files/ci/github.yml +38 -0
  173. package/src/templates/files/ci/gitlab.yml +27 -0
  174. package/src/templates/files/design.md +63 -0
  175. package/src/templates/files/ide/devflow-workflow.md +58 -0
  176. package/src/templates/files/ide/project-overview-reference.md +1 -0
  177. package/src/templates/files/ide/project-overview.md +27 -0
  178. package/src/templates/files/knowledge-index.json +17 -0
  179. package/src/templates/files/knowledge.md +28 -0
  180. package/src/templates/files/meta.json +8 -0
  181. package/src/templates/files/plan.md +38 -0
  182. package/src/templates/files/proposal.md +33 -0
  183. package/src/templates/files/reports/contract-test.md +40 -0
  184. package/src/templates/files/reports/e2e-test.md +30 -0
  185. package/src/templates/files/reports/integration-test.md +36 -0
  186. package/src/templates/files/reports/joint-test.md +58 -0
  187. package/src/templates/files/reports/perf.md +24 -0
  188. package/src/templates/files/reports/regression.md +20 -0
  189. package/src/templates/files/reports/remote-test.md +55 -0
  190. package/src/templates/files/reports/self-test.md +43 -0
  191. package/src/templates/files/reports/smoke-test.md +22 -0
  192. package/src/templates/files/reports/unit-test.md +36 -0
  193. package/src/templates/files/requirement.md +51 -0
  194. package/src/templates/files/review.md +38 -0
  195. package/src/templates/files/tests.md +36 -0
  196. package/src/templates/files/verify.md +32 -0
  197. package/src/templates/index.js +21 -0
  198. package/src/utils/log.js +37 -0
@@ -0,0 +1,292 @@
1
+ # apply / worktree-swarm
2
+
3
+ Git worktree 并行执行模型、合并顺序、冲突处置。
4
+
5
+ ---
6
+
7
+ ## 为什么用 worktree
8
+
9
+ 传统 `git checkout` 切分支有痛点:
10
+
11
+ - build 缓存被打乱(切一次重 build)
12
+ - IDE 索引失效
13
+ - 测试 watcher 中断
14
+ - 多 task 并行时撞车
15
+
16
+ `git worktree` 的核心:**同一个 repo 多个工作副本,共享 .git,独立 working tree**。
17
+
18
+ devflow-kit 在此基础上:
19
+
20
+ - 每个 task 一个 worktree
21
+ - 统一目录布局:`.devflow-worktrees/<slug>/task-N/`
22
+ - 统一分支命名:`devflow/<slug>/task-N`
23
+ - 生命周期由 `devflow apply` / `devflow worktree` 管理
24
+
25
+ ---
26
+
27
+ ## 标准工作流
28
+
29
+ ### 单 task 串行
30
+
31
+ ```bash
32
+ devflow apply --task 1 --start
33
+ # → 创建 .devflow-worktrees/<slug>/task-1/ 和分支 devflow/<slug>/task-1
34
+ # → 终端自动 cd 到该 worktree(如配置了 shell hook)
35
+
36
+ # 编码、测试、commit
37
+ cd .devflow-worktrees/<slug>/task-1
38
+ # ...
39
+
40
+ # 回到主目录
41
+ cd /path/to/main/repo
42
+ devflow apply --task 1 --done --note="commit <sha>"
43
+
44
+ # 进入下一个
45
+ devflow apply --task 2 --start
46
+ ```
47
+
48
+ ### 多 task 并行
49
+
50
+ ```bash
51
+ # 假设 plan.md DAG:
52
+ # T-01 → T-02 → T-05
53
+ # T-03 (独立)
54
+ # T-04 → T-05 (T-05 要等 T-02 和 T-04 都完成)
55
+
56
+ # 终端 A
57
+ devflow apply --task 1 --start
58
+
59
+ # 终端 B (与 T-01 无依赖关系,可同时开)
60
+ devflow apply --task 3 --start
61
+
62
+ # T-01 完成后,终端 A 继续
63
+ devflow apply --task 1 --done
64
+ devflow apply --task 2 --start
65
+
66
+ # T-01 完成后,并发开 T-04(与 T-02 无依赖)
67
+ devflow apply --task 4 --start # 终端 C
68
+
69
+ # 终端 A 完成 T-02,终端 C 完成 T-04 后,T-05 才能开
70
+ ```
71
+
72
+ 每个终端 cd 到自己的 worktree,互不干扰:
73
+
74
+ - 独立 working tree,没有文件冲突
75
+ - 独立 git index / HEAD
76
+ - build 缓存分开(Maven `target/`, Go `vendor/`, node `node_modules/` 独立)
77
+
78
+ ---
79
+
80
+ ## 合并策略
81
+
82
+ ### 按依赖顺序合并回 main,不按完成顺序
83
+
84
+ ```
85
+ 完成顺序:T-03 → T-01 → T-04 → T-02 → T-05
86
+ 依赖顺序:T-01 → T-02, T-04 并 → T-05, T-03 独立
87
+
88
+ 合并顺序(推荐):
89
+ T-01 → main
90
+ T-02 → main (rebase 后 push)
91
+ T-03 → main (独立,任何时候)
92
+ T-04 → main
93
+ T-05 → main
94
+ ```
95
+
96
+ ### merge vs rebase
97
+
98
+ | 方式 | 场景 | 优点 | 缺点 |
99
+ | --- | --- | --- | --- |
100
+ | `--no-ff` merge commit | 保留 task 分支历史 | 能看到哪个 task 做了啥 | 历史图复杂 |
101
+ | rebase then fast-forward | 要求线性历史 | 历史干净 | 丢失 task 边界(靠 commit message) |
102
+ | squash merge | 多 commit task 压成一个 | commit 干净 | 丢失中间过程,PR discussion 对不上 |
103
+
104
+ **devflow-kit 推荐:rebase + fast-forward**(若项目允许),或 `--no-ff` 合并 + commit message 明确 task id。
105
+
106
+ ### 冲突处置
107
+
108
+ worktree 间**不允许直接 merge**(`T-03 worktree` merge `T-01 worktree`):会让合并关系变混乱。
109
+
110
+ 正确做法:
111
+
112
+ ```bash
113
+ # 场景:T-02 依赖 T-01 完成,T-01 已 merge 到 main,T-02 worktree 需要更新
114
+
115
+ # 在 T-02 worktree 里
116
+ git fetch
117
+ git rebase main # 把 main 最新(含 T-01)应用到 T-02 的 commit 上
118
+ # 如有冲突:解决 → git add → git rebase --continue
119
+
120
+ # 继续 T-02
121
+ ```
122
+
123
+ 绝对不要:
124
+
125
+ ```bash
126
+ # ❌ T-02 分支从 T-01 分支切,两者 merge 成一团
127
+ git merge devflow/<slug>/task-1
128
+ ```
129
+
130
+ ---
131
+
132
+ ## 何时 `--no-worktree`
133
+
134
+ worktree 有开销(磁盘占用 + 初次创建时间),不是所有场景都值得:
135
+
136
+ | 场景 | 用 worktree? | 说明 |
137
+ | --- | --- | --- |
138
+ | L2 / L3 多 task,需要并行 | ✅ 默认 | 本节主线 |
139
+ | L1 一行改 bug | ❌ `--no-worktree` | 杀鸡焉用牛刀 |
140
+ | 纯 spike / 实验,不打算合并 | ❌ `--no-worktree` | 做完 reset |
141
+ | plan 只有 1 个 task | ❌ `--no-worktree` | worktree 开销 > 好处 |
142
+ | 磁盘紧张(嵌入设备 / CI 容器) | ❌ `--no-worktree` | 按需 |
143
+ | 项目有 symlink / 路径硬编码 | ⚠️ 先验证 | 有些工具(IDE 插件)对非 repo-root 敏感 |
144
+
145
+ 用法:
146
+
147
+ ```bash
148
+ devflow apply --task 1 --start --no-worktree
149
+ # 直接在当前分支上做;完成后 devflow apply --task 1 --done
150
+ ```
151
+
152
+ ---
153
+
154
+ ## 清理
155
+
156
+ ### 合并后清理
157
+
158
+ ```bash
159
+ # task merge 到 main,分支和 worktree 都可以删
160
+ devflow worktree cleanup <slug> --task 1
161
+ # 等价于:
162
+ # git worktree remove .devflow-worktrees/<slug>/task-1
163
+ # git branch -D devflow/<slug>/task-1
164
+ ```
165
+
166
+ ### PR 未 merge 前的清理
167
+
168
+ ```bash
169
+ # PR 还在 review,worktree 不需要了,但分支要留
170
+ devflow worktree cleanup <slug> --task 1 --keep-branch
171
+ # 等价于:
172
+ # git worktree remove .devflow-worktrees/<slug>/task-1
173
+ # (分支保留)
174
+ ```
175
+
176
+ ### 整 slug 完成后
177
+
178
+ ```bash
179
+ devflow worktree cleanup <slug> --all
180
+ # 删所有 task 的 worktree 和本地 devflow/<slug>/* 分支
181
+ ```
182
+
183
+ ### 查看
184
+
185
+ ```bash
186
+ devflow worktree list <slug>
187
+ # NAME PATH BRANCH STATUS
188
+ # task-1 .devflow-worktrees/abc/task-1 devflow/abc/task-1 clean, ahead 3
189
+ # task-2 .devflow-worktrees/abc/task-2 devflow/abc/task-2 dirty (modified)
190
+ # task-3 — devflow/abc/task-3 (branch exists, no worktree)
191
+ ```
192
+
193
+ ---
194
+
195
+ ## 故障场景
196
+
197
+ ### worktree 创建失败
198
+
199
+ ```
200
+ Error: fatal: '.devflow-worktrees/<slug>/task-1' already exists
201
+ ```
202
+
203
+ 对策:
204
+
205
+ ```bash
206
+ devflow worktree cleanup <slug> --task 1 # 清旧的
207
+ devflow apply --task 1 --start # 重开
208
+ ```
209
+
210
+ ### 跨 worktree 误改到 main 分支
211
+
212
+ worktree 模式下 main 目录通常也是个 worktree。误 `git commit` 到 main:
213
+
214
+ ```bash
215
+ # 在 main 目录
216
+ git log --oneline # 看误提交了什么
217
+ git reset HEAD~1 # 撤销,保留改动
218
+ # 切到正确的 task worktree
219
+ cd .devflow-worktrees/<slug>/task-N
220
+ git apply /path/to/saved/patch
221
+ ```
222
+
223
+ ### worktree 磁盘不够
224
+
225
+ 每个 worktree 的 node_modules / target / vendor 独立,会占用 N 倍空间。
226
+
227
+ 对策:
228
+
229
+ - 限制并发 task 数(2-3 个)
230
+ - 用 pnpm / bazel 等跨 worktree 共享缓存的工具
231
+ - `devflow worktree prune` 清未使用的(合并后的)
232
+
233
+ ### 主 repo 误删 `.git`(灾难)
234
+
235
+ worktree 依赖主 repo 的 `.git`。主 repo 损坏 / 误删 → 所有 worktree 失效。
236
+
237
+ 预防:
238
+
239
+ - 主 repo 不动(代码操作都在 worktree 里)
240
+ - `devflow doctor` 会检查 `.git` 完整性
241
+
242
+ ---
243
+
244
+ ## 与 CI 的关系
245
+
246
+ - worktree 是**本地开发**优化,CI 不使用(CI 是 fresh clone)
247
+ - CI pipeline 应按**合并后 main 的 commit** 触发,而不是单独 task 分支
248
+ - 如果 task 分支也要跑 CI(pre-merge check),用 `devflow/<slug>/task-*` 的分支 pattern 配 CI webhook
249
+
250
+ ---
251
+
252
+ ## 并行边界
253
+
254
+ **能并行**:
255
+
256
+ - 改不同模块(Files 列表无重叠)
257
+ - 都只读主干(不影响彼此)
258
+ - 一个前端 + 一个后端 task(语言栈独立)
259
+
260
+ **不能并行**:
261
+
262
+ - 两个 task 都要改同一个文件(合并时必冲突,不如串行)
263
+ - 后一个 task 依赖前一个 task 的输出(契约、DDL、migration)
264
+ - DDL 类 task(database 不可并发同时做同一张表的 schema 改)
265
+
266
+ 并行决策:看 plan.md 的 DAG,相同"层级"(无依赖关系)可并行,且 Files 无重叠。
267
+
268
+ ---
269
+
270
+ ## 合并前 checklist
271
+
272
+ 每个 task worktree 准备合并回 main 前:
273
+
274
+ - [ ] 所有测试绿(本 task 的 + 本模块回归)
275
+ - [ ] `git status` 干净
276
+ - [ ] `git log --oneline main..HEAD` 检查 commit 干净(没有 "wip" / "fixup")
277
+ - [ ] 如有多 commit:按 plan.md 规定是否 squash
278
+ - [ ] 如需 rebase:`git rebase main` 成功,无遗留冲突
279
+ - [ ] `devflow doctor` 过
280
+ - [ ] `devflow apply --task N --done` 记录了最终 sha
281
+
282
+ 然后用项目默认的合并方式(直接 push / PR / MR)合回 main。
283
+
284
+ ---
285
+
286
+ ## 不要做的
287
+
288
+ - ❌ 在 worktree 里 `git checkout main`(worktree 只应该在自己的 task 分支上)
289
+ - ❌ 跨 worktree 复制文件("A 改好了我 cp 过来")→ 合并时混乱
290
+ - ❌ 在 worktree 里 `git push` 不属于自己的分支
291
+ - ❌ 用 IDE 的 "open multiple folders" 混淆主 repo 和 worktree → IDE 索引错乱
292
+ - ❌ 在 `.devflow-worktrees/` 里手动 `git worktree add`(绕过 df)→ df 状态不同步
@@ -0,0 +1,229 @@
1
+ ---
2
+ name: devflow-archive
3
+ description: |
4
+ 把 change 合进"真源"。默认 workspace 模式下,从
5
+ `~/.devflow/workspace/changes/<feature-xx>/` 读取过程文件,合并 spec delta 到
6
+ 各项目仓的 `devflow/specs/`,并归档到 `~/.devflow/workspace/archive/<yyyy-mm-dd-feature-xx>/`。
7
+ 同时同步归档各服务仓的局部 change。
8
+ knowledge deposit 统一从当前需求 workspace 的 `knowledge/` 执行。
9
+ 触发:`devflow archive` 或 `/df:archive`。
10
+ when_to_use: |
11
+ deliver 完成 **且** change 已 merge 到 main **且**(L3)rollout 通过稳定期。
12
+ 不完成 archive,spec 库和生产就不一致,下一个 change 的 design 会基于漂移的 spec。
13
+ ---
14
+
15
+ # archive
16
+
17
+ **"把代码做的事写回 spec"**。生产里真实运行什么,`devflow/specs/` 就该反映什么。archive 是让这两者同步的最后一步。
18
+
19
+ ## 何时真的可以 archive
20
+
21
+ archive 不是 deliver 后立刻做,要看 rollout 稳定性:
22
+
23
+ | 级别 | archive 时机 |
24
+ | --- | --- |
25
+ | L1(简单修复) | merge 后即可 |
26
+ | L2 | merge 后 24-48h 无 P0/P1 issue |
27
+ | L3 | 完成 rollout(灰度 → 全量)+ 稳定期(3-7 天)无重大回滚 |
28
+
29
+ **早 archive 的风险**:rollout 失败回滚 → spec 已经写了新行为 → spec 和生产不一致 → 下一个 change 基于错误 spec。
30
+
31
+ ## 前置检查
32
+
33
+ | 条件 | 必需 | 失败处理 |
34
+ | --- | --- | --- |
35
+ | `state.delivery.status === "completed"` | 是 | 等 deliver |
36
+ | change 已 merge 到 main(或对应 target) | 是 | 等合并 |
37
+ | L3:rollout 稳定期已过 | L3 必须 | 等稳定 |
38
+ | 有 `delta/*.md`(改了系统能力) | L2/L3 必须 | 补写 delta,或确认本次无 capability 变更 |
39
+ | 有 `knowledge/` 条目 | L2/L3 推荐 | 没有可复用经验时可为空;有经验直接写到 `knowledge/<分类>/` |
40
+ | 无 blocking concern(如回滚待跟进) | 是 | 先处理 concern |
41
+
42
+ > **delta 文件在哪产生**:`devflow design --with-spec` 阶段,默认 workspace 模式下 agent 应在
43
+ > `~/.devflow/workspace/changes/<feature-xx>/delta/` 下创建;服务局部 delta 可放
44
+ > `<service-repo>/devflow/changes/<slug>/delta/` 作为对应服务仓的输入。
45
+ > `<capability>.md`,frontmatter 写 `capability: <域>/<能力名>`(例:`coupon/grant`、`order/create`)。
46
+ > 格式支持 `## ADDED Requirements` / `## MODIFIED Requirements` / `## REMOVED Requirements`。
47
+ > 如果 tech-spec 阶段没有生成 delta,archive 时 spec 不会更新,须手动补写后重跑 `devflow archive`。
48
+
49
+ ## 核心动作
50
+
51
+ ### 1. Spec delta merge
52
+
53
+ CLI **递归**扫 workspace 的 `changes/delta/` 以及各服务仓局部 `devflow/changes/<slug>/delta/`(含子目录),按 OpenSpec 语义合并到对应项目仓的 `devflow/specs/`:
54
+
55
+ | section | 动作 |
56
+ | --- | --- |
57
+ | `## ADDED Requirements` | 在目标 spec 的 `## Requirements` 下 append |
58
+ | `## MODIFIED Requirements` | 找到同名 `### heading` 块替换 |
59
+ | `## REMOVED Requirements` | 找到同名块删除 |
60
+ | `## REJECTED Alternatives` | 追加到目标 spec 的 `## REJECTED Alternatives` 段 |
61
+
62
+ **落盘路径由 frontmatter `capability` 决定**(不是文件名):
63
+
64
+ | frontmatter `capability` | 目标 spec 路径 |
65
+ |--------------------------|----------------------------------------|
66
+ | `coupon/grant` | `specs/coupon/spec.md` |
67
+ | `order/create` | `specs/order/spec.md` |
68
+ | _(无 capability 字段)_ | `specs/<文件名>.md`(兼容旧格式) |
69
+
70
+ 不同业务域自动分目录,`specs/` 下结构清晰:
71
+ ```
72
+ devflow/specs/
73
+ ├── coupon/grant.md
74
+ ├── order/create.md
75
+ └── payment/alipay.md
76
+ ```
77
+
78
+ 合并的语义细节、多个 delta 顺序、heading 匹配规则、边界 case:见 [`references/spec-merge.md`](references/spec-merge.md)。
79
+
80
+ ### 2. 归档 workspace change
81
+
82
+ ```
83
+ ~/.devflow/workspace/changes/<feature-xx>/
84
+ → ~/.devflow/workspace/archive/<YYYY-MM-DD>-<feature-xx>/
85
+ ```
86
+
87
+ 完整保留所有过程文件(proposal / requirement / design / plan / review / verify / reports / state / delta)。
88
+
89
+ archive 里的 state.json 会加一条:
90
+
91
+ ```json
92
+ {
93
+ "phase": "archived",
94
+ "archivedAt": "2026-04-24T20:30:00Z",
95
+ "archivedBy": "@eng-a",
96
+ "mergedSha": "abc1234",
97
+ "specDeltasApplied": ["order-refund.md", "user-notification.md"]
98
+ }
99
+ ```
100
+
101
+ ### 3. Knowledge deposit(自动)
102
+
103
+ `devflow archive` 在移动文件夹前会**自动**执行 knowledge deposit:
104
+
105
+ - 读 workspace `knowledge/` / `design.md` / 事件记录
106
+ - 默认分类写入 `~/.devflow/workspace/changes/<feature-xx>/knowledge/`
107
+ - 历史 in-repo 模式的 `<repo>/devflow/knowledge/` 仅做兼容,不作为新流程默认目标
108
+ - 无需手动运行 `devflow knowledge deposit`
109
+
110
+ 如需跳过(例如已单独提前跑过):`devflow archive --skip-deposit`。
111
+
112
+ knowledge deposit 分类规则、写入格式:见 [`references/knowledge-deposit.md`](references/knowledge-deposit.md)。
113
+
114
+ ### 4. Workspace + 服务仓双归档
115
+
116
+ workspace 使用 `changes/<feature-xx>/` 作为主归档对象:
117
+
118
+ ```
119
+ ~/.devflow/workspace/changes/<feature-xx>/
120
+ → ~/.devflow/workspace/archive/<YYYY-MM-DD>-<feature-xx>/
121
+ ```
122
+
123
+ 同时,每个涉及服务仓只归档该服务局部 change:
124
+
125
+ ```
126
+ <service-repo>/devflow/changes/<slug>/
127
+ → <service-repo>/devflow/archive/<YYYY-MM-DD>-<slug>/
128
+ ```
129
+
130
+ **归档职责边界:**
131
+
132
+ - workspace archive:保存跨服务需求、总方案、总测试、统一知识沉淀、跨服务状态。
133
+ - service archive:保存本服务 design / plan / verify / review / MR 相关材料。
134
+ - knowledge 只从 workspace 的 `knowledge/` 统一同步到外部 KB;服务仓不再各自沉淀一份,避免重复和分类漂移。
135
+
136
+ ## Conflict 处理
137
+
138
+ merge 时 heading 找不到(MODIFIED/REMOVED 的 target 不存在):
139
+
140
+ ```
141
+ ✗ conflict: delta/order-refund.md
142
+ MODIFIED: "退款请求处理流程"
143
+ → specs/order-refund.md 里没有 "退款请求处理流程" 这个 ### heading
144
+ ```
145
+
146
+ **不要**直接 `--force`。选择:
147
+
148
+ 1. **heading 拼错**(最常见):改 `delta/*.md` 的 heading 让它匹配 specs
149
+ 2. **specs 原文 heading 被别人改过**:协调上游,要么按新 heading 写 delta,要么先合 heading 改回来
150
+ 3. **spec 基线漂移**:本 slug 的 delta 写在老基线上,基线已变 → 重新对齐(可能要回 tech-spec 看是否 design 也要调整)
151
+
152
+ 冲突决策树、`--force` 审计流程、多人并发 archive 的处置:见 [`references/conflict-resolution.md`](references/conflict-resolution.md)。
153
+
154
+ **`--force` 何时可用**:仅当明确接受"把 MODIFIED 当 ADDED 追加"(例如 heading 就是新的,写错了前缀)。每次 `--force` 都要 `--reason="..."` 并写入 state 审计。
155
+
156
+ ## 后置动作
157
+
158
+ archive 完成后 CLI 会自动:
159
+
160
+ 1. 合并 spec delta → 各项目仓 `devflow/specs/`
161
+ 2. Knowledge deposit / sync → `~/.devflow/workspace/changes/<feature-xx>/knowledge/`
162
+ 3. workspace `changes/<feature-xx>/` → workspace `archive/<date>-<feature-xx>/`
163
+ 4. 各服务仓局部 `devflow/changes/<slug>/` → `devflow/archive/<date>-<slug>/`
164
+ 5. 关闭 state(`phase=archived`)
165
+ 6. 打印 `workflow complete for <slug>`
166
+
167
+ archive 是**工作流最后一步**,执行完即全流程结束。无需再手动跑 knowledge deposit。
168
+
169
+ **不自动做**:
170
+
171
+ - 不自动 `git push specs`(用户自行 commit 决定)
172
+ - 不自动清本地分支(`devflow worktree cleanup` 用户自己调)
173
+ - 不自动 close JIRA issue(用 deliver 后的 hook)
174
+
175
+ ## 撤销 archive(紧急)
176
+
177
+ 罕见但需要:rollout 后发现问题要大回滚。
178
+
179
+ ```bash
180
+ devflow archive --undo <slug>
181
+ ```
182
+
183
+ - spec 回退(git 层用 revert 或 reset,取决于 repo 策略)
184
+ - change 从 archive/ 搬回 changes/
185
+ - state 恢复到 archive 前 phase
186
+
187
+ **副作用**:
188
+
189
+ - 若已 `devflow knowledge deposit`,不自动撤销(knowledge 单独处理)
190
+ - 若 archive 已 push 到 git,需要协调团队(revert commit + 通知)
191
+
192
+ 该操作需 `--confirm` 双重确认,审计记录到 `devflow/archive/undo-log.md`。
193
+
194
+ ## 完成状态协议
195
+
196
+ ```
197
+ ---STATUS---
198
+ result: DONE | BLOCKED | NEEDS_INPUT
199
+ archiveStatus: completed
200
+ outputs:
201
+ - devflow/archive/2026-04-24-coupon-batch-grant/
202
+ - devflow/specs/coupon-management.md (MODIFIED)
203
+ - devflow/specs/coupon-batch-grant.md (CREATED)
204
+ deltasApplied:
205
+ - coupon-management.md: 1 MODIFIED
206
+ - coupon-batch-grant.md: 3 ADDED
207
+ conflicts: []
208
+ nextAction: workflow complete
209
+ ---END_STATUS---
210
+ ```
211
+
212
+ ## 反模式
213
+
214
+ - **不管 rollout,merge 后立刻 archive**:L3 要等稳定期,否则 spec 可能和生产不一致
215
+ - **--force 吞冲突**:冲突是"spec 基线漂了"的信号,吞了等于把问题延迟到下一次 change
216
+ - **delta 写得太模糊**(比如 "优化退款流程"):spec 读者看不懂做了什么,归档价值低
217
+ - **把经验同时写 `learnings.md` 和 `knowledge/解决方案/`**:两份内容会重复漂移;新流程只保留 `knowledge/`
218
+ - **archive 完不提 git**:spec 改了没 push → 下一个人基于老 spec 做 design → 重走冲突
219
+ - **把所有 change 的 delta 合成一份大 delta**:失去细粒度,反查不方便
220
+ - **重复 archive 同 slug**:目录冲突,且审计混乱;应 rename 或先 undo
221
+ - **改 archive 里的内容**:archive 应该是只读快照;要改就 undo + 重 archive
222
+ - **knowledge deposit 前不检查分类**:AI 自动归类可能不准,要 human 审
223
+ - **archive 后立刻启动下一个相关 change**:如果 specs merge 后还有未 deploy 的部分,会踩坑;确认 rollout 稳定
224
+
225
+ ## 参考
226
+
227
+ - [`references/spec-merge.md`](references/spec-merge.md) — delta → spec 合并语义、heading 规则、多 delta 顺序、边界 case
228
+ - [`references/conflict-resolution.md`](references/conflict-resolution.md) — 冲突决策树、`--force` 审计、并发 archive 处置
229
+ - [`references/knowledge-deposit.md`](references/knowledge-deposit.md) — 经验沉淀分类规则、写入格式、provider 与同步