@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,208 @@
1
+ # df-orchestrator / workflow-state-machine
2
+
3
+ workflow step / phase 之间怎么走、哪些转移合法、哪些必须回退。orchestrator 据此判定 sub-skill 之间的交接是否合法。
4
+
5
+ ---
6
+
7
+ ## 规范 workflow 模型
8
+
9
+ 新 change 优先由 `devflow new` / `devflow ingest` 自动生成 `state.workflow` draft,再通过 `devflow flow picker --json` → 可选 `devflow flow apply-selection --selection='<json>' --json` → `devflow flow card --json` → `devflow flow confirm` 冻结 `state.workflow.steps`。`devflow flow check --json` 仍保留给脚本做预检。如果自动 draft 失败,再退回 `devflow flow recommend` → `devflow flow draft` 的手动补救路径。orchestrator 决定下一步时:
10
+
11
+ 1. 若 `state.workflow.status = confirmed`,按 `state.workflow.steps` 中未完成 / 未禁用的 step 推进。
12
+ 2. 若 `state.workflow.status = draft`,先展示 `devflow flow picker --json` 让用户看到线形选项卡;如果用户调整勾选,执行 `devflow flow apply-selection --selection='<json>' --json`;然后展示 `devflow flow explain` 和 `devflow flow card --json`,只有确认面 `ok=true` 时才展示 `devflow flow confirm` 下一步卡片,不得直接进入 requirement/design/apply。
13
+ 3. 若旧 change 没有 `state.workflow`,才使用下面的固定 phase 列表作为兼容路径。
14
+ 4. `review`、`verify`、`deliver` 是 protected gates,workflow 不得删除或降级。
15
+
16
+ `level` 不再决定流程链路,只决定 verify 证据强度。workflow recipe 才决定本次需求实际编排哪些 skill。详细说明见 `docs/workflow-orchestration.md`。
17
+
18
+ ## 兼容 phase 列表
19
+
20
+ ```
21
+ intake → brainstorm → [complexity-grading] → requirement → design → (test-design) → plan → apply → review → verify → deliver → archive
22
+ ```
23
+
24
+ 12 个 phase。`[complexity-grading]` 在 intake/brainstorm 完成后**自动触发**,不需要用户主动调用。`test-design` 在 L0/L1 可跳过,`intake` 和 `brainstorm` 互斥(二选一)。在无 workflow 的旧 change 上,其余按兼容顺序推进。
25
+
26
+ > **极简模式(L0)** 是独立路径,跳过前 5 个 phase(intake/brainstorm/requirement/design/test-design),从 plan(最简化)直接进入 apply,不做 archive。详见下文。
27
+
28
+ ## 状态机图(合法转移)
29
+
30
+ ```
31
+ start
32
+
33
+ ┌───────┴──────┬──────────────────────────────┐
34
+ ↓ ↓ ↓
35
+ intake brainstorm ★极简模式(L0)★
36
+ │ │ [--micro]
37
+ └──────┬───────┘ │
38
+ ↓ │
39
+ ★complexity-grading★ ←────────────────────────┘
40
+ (自动触发,输出判定卡) (L0 需二次确认)
41
+
42
+ ┌──────┴──────────────────────┐
43
+ ↓ level=L1/L2/L3 ↓ level=L0
44
+ requirement plan(极简)
45
+
46
+ ↓ apply ←──┐
47
+ design ↓ │
48
+ │ review ───┘
49
+ ┌───┴──── (L2/L3 fork) ───┐ ↓
50
+ ↓ ↓ verify
51
+ plan ←─────── test-design │ (仅 unit-test + 测试文档)
52
+ ↓ │ ↓
53
+ apply ←──────┐ │ deliver
54
+ ↓ │ (review 判 │ (自动发测试邮件 --notify=test-report)
55
+ review ───────┘ back_to_apply) │ (不进 archive)
56
+
57
+ verify ←──────┐
58
+ ↓ │ (verify 发现 required report section fail)
59
+ │ └── apply
60
+
61
+ deliver
62
+
63
+ archive (终态)
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 合法正向转移(只写非显然的)
69
+
70
+ | From | To | 条件 |
71
+ | --- | --- | --- |
72
+ | `intake` | `complexity-grading` | `ingest` 成功落 `refs/source.md` 且 state 已建(**自动触发**,不需要用户命令) |
73
+ | `brainstorm` | `complexity-grading` | `proposal.md` 满足 brainstorm 的 Done Criteria(**自动触发**) |
74
+ | `complexity-grading` | `requirement` | `state.level` 写入且用户已确认 |
75
+ | `complexity-grading` | `plan` (L0) | `state.level = L0` 且用户二次确认极简模式 |
76
+ | `requirement` | `design` | `requirement.md` 至少 1 条有可验收 AC + Round 1 Q 完成;L1 可跳 Round 2 |
77
+ | `design` | `plan` (L1) | `design.md` 最低有"改动点汇总" |
78
+ | `design` | `test-design` (L2/L3) | `design.md` 满足硬闸门 |
79
+ | `test-design` | `plan` | `tests.md` 每条 F-ID 至少有 1 个 TC |
80
+ | `plan` | `apply` | `plan.md` 非空 + 每个 task 含 5 要素(Files/Behavior/Test/Implementation/Commit) |
81
+ | `apply` | `review` | 所有 plan task `--done`,单元测试至少跑过一次(存在 `reports/test-report.md#unit`) |
82
+ | `review` | `verify` | round ≤ 3 且 `finalOutcome ∈ {pass, force-pass}`,`code-review-report.md` 落盘 |
83
+ | `verify` | `deliver` | 本级别的 required reports 全 pass/partial(非 fail),`devflow doctor --scope cred` clean |
84
+ | `deliver` | `archive` | mode=pr:PR merged;mode=merge:本地已合并到 main;mode=keep/discard:不进 archive |
85
+
86
+ ### 极简模式(L0)合法转移
87
+
88
+ `state.mode = "micro"` 时,下面规则覆盖上表:
89
+
90
+ | From | To | 条件 |
91
+ | --- | --- | --- |
92
+ | `start` | `plan` (L0) | `devflow new <slug> --micro` 建 state,`plan.md` 写 1-3 行改动意图即可 |
93
+ | `plan` (L0) | `apply` | `plan.md` 非空(无 5 要素要求) |
94
+ | `apply` | `review` | 代码已改,`reports/test-report.md#unit` 存在 |
95
+ | `review` | `verify` | 同标准路径(至少 1 轮,`finalOutcome ∈ {pass, force-pass}`) |
96
+ | `verify` | `deliver` | `reports/test-report.md#unit` pass,`devflow doctor --scope cred` clean |
97
+ | `deliver` | _(结束)_ | **不进 archive**;`deliver --notify=test-report` 触发测试邮件后完成 |
98
+
99
+ > **L0 特有约束**:如果 apply 阶段发现改动超出"单文件 / 无 DDL / 无契约变更",orchestrator **必须提示升级到 L1**(`devflow status set-level L1`),补做 requirement + design,再进 plan 正式版。
100
+
101
+ ---
102
+
103
+ ## 合法回退(向后跳)
104
+
105
+ 回退意味着"发现当前 phase 的前置 phase 产物有问题,要回去修",state 里会留 audit entry。
106
+
107
+ | From (当前 phase) | 可回退到 | 触发条件 | 会被清除的产物 |
108
+ | --- | --- | --- | --- |
109
+ | `requirement` | `brainstorm` | Round 1 发现 proposal.md 的 scope 写错 | 无(requirement.md 可迭代) |
110
+ | `design` | `requirement` | 发现某些功能点在 requirement 未定义 | 无 |
111
+ | `plan` | `design` | 任务切到一半发现 design 的改动点漏了一层 | 无 |
112
+ | `apply` | `plan` | 编码过程中发现 task 定义不对 | 正在进行的 task `--revert` |
113
+ | `apply` | `design` | 发现方案本身错了 | 触发 tech-spec --revise,design.v1 备份,apply 状态重建 |
114
+ | `review` | `apply` | round 的 MUST > 0 | 无(review.md append 新 round) |
115
+ | `review` | `design` | 同一 MUST 跨 2 轮未解 / `fixMode: SPEC` ≥ 1 | 参见 `code-review/references/escalation-playbook.md` Path B |
116
+ | `verify` | `apply` | 测试报告 fail | 无 |
117
+ | `verify` | `design` | 发现 design 的 non-functional 漏了(如性能) | 同上 Path B |
118
+
119
+ **回退时必做的事**:
120
+
121
+ 1. 在 `state.json.audit[]` 写一条 `{type: "phase_rollback", from, to, reason, operator, at}`。
122
+ 2. 在目标 phase 的产物末尾追加一段 "第 N 次返工" 记录(不是删重写)。
123
+ 3. 不自动清除下游产物,允许沿用;但 `state.currentPhase` 回到目标 phase,后续 phase 的 status 重置为 `pending`。
124
+
125
+ ---
126
+
127
+ ## 非法转移(orchestrator 必拒绝)
128
+
129
+ | 企图的转移 | 拒绝理由 | 给用户的话术 |
130
+ | --- | --- | --- |
131
+ | `intake` 或 `brainstorm` → `design` | 跳过 requirement-analysis | "先跑 requirement-analysis,它会确认 Scope 和 AC,design 没 AC 做不动" |
132
+ | `requirement` → `plan` | 跳过 design | "没 design 的 plan 是假 plan,任务粒度没依据" |
133
+ | `design` → `apply` | 跳过 plan | "apply 的单位是 plan 里的 task;先 plan 拆" |
134
+ | `apply` → `verify` | 跳过 review | "review 是质量闸,至少 1 轮;强行 skip 会在 deliver 处被 gate" |
135
+ | `review` → `deliver` | 跳过 verify | "verify 要产出 reports 给 PR;review 不等于 verify" |
136
+ | `deliver` → `archive`(PR 未 merge) | 过早 archive | "archive 只在 PR merge 后做,否则 specs 会合入未部署的能力" |
137
+ | L0 极简模式 → `archive` | L0 没有可 archive 的规格文档 | "极简模式不进 archive;有经验要沉淀,请用 `devflow knowledge deposit`" |
138
+ | L0 改动超 1 个文件 → 继续 L0 | L0 对改动规模有硬约束 | "检测到改动超出极简模式范围,建议升级到 L1:`devflow status set-level L1`" |
139
+
140
+ ---
141
+
142
+ ## 跳过(Skip)规则
143
+
144
+ Skip ≠ 回退;skip 是"这个 phase 对本次任务不需要做,允许直接跨过"。
145
+
146
+ | 可 skip 的 phase | 条件 | 怎么做 |
147
+ | --- | --- | --- |
148
+ | `intake` | 走了 brainstorm 路径,或极简模式 | 自然跳过,无需命令 |
149
+ | `brainstorm` | 走了 ingest 路径,或极简模式 | 自然跳过 |
150
+ | `requirement` | 极简模式(L0) | state.mode=micro 时自动跳过 |
151
+ | `design` | 极简模式(L0) | state.mode=micro 时自动跳过 |
152
+ | `test-design` | L0 / L1 任务 | state.level ∈ {L0,L1} 时直接跳 |
153
+ | `archive` | 极简模式(L0) | state.mode=micro 时跳过,可手动 `devflow knowledge deposit` 补充沉淀 |
154
+ | `code-review` | **不允许 skip**(`--force-pass` 是走完流程后放行,不是 skip) | — |
155
+ | `verify` | **不允许 skip**(即使 L0 也要至少 unit-test) | — |
156
+ | `deliver` | `mode=keep` 表示"暂停,不交付",不进 archive | 手动触发 resume |
157
+
158
+ ---
159
+
160
+ ## state.json 的 phase 状态字段
161
+
162
+ 每个 phase 在 `state.json.phases.<phase>` 下有 4 个字段:
163
+
164
+ ```json
165
+ {
166
+ "status": "pending | in_progress | completed | blocked | skipped",
167
+ "startedAt": "<ISO>",
168
+ "completedAt": "<ISO>",
169
+ "auditLogPath": "devflow/changes/<slug>/audit/<phase>.log"
170
+ }
171
+ ```
172
+
173
+ **转移合法性判定**:orchestrator 在调用 sub-skill 前,先检查目标 phase 的所有前置 phase `status ∈ {completed, skipped}`,否则拒绝并回退。
174
+
175
+ ---
176
+
177
+ ## 多轮 / iteration 的记账
178
+
179
+ 有些 phase 支持多轮(iteration):
180
+
181
+ | phase | 支持多轮 | 记账字段 |
182
+ | --- | --- | --- |
183
+ | `requirement` | 是(Round 1 / Round 2) | `phases.requirement.rounds[]` |
184
+ | `design` | 是(v1 / v2 / ...,每次 `--revise`) | `phases.design.versions[]` |
185
+ | `apply` | 是(每次 back_to_apply 来一轮) | `phases.apply.iterations[]` |
186
+ | `review` | 是(3 轮硬上限,可 `--continue-rounds` 越限) | `phases.review.rounds[]`(见 code-review skill) |
187
+ | `verify` | 是(report fail → apply 回修 → 重跑 verify) | `phases.verify.attempts[]` |
188
+
189
+ 其他 phase 不支持多轮,一次过。
190
+
191
+ ---
192
+
193
+ ## 与 sub-skill 的接口
194
+
195
+ sub-skill 完成时必须输出 `---STATUS---` 块(完成状态协议)。orchestrator 用下面规则决定接下来做什么:
196
+
197
+ ```
198
+ status = DONE → 进入下一 phase(按状态图)
199
+ status = DONE_WITH_CONCERNS → 进入下一 phase,但把 concerns 加入 state.followup[]
200
+ status = BLOCKED → 按 escalation-matrix 决定回退或终止
201
+ status = NEEDS_INPUT → 把 sub-skill 的问题转给用户,不做转移
202
+ ```
203
+
204
+ ---
205
+
206
+ ## 本文与 SKILL.md 的关系
207
+
208
+ SKILL.md 只给了正向 phase 顺序 + 硬闸门简表。所有转移合法性、回退路径、多轮记账 细节在这里。orchestrator 在每次决定"要不要让 sub-skill 进入下一 phase"时,**必须**回到这里查表。
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: devflow-frontend-quality
3
+ description: |
4
+ devflow-kit 前端质量专项 skill。当 diff 涉及 React / Vue / Next / Vite / CSS / 页面组件 / 表单 / 弹窗 / 路由 / 前端状态时触发。
5
+ 接入 code-review 与 verify,要求补齐 UI 一致性、响应式、可访问性、性能和 Playwright/截图证据,避免前端改动只跑单测就提测。
6
+ when_to_use: |
7
+ 任何前端用户界面、浏览器交互、前后端联调页面、移动端适配或可访问性风险出现时。L2/L3 前端改动必须使用;L1 小 UI 改动按风险使用。
8
+ ---
9
+
10
+ # frontend-quality
11
+
12
+ 前端质量专项 skill。它不替代 `devflow-code-review` / `devflow-verify`,而是在前端 diff 出现时给这两个阶段增加专项检查。
13
+
14
+ ## 触发条件
15
+
16
+ - 修改 `*.tsx`、`*.jsx`、`*.vue`、`*.css`、`*.scss`、`*.less`、`routes/`、`pages/`、`components/`。
17
+ - 新增或修改表单、弹窗、列表、分页、筛选、上传、支付/签约/登录等关键页面。
18
+ - `design.md` 有前端消费者、轮询页、redirect/query、returnUrl、callback 或浏览器验证要求。
19
+ - code-review 发现 UI、性能、可访问性、状态管理、联调路径风险。
20
+
21
+ ## 接入点
22
+
23
+ | phase | 必做动作 |
24
+ | --- | --- |
25
+ | requirement-analysis | 标记受影响页面、入口、设备、浏览器、前端消费者 |
26
+ | tech-spec | 在契约消费者影响矩阵里写清页面状态来源、query/route 兼容、刷新/直达策略 |
27
+ | plan | 每个 UI task 要有截图/交互验证字段 |
28
+ | code-review | 使用 `references/checklist.md` 做 UI/性能/可访问性 review |
29
+ | verify | 产出 `test-report.md#joint` 或 `#e2e`;有浏览器路径时附截图/录屏/Playwright 结果 |
30
+
31
+ ## 执行流程
32
+
33
+ 1. 先确认前端改动范围:页面、组件、路由、状态、接口契约。
34
+ 2. 读取 `design.md` 的契约消费者影响矩阵,确认前端数据来源没有被后端假设覆盖。
35
+ 3. code-review 时按 `references/checklist.md` 逐项检查。
36
+ 4. verify 时优先跑已有前端测试命令,例如:
37
+
38
+ ```bash
39
+ devflow test joint --cmd="npm run test:e2e" --backend-url=<url> --frontend-url=<url>
40
+ devflow test e2e --cmd="npx playwright test"
41
+ ```
42
+
43
+ 5. 如果没有自动化测试,必须人工补充浏览器操作步骤、关键截图和失败风险,写进 `reports/test-report.md#joint` 或 `#self-test`。
44
+
45
+ ## 输出要求
46
+
47
+ - `review.md` 中必须有 frontend-quality 结论:pass / concerns / blocked。
48
+ - `reports/test-report.md#joint` 或 `#e2e` 应记录:
49
+ - 前端地址、后端地址、账号/权限说明。
50
+ - 操作路径:打开页面 -> 输入/点击 -> 结果验证。
51
+ - 截图/录屏相对路径或说明。
52
+ - 移动端/窄屏是否验证。
53
+ - 若跳过浏览器验证,必须在 `verify.md` 写明原因和风险接受人。
54
+
55
+ ## 反模式
56
+
57
+ - 只看 API 成功,不打开页面。
58
+ - 只验证桌面宽屏,不看移动端或窄屏。
59
+ - 只凭肉眼说"页面正常",没有截图、步骤或自动化结果。
60
+ - UI 文案、按钮、表格列被接口字段改动影响,但没有消费者矩阵。
61
+
@@ -0,0 +1,35 @@
1
+ # frontend-quality checklist
2
+
3
+ ## UI 一致性
4
+
5
+ - 布局无重叠、溢出、截断、横向滚动异常。
6
+ - 按钮、输入框、表格、弹窗使用项目现有组件和样式约定。
7
+ - 空态、加载态、错误态、禁用态完整。
8
+ - 中文文案、金额、日期、枚举展示符合业务语义。
9
+
10
+ ## 响应式
11
+
12
+ - 至少检查桌面宽屏、普通笔记本宽度、移动端或窄屏。
13
+ - 表格列过多时有合理横滚、折行或列隐藏策略。
14
+ - 弹窗、下拉、toast 不被遮挡。
15
+
16
+ ## 可访问性
17
+
18
+ - 表单字段有 label 或可理解的 aria-label。
19
+ - 按钮可键盘聚焦和触发。
20
+ - 颜色不作为唯一状态表达。
21
+ - 错误提示靠近对应字段。
22
+
23
+ ## 性能
24
+
25
+ - 避免在 render 中做大计算或重复创建重对象。
26
+ - 列表、表格、轮询、定时器有清理和分页/节流策略。
27
+ - 图片和资源大小可接受。
28
+ - 不因接口失败造成无限重试或页面卡死。
29
+
30
+ ## 证据
31
+
32
+ - 有 Playwright/Cypress/Vitest UI 测试时优先跑自动化。
33
+ - 无自动化时,至少提供操作步骤 + 截图路径 + 验证结论。
34
+ - 涉及前后端联调时,写入 `test-report.md#joint`。
35
+
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: devflow-handoff-resume
3
+ description: |
4
+ devflow-kit 长任务交接 / 恢复专项 skill。当任务跨天、上下文接近上限、多 agent/多人接力、用户说"接着上次继续"或需要交接状态时触发。
5
+ 读取 state.json、当前 phase、已改文件和报告,生成或消费 handoff.md,让下一个 agent 不重新猜上下文。
6
+ when_to_use: |
7
+ 长任务、上下文压缩、暂停后继续、换 agent、多人协作、用户要求"整理交接"或"继续上次"时使用。
8
+ ---
9
+
10
+ # handoff / resume
11
+
12
+ 交接恢复 skill。目标是把"我做到哪里了"变成可读文件,避免新会话从头扫描和误解旧决策。
13
+
14
+ ## 触发条件
15
+
16
+ - 用户说"整理一下交接"、"明天继续"、"接着上次"、"换个 agent 继续"。
17
+ - 当前任务已经跨多个 phase 或上下文很长。
18
+ - apply/review/verify 中断。
19
+ - 存在多 worktree / 多 agent 并行实现。
20
+
21
+ ## 生成 handoff
22
+
23
+ 优先写到当前 change:
24
+
25
+ ```text
26
+ handoff.md
27
+ ```
28
+
29
+ 必要时也可以在 `state.auditLog` 记录 `handoff.create` 事件。
30
+
31
+ handoff 必须包含:
32
+
33
+ - 当前 change、level、phase、mode。
34
+ - 已完成事项。
35
+ - 未完成事项。
36
+ - 当前风险和阻塞。
37
+ - 已运行命令和结果。
38
+ - 修改过的关键文件。
39
+ - 下一步建议命令。
40
+ - 不要重复做的事情。
41
+
42
+ 模板见 `references/handoff-template.md`。
43
+
44
+ ## resume 流程
45
+
46
+ 1. 读取 `state.json` 和最新 `handoff.md`。
47
+ 2. 读取 `reports/test-report.md`、`review.md`、`verify.md` 中最近状态。
48
+ 3. 用 `git status --short` 看工作区,不要回滚用户改动。
49
+ 4. 对照 handoff 的下一步,判断是否仍有效。
50
+ 5. 如果 handoff 和 state 冲突,以 CLI state/checkpoint 为准,并说明冲突。
51
+ 6. 继续执行前先给用户一个简短状态摘要。
52
+
53
+ ## 反模式
54
+
55
+ - 只写聊天总结,不落文件。
56
+ - handoff 只写"已完成",没有下一步命令。
57
+ - 新 agent 不读 state/checkpoint,直接按旧聊天继续。
58
+ - 把未验证的猜测写成事实。
59
+
@@ -0,0 +1,54 @@
1
+ # Handoff 模板
2
+
3
+ ````markdown
4
+ ---
5
+ slug: <slug>
6
+ phase: <phase>
7
+ level: L0 | L1 | L2 | L3
8
+ updatedAt: <ISO>
9
+ ---
10
+
11
+ # Handoff - <title>
12
+
13
+ ## 当前状态
14
+
15
+ - phase:
16
+ - checkpoint:
17
+ - mode:
18
+ - branch/worktree:
19
+
20
+ ## 已完成
21
+
22
+ - ...
23
+
24
+ ## 未完成
25
+
26
+ - ...
27
+
28
+ ## 关键决策
29
+
30
+ - ...
31
+
32
+ ## 风险 / 阻塞
33
+
34
+ - ...
35
+
36
+ ## 已运行验证
37
+
38
+ | 命令 | 结果 | 说明 |
39
+ | --- | --- | --- |
40
+
41
+ ## 关键文件
42
+
43
+ - ...
44
+
45
+ ## 下一步
46
+
47
+ ```bash
48
+ devflow status --slug=<slug>
49
+ ```
50
+
51
+ ## 不要重复做
52
+
53
+ - ...
54
+ ````
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: devflow-plan
3
+ description: |
4
+ devflow-kit plan 阶段把 `design.md`(改动点)和可用的测试用例/验收项切成 30-60 分钟粒度的 TDD task,写进
5
+ `plan.md`。每个 task 都是"写失败测试 → 最小实现 → 提交"的一个完整闭环。触发时机:
6
+ `devflow plan` 或 `/df:plan`。apply 阶段只照 plan.md 执行,不允许在 apply 中偷改 scope。
7
+ when_to_use: |
8
+ tech-spec 完成之后;若本 change 显式生成了 `tests.md`,则以 tests.md 为测试契约。apply 之前的必经 phase。
9
+ ---
10
+
11
+ # plan
12
+
13
+ plan 是**计划经济**,apply 是**执行经济**:把大象拆成能一口吃掉的小块,让 apply 阶段不用再做决策。
14
+
15
+ ## 前置检查
16
+
17
+ | 输入 | 必需 | 缺失时 |
18
+ | --- | --- | --- |
19
+ | `design.md`(§4 改动点汇总、§5 契约、§7 关键流程) | 是 | 回退 tech-spec |
20
+ | `tests.md` | 可选;L3 或 `--with-tests` 时使用 | 缺失时把测试点内嵌到每个 task 的 Test 字段 |
21
+ | `state.level` | 是 | 决定 task 最小粒度 |
22
+
23
+ ## 产物
24
+
25
+ `devflow/changes/<slug>/plan.md`,含:
26
+
27
+ | # | Section |
28
+ | --- | --- |
29
+ | 1 | 任务依赖图(DAG 或箭头链) |
30
+ | 2 | 任务清单(T-01..) |
31
+ | 3 | 每个任务详表 |
32
+ | 4 | 变更日志(task 改动 / 增删时在此留痕) |
33
+
34
+ ## Task 的 5 要素(硬闸)
35
+
36
+ 每个 task 必须含且只含 5 个字段。缺任一字段 → 回退重写:
37
+
38
+ ```
39
+ T-01
40
+ 文件: coupon-service/src/.../BatchGrantController.java (新建)
41
+ 行为: 新增 POST /api/v2/coupon/batch-grant 入口,校验 userIds 长度 1-1000
42
+ 测试: TC-002 (空) + TC-003 (1001 人) 通过;无 tests.md 时写内联验收描述
43
+ 实现: 1. 新建 Controller 类 2. 加 @PostMapping 3. 加参数校验 4. 返回占位 501
44
+ 提交: feat(coupon): T-01 add batch-grant controller skeleton
45
+ ```
46
+
47
+ - **Files**:具体路径(不接受 "whatever needed");(new) / (modified) 标记
48
+ - **Behavior**:**可直接测的一句话**。不接受 "make it work"
49
+ - **Test**:优先引用 `tests.md` 的 TC 编号;没有 tests.md 时写 inline 用例 / AC 描述
50
+ - **Implementation**:2-4 条项目级 bullet,不写代码行;描述**做哪些步骤**
51
+ - **Commit**:Conventional Commits 格式,含 task ID
52
+
53
+ 完整模板、任务排序原则、5 要素的正反例见 [`references/task-template.md`](references/task-template.md)。
54
+
55
+ ## 拆分规则(Bite-size)
56
+
57
+ - 每个 task 目标 **30-60 分钟**(或小 PR 粒度)
58
+ - 一个 task 改 ≤ 3 个文件(特殊例外标注)
59
+ - 一个 task 改 ≤ 150 行(diff loose 计数,含 test)
60
+ - 一个 task 有 **可独立验收**的产物(跑测试通过、或可手测)
61
+
62
+ 超出任一条 → **拆**。
63
+
64
+ 拆分的具体手法(按 vertical slice / by layer / by F-ID / by behavior)、分别适用什么场景,见 [`references/task-breakdown.md`](references/task-breakdown.md)。
65
+
66
+ ## 任务排序(Sequencing)
67
+
68
+ 硬规则:
69
+
70
+ 1. **契约变更 task 在 前**(DTO / proto 改动 task 先,消费者 task 后)
71
+ 2. **DDL 变更 task 在 前**(表结构先落,业务代码后用)
72
+ 3. **每个 task 留下仓库在 "tests pass" 状态**(不允许"先提交编不过的代码")
73
+ 4. **feature flag 添加 task 在最后**(保留 off 状态直到全部就绪)
74
+
75
+ 排序方法论与例子(含并行化判断)见 [`references/task-sequencing.md`](references/task-sequencing.md)。
76
+
77
+ ## Ready 判据
78
+
79
+ 一个 task 可以进 apply 必须达到 "Ready":
80
+
81
+ - [ ] 5 要素齐
82
+ - [ ] 引用的 TC 在 tests.md 里真实存在;若无 tests.md,Test 字段有可执行的内联验收描述
83
+ - [ ] 前置 task 已完成(或明确标 `blocks: T-0X`)
84
+ - [ ] 可以独立 commit 并 leave repo green
85
+
86
+ 未达 Ready → 拆 / 补 / 重写。
87
+
88
+ ## 并行化
89
+
90
+ 独立 task(无共同文件、无依赖链)可以并行(通过 `devflow apply --task=N` 自动创建 worktree)。并行判断:
91
+
92
+ - 共享文件 → 不并行(或合并为一个 task)
93
+ - 前后依赖 → 不并行
94
+ - 独立模块 → 并行 ✓
95
+
96
+ "哪些 task 可以并行"的判断流程 + DAG 画法见 `references/task-sequencing.md` §2。
97
+
98
+ ## 硬闸(Done Criteria)
99
+
100
+ - [ ] 每个 F-ID 至少有 1 个 task 负责
101
+ - [ ] 每个 TC/内联验收点至少被一个 task 引用(覆盖率 100%)
102
+ - [ ] 所有 task 的 5 要素齐
103
+ - [ ] §1 依赖图画了
104
+ - [ ] 首个 task(T-01) 是 Ready
105
+
106
+ 未达标 → 继续写;达标 → DONE → **展示计划审查卡,等待用户确认**。不得自动执行 `devflow apply`。
107
+
108
+ ## 计划审查卡(apply 前人工闸)
109
+
110
+ plan 生成完成后,必须向用户展示一张**计划审查卡**,让用户审查 scope、任务拆分和执行顺序。用户确认前不得进入 apply。
111
+
112
+ > **注意**:计划审查卡不是补技术细节的入口。若 plan 生成时还需要用户回答"字段从哪里取 / 渠道怎么判 / 缓存怎么查 / helper 复用哪个"这类实现问题,说明 tech-spec 没有完成,必须回到 `devflow-tech-spec` 收敛设计,不能把这些问题放到 plan_review 里让用户补。
113
+
114
+ 必须展示:
115
+
116
+ - `plan.md` 路径和任务总数。
117
+ - 每个 task 的 ID、Files、Behavior、Test 摘要。
118
+ - DAG / 依赖顺序:哪些 task 先做,哪些可并行。
119
+ - 首个 ready task:默认建议从哪个 task 开始。
120
+ - 风险提示:大 task、共享文件、未覆盖 TC、可能需要拆分的点。
121
+
122
+ 确认协议:
123
+
124
+ ```markdown
125
+ ## 计划审查卡
126
+
127
+ 请审查 plan.md:
128
+ - 回车 / "确认" / "OK":确认计划,写入 `state.planReviewConfirmedAt`,再进入 apply
129
+ - "改 T-02 ...":回到 plan 修改对应 task
130
+ - "拆 T-03" / "合并 T-04/T-05":回到 plan 重写任务
131
+ - "先做 T-02":调整执行顺序并重新展示审查卡
132
+ ```
133
+
134
+ `state.planReviewConfirmedAt` 是 apply 的硬前置。旧 change 若已有 `plan.md` 但没有这个字段,必须补展示计划审查卡,不能因为用户说"继续"就直接编码。
135
+
136
+ ## 反模式
137
+
138
+ - **task 大粒度 ("实现批量发放功能" 一个 task 干完)**:3 小时以上的 task 无法回退、难以并行、掩盖风险
139
+ - **task 没引用 TC**:apply 时没法 TDD,变成"写完再说"
140
+ - **先实现后写测试**:本 skill 的基本假设就是 TDD;"先实现再补测" 会让 review / verify 阶段翻车
141
+ - **commit message 里不带 task ID**:后续追溯困难;review 时无法对应 task
142
+ - **task 改文件超出 Files 列表**:要么更新 Files,要么拆新 task;不要默默改
143
+ - **依赖图乱成一团 / 没画依赖图**:每次 apply 前都要确认"接下来可以干哪些"
144
+ - **"flag 开关"最先加而不是最后加**:导致半成品上线(flag 开了但实现没好)
145
+ - **契约 task 放在消费者 task 后面**:消费者没法写,只能 mock,后面又要改
146
+
147
+ ## 完成状态协议
148
+
149
+ ```
150
+ ---STATUS---
151
+ result: DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_INPUT
152
+ outputs:
153
+ - devflow/changes/<slug>/plan.md
154
+ taskCount: N
155
+ estimatedTotalMinutes: M # 粗估
156
+ parallelizable: [T-02, T-03] # 可并行的 task ID 列表
157
+ firstReadyTask: T-01
158
+ nextAction: 等用户确认计划审查卡(确认后才允许 devflow apply --task=1)
159
+ ---END_STATUS---
160
+ ```
161
+
162
+ ## 参考
163
+
164
+ - [`references/task-template.md`](references/task-template.md) — task 详表模板、5 要素正反例、完整 plan.md 示例
165
+ - [`references/task-breakdown.md`](references/task-breakdown.md) — 拆分手法(vertical slice / by layer / by F-ID / by behavior)
166
+ - [`references/task-sequencing.md`](references/task-sequencing.md) — 依赖排序 + DAG 画法 + 并行化判断