@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,774 @@
1
+ # devflow-kit 功能、命令与流程说明
2
+
3
+ 本文按当前实现说明 `devflow-kit` 的功能边界、命令体系、流程步骤、工具思想来源,以及每一步为什么存在。它面向第一次接手本项目的人,也面向想把 devflow 用进自己仓库的开发者。
4
+
5
+ ## 1. 项目定位
6
+
7
+ `devflow-kit` 是一套文件优先的开发工作流 CLI + Skills 套件。它不直接调用 LLM,也不绑定某个企业内网系统,而是把一次开发任务固化成可读、可审计、可继续接手的本地文件和状态。
8
+
9
+ 核心命令:
10
+
11
+ ```bash
12
+ devflow <command>
13
+ dfk <command>
14
+ ```
15
+
16
+ 核心原则:
17
+
18
+ - 阶段之间传文件,不传聊天摘要。
19
+ - CLI 负责机械动作:建目录、写模板、维护状态、跑测试、检查闸门、调用 provider。
20
+ - Skills 负责协作纪律:如何澄清需求、写设计、拆计划、按 TDD 实现、审查、验证、归档。
21
+ - 外部系统都走 provider,核心流程在没有内网依赖的裸 git 仓库里也能跑。
22
+
23
+ ## 2. 当前流程总览
24
+
25
+ 标准流程从入口材料开始,最终归档为长期规格和知识。
26
+
27
+ ```mermaid
28
+ flowchart TD
29
+ A["入口材料或想法"] --> B{"有外部材料?"}
30
+ B -->|Wiki / Issue / incident / markdown| C["devflow ingest"]
31
+ B -->|只有想法或 slug| D["devflow new"]
32
+ C --> E["proposal.md"]
33
+ D --> E
34
+ E --> F["complexity-grading skill<br/>L0 / L1 / L2 / L3"]
35
+ F --> G["devflow requirement<br/>requirement.md"]
36
+ G --> H["devflow design<br/>design.md<br/>tests.md / delta 按需"]
37
+ H --> I["devflow plan<br/>plan.md"]
38
+ I --> J["devflow apply<br/>task worktree + state"]
39
+ J --> K["devflow review --round<br/>review.md"]
40
+ K -->|MUST > 0| J
41
+ K -->|pass| Q["verify_start checkpoint"]
42
+ Q --> L["devflow test / report<br/>reports/test-report.md"]
43
+ L --> M["devflow verify finalize<br/>verify.md"]
44
+ M --> N["devflow deploy 可选<br/>deploy report"]
45
+ N --> O["devflow deliver<br/>PR/MR / notify"]
46
+ O --> P["devflow archive<br/>specs + knowledge + archive"]
47
+ ```
48
+
49
+ 当前默认路径模型:
50
+
51
+ ```text
52
+ <repo>/devflow/
53
+ ├── config.json # 项目配置、工程画像、项目概览引用
54
+ ├── providers.json # 可选,项目级 provider 覆盖
55
+ └── specs/ # 长期规格真源
56
+
57
+ ~/.devflow/workspace/
58
+ ├── changes/<slug>/ # 当前 change 过程文件
59
+ ├── archive/<date>-<slug>/ # 已归档 change
60
+ └── knowledge/<category>/ # 长期知识库
61
+
62
+ <repo>/.devflow-worktrees/
63
+ └── <slug>/<task-id>/ # apply task 隔离工作区
64
+ ```
65
+
66
+ 兼容说明:读取时仍兼容旧的 `<repo>/devflow/changes/`、`<repo>/devflow/archive/`、`<repo>/devflow/knowledge/`,但新写入默认走 `~/.devflow/workspace/`。
67
+
68
+ 文档输出原则:CLI 生成的面向用户文档默认使用中文;默认只生成核心链路文件,`tests.md`、`delta/`、`reports/` 等按风险级别、命令参数和证据需要懒生成,避免空模板和无内容报告。
69
+
70
+ ## 3. 吸收了哪些工具的功能
71
+
72
+ `devflow-kit` 不是照搬某一个工具,而是把几类成熟实践拼成一条可落地的本地工作流。
73
+
74
+ | 来源 | 吸收的功能 | 为什么吸收 | 在 devflow-kit 中的落点 | 优点 |
75
+ | --- | --- | --- | --- | --- |
76
+ | arb-workflow-kit | 全生命周期阶段、复杂度分级、PRD 驱动、review/verify/交付闸门、知识沉淀 | 企业研发任务很少只是“写代码”,需要从需求到上线后资产沉淀的完整链路 | `requirement`、`design`、`plan`、`review`、`verify`、`deliver`、`archive` 命令和阶段 skills | 避免从 PRD 直接跳编码;让每个阶段都有可审计产物 |
77
+ | Superpowers / Anthropic Skills | brainstorming、TDD、worktree 隔离、并行 agent、系统化调试、完成前验证 | AI 协作容易跳步骤、过早实现、缺少 fresh verification | `brainstorm`、`plan`、`apply`、`code-review`、`verify` skills;`.devflow-worktrees/` | 把“好习惯”变成流程约束,降低上下文漂移和并行冲突 |
78
+ | OpenSpec | change folder、规格 delta、archive 合并长期 spec | 每次需求既要改代码,也可能改变系统能力定义 | `delta/added|modified|removed`、`devflow/specs/`、`archive` | 已上线能力有单一事实源,后续需求能基于 specs 继续演进 |
79
+ | 契约消费者影响追踪 | URL/query/redirect/callback/API 字段/枚举/状态变化时追踪消费者 | 很多返工不是提供方实现错,而是前端页面、调用方、轮询页、缓存 key 等消费者没有同步设计 | `requirement-analysis` 的消费者侦察、`tech-spec` 的契约消费者影响矩阵、`test-spec` / `plan` 的消费者用例和任务 | 避免“returnUrl 不带参数后前端轮询页无 key”这类跨项目细节漏到联调才暴露 |
80
+ | 企业内网桥接经验 | Wiki/Issue/CI/通知/知识库 provider 抽象、凭证集中管理 | 不同公司系统不同,不能把 Confluence、Jenkins、WeKnora 等写死进核心流程 | `src/providers/*`、`devflow provider *`、`~/.devflow/providers.json` | 核心零内网依赖;需要接系统时按 driver 插入 |
81
+ | 结构化测试报告实践 | 测试输出解析、覆盖率发现、YAML frontmatter 报告 | “我跑过测试”不够,需要可复查的测试证据 | `devflow test <kind>`、`devflow report self-test`、`reports/test-report.md` | verify 和 deliver 可以基于报告判闸,PR 描述也能复用 |
82
+
83
+ ## 4. 为什么这样设计
84
+
85
+ ### 4.1 文件优先
86
+
87
+ 原因:AI 对话容易丢上下文,团队协作也不能依赖某个聊天窗口。
88
+ 做法:每个阶段都落 markdown,状态落 `state.json`,长期规格落 `devflow/specs/`,知识沉淀落 `knowledge/`。
89
+ 优点:任何人或 agent 都能从文件恢复上下文,review 和归档也有证据。
90
+
91
+ ### 4.2 CLI 与 Skill 分工
92
+
93
+ 原因:CLI 擅长确定性动作,LLM/agent 擅长读材料和起草文本。混在一起会让工具不可测、不可审计。
94
+ 做法:CLI 只做创建、记录、校验、解析、调用 provider;复杂判断由 skills 约束上层 agent。
95
+ 优点:命令可测试,流程可复用,不把 LLM 行为硬编码进 Node.js。
96
+
97
+ 更准确地说,流程控制应该从自然语言约定迁移到结构化状态机。Skill 继续保留,但降级为策略层;真正的门禁、确认、下一步、风险和证据,应该由 `devflow` CLI 统一管理。
98
+
99
+ | 事项 | 应由 CLI 管理 | 应由 Skill 管理 |
100
+ | --- | --- | --- |
101
+ | 阶段推进 | 当前 phase、可进入的下一个 phase、是否允许越级 | 解释为什么建议进入或暂缓某个阶段 |
102
+ | 用户确认 | `checkpoint` 创建、选项、默认动作、resolve/cancel 审计 | 用业务语言说明用户需要确认什么 |
103
+ | 下一步卡片 | 结构化渲染 `nextAction`、可执行命令、阻塞原因 | 帮 agent 选择更合适的下一步建议 |
104
+ | 风险和证据 | 风险接受记录、测试报告路径、review/verify 状态 | 判断风险是否充分暴露、证据是否可信 |
105
+ | 并行执行 | task 状态、worktree、冲突和完成记录 | 判断哪些 task 适合拆给子 agent |
106
+
107
+ 这样分工以后,agent 说错话或少说一句,不会直接改变流程真实状态;IDE、CLI、自动化脚本也能读取同一个 `state.json`,看到一致的卡点、选项和证据。
108
+
109
+ 这种分工的额外好处:
110
+
111
+ - 可测试:CLI 的 phase gate、checkpoint、报告检查都能用单元测试覆盖,不依赖某次 agent 输出是否稳定。
112
+ - 可恢复:换一个 agent、换一个 IDE、甚至隔天人工接手,都能从 `state.json` 和 markdown 产物恢复到同一流程位置。
113
+ - 可审计:用户确认、force 绕过、风险接受和证据路径都有记录,后续 review/复盘能知道当时为什么继续。
114
+ - 可集成:CI、IDE 插件、企业平台可以读取同一套结构化状态,而不是解析聊天文本。
115
+ - 可降级:没有 LLM 或 skill 没安装时,CLI 仍能维护基本流程和硬闸;skill 只增强质量,不决定事实。
116
+ - 可演进:后续要加问题卡、项目确认、风险接受、verify gate,只需要扩展 checkpoint schema 和 phase gate,不必重写每个 skill 的自然语言话术。
117
+
118
+ 这个分工是正确的,但边界要守住:CLI 负责确定性状态和硬约束,不负责替人理解业务;Skill 负责策略、解释、判断质量和指导 agent 行为,但不应该成为流程真实状态的唯一来源。也就是说,CLI 是流程账本和门禁系统,Skill 是专家操作手册。
119
+
120
+ 当前仍是混合控制:`requirement.md`、`design.md`、代码侦察和测试策略主要由 agent/skill 产出;`state.json.level`、phase、checkpoint、review/verify gate、报告缺失检查等事实由 CLI 记录和判定。设计方向是继续把“能否进入下一阶段”从自然语言 skill 迁移到 CLI gate,避免 agent 把聊天里的“继续”误当成流程确认。
121
+
122
+ ### 4.3 分级驱动
123
+
124
+ 原因:一行文案改动和跨服务架构改造不该走同样重量的流程。
125
+ 做法:通过 L0/L1/L2/L3 决定文档深度、测试报告、review 尺度和归档要求。
126
+ 优点:小改动不被流程拖慢,大改动不会漏掉设计、测试和回滚。
127
+
128
+ ### 4.4 Provider 可插拔
129
+
130
+ 原因:PRD、Issue、CI、通知、知识库在不同环境里差异很大。
131
+ 做法:抽象 `intake`、`issue`、`vcs`、`ci`、`notify`、`kb` 六类 provider。
132
+ 优点:核心流程可离线运行,企业接入时只扩 driver。
133
+
134
+ ### 4.5 Worktree 并行
135
+
136
+ 原因:多 task、多 agent 并行时,直接在同一工作区改代码容易互相污染。
137
+ 做法:`apply` / `worktree` 按 task 创建 `.devflow-worktrees/<slug>/<task-id>/`。
138
+ 优点:任务边界清楚,冲突显性化,主工作区更干净。
139
+
140
+ ### 4.6 Workflow Kernel 与 Checkpoint
141
+
142
+ 原因:完整流程不能只靠 skill 文档提醒 agent "该问用户"。问题卡、项目确认、复杂度分级、plan 审查、review 返工和风险接受都属于用户决策点;如果这些点只留在对话里,agent 可能漏问,用户也容易不知道下一步。
143
+ 做法:新增 `checkpoint` 内核,把决策点写入 `state.json.checkpoints[]`,由 CLI 统一渲染下一步卡片。`devflow status` 会展示最新 pending checkpoint。
144
+ 优点:流程停顿有结构化原因、选项和命令;后续 phase gate 可以检查 unresolved checkpoint,避免越级推进;IDE 也可以按同一 schema 渲染问题卡和下一步卡。
145
+
146
+ 当前已接入的硬闸:
147
+
148
+ - `intake -> requirement`:`devflow new/ingest` 创建 `problem_card` checkpoint,`devflow requirement` 在该 checkpoint 未确认时会阻塞并展示下一步卡片。
149
+ - `requirement -> design`:`devflow requirement` 自动路由项目后创建 `project_confirmation` checkpoint,`devflow design` 在该 checkpoint 未确认时会阻塞并展示下一步卡片。
150
+ - `plan -> apply`:`devflow plan` 创建 `plan_review` checkpoint,`devflow apply` 在该 checkpoint 未确认时会阻塞并展示下一步卡片。
151
+ - `review -> apply/verify`:`devflow review --round` 遇到 MUST 会创建 `review_fix`;达到最大轮次仍有 MUST 会创建 `review_blocked`。`devflow apply` 会记录接受返工,review 通过或强制通过会解析对应 checkpoint,并创建 `verify_start` checkpoint。
152
+ - `review -> verify`:`devflow verify` 在 `verify_start` 未确认时会阻塞;用户先执行 `devflow checkpoint resolve --id=<checkpoint-id> --decision=start-verify` 解除闸门,再单独触发 `devflow verify --slug=<slug>`。不得把 resolve 和 verify 串成一条命令,也不得复用早前"继续/按推荐"作为确认。
153
+ - `verify -> deliver`:`devflow verify finalize` 缺报告时创建 `verification_evidence`;`devflow deliver` 会拒绝带着未解决的 review/evidence/risk checkpoint 交付。
154
+
155
+ 紧急情况可 `devflow <phase> --force --reason="..."` 审计绕过;没有 reason 会被拒绝。
156
+
157
+ IDE 集成可以使用 `devflow checkpoint show --json` 获取最新 pending checkpoint,避免解析自然语言输出。JSON 输出包含 `checkpoint_confirmation_surface`、`pending`、`confirmationCard` 和 `nextAction`;其中 `confirmationCard.primaryAction` / `secondaryActions` 可以直接渲染成确认按钮。`workflow_policy` 会使用 `workflow_policy_confirm` 卡片,并把 `accept-risk` 作为主操作。
158
+
159
+ 如果 IDE 需要渲染整个当前 change 页面,优先调用 `devflow status --slug=<slug> --json`。它返回 `change_status_surface`,聚合 change 基本信息、phases 进度、artifacts 产物、apply task 摘要、review 轮次、verify 报告缺口、risk signals、workflow check、workflow actions、pending checkpoint、checkpoint confirmation card、primaryPanel、blockingReason、availableActions 和 nextAction。UI 主操作区应优先渲染 `primaryPanel`,用 `blockingReason` 展示阻塞原因,并把 `availableActions` 渲染成按钮。字段 contract 见 `schemas/status-surface.schema.json`。
160
+
161
+ 迁移方向:
162
+
163
+ - 自然语言提示只负责解释,不再作为唯一门禁。
164
+ - 每个需要用户拍板的节点都落成 `checkpoint`。
165
+ - 每个阶段命令先读结构化状态,再决定是否继续、阻塞或审计绕过。
166
+ - 每个风险接受、测试证据和 review 结论都尽量落到可查询字段或报告文件。
167
+ - Skill 产出的建议应尽量指向 CLI 命令,而不是只在聊天里写“请继续”。
168
+
169
+ ## 5. 命令体系
170
+
171
+ ### 5.1 主流程命令
172
+
173
+ | 阶段 | 命令 | 主要产物 | 作用 |
174
+ | --- | --- | --- | --- |
175
+ | 初始化 | `devflow init` | `devflow/config.json`、workspace 骨架 | 在项目里接入 devflow |
176
+ | 外部入口 | `devflow ingest <url|issue-id|incident:id>` | `refs/*.md`、`proposal.md`、`state.json` | 拉取或导入需求材料 |
177
+ | 想法入口 | `devflow new <slug>` | `proposal.md`、`state.json` | 没有外部材料时创建 change |
178
+ | 极简入口 | `devflow new <slug> --micro` / `--level=L0` | `plan.md`、`state.json(level=L0, mode=micro)` | L0 改动直接从 plan 开始 |
179
+ | 立项 | `devflow propose` | `proposal.md` | 补齐问题背景、目标、范围 |
180
+ | 需求 | `devflow requirement` | `requirement.md` | 形成业务契约和验收口径 |
181
+ | 设计 | `devflow design [--with-tests] [--with-spec]` | 默认 `design.md`;`--with-tests` 生成 `tests.md`;`--with-spec` 生成 `delta/` | 技术方案,按需生成测试策略和规格增量 |
182
+ | 计划 | `devflow plan` | `plan.md` | 拆成 TDD task |
183
+ | 实现记录 | `devflow apply --task=N --start|--done|--skip|--fail` | `state.json`、worktree | 记录 task 状态和隔离工作区 |
184
+ | 审查 | `devflow review --round` | `review.md`、rounds | 按 MUST/SHOULD/NIT 判定是否打回 |
185
+ | 测试 | `devflow test <kind>` | `reports/test-report.md#<kind>` | 执行并解析测试,写入聚合测试报告 |
186
+ | 自测 | `devflow report self-test` | `reports/test-report.md#self-test` | 生成提测自测材料 |
187
+ | 报告聚合 | `devflow report compact [--remove-split]` | `reports/test-report.md` | 把历史零散报告合入一份测试报告 |
188
+ | 验证 | `devflow verify` / `devflow verify finalize` | `verify.md` | 检查 review 和必备报告 |
189
+ | 部署 | `devflow deploy <env> --project=<name>` | `reports/test-report.md#deploy` | 触发 Jenkins 部署 |
190
+ | 交付 | `devflow deliver --mode=<pr|merge|keep|discard>` | PR/MR、submit report | 交付 change,可选通知 |
191
+ | 归档 | `devflow archive` | specs、archive、knowledge | 合并规格、沉淀知识、归档 change |
192
+
193
+ ### 5.2 子系统命令
194
+
195
+ | 子系统 | 命令 | 说明 |
196
+ | --- | --- | --- |
197
+ | Provider | `devflow provider setup` | 交互式配置常用 provider |
198
+ | Provider | `devflow provider list|status|add|remove|relogin|rotate|logout|audit` | 管理 provider 生命周期和凭证 |
199
+ | Provider | `devflow provider import publish-code --from=<file.json>` | 导入项目/Jenkins profile 到 `projects.json` |
200
+ | Knowledge | `devflow knowledge init|query|deposit|sync|validate|migrate|reparse` | 知识库初始化、检索、沉淀、同步、迁移和重解析 |
201
+ | Skills | `devflow skills install|status|migrate|uninstall` | 安装和维护 IDE skills |
202
+ | Checkpoint | `devflow checkpoint show|add|resolve|cancel` | 管理结构化用户确认点和下一步卡片 |
203
+ | Worktree | `devflow worktree create|list|cleanup` | 手动管理 task worktree |
204
+ | 状态 | `devflow status set-level <L0|L1|L2|L3> --reason="..."` | 调整复杂度级别;micro 升级后回到标准路由 |
205
+ | 风险信号 | `devflow status risk <add|resolve|accept|list> <type> --reason="..."` | 记录前端/依赖/安全/CI 等专项风险,供 verify/deliver 硬闸读取 |
206
+ | 项目设置 | `devflow update|uninstall|sync|switch|enable|disable` | 更新 marker、卸载、同步项目概览、开关能力 |
207
+ | 体检 | `devflow status` / `devflow doctor` | 查看 change 状态和健康检查 |
208
+
209
+ ## 6. 每一步怎么跑
210
+
211
+ ### 6.1 初始化
212
+
213
+ ```bash
214
+ devflow init [--ide=auto|full|minimal|none] [--with-ci=gitlab|github]
215
+ ```
216
+
217
+ 作用:
218
+
219
+ - 创建 `devflow/` 和 workspace 目录。
220
+ - 自动检测语言、构建工具、默认分支、remote、Jenkins job 候选。
221
+ - 寻找项目概览文件,如 `AGENTS.md`、`README.md`。
222
+ - 准备 `~/.devflow/providers.json`,权限收紧到 0600,并生成 `providers.example.json` 示例。
223
+ - 根据 `--ide` 写或跳过 IDE marker。
224
+
225
+ 输出:
226
+
227
+ - `<repo>/devflow/config.json`
228
+ - `<repo>/devflow/specs/`
229
+ - `~/.devflow/workspace/changes/`
230
+ - `~/.devflow/workspace/archive/`
231
+ - `~/.devflow/workspace/knowledge/`
232
+
233
+ 价值:让通用 skill 能读取项目专属上下文,同时避免每个项目重复安装大量静态 workflow 文档。
234
+
235
+ ### 6.2 入口材料
236
+
237
+ ```bash
238
+ devflow ingest https://wiki.example.com/pages/123
239
+ devflow ingest SCRUM-15803
240
+ devflow ingest incident:42
241
+ devflow ingest ./prd.md
242
+ devflow ingest https://wiki.example.com/pages/123 --follow-links
243
+ devflow new coupon-grant-api
244
+ devflow new typo-fix --micro
245
+ devflow new typo-fix --level=L0
246
+ devflow ingest ./prd.md --project-root=/path/to/project-a,/path/to/project-b
247
+ devflow new coupon-grant-api --project-root=/path/to/project-a
248
+ ```
249
+
250
+ 作用:
251
+
252
+ - `ingest` 根据输入类型调用 `intake` 或 `issue` provider。
253
+ - 保存原始材料到 `refs/`。
254
+ - 使用 `--follow-links` 时,额外抓入口页中的一层同域 Wiki 链接或本地 markdown/txt 链接,保存到 `refs/linked-*.md`,并写 `refs/link-index.md`。
255
+ - 保存图片附件到 `refs/assets/`。
256
+ - 渲染 `proposal.md`。
257
+ - 初始化 `state.json`。
258
+ - `devflow new --micro` 和 `devflow new --level=L0` 是例外入口:CLI 直接写入 `state.level=L0`、`state.mode=micro`、`currentPhase=plan`,生成轻量 `plan.md`,并把 `requirement`、`design`、`archive` 标记为 skipped。
259
+ - 如果传入 `--project-root`,会在创建 change 前确认项目,使用第一个项目的 git branch 生成 `<branch>-<slug>`,并把项目 root、角色、branch 写入 `state.projects`。
260
+ - 同时写入 `project-roots.json`,作为当前 change 的项目路径清单;多个项目不在同一个父目录时,后续阶段直接读这个文件,不再依赖当前 shell 目录重新搜索。
261
+
262
+ 输出:
263
+
264
+ ```text
265
+ ~/.devflow/workspace/changes/<slug>/
266
+ ├── refs/
267
+ │ ├── linked-*.md # --follow-links 时按需生成
268
+ │ └── link-index.md # --follow-links 时记录抓取/跳过原因
269
+ ├── proposal.md
270
+ ├── project-roots.json # 已确认项目路径清单,按需生成
271
+ ├── requirement.md
272
+ ├── design.md
273
+ ├── plan.md
274
+ ├── review.md
275
+ ├── verify.md
276
+ ├── reports/ # 按需
277
+ ├── tests.md # 按需
278
+ ├── delta/ # 按需
279
+ └── state.json
280
+ ```
281
+
282
+ 价值:保留“需求来源”,避免后续只看 agent 总结而丢掉原文。
283
+
284
+ ### 6.3 复杂度分级
285
+
286
+ 复杂度分级由 `complexity-grading` skill 执行,写入 `state.json.level`。CLI 当前不会自动替用户拍板。
287
+
288
+ `state.json` 中会记录本次确认过的级别和审计信息,例如:
289
+
290
+ ```json
291
+ {
292
+ "level": "L2",
293
+ "levelSetAt": "<ISO timestamp>",
294
+ "levelSource": "complexity-grading",
295
+ "problemCardConfirmedAt": "<ISO timestamp>",
296
+ "projectConfirmationAt": "<ISO timestamp>",
297
+ "levelAudit": []
298
+ }
299
+ ```
300
+
301
+ ```text
302
+ L0: 极简改动,范围极小,改法已确定
303
+ L1: 小 diff、低风险、无契约变化
304
+ L2: 多文件、接口或业务契约变化,默认级别
305
+ L3: 跨服务、性能、安全、合规、迁移或回滚风险
306
+ ```
307
+
308
+ 不同 level 不是完全相同的流程:
309
+
310
+ | Level | 流程形态 | 使用 skill 重量 |
311
+ | --- | --- | --- |
312
+ | `L0` | 极简路径:`plan -> apply -> review -> verify(unit) -> deliver` | 最少;通常不走完整 `requirement-analysis` / `tech-spec` / `test-spec` / `archive` |
313
+ | `L1` | 标准路径轻量版 | 需求和设计可短,测试策略可内联到 `plan.md` |
314
+ | `L2` | 默认标准路径 | 双轮需求澄清、标准设计、测试计划、review、verify |
315
+ | `L3` | 加强版标准路径 | 更深代码侦察、更完整设计、e2e/性能/回归/回滚/监控要求更高 |
316
+
317
+ L0/micro 的路由由 CLI 硬控制,不只写在 skill 说明里。`df-orchestrator` 负责识别“极简 / 不要文档 / 直接写 / 就改一行”等意图,然后调用 `devflow new <slug> --micro` 或 `devflow new <slug> --level=L0`;真正的状态落地由 CLI 完成。后续 `requirement`、`design` 会同时检查 `state.mode=micro` 和 `state.level=L0`,旧 change 只有 `level=L0` 也会拒绝进入文档阶段;`archive` 看到 micro 或 L0 也会拒绝。如果 apply 过程中发现范围扩大,先升级再补标准产物:
318
+
319
+ ```bash
320
+ devflow status set-level L1 --slug=<slug> --reason="micro scope expanded"
321
+ devflow requirement
322
+ devflow design
323
+ devflow plan
324
+ ```
325
+
326
+ apply 的并行执行由 plan 自动推导:plan 审查确认后,`devflow apply` / `/df:apply` 就是按 plan 执行的授权;如果 ready wave 中有 ≥2 个互不依赖 task,agent 应自动使用 subagent + worktree 并行分派。用户不需要每次显式说"并行",只在想覆盖默认策略时说明"直接做"、"不用子 agent"或"强制并行/不并行"。
327
+
328
+ 价值:让流程重量跟风险匹配。拿不准时按 L2 处理,后续发现风险扩大再升级。
329
+
330
+ > 新的 skill 编排能力见 [Workflow Orchestration](workflow-orchestration.md)。`level` 只表示风险和验证强度;每个 change 的实际 skill 路径由 `devflow flow recommend/draft/confirm` 生成的 `state.workflow.steps` 决定。
331
+
332
+ ### 6.4 需求分析
333
+
334
+ ```bash
335
+ devflow requirement
336
+ devflow requirement --project-root=/path/to/project-a,/path/to/project-b
337
+ devflow requirement --search-root=/path/to/multi-project-root
338
+ ```
339
+
340
+ 作用:
341
+
342
+ - 创建或补齐 `requirement.md`。
343
+ - 由 `requirement-analysis` skill 引导 agent 把 proposal/refs 变成业务契约。
344
+ - 在入口命令已通过 `--project-root` 选过项目时复用 `state.projects`;如果需要补选或覆盖,可在本阶段传 `--project-root`。
345
+ - 在多项目目录下执行 project routing:发现候选项目、按需求证据评分,并把推荐写入 `state.projects`。
346
+
347
+ 输出关注点:
348
+
349
+ - 功能目标
350
+ - 范围内/范围外
351
+ - 验收标准
352
+ - 业务规则
353
+ - 异常路径
354
+ - 契约消费者影响:URL、query、redirect、callback、接口字段、枚举、状态语义变化时,列出前端、调用方、轮询页、网关、缓存 key 等消费者
355
+ - 未决问题
356
+
357
+ 价值:把“材料描述”转成“可验收契约”,防止设计和实现阶段各自理解。
358
+
359
+ ### 6.5 技术设计与测试设计
360
+
361
+ ```bash
362
+ devflow design
363
+ devflow design --with-tests
364
+ devflow design --with-tests --with-spec
365
+ ```
366
+
367
+ 作用:
368
+
369
+ - 默认只创建 `design.md`。
370
+ - 传 `--with-tests` 时创建 `tests.md`;L1/L2 可以把测试策略内联在 `plan.md` 的 task 里。
371
+ - 传 `--with-spec` 或确有长期能力变化时准备 `delta/added|modified|removed`。
372
+ - 由 `tech-spec` 和 `test-spec` skills 约束方案内容。
373
+
374
+ 输出关注点:
375
+
376
+ - 改动点和影响面
377
+ - 模块边界
378
+ - 数据和接口契约
379
+ - 契约消费者影响矩阵:同时写清提供方改动、消费者适配、旧依赖方式、新状态来源、兼容和迁移策略
380
+ - 异常处理
381
+ - 灰度、回滚、兼容
382
+ - 测试策略
383
+ - 对长期规格的影响
384
+
385
+ 价值:把需求翻译成可实施方案,并把会影响长期能力的内容通过 delta 留给 archive 合并。
386
+
387
+ 契约消费者影响矩阵用于处理跨项目细节遗漏。典型场景是旧签约 `returnUrl` 带订单参数,新接入方只支持无参数回跳;此时 design 必须说明前端签约结果/轮询页的轮询 key 来源,以及刷新、直达、返回、老链接兼容,而不能只写后端回跳 URL 怎么生成。矩阵中的每一项后续都要进入 `tests.md` 或 `plan.md`,形成可执行的 consumer / frontend / e2e / integration 验证项。
388
+
389
+ ### 6.6 计划拆分
390
+
391
+ ```bash
392
+ devflow plan
393
+ ```
394
+
395
+ 作用:
396
+
397
+ - 创建 `plan.md`。
398
+ - 由 `plan` skill 把设计拆成 30-60 分钟粒度的 TDD task。
399
+
400
+ 每个 task 应包含:
401
+
402
+ - 文件范围
403
+ - 行为变化
404
+ - 先写什么失败测试
405
+ - 最小实现
406
+ - 验证命令
407
+ - 提交意图
408
+
409
+ 价值:让实现阶段有清晰边界,方便 worktree 并行和 reviewer 对照检查。
410
+
411
+ ### 6.7 Apply 与实现记录
412
+
413
+ ```bash
414
+ devflow apply --task=1 --start --note="kick off"
415
+ devflow apply --task=1 --done --note="unit pass"
416
+ devflow apply --task=2 --skip --note="covered by task 1"
417
+ devflow worktree list
418
+ devflow worktree cleanup --keep-branch
419
+ ```
420
+
421
+ 作用:
422
+
423
+ - 为 task 创建 `.devflow-worktrees/<slug>/<task-id>/`。
424
+ - 创建 task 分支,默认命名 `devflow/<slug>/<task-id>`。
425
+ - 记录 task 状态、worktree、branch、note、时间。
426
+
427
+ 重要边界:`apply` 不写业务代码,代码由人或 agent 在对应工作区完成。
428
+
429
+ 价值:让实现动作可追踪,也给多 agent 并行提供明确隔离边界。
430
+
431
+ #### 子 agent 并行实现
432
+
433
+ 当前 CLI 不内置 LLM runtime,也不会自己启动子 agent。子 agent 并行实现是 **skill / IDE agent 层协议**:
434
+
435
+ - `devflow apply` 负责创建 worktree、记录 task 状态、写 `state.json`。
436
+ - 父 agent/controller 负责读取 `plan.md`,计算哪些 task 可以并行。
437
+ - 实现子 agent 在各自 worktree 里写测试、实现、跑测试、commit。
438
+ - reviewer 子 agent 做 apply 阶段的 pre-review。
439
+ - controller 最后执行 `devflow apply --task=N --done --note="<commit sha>"`。
440
+
441
+ `skills/apply/SKILL.md` 里的规则是:只要 `plan.md` 中 task 数量 ≥ 2,父 agent 不应自己顺序写完多个 task,而应按依赖关系分 wave 派发子 agent。同一批 ready task 里如果有 ≥ 2 个互不依赖、没有共享文件的 task,应并行启动。
442
+
443
+ ```mermaid
444
+ flowchart TD
445
+ A["controller 读取 plan.md"] --> B["计算 ready wave"]
446
+ B --> C{"wave 内是否有多个独立 task?"}
447
+ C -->|是| D["并行启动多个实现子 agent"]
448
+ C -->|否| E["启动单个实现子 agent"]
449
+ D --> F["每个子 agent 在独立 worktree TDD + commit"]
450
+ E --> F
451
+ F --> G["规格合规 reviewer 子 agent"]
452
+ G --> H{"通过?"}
453
+ H -->|否| F
454
+ H -->|是| I["代码质量 reviewer 子 agent"]
455
+ I --> J{"通过?"}
456
+ J -->|否| F
457
+ J -->|是| K["controller 执行 apply --done"]
458
+ K --> L{"还有 ready wave?"}
459
+ L -->|有| B
460
+ L -->|无| M["devflow review --round"]
461
+ ```
462
+
463
+ 这个设计的原因是:多 task 场景下,父 agent 连续实现多个 task 容易污染上下文,也容易把一个 task 的隐含假设带到另一个 task。worktree + 子 agent 让任务边界、diff、测试证据和 pre-review 都更清楚。
464
+
465
+ ### 6.8 Code Review
466
+
467
+ ```bash
468
+ devflow review --round
469
+ devflow review --round --must=0 --should=2 --nit=3
470
+ devflow review --force-pass --reason="verified offline"
471
+ ```
472
+
473
+ 规则:
474
+
475
+ - `MUST = 0`:通过。
476
+ - `MUST > 0`:打回 apply。
477
+ - 第 3 轮仍有 MUST:blocked。
478
+ - 继续第 4 轮需要 `--continue-rounds`。
479
+ - 强行通过必须写 `--reason`。
480
+
481
+ 通过不等于直接开始 verify。review 通过或强制通过会创建 `verify_start` checkpoint;`devflow verify` 会先检查这个 checkpoint,未确认时只展示下一步卡片,不会继续验证。用户确认命令是 `devflow checkpoint resolve --id=<checkpoint-id> --decision=start-verify`,确认后再单独运行 `devflow verify --slug=<slug>`;需要应急绕过时使用 `devflow verify --force --reason="..."` 留痕。
482
+
483
+ 价值:把 review 从“看过了”变成可计数、可打回、可审计的闭环。
484
+
485
+ ### 6.9 测试、部署与验证
486
+
487
+ ```bash
488
+ devflow test unit
489
+ devflow test integration --cmd="npm run test:integration"
490
+ devflow test contract --cmd="npm run test:contract"
491
+ devflow test remote --preflight --api-base-url=https://test-api.example.com --cmd="npm run test:remote"
492
+ devflow test joint --preflight --cmd="npm run test:e2e" --backend-url=http://localhost:8080 --frontend-url=http://localhost:3000
493
+ devflow test smoke --cmd="curl -fsS http://localhost:3000/health"
494
+ devflow report self-test
495
+ devflow verify
496
+ devflow verify finalize
497
+ ```
498
+
499
+ 测试类型:
500
+
501
+ ```text
502
+ unit, integration, contract, e2e, joint, remote, smoke, regression, perf
503
+ ```
504
+
505
+ `unit` 支持自动检测;其他类型通常需要 `--cmd`。如果维护了 `~/.devflow/projects.json`,可按项目 profile 解析命令:
506
+
507
+ ```bash
508
+ devflow provider import publish-code --from=./publish-code-config.json
509
+ devflow deploy test --project=go-rocket-push-agent --tag=v1.9.29
510
+ devflow test smoke --project=go-rocket-push-agent --env=test
511
+ ```
512
+
513
+ `devflow deploy` 默认把部署证据写入 `reports/test-report.md#deploy`,不再额外生成 `deploy-<env>.md`,也不自动刷新 self-test,避免一次部署额外制造多份报告。`devflow deploy test` 会检查当前分支:已经在 `test` 分支时直接触发 Jenkins;在 feature/dev 分支时交互询问是否合入 `test` 并推送后触发。Jenkins job 候选会按 git group/project、环境名、deploy/test 命名习惯做智能排序,覆盖 `group-project-test`、`project-test`、`project-test2`、`deploy/project`、`project-<env>` 等常见格式。非交互脚本使用 `--merge-to=test` 显式启用;需要本地编译闸门时加 `--preflight` 或在项目 profile 的 `deploy.<env>.preflight` 配置命令。确实希望把部署证据同步写进自测材料时,显式加 `--update-self-test`。
514
+
515
+ 这些报告文件不是让每个需求都“无脑生成一套”。人看的材料默认收敛成 `reports/test-report.md` 一份;每类测试只是其中一个 section,供 verify 判闸、失败回流和审计追溯使用。只有显式加 `--split-report` 时才额外生成兼容旧工具的零散 markdown 文件。历史 change 已经有 `unit-test.md` / `smoke-test.md` 等散文件时,运行 `devflow report compact` 可合入聚合报告;确认不再需要散文件时加 `--remove-split` 清理。
516
+
517
+ | 文件 | 由什么命令生成 | 证明什么 | 什么时候需要 |
518
+ | --- | --- | --- | --- |
519
+ | `test-report.md#unit` | `devflow test unit` | 单元级行为、函数/模块逻辑、覆盖率 | 几乎所有代码改动都需要,是最基础报告 |
520
+ | `test-report.md#integration` | `devflow test integration --cmd=...` 或项目 profile | 模块间、服务间、DB/缓存/队列等集成路径 | L2/L3 或任何涉及接口、数据层、外部依赖的改动 |
521
+ | `test-report.md#contract` | `devflow test contract --cmd=...` | 调用链一致性:提供方/调用方字段、枚举、状态语义、回调、redirect/query、traceId/requestId、YAPI/OpenAPI 契约 | 有接口契约、回调、跳转、前后端/跨服务消费者时 |
522
+ | `test-report.md#e2e` | `devflow test e2e --cmd=...` | 从用户/API 入口到下游依赖的完整链路 | L3、跨服务、核心链路、端到端风险较高时 |
523
+ | `test-report.md#joint` | `devflow test joint --cmd=... --backend-url=... --frontend-url=...` | 前后端联调,记录后端/前端地址、浏览器操作步骤、截图、失败详情 | 有前端页面或跨项目消费者适配时;参考 arb-workflow-kit 的 test-executor 联调模式 |
524
+ | `test-report.md#remote` | `devflow test remote --cmd=... --api-base-url=...` | 已部署测试环境上的真实 API 验收,记录请求/响应和失败详情 | 纯后端已部署到测试环境,需要绕过本地 Mock 直接验接口时 |
525
+ | `test-report.md#smoke` | `devflow test smoke --cmd=...` 或项目 profile | 部署后关键入口是否可用 | L1/L2/L3 都建议有;小改动也至少做冒烟 |
526
+ | `test-report.md#self-test` | `devflow report self-test` | 人工提测自测、灰度观察、回归说明 | L2/L3 必备;需要提测通知或 PR 说明时很有用 |
527
+
528
+ `remote` / `joint` 支持 `--preflight`。`remote` 会先检查 `--api-base-url` 是否可达;`joint` 会按 agent-browser → chrome-devtools-mcp → playwright 探测浏览器自动化工具,并检查 `--backend-url`、`--frontend-url` 可达性。预检失败会写 `status: blocked`、`failureType: env_error`,测试命令失败会写 `failureType: code_error`。`verify finalize` 遇到 fail/blocked 报告会阻塞,并根据 failureType 提示是回 apply 修代码还是先处理环境。
529
+
530
+ 接口契约和日志证据走 provider:`api.yapi` 用于 `devflow sync yapi --file=<openapi.json|api.md>`,把设计产出的 OpenAPI/Swagger 或接口说明同步到 YAPI;`observability.sls` / `observability.oss` 用于 `devflow logs query --trace-id=<id>`、`--request-id=<id>` 或 `--query=<keyword>`,把 SLS/OSS 检索结果作为 `#contract`、`#remote`、`#self-test` 的辅助证据。核心流程只定义 provider 和报告形状,不把内网 SDK 或 token 写进仓库。
531
+
532
+ 风险信号是 level 之外的 CLI 硬闸。agent / 人类在发现专项风险时用 `devflow status risk add <type> --reason="..."` 写入 `state.json.riskSignals[]`;`verify finalize` 和 `deliver` 只看这个结构化状态,不依赖聊天记忆。
533
+
534
+ | 风险信号 | 典型来源 | verify 额外要求 | deliver 行为 |
535
+ | --- | --- | --- | --- |
536
+ | `frontend_change` | React/Vue/Next/Vite/CSS/UI/页面/轮询页 | 必须有 `test-report.md#joint` 或 `#e2e` | open 时阻止交付 |
537
+ | `dependency_change` | package/go module/maven/python 依赖或 lockfile | 必须有 `#unit` + `#integration` | open 时阻止交付 |
538
+ | `security_sensitive` | 支付/鉴权/权限/隐私/回调/上传/OSS/SLS/token/cookie | 必须有 contract/integration/e2e/self-test 中的安全验证证据 | open 时阻止交付 |
539
+ | `ci_failure` | Jenkins/GitHub Actions/GitLab CI required check 失败 | 不由 verify 自动关闭,需要修复后 resolve 或审计 accept | open 时阻止交付 |
540
+
541
+ 常用命令:
542
+
543
+ ```bash
544
+ devflow status risk add frontend_change --slug=<slug> --reason="UI diff touched"
545
+ devflow status risk resolve frontend_change --slug=<slug> --evidence=reports/test-report.md#joint
546
+ devflow status risk accept ci_failure --slug=<slug> --reason="known baseline accepted by release owner"
547
+ ```
548
+
549
+ 是否有必要生成这么多,取决于 level:
550
+
551
+ - L0:通常只要 `test-report.md#unit`。极简文案/配置类改动如果没有可跑单测,需要在 `verify.md` 写明替代验证;若改动部署后才可见,再补 `#smoke`。
552
+ - L1:通常只要 `#unit` + `#smoke`。小改动没必要硬凑 integration/e2e。
553
+ - L2:需要 `#unit`、`#integration`、`#smoke`、`#self-test`,因为已经涉及多文件或契约变化;涉及调用方/回调/跳转链路时补 `#contract`。
554
+ - L3:需要 `#unit`、`#integration`、`#e2e`、`#smoke`、`#self-test`,并按风险补 contract/perf/regression。
555
+
556
+ 也就是说,报告数量不是流程炫技,而是为了让 verify 能回答一个具体问题:“这次改动在对应风险层级上,有没有足够证据可以交付?”如果某类测试对当前改动没有意义,应该在 `verify.md` 或自测报告里说明原因,而不是生成空报告凑数。
557
+
558
+ `verify finalize` 按 level 检查报告:
559
+
560
+ | Level | 必备报告 |
561
+ | --- | --- |
562
+ | L0 | `test-report.md#unit` |
563
+ | L1 | `test-report.md#unit`、`#smoke` |
564
+ | L2 | `test-report.md#unit`、`#integration`、`#smoke`、`#self-test`;链路契约变化补 `#contract` |
565
+ | L3 | `test-report.md#unit`、`#integration`、`#e2e`、`#smoke`、`#self-test`;跨服务链路补 `#contract` |
566
+
567
+ 价值:交付前不只说“已测试”,而是留下结构化报告和验证证据。
568
+
569
+ ### 6.10 交付
570
+
571
+ ```bash
572
+ devflow deliver --mode=pr
573
+ devflow deliver --mode=pr --notify
574
+ devflow deliver --mode=keep
575
+ ```
576
+
577
+ 前置闸门:
578
+
579
+ - `review.status = completed`
580
+ - `verify.status = completed`
581
+ - `doctor.audit(change, git, cred)` 无 error
582
+
583
+ 跳过 doctor:
584
+
585
+ ```bash
586
+ devflow deliver --skip-doctor --reason="..."
587
+ ```
588
+
589
+ 当前 mode:
590
+
591
+ - `pr`:通过 `vcs` provider 创建 PR/MR。
592
+ - `merge`:当前为人工辅助入口。
593
+ - `keep`:保留 change,稍后再交付。
594
+ - `discard`:当前为人工辅助入口。
595
+
596
+ `--notify` 会生成两份提测材料:`reports/submit.md` 作为邮件正文和本地提测单,包含基本信息、变更内容、库表变更、测试重点和自测概览;库表变更从 `design.md` 的 DDL / 数据层章节和根目录 `ddl.sql` 抽取,优先整理为"新建表 / 新增字段 / 修改字段 / 删除字段"表格;`reports/test-report.md` 作为默认唯一测试附件,合并 unit / integration / e2e / joint / remote / smoke / self-test / deploy 等报告,并参考 arb-workflow-kit 的联调测试格式整理"环境信息、执行结果、用例执行详情、失败详情"。邮件正文不再包含本地 markdown 链接,默认也不附 requirement/design/plan 和多个原始测试报告;如果测试需要技术方案和任务拆解,可显式加 `--attach-design-plan` 只附 `design.md` / `plan.md`;确实需要全部原始文档或报告时,可显式加 `--attach-docs` / `--attach-reports` / `--attach=<path>`。收件人优先使用命令行 `--notify-to/--to`、`--notify-cc/--cc`;未传时读取 `notify.smtp` provider 的 `config.defaults.to` / `config.defaults.cc`,这些默认值可在 `devflow provider setup` 中配置。发送前会展示 Subject、To、Cc、附件和正文预览。发送结果只声明 SMTP/MTA 是否接受消息:直连外部 SMTP 时输出 `accepted by SMTP server`,本机 `localhost:25` / sendmail / postfix 只输出 `queued by local SMTP/MTA` 并提示检查队列,不再把本机入队说成真实送达。
597
+
598
+ L0/micro change 在 deliver 时默认按 `--notify=test-report` 处理:生成 `reports/submit.md` 和 `reports/test-report.md`,有非本地 notify provider 时发送测试结果通知;没有 provider 时只保留本地报告并跳过发送。deliver 完成后直接终止流程,不进入 archive。
599
+
600
+ 价值:把 PR/MR 描述、提测自测、报告附件和凭证检查放在一个交付闸门里。
601
+
602
+ ### 6.11 归档
603
+
604
+ ```bash
605
+ devflow archive
606
+ devflow archive --dry-run
607
+ devflow archive --force
608
+ ```
609
+
610
+ 作用:
611
+
612
+ - 合并 `delta/**/*.md` 到 `<repo>/devflow/specs/`。
613
+ - 沉淀 change 中可复用知识到 workspace knowledge。
614
+ - 配置 KB provider 时同步到远端 KB 或创建知识库 MR。
615
+ - 移动 change 到 `~/.devflow/workspace/archive/<date>-<slug>/`。
616
+
617
+ 价值:一次需求结束后,不只留下代码,还把“系统能力变化”和“经验教训”转成长期资产。
618
+
619
+ ## 7. Provider 体系
620
+
621
+ Provider 类型:
622
+
623
+ ```text
624
+ intake, issue, vcs, ci, notify, kb, api, observability
625
+ ```
626
+
627
+ 配置合并顺序:
628
+
629
+ ```text
630
+ <repo>/devflow/providers.json > ~/.devflow/providers.json > local fallback
631
+ ```
632
+
633
+ 当前内置 driver:
634
+
635
+ | 类型 | Driver | 主要用途 |
636
+ | --- | --- | --- |
637
+ | `intake` | `confluence`、`local` | 拉取 Wiki/PRD 或读取本地材料 |
638
+ | `issue` | `local` | Issue 兜底 |
639
+ | `ci` | `jenkins`、`local` | 触发 Jenkins job |
640
+ | `api` | `yapi` | YAPI / OpenAPI 契约同步 |
641
+ | `observability` | `sls`、`oss` | SLS / OSS 日志检索 |
642
+ | `notify` | `smtp`、`local` | 提测通知 |
643
+ | `kb` | `weknora`、`git`、`local` | 知识库同步或 MR |
644
+ | `vcs` | `local` | PR/MR 兜底接口 |
645
+
646
+ 常用命令:
647
+
648
+ ```bash
649
+ devflow provider setup
650
+ devflow provider list
651
+ devflow provider status
652
+ devflow provider add intake.confluence --type=intake --driver=confluence
653
+ devflow provider rotate kb.weknora --config-token='${env:WEKNORA_TOKEN}'
654
+ devflow provider audit
655
+ ```
656
+
657
+ 凭证要求:
658
+
659
+ - 用户级配置放 `~/.devflow/providers.json`。
660
+ - 示例配置放 `~/.devflow/providers.example.json`,公共地址会预填,个人凭证保留 `${env:VAR}` 占位。
661
+ - `notify.smtp` 支持 `config.defaults.to` / `config.defaults.cc` 作为提测邮件默认收件人和抄送人。
662
+ - 文件权限应为 0600。
663
+ - token 推荐写 `${env:VAR}`。
664
+ - 不把 token 写入 `reports/`、`proposal.md`、PR 描述或日志。
665
+
666
+ ## 8. Knowledge 体系
667
+
668
+ 当前知识库是 4 个领域组、10 个扁平分类目录,目录名也是远端 KB tag 名:
669
+
670
+ | 领域组 | slug | 目录/tag |
671
+ | --- | --- | --- |
672
+ | domain | `concepts` | `领域概念` |
673
+ | domain | `rules` | `业务规则` |
674
+ | domain | `scenarios` | `业务场景` |
675
+ | system | `contracts` | `接口契约` |
676
+ | system | `decisions` | `架构决策` |
677
+ | system | `services` | `服务信息` |
678
+ | ops | `environments` | `环境配置` |
679
+ | ops | `incidents` | `故障复盘` |
680
+ | ops | `runbooks` | `运维手册` |
681
+ | archive | `solutions` | `解决方案` |
682
+
683
+ 同步流程:
684
+
685
+ ```mermaid
686
+ flowchart LR
687
+ A["knowledge/*.md"] --> B["计算 sha256"]
688
+ B --> C["读取 .meta.json"]
689
+ C --> D{"本地与 meta 一致?"}
690
+ D -->|一致| E["noop"]
691
+ D -->|新文件| F["provider.upload"]
692
+ D -->|内容变化| G["provider.update"]
693
+ D -->|meta 有 uuid 但文件删除| H["provider.delete"]
694
+ F --> I["写 uuid / sha / tag"]
695
+ G --> I
696
+ H --> I
697
+ ```
698
+
699
+ 常用命令:
700
+
701
+ ```bash
702
+ devflow knowledge query "keyword"
703
+ devflow knowledge deposit --slug=<slug>
704
+ devflow knowledge deposit --mr
705
+ devflow knowledge sync --provider=kb.weknora
706
+ devflow knowledge sync --all
707
+ devflow knowledge reparse --provider=kb.weknora
708
+ ```
709
+
710
+ 默认行为:`knowledge sync` 只同步当前 change 的 `knowledge/`;`--all` 才扫描全局 workspace knowledge 和所有 active change。
711
+
712
+ ## 9. Skills 体系
713
+
714
+ 当前仓库有 17 个 skill:12 个核心流程 skill 加 5 个可选扩展 skill。核心流程 skill 维持主干 phase;扩展 skill 按 diff、level、CI 状态和风险信号触发。
715
+
716
+ ```text
717
+ devflow-df-orchestrator
718
+ devflow-brainstorm
719
+ devflow-complexity-grading
720
+ devflow-requirement-analysis
721
+ devflow-tech-spec
722
+ devflow-test-spec
723
+ devflow-plan
724
+ devflow-apply
725
+ devflow-code-review
726
+ devflow-verify
727
+ devflow-deliver
728
+ devflow-archive
729
+ ```
730
+
731
+ 可选扩展:
732
+
733
+ ```text
734
+ devflow-frontend-quality
735
+ devflow-ci-fix
736
+ devflow-dependency-upgrade
737
+ devflow-handoff-resume
738
+ devflow-security-hardening
739
+ ```
740
+
741
+ 详细说明见 [marketplace-skills.md](/Users/chenguangyao/personal/workspace/node/devflow-kit/docs/marketplace-skills.md)。
742
+
743
+ 用户级安装路径:
744
+
745
+ ```text
746
+ ~/.devflow/skills/devflow-kit/ # 实体目录
747
+ ~/.cursor/skills/devflow-kit -> ~/.devflow/skills/devflow-kit
748
+ ~/.claude/skills/devflow-kit -> ~/.devflow/skills/devflow-kit
749
+ ~/.agents/skills/devflow-kit -> ~/.devflow/skills/devflow-kit
750
+ ```
751
+
752
+ 项目级 `devflow init` 不使用软链,仍在当前仓库 `.cursor/skills/devflow-kit/`、`.claude/skills/devflow-kit/` 和 `.agents/skills/devflow-kit/` 下复制实体文件,便于仓库自包含。
753
+
754
+ CLI 和 skill 的配合关系:
755
+
756
+ | CLI 做什么 | Skill 做什么 |
757
+ | --- | --- |
758
+ | 写模板和状态 | 判断内容质量和阶段是否满足 |
759
+ | 管理 checkpoint、phase gate 和下一步卡片 | 说明确认点背后的业务/技术含义 |
760
+ | 创建 worktree | 要求 TDD、task 边界、必要验证 |
761
+ | 统计 review 计数 | 指导 reviewer 查问题、分 MUST/SHOULD/NIT |
762
+ | 检查报告是否存在 | 要求完成前必须有 fresh evidence |
763
+ | 归档 delta 和 knowledge | 约束哪些经验应该沉淀 |
764
+
765
+ 原则上,Skill 不应该成为流程状态的唯一事实源。它可以建议“需要用户确认项目范围”,但是否真的卡住、有哪些选项、用户选了什么、什么时候解除,都应该写入 CLI 管理的状态。这样做的好处是:同一套流程可以被不同 IDE、不同 agent、CI 脚本和人工命令行共同使用,而不会依赖某一次对话是否把卡片展示完整。
766
+
767
+ ## 10. 当前边界
768
+
769
+ - `devflow-kit` 不直接调用 LLM。
770
+ - `apply` 不写业务代码,只维护 task、worktree、branch、state 和 note。
771
+ - `merge`、`discard` 在 deliver 中仍偏人工辅助。
772
+ - VCS 当前只有 local fallback,真实 PR/MR 需要后续 driver 或外部 CLI 集成。
773
+ - `provider add` 的 hints 包含一些未来 driver 字段,但 loader 只会加载当前存在的 `src/providers/drivers/<type>-<driver>.js`。
774
+ - README 和本文以当前源码为准;历史 RFC 或迁移文档里的旧路径、旧知识库分类需要重新核对后再使用。