@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,336 @@
1
+ # archive / conflict-resolution
2
+
3
+ 合并冲突决策树、`--force` 审计、多人并发 archive 处置。
4
+
5
+ ---
6
+
7
+ ## 冲突的类型
8
+
9
+ 1. **Heading mismatch**:MODIFIED/REMOVED 的 target heading 在 spec 里找不到
10
+ 2. **Duplicate heading**:ADDED 的 heading 在 spec 里已存在
11
+ 3. **Missing file**:MODIFIED 的 capability 文件不存在
12
+ 4. **Concurrent conflict**:本 slug archive 时 specs 已被别的 slug 改过
13
+ 5. **Syntax error**:delta 文件格式错(marker 写错、层级不对)
14
+ 6. **Orphan reference**:spec 删除了,但其他 spec 引用它
15
+
16
+ ---
17
+
18
+ ## 冲突 1:Heading mismatch
19
+
20
+ **现象**:
21
+
22
+ ```
23
+ ✗ conflict: delta/order-refund.md
24
+ MODIFIED: "退款请求处理流程"
25
+ → specs/order-refund.md 里没有 "退款请求处理流程" 这个 ### heading
26
+ closest matches:
27
+ - "退款请求处理" (similarity 0.87)
28
+ - "退款流程处理" (similarity 0.72)
29
+ ```
30
+
31
+ ### 决策树
32
+
33
+ ```
34
+ → 检查 delta 的 heading 和 spec 的 heading
35
+
36
+ 是拼写错?(空格、标点、大小写、typo)
37
+ ├─ 是 → 改 delta,重跑 archive
38
+ └─ 否 →
39
+ 检查 spec 最近 commit
40
+
41
+ spec heading 被别人改过?
42
+ ├─ 是 → 和改的人协调
43
+ │ - 要么按新 heading 写 delta(最快)
44
+ │ - 要么回滚 spec heading(如果当时没必要改)
45
+
46
+ └─ 否 → 可能是自己 delta 写错了 heading
47
+
48
+ 是"这个 heading 本该是新的"(其实是 ADDED 误写成 MODIFIED)?
49
+ ├─ 是 → 改 delta marker 为 ADDED,重跑
50
+ └─ 否 → 深入排查,可能 design 和 spec 基线脱节
51
+ → 回退 tech-spec 重新对齐
52
+ ```
53
+
54
+ ### 对策示例
55
+
56
+ **场景 A**:spec 里是"退款请求处理",delta 写成"退款请求处理流程"(加了"流程")
57
+
58
+ ```bash
59
+ # 改 delta
60
+ sed -i 's/退款请求处理流程/退款请求处理/' devflow/changes/<slug>/delta/order-refund.md
61
+ devflow archive
62
+ ```
63
+
64
+ **场景 B**:spec heading 被别的 slug(已 archive)改成了"退款请求处理 V2"
65
+
66
+ ```bash
67
+ # 和改的团队确认语义
68
+ # 然后改本 slug 的 delta
69
+ sed -i 's/退款请求处理/退款请求处理 V2/' devflow/changes/<slug>/delta/order-refund.md
70
+ devflow archive
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 冲突 2:Duplicate heading
76
+
77
+ **现象**:
78
+
79
+ ```
80
+ ✗ conflict: delta/coupon-management.md
81
+ ADDED: "批量发放优惠券"
82
+ → specs/coupon-management.md 里已经有 ### 批量发放优惠券
83
+ ```
84
+
85
+ ### 诊断
86
+
87
+ - 本 slug 的 delta 写了 ADDED,但 spec 已经有同名
88
+ - 可能是:前一个 slug 已经加过(同一 feature 迭代);或 heading 撞了
89
+
90
+ ### 决策树
91
+
92
+ ```
93
+ → 是两次相同 feature?
94
+ ├─ 是 → delta marker 应改为 MODIFIED(第二次迭代)
95
+ │ 重跑 archive
96
+
97
+ └─ 否(撞名) → 改 delta heading 让它独特
98
+ (如 "批量发放优惠券" → "批量发放优惠券(高并发版)")
99
+ 重跑 archive
100
+ ```
101
+
102
+ ---
103
+
104
+ ## 冲突 3:Missing file
105
+
106
+ **现象**:
107
+
108
+ ```
109
+ ✗ conflict: delta/order-newthing.md
110
+ MODIFIED: "..."
111
+ → specs/order-newthing.md 不存在
112
+ ```
113
+
114
+ ### 诊断
115
+
116
+ - MODIFIED 只对已有 spec 生效
117
+ - 新 capability 不该 MODIFIED,该 ADDED(整个 spec 都是新的)
118
+
119
+ ### 对策
120
+
121
+ 改 delta,所有 block 用 ADDED。或者用 RENAMED(如果是改名)。
122
+
123
+ ---
124
+
125
+ ## 冲突 4:Concurrent conflict(多人并行)
126
+
127
+ **现象**:本 slug 在 feature 分支上写了 delta,基于 main 的 spec baseline。这期间另一个 slug 已 merge + archive,spec baseline 变了。
128
+
129
+ ### 预防
130
+
131
+ - archive 前:`git pull` 最新 main 的 specs
132
+ - 看 diff:本 slug 影响的 capability 文件有没有被动
133
+ - 如果动了,**rebase delta**:
134
+ - 原 delta 基于 baseline A
135
+ - 现 baseline 是 A + (别人的 archive)
136
+ - 本 delta 可能需要调整(heading 名 / block 内容)
137
+
138
+ ### 处置
139
+
140
+ ```bash
141
+ # 在 feature 分支上
142
+ git fetch origin
143
+ git diff main..HEAD -- devflow/specs/
144
+
145
+ # 如果 spec 有别人改动,先看懂 → 调整本 delta
146
+ # 然后
147
+ devflow archive
148
+ ```
149
+
150
+ ### 不要做
151
+
152
+ - 强制推 specs,覆盖别人的 archive(破坏历史)
153
+ - 不看 diff 直接 --force(等于覆盖别人)
154
+
155
+ ---
156
+
157
+ ## 冲突 5:Syntax error
158
+
159
+ **现象**:
160
+
161
+ ```
162
+ ✗ delta/coupon-management.md: syntax error at line 8
163
+ expected marker: `## ADDED:`, `## MODIFIED:`, `## REMOVED:`, `## RENAMED:`
164
+ got: `## ADDING`
165
+ ```
166
+
167
+ ### 对策
168
+
169
+ 改 delta,用正确 marker。
170
+
171
+ 常见:
172
+
173
+ - `ADDING` / `ADDS` → `ADDED`
174
+ - `UPDATE` → `MODIFIED`
175
+ - `DELETE` → `REMOVED`
176
+ - marker 层级错(写成 `### ADDED:`)
177
+
178
+ ---
179
+
180
+ ## 冲突 6:Orphan reference
181
+
182
+ **现象**:本 slug 的 delta REMOVED 了 capability X,但其他 spec 文件引用 X。
183
+
184
+ ```
185
+ ✗ conflict: deletion of spec "coupon-temp-freeze" leaves orphan references:
186
+ - specs/order-settlement.md 提到 "coupon-temp-freeze"
187
+ ```
188
+
189
+ ### 对策
190
+
191
+ - 检查其他 spec,看引用是否也该去
192
+ - 如果是:在本 slug 的 delta 里加 MODIFIED(对其他 spec)去掉引用
193
+ - 如果不是:说明 capability 不能删,需要重新审视
194
+
195
+ ---
196
+
197
+ ## `--force` 的使用
198
+
199
+ ### 何时允许
200
+
201
+ 仅允许下列情况:
202
+
203
+ 1. **ADDED 冲突但用户明确接受作为 MODIFIED**(审计)
204
+ 2. **MODIFIED 冲突但用户明确接受作为 ADDED**(heading 本就是新的,写错前缀)
205
+ 3. **Orphan reference,用户确认可接受留悬空**(极少,一般不建议)
206
+
207
+ ### 用法
208
+
209
+ ```bash
210
+ devflow archive --force --reason="heading '批量发放' 在别的 slug 里已加,本 slug 实际是 MODIFIED,之前 delta 写错"
211
+ ```
212
+
213
+ 记入 state.archiveForces[]:
214
+
215
+ ```json
216
+ {
217
+ "archiveForces": [
218
+ {
219
+ "at": "2026-04-24T21:00:00Z",
220
+ "file": "delta/coupon-management.md",
221
+ "heading": "批量发放优惠券",
222
+ "originalMarker": "ADDED",
223
+ "fallback": "MODIFIED",
224
+ "reason": "heading 已存在,本 slug 实际是 MODIFIED",
225
+ "by": "@eng-a"
226
+ }
227
+ ]
228
+ }
229
+ ```
230
+
231
+ ### 不允许 --force 的场景
232
+
233
+ - 跳过语法错误(去修 delta)
234
+ - 跳过 syntax 检查 / validate
235
+ - 覆盖别人的 archive(永远不允许)
236
+
237
+ ---
238
+
239
+ ## 复合冲突
240
+
241
+ 一次 archive 多个 delta 都冲突。CLI 默认**全部报告后停止**,不部分应用:
242
+
243
+ ```
244
+ Conflicts found:
245
+ delta/a.md: heading mismatch
246
+ delta/b.md: duplicate heading
247
+ delta/c.md: syntax error
248
+
249
+ Fix all conflicts and rerun.
250
+ ```
251
+
252
+ 一次改完所有再跑 archive,避免"半 applied 半不 applied"的中间态。
253
+
254
+ ---
255
+
256
+ ## 试运行 dry-run
257
+
258
+ ```bash
259
+ devflow archive --dry-run
260
+ ```
261
+
262
+ 输出:
263
+
264
+ ```
265
+ Would apply:
266
+ delta/coupon-management.md → specs/coupon-management.md
267
+ - MODIFIED: 优惠券发放
268
+ - ADDED: 批量发放优惠券
269
+ delta/coupon-batch-grant.md → specs/coupon-batch-grant.md (NEW)
270
+ - ADDED: 批量发放请求入参
271
+ - ADDED: 批量发放响应
272
+
273
+ Would move: devflow/changes/coupon-batch-grant/ → devflow/archive/2026-04-24-coupon-batch-grant/
274
+
275
+ No changes committed.
276
+ ```
277
+
278
+ 验证预期后再跑真实 archive。
279
+
280
+ ---
281
+
282
+ ## 回滚
283
+
284
+ archive 刚做完但发现错了:
285
+
286
+ ```bash
287
+ devflow archive --undo <slug>
288
+ ```
289
+
290
+ - 把 archived 文件搬回 changes/
291
+ - specs 回退(git 层面 revert 或 reset)
292
+ - state 恢复
293
+
294
+ 若 archive 已 push,需手动 revert spec commits + 协调团队。
295
+
296
+ ---
297
+
298
+ ## 常见错误与修复
299
+
300
+ | 错误 | 修复 |
301
+ | --- | --- |
302
+ | `## ADDED` 后直接接内容,没 `### heading` | 加 `### <heading>` 作为 block 头 |
303
+ | heading 里带不可见字符(zero-width space) | 用编辑器清理;vim `%s/\%u200b//g` |
304
+ | delta 里只写 "TBD" 或 "same as design" | 写实质内容;spec 不接受 placeholder |
305
+ | spec 里 heading 层级用 `##` 而非 `###` | spec 统一用 `###` for requirements;修 spec 后重跑 |
306
+ | REMOVED 后又 ADDED 同 heading | 等效于 MODIFIED,建议合并成一条 MODIFIED |
307
+
308
+ ---
309
+
310
+ ## 并发 archive 的组织规范
311
+
312
+ > 团队规模 > 5 人,多 slug 并行时
313
+
314
+ 建议:
315
+
316
+ - **一次只 archive 一个 slug**(串行化 archive,其他人等待)
317
+ - **archive 前全量 `git pull`**
318
+ - **archive 后立即 push**(不要本地攒)
319
+ - **冲突时协调**:钉钉 / 飞书实时沟通,不要猜对方意图
320
+ - **spec owner 审核**:每个 capability 有 owner,archive 需 owner +1(可放到 PR 阶段检)
321
+
322
+ 不建议:
323
+
324
+ - 每个 slug 都自己的 spec 副本(违反单一真源)
325
+ - 多 slug 合并成大 archive(失去 change 边界)
326
+ - archive 阶段由机器人自动跑(spec 是需要人脑判断的)
327
+
328
+ ---
329
+
330
+ ## 永远不要做的
331
+
332
+ - **吞冲突然后 force merge**:下一个 change 会因为 spec 和现实不一致踩大坑
333
+ - **删 spec 文件改成全 ADDED**:完全破坏历史追溯
334
+ - **archive 里的文件拿出来改**:archive 是快照,破坏等于伪造历史
335
+ - **force push spec git 历史**:团队其他人的 local 会烂
336
+ - **把 archive commit 塞进业务 PR**:解耦:业务 PR 合 → 稳定期 → 独立 archive PR
@@ -0,0 +1,381 @@
1
+ # archive / knowledge-deposit
2
+
3
+ 经验沉淀分类规则、写入格式、provider 与同步。
4
+
5
+ ---
6
+
7
+ ## 为什么要 deposit
8
+
9
+ 每次 change 结束后,除了 spec(系统做什么)还有**知识**(做事过程中学到什么):
10
+
11
+ - 某个 SDK 的坑
12
+ - 某个架构决策的 trade-off
13
+ - 一个生产故障的教训
14
+ - 一个业务概念的精准定义
15
+
16
+ 这些如果不沉淀,下个人再踩一次。
17
+
18
+ `devflow knowledge deposit` 把 workspace `knowledge/`、design decisions、incidents 分类写入知识沉淀目录,必要时同步到外部 KB(Wiki / Confluence / WeKnora)。
19
+
20
+ **默认写入目标:**
21
+
22
+ ```
23
+ ~/.devflow/workspace/changes/<feature-xx>/knowledge/
24
+ ```
25
+
26
+ 即使是单服务需求,也默认写到当前需求 workspace。服务仓的 `devflow/knowledge/` 仅作为历史兼容,不作为新流程的默认目标。
27
+
28
+ **knowledge 只写 workspace 当前需求目录**,不要分散写入每个服务仓,避免同一决策被重复沉淀、分类不一致。
29
+
30
+ ---
31
+
32
+ ## 知识沉淀目录结构
33
+
34
+ ```
35
+ ~/.devflow/workspace/changes/member-upgrade/
36
+ └── knowledge/
37
+ ├── 领域概念/ ← 业务概念(优惠券、订单、发放批次的定义)
38
+ ├── 业务规则/ ← 业务规则(不可用券规则、失效策略、上限)
39
+ ├── 业务场景/ ← 业务场景(大促发券、断签登录、黑名单拉新)
40
+ ├── 接口契约/ ← 关键 API/event 契约摘要
41
+ ├── 架构决策/ ← 架构决策记录(ADR)
42
+ ├── 服务说明/ ← 服务职责(coupon-service、order-service 的边界)
43
+ ├── 运行手册/ ← 运维 runbook(批量发券故障如何处置)
44
+ ├── 事故复盘/ ← 事故复盘
45
+ ├── 环境说明/ ← 环境差异说明(staging vs prod 注意点)
46
+ └── 解决方案/ ← 具体解决方案模式(批量任务幂等、分段事务)
47
+ ```
48
+
49
+ 历史 in-repo 模式若仍需使用,使用相同的中文分类目录,只是根路径为 `<repo>/devflow/knowledge/`;新需求不推荐。
50
+
51
+ ---
52
+
53
+ ## 分类规则
54
+
55
+ ### deposit 时 CLI 的分类来源
56
+
57
+ 新流程不再使用顶层 `learnings.md`。可复用经验直接写入 workspace `knowledge/<中文分类>/`,CLI 按目录和关键信号确认分类:
58
+
59
+ | 信号 | 默认分类 |
60
+ | --- | --- |
61
+ | `knowledge/业务场景/` | 业务场景 |
62
+ | `knowledge/领域概念/` | 领域概念 |
63
+ | `knowledge/业务规则/` | 业务规则 |
64
+ | design.md 的 ADR | 架构决策 |
65
+ | 新 API / event | 接口契约(简化摘要) |
66
+ | 新服务边界 | 服务说明 |
67
+ | incident / 事故 | 事故复盘 |
68
+ | 运维步骤 | 运行手册 |
69
+ | 配置 / 环境差异 | 环境说明 |
70
+ | 通用技术解决方案(幂等、限流、分段事务) | 解决方案 |
71
+
72
+ **最终分类由 human 确认**,不要闭眼接受 AI 建议。
73
+
74
+ ---
75
+
76
+ ## 写入格式
77
+
78
+ ### 领域概念/<name>.md
79
+
80
+ ```markdown
81
+ ---
82
+ kind: concept
83
+ name: 优惠券批次
84
+ related:
85
+ - 领域概念/优惠券.md
86
+ - 服务说明/coupon-service.md
87
+ introducedIn: 2026-04-24-coupon-batch-grant
88
+ ---
89
+
90
+ # 优惠券批次
91
+
92
+ ## 定义
93
+
94
+ 一次批量发放操作的逻辑分组,由 batchId 唯一标识。
95
+
96
+ 属性:
97
+ - batchId: ULID(26 字符)
98
+ - activityId: 关联活动
99
+ - requester: 发放方
100
+ - totalCount / grantedCount / failedCount
101
+ - createdAt
102
+
103
+ ## 为什么有这个概念
104
+
105
+ <...引入背景...>
106
+
107
+ ## 相关能力
108
+
109
+ - 批量发放 → `specs/coupon-management.md#批量发放优惠券`
110
+ - 批次查询 → `specs/coupon-management.md#批次查询`
111
+
112
+ ## 边界
113
+
114
+ - 最多 10000 条 / 批
115
+ - 批次永久保留(无过期)
116
+ - 批次 != 活动(一个活动可有多个批次)
117
+ ```
118
+
119
+ ### 架构决策/<name>.md(ADR)
120
+
121
+ ```markdown
122
+ ---
123
+ kind: adr
124
+ name: coupon-batch-grant-transaction-strategy
125
+ status: accepted
126
+ date: 2026-04-24
127
+ deciders: [@arch-b, @eng-a]
128
+ slug: coupon-batch-grant
129
+ ---
130
+
131
+ # 批量发放事务策略:拆分三段而非大事务
132
+
133
+ ## Context
134
+
135
+ 批量发放 ≤ 10000 条,单大事务会:
136
+ - 持锁 10s+,阻塞其他请求
137
+ - 失败一条全回滚,牺牲可用性
138
+ - DB 压力大
139
+
140
+ ## Decision
141
+
142
+ 拆成 3 段(校验、核销、日志),每段独立短事务。跨段用 batchId + 状态机保证一致性。
143
+
144
+ ## Alternatives considered
145
+
146
+ 1. 单大事务(rejected:可用性 / 性能)
147
+ 2. 异步全部走消息队列(rejected:业务要求同步返回结果)
148
+ 3. Saga + 补偿(rejected:补偿逻辑复杂,超出本迭代)
149
+
150
+ ## Consequences
151
+
152
+ - ✅ P99 < 200ms(单条粒度)
153
+ - ✅ 允许部分成功部分失败
154
+ - ⚠️ 并发场景 batchId 冲突需幂等性保证
155
+ - ⚠️ 如核销阶段挂,已校验通过的需要 reconcile
156
+
157
+ ## Follow-ups
158
+
159
+ - 监控:batch-grant 的 partial-failure rate 超 5% 告警
160
+ - Runbook:reconcile 脚本(运行手册/reconcile-coupon-log.md)
161
+ ```
162
+
163
+ ### 事故复盘/<date>-<short>.md
164
+
165
+ ```markdown
166
+ ---
167
+ kind: incident
168
+ severity: P1
169
+ date: 2026-04-24
170
+ duration_min: 35
171
+ slug: coupon-batch-grant (contributing)
172
+ ---
173
+
174
+ # 2026-04-24 大促夜批量发券卡单
175
+
176
+ ## 时间线
177
+
178
+ - 20:00 大促开始
179
+ - 20:05 批量发放 QPS 飙升至 8000
180
+ - 20:10 DB 连接池耗尽,5xx 上升
181
+ - 20:15 触发 alert
182
+ - 20:25 确认是连接池配置,扩容 10 → 50
183
+ - 20:35 恢复
184
+
185
+ ## 根因
186
+
187
+ 连接池默认 10,批量发放需要 3 连接 / 请求(3 段事务),8000 QPS 瞬间压满。
188
+
189
+ ## 临时处置
190
+
191
+ 连接池扩 50。
192
+
193
+ ## 长期改进
194
+
195
+ - 调优连接池配置(已加到 服务说明/coupon-service.md)
196
+ - 事务段数审视(ADR-003 追加 consequence)
197
+ - runbook: 批量发券压力测试必须 5000+ QPS
198
+
199
+ ## 教训
200
+
201
+ - 新 API 上线前,生产环境连接池配置要审(不能套默认)
202
+ - 压测要覆盖峰值的 2x
203
+ ```
204
+
205
+ ### 解决方案/<pattern>.md
206
+
207
+ ```markdown
208
+ ---
209
+ kind: solution-pattern
210
+ name: 分段事务 + 幂等键
211
+ applicability:
212
+ - 批量操作 > 1000 条
213
+ - 业务允许部分失败
214
+ - 对 P99 敏感
215
+ ---
216
+
217
+ # 分段事务 + 幂等键
218
+
219
+ ## 问题
220
+
221
+ 批量操作 N 条,要求:
222
+ - P99 低
223
+ - 允许部分失败不全 rollback
224
+ - 重试安全
225
+
226
+ ## 方案骨架
227
+
228
+ 1. 预处理阶段:校验每条,记入 staging(无事务或短事务)
229
+ 2. 执行阶段:每条独立事务,失败记失败原因
230
+ 3. 后处理阶段:汇总结果,必要时 reconcile
231
+
232
+ 幂等:所有请求带 batchId(客户端生成或服务生成);重复 batchId 返回原结果。
233
+
234
+ ## 实现要点
235
+
236
+ - batchId 用 ULID(有序 + 随机,利于分片)
237
+ - staging 表 retention 24h(reconcile 窗口)
238
+ - 监控 partial-failure rate(健康度指标)
239
+
240
+ ## 相关案例
241
+
242
+ - coupon-batch-grant(2026-04-24):本模式第一次应用
243
+ - 未来可复用:批量消息推送 / 批量订单导出 / ...
244
+
245
+ ## 反模式
246
+
247
+ - 不要把校验也放业务事务(浪费事务资源)
248
+ - 不要用 AUTO_INCREMENT 做 batchId(分布式扩展难)
249
+ ```
250
+
251
+ ---
252
+
253
+ ## 关联写入(cross-link)
254
+
255
+ 每条 knowledge 文件 frontmatter 有 `related: [...]` 列出相关文件,用相对路径:
256
+
257
+ ```yaml
258
+ related:
259
+ - 领域概念/优惠券.md
260
+ - 架构决策/coupon-batch-grant-transaction-strategy.md
261
+ - 事故复盘/2026-04-24-batch-grant-db-saturation.md
262
+ ```
263
+
264
+ `devflow knowledge query` / `devflow knowledge graph` 用这些 link 做知识图谱。
265
+
266
+ ---
267
+
268
+ ## provider 同步
269
+
270
+ ### local(默认)
271
+
272
+ ```jsonc
273
+ { "kb": { "local": { "driver": "kb-local" } } }
274
+ ```
275
+
276
+ 什么都不做,只写 git。靠 git log 和 IDE 搜索使用。
277
+
278
+ ### weknora / wiki / confluence
279
+
280
+ ```jsonc
281
+ {
282
+ "kb": {
283
+ "weknora": {
284
+ "driver": "kb-weknora",
285
+ "config": {
286
+ "endpoint": "https://weknora.example.com",
287
+ "apiKey": "$WEKNORA_KEY",
288
+ "kbId": "<kb-id>"
289
+ }
290
+ }
291
+ }
292
+ }
293
+ ```
294
+
295
+ `devflow knowledge sync` 或 archive 的 hook 触发,将本地 `knowledge/*.md` push 到远端。
296
+
297
+ `.meta.json` 跟踪每个文件的:
298
+
299
+ - sha256(变了才 sync)
300
+ - remoteId(远端 doc id)
301
+ - lastSyncedAt
302
+
303
+ ### 双向同步
304
+
305
+ 暂不支持"远端改回写本地"(有冲突风险)。远端只读,本地是真源。
306
+
307
+ ---
308
+
309
+ ## 去重与合并
310
+
311
+ deposit 检测相似:
312
+
313
+ - 同名 concept 已存在 → 提示合并(人工判断:更新原文 or 追加)
314
+ - 类似 ADR 已存在(关键词相似) → 提示,可能上次已做过类似决策
315
+ - 同类 incident(pattern 相似) → 提示是否串在一起
316
+
317
+ AI 建议 + human 决策。不自动合并。
318
+
319
+ ---
320
+
321
+ ## 什么不该 deposit
322
+
323
+ - 具体代码(代码看 git)
324
+ - 敏感配置(secret / token)
325
+ - 机密业务(定价算法细节、风控规则细节)
326
+ - 临时信息(debug 数据、一次性 workaround)
327
+
328
+ 如果发现 `knowledge/` 条目含敏感信息,deposit 前手动净化。
329
+
330
+ ---
331
+
332
+ ## deposit 的时机
333
+
334
+ 1. **immediately after archive**:推荐,记忆新鲜
335
+ 2. **批量 weekly deposit**:不推荐(记忆衰退,分类错误率高)
336
+ 3. **等 incident 发生再写 runbook**:晚了,架构刚 archive 时就该写
337
+
338
+ ---
339
+
340
+ ## 质量门槛
341
+
342
+ > 一篇 knowledge 文件合格的要求
343
+
344
+ - ✅ 单一主题(一篇一个 concept / decision / incident)
345
+ - ✅ 上下文完整(读者不需要额外 context 就能理解)
346
+ - ✅ 有"为什么",不只是"是什么"
347
+ - ✅ 有 related 链接(不是孤立)
348
+ - ✅ 有 owner / slug 追溯
349
+ - ✅ 保留失败的 alternatives(对 ADR 尤其重要)
350
+
351
+ 不合格的例子:
352
+
353
+ - "批量发放很重要" ← 没内容
354
+ - "batchId 用 ULID"(只有一行) ← 没 context
355
+ - "按 design.md 走"(引用代替内容) ← 不 deposit,让人去看 design
356
+
357
+ ---
358
+
359
+ ## `devflow knowledge query` 的使用
360
+
361
+ ```bash
362
+ devflow knowledge query "批量发放事务"
363
+ devflow knowledge query --tag=adr --recent=30d
364
+ devflow knowledge query --related=coupon-batch-grant
365
+ ```
366
+
367
+ 返回本地匹配文件(和可选的远端 KB 结果)。用于:
368
+
369
+ - 新 change 的 requirement-analysis 阶段找背景
370
+ - tech-spec 阶段找 related ADR
371
+ - incident 时快速定位 runbook
372
+
373
+ ---
374
+
375
+ ## 最反模式
376
+
377
+ - **同时维护 learnings.md 和 knowledge/解决方案/**:同一经验两份副本,必然漂移;只保留 knowledge/
378
+ - **分类粒度乱**:有的分到领域概念,有的分到架构决策,无规则 → 查不到
379
+ - **only happy path ADR**:只记"选 A",不记"为什么不选 B/C" → 后人会重复选 B 然后碰同样的坑
380
+ - **knowledge 写成小说**:3000 字的 concept 文件 → 没人看
381
+ - **不 deposit**:觉得"没什么可写" → 一般是没有把可复用经验写进 `knowledge/`