@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.
- package/CHANGELOG.md +232 -0
- package/LICENSE +21 -0
- package/README.md +539 -0
- package/bin/devflow.js +9 -0
- package/docs/RFC-001-devflow-kit.md +617 -0
- package/docs/RFC-002-workflow-kernel.md +134 -0
- package/docs/enterprise-integration-supplement.md +274 -0
- package/docs/internal-gitlab-setup.md +426 -0
- package/docs/marketplace-skills.md +231 -0
- package/docs/migration-from-arb.md +232 -0
- package/docs/tooling-overview.md +774 -0
- package/docs/workflow-orchestration.md +695 -0
- package/docs/workflow-ui-prototype.html +271 -0
- package/package.json +52 -0
- package/schemas/config.schema.json +51 -0
- package/schemas/delta.schema.json +22 -0
- package/schemas/state.schema.json +130 -0
- package/schemas/status-surface.schema.json +197 -0
- package/schemas/workflow-confirmation-surface.schema.json +70 -0
- package/schemas/workflow-picker.schema.json +94 -0
- package/scripts/postinstall.js +101 -0
- package/scripts/render-workflow-ui-prototype.js +271 -0
- package/skills/apply/SKILL.md +313 -0
- package/skills/apply/references/discipline-checklist.md +145 -0
- package/skills/apply/references/subagent-implementer-prompt.md +113 -0
- package/skills/apply/references/subagent-orchestration.md +150 -0
- package/skills/apply/references/subagent-reviewer-prompt.md +180 -0
- package/skills/apply/references/tdd-loop.md +287 -0
- package/skills/apply/references/when-plan-is-wrong.md +279 -0
- package/skills/apply/references/worktree-swarm.md +292 -0
- package/skills/archive/SKILL.md +229 -0
- package/skills/archive/references/conflict-resolution.md +336 -0
- package/skills/archive/references/knowledge-deposit.md +381 -0
- package/skills/archive/references/spec-merge.md +365 -0
- package/skills/brainstorm/SKILL.md +123 -0
- package/skills/brainstorm/references/proposal-template.md +244 -0
- package/skills/brainstorm/references/question-catalog.md +168 -0
- package/skills/brainstorm/references/session-template.md +184 -0
- package/skills/ci-fix/SKILL.md +63 -0
- package/skills/ci-fix/references/loop.md +25 -0
- package/skills/code-review/SKILL.md +279 -0
- package/skills/code-review/references/escalation-playbook.md +192 -0
- package/skills/code-review/references/language-cheatsheets/go.md +175 -0
- package/skills/code-review/references/language-cheatsheets/java-spring-mybatis.md +246 -0
- package/skills/code-review/references/language-cheatsheets/python.md +170 -0
- package/skills/code-review/references/language-cheatsheets/vue.md +199 -0
- package/skills/code-review/references/output-template.md +275 -0
- package/skills/code-review/references/review-checklist.md +251 -0
- package/skills/complexity-grading/SKILL.md +259 -0
- package/skills/deliver/SKILL.md +271 -0
- package/skills/deliver/references/delivery-modes.md +299 -0
- package/skills/deliver/references/notify.md +359 -0
- package/skills/deliver/references/pr-description.md +319 -0
- package/skills/dependency-upgrade/SKILL.md +57 -0
- package/skills/dependency-upgrade/references/risk-matrix.md +38 -0
- package/skills/df-orchestrator/SKILL.md +407 -0
- package/skills/df-orchestrator/references/complexity-grading.md +177 -0
- package/skills/df-orchestrator/references/escalation-matrix.md +191 -0
- package/skills/df-orchestrator/references/routing-rules.md +290 -0
- package/skills/df-orchestrator/references/workflow-state-machine.md +208 -0
- package/skills/frontend-quality/SKILL.md +61 -0
- package/skills/frontend-quality/references/checklist.md +35 -0
- package/skills/handoff-resume/SKILL.md +59 -0
- package/skills/handoff-resume/references/handoff-template.md +54 -0
- package/skills/plan/SKILL.md +166 -0
- package/skills/plan/references/task-breakdown.md +207 -0
- package/skills/plan/references/task-sequencing.md +143 -0
- package/skills/plan/references/task-template.md +248 -0
- package/skills/requirement-analysis/SKILL.md +499 -0
- package/skills/requirement-analysis/references/acceptance-criteria.md +183 -0
- package/skills/requirement-analysis/references/code-recon.md +151 -0
- package/skills/requirement-analysis/references/edge-case-catalog.md +164 -0
- package/skills/requirement-analysis/references/requirement-template.md +339 -0
- package/skills/requirement-analysis/references/scope-negotiation.md +162 -0
- package/skills/security-hardening/SKILL.md +60 -0
- package/skills/security-hardening/references/checklist.md +42 -0
- package/skills/tech-spec/SKILL.md +388 -0
- package/skills/tech-spec/references/api-contract-design.md +172 -0
- package/skills/tech-spec/references/decision-records.md +110 -0
- package/skills/tech-spec/references/design-template.md +301 -0
- package/skills/tech-spec/references/rollout-and-rollback.md +203 -0
- package/skills/tech-spec/references/spec-delta-conventions.md +250 -0
- package/skills/tech-spec/references/transaction-patterns.md +212 -0
- package/skills/test-spec/SKILL.md +219 -0
- package/skills/test-spec/references/coverage-strategy.md +218 -0
- package/skills/test-spec/references/edge-case-to-test.md +143 -0
- package/skills/test-spec/references/test-case-template.md +276 -0
- package/skills/verify/SKILL.md +232 -0
- package/skills/verify/references/nfr-verification.md +292 -0
- package/skills/verify/references/report-templates.md +510 -0
- package/skills/verify/references/self-test-guide.md +240 -0
- package/skills/verify/references/verify-rollback-map.md +247 -0
- package/src/cli/commands/_helpers.js +108 -0
- package/src/cli/commands/_submit.js +718 -0
- package/src/cli/commands/apply.js +198 -0
- package/src/cli/commands/archive.js +180 -0
- package/src/cli/commands/checkpoint.js +113 -0
- package/src/cli/commands/deliver.js +377 -0
- package/src/cli/commands/deploy.js +504 -0
- package/src/cli/commands/design.js +158 -0
- package/src/cli/commands/disable.js +21 -0
- package/src/cli/commands/doctor.js +178 -0
- package/src/cli/commands/enable.js +21 -0
- package/src/cli/commands/flow.js +645 -0
- package/src/cli/commands/help.js +93 -0
- package/src/cli/commands/ingest.js +602 -0
- package/src/cli/commands/init.js +341 -0
- package/src/cli/commands/knowledge.js +523 -0
- package/src/cli/commands/logs.js +43 -0
- package/src/cli/commands/new.js +202 -0
- package/src/cli/commands/plan.js +49 -0
- package/src/cli/commands/propose.js +27 -0
- package/src/cli/commands/provider.js +698 -0
- package/src/cli/commands/report.js +143 -0
- package/src/cli/commands/requirement.js +227 -0
- package/src/cli/commands/review.js +301 -0
- package/src/cli/commands/skills.js +457 -0
- package/src/cli/commands/status.js +925 -0
- package/src/cli/commands/switch.js +27 -0
- package/src/cli/commands/sync.js +47 -0
- package/src/cli/commands/test.js +366 -0
- package/src/cli/commands/uninstall.js +32 -0
- package/src/cli/commands/update.js +74 -0
- package/src/cli/commands/verify.js +354 -0
- package/src/cli/commands/worktree.js +78 -0
- package/src/cli/index.js +72 -0
- package/src/cli/parse-args.js +102 -0
- package/src/core/autodetect.js +271 -0
- package/src/core/change.js +208 -0
- package/src/core/checkpoint.js +217 -0
- package/src/core/config.js +60 -0
- package/src/core/delta.js +290 -0
- package/src/core/markers.js +59 -0
- package/src/core/paths.js +173 -0
- package/src/core/plan-tasks.js +36 -0
- package/src/core/project-routing.js +285 -0
- package/src/core/projects.js +200 -0
- package/src/core/state.js +200 -0
- package/src/core/workflow-check.js +177 -0
- package/src/core/workflow-init.js +34 -0
- package/src/core/workflow-picker.js +154 -0
- package/src/core/workflow-policy.js +119 -0
- package/src/core/workflow-suggest.js +181 -0
- package/src/core/workflow-verify.js +88 -0
- package/src/core/workflow.js +433 -0
- package/src/core/worktree.js +241 -0
- package/src/knowledge/categories.js +107 -0
- package/src/knowledge/classify.js +125 -0
- package/src/knowledge/deposit.js +414 -0
- package/src/knowledge/migrate.js +149 -0
- package/src/knowledge/mr.js +219 -0
- package/src/knowledge/query.js +131 -0
- package/src/knowledge/registry.js +151 -0
- package/src/knowledge/sync.js +179 -0
- package/src/providers/base.js +74 -0
- package/src/providers/drivers/api-yapi.js +78 -0
- package/src/providers/drivers/ci-jenkins.js +109 -0
- package/src/providers/drivers/intake-confluence.js +544 -0
- package/src/providers/drivers/kb-git.js +549 -0
- package/src/providers/drivers/kb-weknora.js +472 -0
- package/src/providers/drivers/notify-smtp.js +515 -0
- package/src/providers/drivers/observability-oss.js +43 -0
- package/src/providers/drivers/observability-sls.js +50 -0
- package/src/providers/lifecycle.js +135 -0
- package/src/providers/loader.js +132 -0
- package/src/providers/local.js +190 -0
- package/src/providers/userconfig.js +283 -0
- package/src/reports/aggregate.js +185 -0
- package/src/reports/coverage.js +163 -0
- package/src/reports/detect.js +143 -0
- package/src/reports/parse.js +236 -0
- package/src/templates/files/ci/github.yml +38 -0
- package/src/templates/files/ci/gitlab.yml +27 -0
- package/src/templates/files/design.md +63 -0
- package/src/templates/files/ide/devflow-workflow.md +58 -0
- package/src/templates/files/ide/project-overview-reference.md +1 -0
- package/src/templates/files/ide/project-overview.md +27 -0
- package/src/templates/files/knowledge-index.json +17 -0
- package/src/templates/files/knowledge.md +28 -0
- package/src/templates/files/meta.json +8 -0
- package/src/templates/files/plan.md +38 -0
- package/src/templates/files/proposal.md +33 -0
- package/src/templates/files/reports/contract-test.md +40 -0
- package/src/templates/files/reports/e2e-test.md +30 -0
- package/src/templates/files/reports/integration-test.md +36 -0
- package/src/templates/files/reports/joint-test.md +58 -0
- package/src/templates/files/reports/perf.md +24 -0
- package/src/templates/files/reports/regression.md +20 -0
- package/src/templates/files/reports/remote-test.md +55 -0
- package/src/templates/files/reports/self-test.md +43 -0
- package/src/templates/files/reports/smoke-test.md +22 -0
- package/src/templates/files/reports/unit-test.md +36 -0
- package/src/templates/files/requirement.md +51 -0
- package/src/templates/files/review.md +38 -0
- package/src/templates/files/tests.md +36 -0
- package/src/templates/files/verify.md +32 -0
- package/src/templates/index.js +21 -0
- package/src/utils/log.js +37 -0
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
# Workflow Orchestration
|
|
2
|
+
|
|
3
|
+
devflow 的 skill 编排从固定 phase 链升级为 workflow recipe。`level` 只表示风险和验证强度;本次需求实际走哪些 skill,由 workflow 决定。
|
|
4
|
+
|
|
5
|
+
## 三层模型
|
|
6
|
+
|
|
7
|
+
### 1. builtin recipes
|
|
8
|
+
|
|
9
|
+
`builtin recipes` 是 devflow 随 CLI 发布的默认流程库。它解决的是“没有项目配置时也能安全工作”的问题。
|
|
10
|
+
|
|
11
|
+
内置 recipe 示例:
|
|
12
|
+
|
|
13
|
+
- `standard`:普通功能开发。
|
|
14
|
+
- `micro`:小改动、文案、低风险配置。
|
|
15
|
+
- `dependency-upgrade`:依赖升级。
|
|
16
|
+
- `ci-fix`:CI / 构建修复。
|
|
17
|
+
- `frontend-quality`:前端体验、可访问性、视觉回归。
|
|
18
|
+
- `security-hardening`:安全加固。
|
|
19
|
+
- `refactor`:不改变外部行为的重构。
|
|
20
|
+
|
|
21
|
+
builtin recipe 由 devflow CLI 维护,项目和 change 都不直接修改它。它的最低责任是保证质量闸存在:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
review -> verify -> deliver
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
这三个 step 是 protected gates:
|
|
28
|
+
|
|
29
|
+
- `review` 负责独立审查实现是否满足需求和设计。
|
|
30
|
+
- `verify` 负责测试、回归、自测报告和验证汇总。
|
|
31
|
+
- `deliver` 负责最终交付动作,例如 PR、merge、keep 或 discard。
|
|
32
|
+
|
|
33
|
+
所以 builtin recipe 的定位不是“适配每个团队的最佳流程”,而是“任何团队的安全默认轨道”。项目没有配置时,devflow 仍然能用;项目配置写坏时,也可以退回 builtin。
|
|
34
|
+
|
|
35
|
+
### 2. project recipes
|
|
36
|
+
|
|
37
|
+
`project recipes` 是项目维护者定义的团队默认流程,配置在项目仓库的 `devflow/config.json`:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"workflows": {
|
|
42
|
+
"recipes": {
|
|
43
|
+
"backend-api-change": {
|
|
44
|
+
"label": "后端接口改动",
|
|
45
|
+
"extends": "standard",
|
|
46
|
+
"insertAfter": {
|
|
47
|
+
"apply": [
|
|
48
|
+
{
|
|
49
|
+
"id": "contract-sync",
|
|
50
|
+
"skill": "test-spec",
|
|
51
|
+
"optional": true
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
project recipe 解决的是“团队默认路径不同”的问题。比如后端接口改动可能默认增加契约检查;前端改动可能默认增加可访问性、视觉回归或交互自测;安全相关改动可能默认增加安全审查。
|
|
62
|
+
|
|
63
|
+
project recipe 通常 `extends` 一个 builtin recipe,再做有限编排:
|
|
64
|
+
|
|
65
|
+
- `insertBefore`:在某个 step 前插入已安装 skill。
|
|
66
|
+
- `insertAfter`:在某个 step 后插入已安装 skill。
|
|
67
|
+
- `replaceStep`:用项目认可的 step 替换默认 step。
|
|
68
|
+
- `disableStep`:禁用可选 step。
|
|
69
|
+
|
|
70
|
+
这里刻意只开放有限操作,而不是完整 DAG 或任意 shell。原因是 project recipe 是团队默认轨道,应该保持可解释、可验证、可审计:
|
|
71
|
+
|
|
72
|
+
- 编排对象只能是已安装 skill。
|
|
73
|
+
- 默认不能删除或降级 protected gates。
|
|
74
|
+
- 项目级变更要能在上线前静态校验。
|
|
75
|
+
- 展开后的 step 顺序要能被人读懂。
|
|
76
|
+
|
|
77
|
+
项目维护者上线配置前使用:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
devflow flow validate
|
|
81
|
+
devflow flow preview backend-api-change
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`validate` 用于检查所有 project recipes 是否能展开、是否引用了合法 step、是否破坏质量闸。`preview` 用于查看某个 recipe 最终展开后的 step 列表,避免配置看起来正确、实际执行顺序错误。
|
|
85
|
+
|
|
86
|
+
project recipe 的使用者主要是项目维护者。普通需求实现者通常不改项目配置,只消费它生成自己的 change workflow。
|
|
87
|
+
|
|
88
|
+
### 3. change workflow
|
|
89
|
+
|
|
90
|
+
`change workflow` 是每个需求真正执行的流程快照。它解决的是“同一个项目里,每次需求仍然可能有局部差异”的问题。
|
|
91
|
+
|
|
92
|
+
需求进入 devflow 后,先基于上下文推荐 recipe:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
devflow flow recommend --slug=<slug>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
然后生成本次 workflow 草案:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
devflow flow draft --slug=<slug>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
draft 会把 base recipe 展开并写入 `state.workflow`。典型结构如下:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"workflow": {
|
|
109
|
+
"status": "draft",
|
|
110
|
+
"baseRecipe": {
|
|
111
|
+
"id": "backend-api-change",
|
|
112
|
+
"source": "project",
|
|
113
|
+
"extends": "standard"
|
|
114
|
+
},
|
|
115
|
+
"baseSteps": [
|
|
116
|
+
{ "id": "requirement", "skill": "requirement-analysis" },
|
|
117
|
+
{ "id": "design", "skill": "tech-spec" },
|
|
118
|
+
{ "id": "plan", "skill": "plan" },
|
|
119
|
+
{ "id": "apply", "skill": "apply" },
|
|
120
|
+
{ "id": "contract-sync", "skill": "test-spec", "optional": true },
|
|
121
|
+
{ "id": "review", "skill": "code-review", "gate": true },
|
|
122
|
+
{ "id": "verify", "skill": "verify", "gate": true },
|
|
123
|
+
{ "id": "deliver", "skill": "deliver", "gate": true }
|
|
124
|
+
],
|
|
125
|
+
"steps": [],
|
|
126
|
+
"overrides": [],
|
|
127
|
+
"audit": []
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
实现者可以在 draft 阶段基于模板局部调整:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
devflow flow add-step security-hardening --slug=<slug> --after=apply
|
|
136
|
+
devflow flow disable-step contract-sync --slug=<slug> --reason="no API contract changed"
|
|
137
|
+
devflow flow move-step frontend-quality --slug=<slug> --after=plan
|
|
138
|
+
devflow flow set-verify --slug=<slug> --reports=unit,integration,smoke,self-test,e2e
|
|
139
|
+
devflow flow diff --slug=<slug>
|
|
140
|
+
devflow flow explain --slug=<slug>
|
|
141
|
+
devflow flow check --slug=<slug> --json
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
调整完成后确认:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
devflow flow confirm --slug=<slug>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
confirm 后,`state.workflow.steps` 就成为本次 change 的执行真源。后续项目维护者即使修改了 `devflow/config.json` 中的 recipe,也不会影响已经 confirm 的 change。这样可以保证进行中的需求稳定、可复现、可审计。
|
|
151
|
+
|
|
152
|
+
change workflow 的自由度是“基于模板改”,不是“从零手写 DAG”:
|
|
153
|
+
|
|
154
|
+
- 可以添加本次需要的专项检查。
|
|
155
|
+
- 可以禁用 optional step,但必须写明 reason。
|
|
156
|
+
- 可以移动非 gate step。
|
|
157
|
+
- 可以增强 verify 所需报告集合,例如给前端改动追加 e2e。
|
|
158
|
+
- 可以通过 `flow diff` 看相对 base recipe 的差异;IDE / agent 可以用 `devflow flow diff --json` 获取机器可读 diff。
|
|
159
|
+
- 可以通过 `flow explain` 解释每个 step 来自 builtin、project 还是 change override,并展示 open risk signals、verify 报告原因和本次 overrides 明细;IDE / agent 可以用 `devflow flow explain --json` 获取机器可读说明。
|
|
160
|
+
- 可以通过 `flow check --json` 在 confirm 前做结构化预检,判断是否还存在 pending workflow policy、protected gate 问题、缺失 skill、风险信号未覆盖或 verify 降级。
|
|
161
|
+
- 不能静默删除 `review`、`verify`、`deliver`。
|
|
162
|
+
- 不能直接执行任意 shell。
|
|
163
|
+
- 不能无确认地降低验证强度或绕过质量闸。
|
|
164
|
+
|
|
165
|
+
三层模型的生效关系如下:
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
builtin recipe
|
|
169
|
+
-> project recipe extends / overrides
|
|
170
|
+
-> change workflow draft
|
|
171
|
+
-> change overrides
|
|
172
|
+
-> confirmed state.workflow.steps
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
`builtin` 和 `project` 负责给出默认轨道,`change workflow` 负责把默认轨道冻结为本次需求的执行快照。
|
|
176
|
+
|
|
177
|
+
## 状态结构
|
|
178
|
+
|
|
179
|
+
`state.workflow` 是本次 change 的执行账本:
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"status": "draft",
|
|
184
|
+
"baseRecipe": {
|
|
185
|
+
"id": "standard",
|
|
186
|
+
"label": "标准研发",
|
|
187
|
+
"source": "builtin",
|
|
188
|
+
"reason": "default workflow"
|
|
189
|
+
},
|
|
190
|
+
"baseSteps": [],
|
|
191
|
+
"steps": [],
|
|
192
|
+
"overrides": [],
|
|
193
|
+
"verify": {
|
|
194
|
+
"requiredReports": ["unit-test.md", "integration-test.md", "smoke-test.md", "self-test.md"]
|
|
195
|
+
},
|
|
196
|
+
"currentStep": "requirement",
|
|
197
|
+
"audit": []
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
- `baseRecipe` 记录来自 builtin 还是 project。
|
|
202
|
+
- `baseSteps` 是未被 change override 修改前的展开结果。
|
|
203
|
+
- `steps` 是本次 change 的实际执行快照。
|
|
204
|
+
- `verify.requiredReports` 是本次 change 的 verify 报告强度 override;不存在时按 level 默认要求。
|
|
205
|
+
- `overrides` 记录实现者本次 add / disable / move / set-verify。
|
|
206
|
+
- `audit` 记录 workflow 操作流水。
|
|
207
|
+
|
|
208
|
+
## Workflow Picker
|
|
209
|
+
|
|
210
|
+
`devflow flow picker --json` 是给 IDE / Web UI 渲染“线形 + 分组”编排选项卡的只读协议。它不会修改 `state.workflow`,只把当前 draft 展开为适合用户确认的选择模型:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
devflow flow picker --slug=<slug> --json
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
输出使用 `type: "workflow_picker_surface"` 和 `layout: "linear-grouped"`,默认分为三组:
|
|
217
|
+
|
|
218
|
+
- `core`:核心流程,例如 requirement / design / plan / apply。
|
|
219
|
+
- `quality`:专项检查,例如 frontend-quality / security-hardening / dependency-upgrade / ci-fix。
|
|
220
|
+
- `delivery`:质量闸与交付,例如 review / verify / deliver / archive。
|
|
221
|
+
|
|
222
|
+
每个 item 会标记 `selected`、`recommended`、`locked`、`required`、`protected`、`installed`、`source` 和可执行的 `command`。系统推荐 recipe 中的 step 会自动 `selected=true`;open risk signal 对应但尚未选中的专项 skill 会显示 `recommended=true` 和原因,例如 `open frontend_change risk signal`。`review`、`verify`、`deliver` 这类 protected gate 会显示 `locked=true`,UI 可以渲染为不可取消。
|
|
223
|
+
|
|
224
|
+
这份 picker 协议的 schema 真源是 `schemas/workflow-picker.schema.json`。UI 不应依赖 CLI 人类输出解析,而应使用 `flow picker --json` 中的 `groups[].items[]` 渲染线性选项卡。典型 picker 输出样例固定在 `test/fixtures/workflow-surfaces/picker-*.json`,覆盖默认推荐和 risk signal 推荐专项 skill 两种场景。
|
|
225
|
+
|
|
226
|
+
静态 UI 原型固定在 `docs/workflow-ui-prototype.html`,由 `npm run prototype:workflow` 从 `test/fixtures/workflow-surfaces/*.json` 生成。它展示线性 skill 选项卡、推荐勾选态、locked gate 和 workflow 确认卡,不需要 dev server,直接打开 HTML 即可检查交互形态。
|
|
227
|
+
|
|
228
|
+
如果要用真实 change state 生成实时原型,可以运行 `npm run prototype:workflow -- --slug=<slug> --cwd=<repo>`。脚本会调用 `devflow flow picker --slug=<slug> --json` 和 `devflow flow card --slug=<slug> --json`,默认写到系统临时目录的 `devflow-workflow-ui-<slug>.html`,避免覆盖仓库内的静态 fixture 原型;需要指定位置时加 `--out=<file>`。
|
|
229
|
+
|
|
230
|
+
picker 只负责展示候选和推荐,不直接保存用户选择。用户确认推荐流程时优先运行 `devflow flow card --slug=<slug> --json` 再执行 `devflow flow confirm --slug=<slug>`;脚本仍可直接运行 `devflow flow check --slug=<slug> --json` 做底层预检。如果用户在选项卡里勾选额外专项 skill 或取消 optional step,UI 可以把选择结果交给:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
devflow flow apply-selection --slug=<slug> --selection='{"items":[...]}' --json
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
picker 的 `actions` 会返回 UI 可直接使用的入口:
|
|
237
|
+
|
|
238
|
+
- `card`:打开统一 workflow 确认面,命令为 `devflow flow card --slug=<slug> --json`。
|
|
239
|
+
- `check`:执行底层预检,适合脚本或调试入口。
|
|
240
|
+
- `applySelection`:提交选项卡勾选结果。
|
|
241
|
+
- `confirm`:确认当前 workflow 快照。
|
|
242
|
+
- `suggest`:基于自然语言意图生成编排建议。
|
|
243
|
+
|
|
244
|
+
`apply-selection` 会把安全选择转换成 `flow add-step` / `flow disable-step` 等 draft override,并复用 CLI 的 policy engine。添加检查型 step、禁用无风险 optional step 会直接写入 draft;取消 `review` / `verify` / `deliver` 这类 locked gate,或禁用风险相关专项检查时,会生成 `workflow_policy` checkpoint 并保持 workflow 不变。成功后返回 `nextAction: "devflow flow card --slug=<slug> --json"`,调用方再进入统一确认面。
|
|
245
|
+
|
|
246
|
+
如果 `apply-selection --json` 触发了风险确认,它不会输出人类文本,而是返回 `workflow_policy_confirmation_surface`,供 UI 直接渲染“保留当前流程 / 接受风险”确认卡:
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"ok": false,
|
|
251
|
+
"type": "workflow_policy_confirmation_surface",
|
|
252
|
+
"slug": "<slug>",
|
|
253
|
+
"checkpoint": {
|
|
254
|
+
"id": "workflow_policy-xxxx",
|
|
255
|
+
"type": "workflow_policy",
|
|
256
|
+
"phase": "workflow",
|
|
257
|
+
"status": "pending",
|
|
258
|
+
"summary": "禁用 required workflow step: verify"
|
|
259
|
+
},
|
|
260
|
+
"confirmationCard": {
|
|
261
|
+
"type": "workflow_policy_confirm",
|
|
262
|
+
"title": "确认 workflow 风险",
|
|
263
|
+
"primaryAction": {
|
|
264
|
+
"id": "accept-risk",
|
|
265
|
+
"label": "接受风险",
|
|
266
|
+
"command": "devflow checkpoint resolve --id=workflow_policy-xxxx --decision=accept-risk"
|
|
267
|
+
},
|
|
268
|
+
"secondaryActions": [
|
|
269
|
+
{
|
|
270
|
+
"id": "keep",
|
|
271
|
+
"label": "保留当前流程",
|
|
272
|
+
"command": "devflow status --slug=<slug>"
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
"actions": {
|
|
277
|
+
"show": "devflow checkpoint show --slug=<slug> --json",
|
|
278
|
+
"card": "devflow flow card --slug=<slug> --json"
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## 常用命令
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
devflow flow recommend --slug=<slug>
|
|
287
|
+
devflow flow draft --slug=<slug>
|
|
288
|
+
devflow flow draft --slug=<slug> --recipe=dependency-upgrade
|
|
289
|
+
devflow flow suggest --slug=<slug> --intent="这是前端改动,还涉及安全校验"
|
|
290
|
+
devflow flow add-step frontend-quality --slug=<slug> --after=apply
|
|
291
|
+
devflow flow disable-step frontend-quality --slug=<slug> --reason="no UI diff"
|
|
292
|
+
devflow flow move-step frontend-quality --slug=<slug> --after=plan
|
|
293
|
+
devflow flow set-verify --slug=<slug> --reports=unit,integration,smoke,self-test,e2e
|
|
294
|
+
devflow flow diff --slug=<slug>
|
|
295
|
+
devflow flow picker --slug=<slug> --json
|
|
296
|
+
devflow flow apply-selection --slug=<slug> --selection='{"items":[...]}' --json
|
|
297
|
+
devflow flow explain --slug=<slug>
|
|
298
|
+
devflow flow card --slug=<slug> --json
|
|
299
|
+
devflow flow check --slug=<slug> --json
|
|
300
|
+
devflow flow confirm --slug=<slug>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
项目级命令不需要已有 change:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
devflow flow validate
|
|
307
|
+
devflow flow preview backend-api-change
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## 安全边界
|
|
311
|
+
|
|
312
|
+
- `review`、`verify`、`deliver` 是 protected gates,默认不可删除或降级。
|
|
313
|
+
- 禁用 required step、移动 protected gate 到非法位置、弱化验证要求,都必须生成 checkpoint 或直接拒绝。
|
|
314
|
+
- 添加检查型 step、移动 optional step、禁用 optional step、增强 verify 报告集合只记录 audit,不额外阻断。
|
|
315
|
+
- 自定义 step 只能引用已安装 skill,不能直接执行任意 shell。
|
|
316
|
+
|
|
317
|
+
## 风险感知 Policy Engine
|
|
318
|
+
|
|
319
|
+
workflow 修改先经过 policy engine 分类,再决定是否直接落盘:
|
|
320
|
+
|
|
321
|
+
- `safe`:增加检查型 step,不会降低流程强度,直接通过并记录 audit。
|
|
322
|
+
- `audit-only`:禁用普通 optional step、增强 verify 报告集合,只记录 reason 和 audit。
|
|
323
|
+
- `checkpoint-required`:禁用 required step、禁用质量闸、降低 level 默认 verify 报告要求、或在存在对应风险信号时禁用专项检查,会生成 `workflow_policy` checkpoint。
|
|
324
|
+
- `rejected`:破坏 protected gate 顺序、移动质量闸到非法位置、引用未知 skill、任意 shell 等直接拒绝。
|
|
325
|
+
|
|
326
|
+
风险信号和专项 step 的默认映射:
|
|
327
|
+
|
|
328
|
+
```text
|
|
329
|
+
frontend_change -> frontend-quality
|
|
330
|
+
security_sensitive -> security-hardening
|
|
331
|
+
dependency_change -> dependency-upgrade
|
|
332
|
+
ci_failure -> ci-fix
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
例如当前 change 存在 `frontend_change`,禁用 `frontend-quality` 不会直接生效,而是生成确认卡:
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
devflow flow disable-step frontend-quality --slug=<slug> --reason="..."
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
这会留下 `workflow_policy` checkpoint,让用户明确选择保留流程或接受风险。相反,增加一个额外检查 step 不会阻断:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
devflow flow add-step security-hardening --slug=<slug> --after=apply
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
verify 强度也是 workflow override。比如 L2 默认需要 `unit`、`integration`、`smoke`、`self-test`;增加 e2e 会直接落盘:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
devflow flow set-verify --slug=<slug> --reports=unit,integration,smoke,self-test,e2e
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
如果改成只要 `unit,smoke`,因为少了 L2 默认的 `integration` 和 `self-test`,会生成 `workflow_policy` checkpoint。确认后才允许带风险继续。
|
|
354
|
+
|
|
355
|
+
`workflow_policy` checkpoint 的确认只表示“用户接受这次风险变化”,不会暗中替用户改 workflow。用户 resolve 后需要重跑原来的 `flow` 命令;CLI 会识别同一条已 `accept-risk` 的 workflow policy checkpoint,放行这次修改并写入审计。这个机制适用于禁用 required gate、禁用风险相关专项检查、降低 verify 要求等风险变高的 workflow 修改:
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
devflow checkpoint resolve --id=<checkpoint-id> --decision=accept-risk
|
|
359
|
+
devflow flow set-verify --slug=<slug> --reports=unit,smoke --reason="fast path"
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
IDE / Web UI 也可以随时调用 `devflow checkpoint show --slug=<slug> --json` 获取最新 pending checkpoint。JSON 输出会带 `checkpoint_confirmation_surface` 和通用 `confirmationCard`;当 checkpoint 类型是 `workflow_policy` 时,卡片类型为 `workflow_policy_confirm`,主操作是 `accept-risk`,次操作保留当前流程:
|
|
363
|
+
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"type": "checkpoint_confirmation_surface",
|
|
367
|
+
"pending": { "type": "workflow_policy", "status": "pending" },
|
|
368
|
+
"confirmationCard": {
|
|
369
|
+
"type": "workflow_policy_confirm",
|
|
370
|
+
"primaryAction": { "id": "accept-risk" },
|
|
371
|
+
"secondaryActions": [{ "id": "keep" }]
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
## AI 辅助编排草案
|
|
377
|
+
|
|
378
|
+
`devflow flow suggest` 把实现者的自然语言意图转换为可解释的 workflow override 草案。第一版是规则型 intent parser,不调用模型,也不直接修改 `state.workflow`:
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
devflow flow suggest --slug=<slug> --intent="这是前端改动,还涉及安全校验"
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
输出示例:
|
|
385
|
+
|
|
386
|
+
```text
|
|
387
|
+
suggested overrides
|
|
388
|
+
- add-step frontend-quality: intent mentions frontend or UI quality risk
|
|
389
|
+
command: devflow flow add-step frontend-quality --slug=<slug> --after=apply
|
|
390
|
+
- add-step security-hardening: intent mentions security-sensitive behavior
|
|
391
|
+
command: devflow flow add-step security-hardening --slug=<slug> --after=frontend-quality
|
|
392
|
+
- set-verify: intent mentions core path or e2e verification
|
|
393
|
+
command: devflow flow set-verify --slug=<slug> --reports=unit,integration,smoke,self-test,e2e
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
规则型识别范围:
|
|
397
|
+
|
|
398
|
+
- 前端 / UI / 页面 / 样式 / 交互 / React / Vue / Next / Vite → 建议 `frontend-quality`。
|
|
399
|
+
- 安全 / 权限 / 鉴权 / token / cookie / auth / 校验 → 建议 `security-hardening`。
|
|
400
|
+
- 依赖 / 升级 / lockfile / `package-lock` / `go.sum` / `pom.xml` → 建议切到 `dependency-upgrade` recipe。
|
|
401
|
+
- CI / 构建 / Jenkins / GitHub Actions / GitLab CI / 失败 → 建议切到 `ci-fix` recipe。
|
|
402
|
+
- 核心链路 / 主链路 / 关键路径 / 端到端 / e2e → 建议通过 `flow set-verify` 追加 `e2e` 报告要求。
|
|
403
|
+
|
|
404
|
+
如果不传 `--intent`,`suggest` 会读取 `state.riskSignals` 里的 open 风险信号:
|
|
405
|
+
|
|
406
|
+
- `frontend_change` → 建议 `frontend-quality`,并通过 `flow set-verify` 追加 `e2e`。
|
|
407
|
+
- `security_sensitive` → 建议 `security-hardening`,并追加 `contract` 验证报告。
|
|
408
|
+
- `dependency_change` → 建议切到 `dependency-upgrade` recipe。
|
|
409
|
+
- `ci_failure` → 建议切到 `ci-fix` recipe。
|
|
410
|
+
|
|
411
|
+
`suggest` 默认只输出命令草案。实现者确认后手动运行对应 `flow add-step`、`flow set-verify` 或 `flow draft --recipe=...`,后续仍会经过 policy engine 和 workflow gate。
|
|
412
|
+
|
|
413
|
+
如果想减少复制命令,可以显式让 suggest 把安全增强型 override 写入 draft:
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
devflow flow suggest --slug=<slug> --intent="这是前端核心链路改动,还涉及安全校验" --apply-draft
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
`--apply-draft` 只会自动应用 `add-step` 和增强型 `set-verify`,并继续经过 policy engine。它不会自动 confirm workflow,也不会自动应用 recipe replacement;例如 dependency / ci 的 recipe 建议仍必须手动运行 `devflow flow draft --recipe=...` 才会替换草案。
|
|
420
|
+
|
|
421
|
+
熟练用户或自动化场景可以再显式加 `--confirm`:
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
devflow flow suggest --slug=<slug> --intent="这是前端核心链路改动,还涉及安全校验" --apply-draft --confirm
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
`--apply-draft --confirm` 只在没有 recipe replacement 建议、且安全增强型 override 成功写入 draft 时才会尝试确认 workflow。真正冻结前会复用 `devflow flow confirm` 的同一套预检:如果 `flow check` 返回 `ok=false`,例如仍有缺失 skill、未覆盖的 risk signal、待确认的 `workflow_policy` checkpoint,confirm 会被拒绝,draft 保持未确认。确认后仍然只是冻结本次 `state.workflow.steps`,不会执行任何 phase 命令。
|
|
428
|
+
|
|
429
|
+
## Confirm 前预检
|
|
430
|
+
|
|
431
|
+
`devflow flow check` 是给 CLI、IDE 和 agent 共用的 confirm 前安全预检。它只读取当前 `state.workflow`,不修改状态:
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
devflow flow check --slug=<slug> --json
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
workflow check 是 core 能力,由 `src/core/workflow-check.js` 维护;flow/status/phase gate 这类 CLI 入口只负责渲染、阻断和提示下一步。这样后续 IDE 面板、自动 draft 或其它入口都能复用同一套预检语义,而不是各自复制规则。
|
|
438
|
+
|
|
439
|
+
JSON 输出固定包含:
|
|
440
|
+
|
|
441
|
+
```json
|
|
442
|
+
{
|
|
443
|
+
"ok": false,
|
|
444
|
+
"status": "draft",
|
|
445
|
+
"errors": [],
|
|
446
|
+
"warnings": [
|
|
447
|
+
{
|
|
448
|
+
"code": "missing-risk-step",
|
|
449
|
+
"riskSignal": "security_sensitive",
|
|
450
|
+
"recommendedSteps": ["security-hardening"],
|
|
451
|
+
"message": "open security_sensitive risk signal has no active recommended workflow step: security-hardening"
|
|
452
|
+
}
|
|
453
|
+
],
|
|
454
|
+
"nextAction": "devflow flow suggest --slug=<slug> --apply-draft"
|
|
455
|
+
}
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
当 `ok=true` 时,输出还会包含 `confirmationCard`,供 IDE / Web UI 直接渲染“确认本次编排”的卡片。它不会写入 state,只是把本次 workflow 快照、确认命令和回到 picker 调整的命令放在同一个协议对象里:
|
|
459
|
+
|
|
460
|
+
```json
|
|
461
|
+
{
|
|
462
|
+
"confirmationCard": {
|
|
463
|
+
"type": "workflow_confirm",
|
|
464
|
+
"title": "确认本次 workflow",
|
|
465
|
+
"question": "是否确认本次 change workflow,并按当前快照执行?",
|
|
466
|
+
"steps": [
|
|
467
|
+
{ "id": "requirement", "skill": "requirement-analysis", "status": "pending" },
|
|
468
|
+
{ "id": "review", "skill": "code-review", "required": true, "protected": true }
|
|
469
|
+
],
|
|
470
|
+
"primaryAction": {
|
|
471
|
+
"id": "confirm",
|
|
472
|
+
"label": "确认 workflow",
|
|
473
|
+
"command": "devflow flow confirm --slug=<slug>"
|
|
474
|
+
},
|
|
475
|
+
"secondaryActions": [
|
|
476
|
+
{
|
|
477
|
+
"id": "edit",
|
|
478
|
+
"label": "调整编排",
|
|
479
|
+
"command": "devflow flow picker --slug=<slug> --json"
|
|
480
|
+
}
|
|
481
|
+
]
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
IDE / Web UI 如果只想渲染确认面,优先调用统一协议入口:
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
devflow flow card --slug=<slug> --json
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
`card` 不修改 state,只复用 `flow check` 的同一套预检结果,并把确认卡和常用动作聚合成 `workflow_confirmation_surface`:
|
|
493
|
+
|
|
494
|
+
```json
|
|
495
|
+
{
|
|
496
|
+
"type": "workflow_confirmation_surface",
|
|
497
|
+
"slug": "<slug>",
|
|
498
|
+
"ok": true,
|
|
499
|
+
"status": "draft",
|
|
500
|
+
"baseRecipe": { "id": "standard", "source": "builtin" },
|
|
501
|
+
"confirmationCard": { "type": "workflow_confirm" },
|
|
502
|
+
"actions": {
|
|
503
|
+
"picker": "devflow flow picker --slug=<slug> --json",
|
|
504
|
+
"applySelection": "devflow flow apply-selection --slug=<slug> --selection='<json>' --json",
|
|
505
|
+
"check": "devflow flow check --slug=<slug> --json",
|
|
506
|
+
"confirm": "devflow flow confirm --slug=<slug>"
|
|
507
|
+
},
|
|
508
|
+
"nextAction": "devflow flow confirm --slug=<slug>"
|
|
509
|
+
}
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
这份确认面协议的 schema 真源是 `schemas/workflow-confirmation-surface.schema.json`。UI 可以把它作为“推荐编排确认卡”的稳定边界:`ok=true` 时展示 `confirmationCard.primaryAction`,`ok=false` 时按 `errors` / `warnings` / `nextAction` 引导用户回 picker 或 checkpoint。典型确认卡输出样例固定在 `test/fixtures/workflow-surfaces/confirmation-card.json`。
|
|
513
|
+
|
|
514
|
+
非 JSON 输出在 `ok=true` 时也会渲染同一张确认卡的紧凑摘要,方便纯 CLI 用户直接确认,或回到 picker 调整:
|
|
515
|
+
|
|
516
|
+
```text
|
|
517
|
+
workflow check: ok
|
|
518
|
+
确认本次 workflow
|
|
519
|
+
question: 是否确认本次 change workflow,并按当前快照执行?
|
|
520
|
+
steps: requirement -> design -> plan -> apply -> review -> verify -> deliver -> archive
|
|
521
|
+
confirm: devflow flow confirm --slug=<slug>
|
|
522
|
+
edit: devflow flow picker --slug=<slug> --json
|
|
523
|
+
next: devflow flow confirm --slug=<slug>
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
`ok=true` 表示可以安全执行 `devflow flow confirm --slug=<slug>`。`ok=false` 时,调用方应先处理 `nextAction`:
|
|
527
|
+
|
|
528
|
+
- `workflow-missing`:先运行 `devflow flow draft`。
|
|
529
|
+
- `pending-workflow-policy`:先展示或处理 `workflow_policy` checkpoint。
|
|
530
|
+
- `missing-protected-gate` / `disabled-protected-gate` / `invalid-gate-order`:先回到 `flow explain` 查看结构问题。
|
|
531
|
+
- `missing-skill`:安装或修正 step 引用的 skill。
|
|
532
|
+
- `missing-risk-step`:建议运行 `devflow flow suggest --apply-draft`,把 open risk signal 对应的专项 step 补进 draft。
|
|
533
|
+
- `verify-below-level-default`:把 verify reports 恢复到当前 level 默认要求,或通过 policy checkpoint 明确接受风险。
|
|
534
|
+
|
|
535
|
+
如果某个风险修改已经有同 summary 的 `workflow_policy` checkpoint,并且 decision 是 `accept-risk`,`flow check` 会把它视为已确认风险,不再重复阻断同一条 workflow override。
|
|
536
|
+
|
|
537
|
+
`devflow flow confirm` 本身也会执行同一套预检;如果 `ok=false`,confirm 会拒绝冻结 workflow,并输出对应的 error / warning 和 `nextAction`。
|
|
538
|
+
|
|
539
|
+
推荐 IDE 使用顺序是:
|
|
540
|
+
|
|
541
|
+
```bash
|
|
542
|
+
devflow flow diff --slug=<slug> --json
|
|
543
|
+
devflow flow explain --slug=<slug> --json
|
|
544
|
+
devflow flow card --slug=<slug> --json
|
|
545
|
+
devflow flow confirm --slug=<slug>
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
这样 `diff` 回答“改了什么”,`explain` 回答“为什么这样编排”,`card` 回答“现在能不能安全 confirm,以及该如何确认或回到 picker 调整”。
|
|
549
|
+
|
|
550
|
+
## 推荐的入口顺序
|
|
551
|
+
|
|
552
|
+
新需求入口仍先做 intake / brainstorm 和问题卡确认。`devflow new` 和 `devflow ingest` 成功创建 change 后,会立即基于推荐 recipe 自动生成本次 `state.workflow` 草案;用户不用再手动跑 `recommend` / `draft` 才能看到流程。
|
|
553
|
+
|
|
554
|
+
```bash
|
|
555
|
+
devflow ingest "<url-or-file>" --project-root=<repo>
|
|
556
|
+
devflow checkpoint resolve --id=<problem-card-id> --decision=accept
|
|
557
|
+
devflow flow picker --slug=<slug> --json
|
|
558
|
+
devflow flow apply-selection --slug=<slug> --selection='<json>' --json
|
|
559
|
+
devflow flow explain --slug=<slug>
|
|
560
|
+
devflow flow card --slug=<slug> --json
|
|
561
|
+
devflow flow confirm --slug=<slug>
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
入口命令会直接打印这组 workflow selection guidance:`picker` 用于渲染“线形 + 分组”的选项卡,`apply-selection` 用于提交用户勾选结果,`card` 是 UI 优先使用的统一确认面,内部包含 check 结果、确认卡和可执行 action,`check` 保留给脚本做 Confirm 前预检,`confirm` 冻结快照。用户如果接受推荐编排,可以跳过 `apply-selection`,直接看 `card` 并 `confirm`;如果调整了选项卡,再先提交 selection。
|
|
565
|
+
|
|
566
|
+
如果入口阶段因为缺失 skill、recipe 配置错误或旧项目配置无法自动生成草案,CLI 会退回显示 `devflow flow recommend` / `devflow flow draft` 的手动补救命令。之后 orchestrator 按 `state.workflow.steps` 决定下一步 skill,而不是按固定 phase 表硬跳。
|
|
567
|
+
|
|
568
|
+
## 执行约束
|
|
569
|
+
|
|
570
|
+
confirmed workflow 会参与阶段命令的运行时 gate:
|
|
571
|
+
|
|
572
|
+
- `state.workflow.status` 仍是 `draft` 时,`requirement` / `design` / `plan` / `apply` / `review` / `verify` / `deliver` 会被 phase gate 挡住,并提示先运行 `devflow flow card --slug=<slug> --json`;如果确认面 `ok=true`,phase gate 也会渲染紧凑版 `确认本次 workflow` 卡片,包含 `steps:`、`confirm:` 和 `edit:`,让误跑 phase 命令的用户也能直接确认或调整。脚本仍可调用 `devflow flow check --slug=<slug> --json` 做底层预检。
|
|
573
|
+
- `state.workflow.status=confirmed` 时,阶段命令必须匹配 `state.workflow.currentStep`;例如当前 step 是 `requirement` 时,直接运行 `devflow plan` 会被拒绝。
|
|
574
|
+
- 阶段命令成功后,当前 step 会标记为 `completed`,并把 `currentStep` 推进到下一个未 disabled、未 completed 的 step。
|
|
575
|
+
- `apply` 只有在所有 plan task 都完成或跳过后,才会把 workflow 推进到 `review`。
|
|
576
|
+
- `verify` 在 `devflow verify finalize` 成功后推进到 `deliver`;普通 `devflow verify` 只进入验证中,不提前放行交付。
|
|
577
|
+
- 旧 change 如果没有 `state.workflow`,仍按旧 phase 兼容路径运行。
|
|
578
|
+
|
|
579
|
+
`devflow status` 会展示 workflow 的 recipe、状态、当前 step、下一 step,以及本次 change 的 override 摘要。对于尚未 confirm 的 draft,它会优先提示 `flow card`,并显示 `ok/errors/warnings/nextAction`;当 `ok=true` 时,status 也会渲染紧凑版 `确认本次 workflow` 卡片,包含 `steps:`、`confirm:` 和 `edit:`,让用户可以直接确认,或回到 picker 调整。如果存在 `missing-risk-step` 这类未覆盖风险,status 的 `next:` 会直接指向 `devflow flow suggest --apply-draft`,而不是笼统提示继续当前 phase。
|
|
580
|
+
|
|
581
|
+
IDE / Web UI 可以调用 `devflow status --slug=<slug> --json` 作为当前 change 页面入口。JSON 输出是 `change_status_surface`,包含 change 基本信息、`phases` 进度、`artifacts` 产物、`apply` task 摘要、`review` 轮次、`verify` 报告缺口、`riskSignals`、`workflow.check`、`workflow.actions`、`pendingCheckpoint`、`checkpointConfirmationCard`、`primaryPanel`、`blockingReason`、`availableActions` 和 `nextAction`。UI 推荐按这三个字段渲染主操作区:
|
|
582
|
+
|
|
583
|
+
- `primaryPanel`:当前页面主面板类型,例如 `checkpoint`、`workflow_confirm`、`workflow_check`、`review_blocked`、`verify_start`、`current_step`。
|
|
584
|
+
- `blockingReason`:如果当前需要用户确认或存在硬阻塞,给出结构化原因;没有阻塞时为 `null`。
|
|
585
|
+
- `availableActions`:可直接渲染的按钮列表,包含 `id`、`label`、`command`、`primary`、`danger`、`requiresReason`。
|
|
586
|
+
|
|
587
|
+
这份 JSON contract 的 schema 真源是 `schemas/status-surface.schema.json`。UI 集成或插件适配时,应以该 schema 作为字段兼容边界;新增字段可以向后兼容追加,但 `primaryPanel` / `blockingReason` / `availableActions` 的核心字段不应随意改名。
|
|
588
|
+
典型输出样例固定在 `test/fixtures/status-surfaces/*.json`,覆盖 workflow draft、pending checkpoint、review blocked、verify missing reports 和 confirmed current step。修改 `status --json` UI 字段时,应同步更新这些 golden snapshots。
|
|
589
|
+
|
|
590
|
+
如果当前 workflow draft 被 `workflow_policy` checkpoint 阻塞,`nextAction` 会指向 `devflow checkpoint show --slug=<slug> --json`,UI 可以直接渲染 `checkpointConfirmationCard`:
|
|
591
|
+
|
|
592
|
+
```json
|
|
593
|
+
{
|
|
594
|
+
"type": "change_status_surface",
|
|
595
|
+
"slug": "<slug>",
|
|
596
|
+
"phases": {
|
|
597
|
+
"current": { "id": "apply", "status": "in_progress" },
|
|
598
|
+
"summary": { "total": 9, "completed": 1, "inProgress": 1, "pending": 7 }
|
|
599
|
+
},
|
|
600
|
+
"artifacts": {
|
|
601
|
+
"core": [{ "name": "requirement.md", "exists": true }],
|
|
602
|
+
"directories": { "reports": { "count": 1, "files": ["test-report.md"] } }
|
|
603
|
+
},
|
|
604
|
+
"review": { "status": "blocked", "latestRound": { "round": 2, "outcome": "blocked" } },
|
|
605
|
+
"verify": {
|
|
606
|
+
"requiredReports": ["unit-test.md", "e2e-test.md"],
|
|
607
|
+
"presentReports": ["unit-test.md"],
|
|
608
|
+
"missingReports": ["e2e-test.md"]
|
|
609
|
+
},
|
|
610
|
+
"riskSignals": { "summary": { "total": 1, "open": 1 } },
|
|
611
|
+
"workflow": {
|
|
612
|
+
"status": "draft",
|
|
613
|
+
"currentStep": "requirement",
|
|
614
|
+
"check": { "ok": false },
|
|
615
|
+
"actions": {
|
|
616
|
+
"card": "devflow flow card --slug=<slug> --json",
|
|
617
|
+
"picker": "devflow flow picker --slug=<slug> --json"
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
"pendingCheckpoint": { "type": "workflow_policy" },
|
|
621
|
+
"checkpointConfirmationCard": { "type": "workflow_policy_confirm" },
|
|
622
|
+
"primaryPanel": {
|
|
623
|
+
"type": "checkpoint",
|
|
624
|
+
"reasonCode": "pending-checkpoint",
|
|
625
|
+
"actionIds": ["show-checkpoint", "accept-risk", "keep"]
|
|
626
|
+
},
|
|
627
|
+
"blockingReason": {
|
|
628
|
+
"code": "pending-checkpoint",
|
|
629
|
+
"source": "checkpoint",
|
|
630
|
+
"severity": "blocker"
|
|
631
|
+
},
|
|
632
|
+
"availableActions": [
|
|
633
|
+
{
|
|
634
|
+
"id": "show-checkpoint",
|
|
635
|
+
"label": "查看确认卡",
|
|
636
|
+
"command": "devflow checkpoint show --slug=<slug> --json",
|
|
637
|
+
"primary": true
|
|
638
|
+
}
|
|
639
|
+
],
|
|
640
|
+
"nextAction": "devflow checkpoint show --slug=<slug> --json"
|
|
641
|
+
}
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
`devflow flow explain` 更适合在 confirm 前做人工复核。它会展示:
|
|
645
|
+
|
|
646
|
+
- base recipe 的来源和推荐原因。
|
|
647
|
+
- 每个 step 的 skill、source、required / optional / protected / disabled 状态。
|
|
648
|
+
- workflow verify required reports,以及这些报告是因为什么 override 设置的。
|
|
649
|
+
- 当前仍 open 的 `state.riskSignals`。
|
|
650
|
+
- 本次 change workflow 的 add / disable / move / set-verify overrides。
|
|
651
|
+
|
|
652
|
+
## 示例:后端接口改动
|
|
653
|
+
|
|
654
|
+
项目配置:
|
|
655
|
+
|
|
656
|
+
```json
|
|
657
|
+
{
|
|
658
|
+
"workflows": {
|
|
659
|
+
"recipes": {
|
|
660
|
+
"backend-api-change": {
|
|
661
|
+
"label": "后端接口改动",
|
|
662
|
+
"extends": "standard",
|
|
663
|
+
"insertAfter": {
|
|
664
|
+
"apply": [
|
|
665
|
+
{
|
|
666
|
+
"id": "contract-sync",
|
|
667
|
+
"skill": "test-spec",
|
|
668
|
+
"optional": true
|
|
669
|
+
}
|
|
670
|
+
]
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
预览:
|
|
679
|
+
|
|
680
|
+
```bash
|
|
681
|
+
devflow flow validate
|
|
682
|
+
devflow flow preview backend-api-change
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
用于 change:
|
|
686
|
+
|
|
687
|
+
```bash
|
|
688
|
+
devflow flow draft --slug=<slug> --recipe=backend-api-change
|
|
689
|
+
devflow flow confirm --slug=<slug>
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
## 下一轮方向
|
|
693
|
+
|
|
694
|
+
- 把 `flow suggest` 从规则型 intent parser 升级为可选 AI 辅助,但仍只生成草案或安全增强型 draft override,不直接执行任意 shell 或绕过 policy engine。
|
|
695
|
+
- 支持更多 `--apply-draft` 可应用项,例如按风险信号追加 contract / joint / perf 报告,但 recipe replacement 仍保持显式手动。
|