@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,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devflow-complexity-grading
|
|
3
|
+
description: |
|
|
4
|
+
devflow-kit 复杂度分级器。在任何需求(URL / JIRA / idea / incident)进入开发流程后、
|
|
5
|
+
requirement-analysis 开始前,**自动触发**一次分级评估,输出 L0/L1/L2/L3
|
|
6
|
+
并等用户确认,然后写入 state.json.level。后续所有 phase 的尺度都基于此。
|
|
7
|
+
when_to_use: |
|
|
8
|
+
- 用户粘贴 URL / JIRA ID / 描述 idea 后,在 requirement-analysis 前自动插入
|
|
9
|
+
- devflow ingest 完成后自动调用(state.currentPhase = intake 时)
|
|
10
|
+
- brainstorm 产出 proposal.md 后自动调用(state.currentPhase = brainstorm 时)
|
|
11
|
+
- 用户说"帮我重新评级"/ "level 对不对"/ "升级到 L3"时,手动触发
|
|
12
|
+
- 不要等用户主动问;也不要在 apply/review/verify 阶段反复触发
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# complexity-grading
|
|
16
|
+
|
|
17
|
+
**自动分级器**,不做实质工作。读现有材料 → 按维度打分 → 给用户看判定卡 → 等确认 → 写 state。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 触发时机(自动)
|
|
22
|
+
|
|
23
|
+
| 前驱 phase | 触发条件 | 动作 |
|
|
24
|
+
| --- | --- | --- |
|
|
25
|
+
| `intake` | `devflow ingest` 成功,`refs/source.md` 落盘 | **立即**读 `source.md` 做初判 |
|
|
26
|
+
| `brainstorm` | `proposal.md` Done Criteria 满足 | **立即**读 `proposal.md` 做初判 |
|
|
27
|
+
| 用户主动说明改动 | 用户在对话中给出"改 X 文件"/"新增 Y 接口"等信号 | 边听边更新初判,第一次稳定后输出判定卡 |
|
|
28
|
+
|
|
29
|
+
触发后进入本 skill,**不等用户发第二条消息**,直接输出判定卡(见下文格式)。
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 执行步骤
|
|
34
|
+
|
|
35
|
+
### Step 1:收集信号
|
|
36
|
+
|
|
37
|
+
读以下任意已有材料(有什么读什么,不强制所有都存在):
|
|
38
|
+
|
|
39
|
+
| 材料 | 读取内容 |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| `refs/source.md` | 需求描述、功能列表、改动范围提示 |
|
|
42
|
+
| `proposal.md` | 用户描述的想法、范围 |
|
|
43
|
+
| `refs/incident.md` | 事故描述、影响面、修复方向 |
|
|
44
|
+
| `refs/kb-context.md` | **KB 预检索结果**(ingest 阶段已写入,有则读,无则跳过) |
|
|
45
|
+
| `state.json#projects` / `state.json#projectRouting` | ingest / new 阶段识别到的 primary / dependency 项目推荐 |
|
|
46
|
+
| 用户对话上下文 | 口头说的文件名、接口、数量 |
|
|
47
|
+
| `devflow/specs/` | 已有的 spec 文件(判断本次是否影响已有契约) |
|
|
48
|
+
|
|
49
|
+
**不要**在此阶段读代码文件或做 grep 搜索(那是 requirement-analysis Round 2 的事)。
|
|
50
|
+
|
|
51
|
+
同时提炼一张**问题卡**,用于让用户确认"我们到底在处理哪个问题":
|
|
52
|
+
- 标题:优先取 `proposal.md` 标题,其次取 refs 首个标题。
|
|
53
|
+
- 来源:Wiki / JIRA / incident / manual 及原始 ref。
|
|
54
|
+
- 现象/目标:用 1-3 条短句概括,不展开需求分析。
|
|
55
|
+
- 已导入材料:change slug、refs 文件、图片/附件数量、KB 命中摘要(如有)。
|
|
56
|
+
- 明显不确定项:只列会影响定级或项目范围的 1-3 个点。
|
|
57
|
+
|
|
58
|
+
若 `state.json#projects` 存在,必须把它作为**涉及项目确认**展示;若不存在但 `projectRouting.candidates` 存在,展示候选并要求用户选择 primary / dependency。此确认和复杂度确认是同一个闸门,不能分散到 requirement 阶段才第一次让用户看到。
|
|
59
|
+
|
|
60
|
+
**KB 命中参考规则**(读 `refs/kb-context.md` 后应用):
|
|
61
|
+
|
|
62
|
+
| KB 命中情况 | 对分级的影响 |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| 命中同类功能,历史 level=L3 | 本次**起评 L2**,不得低于 L2(除非用户明确说明范围更小) |
|
|
65
|
+
| 命中同类功能,历史 level=L2 | 在判定卡中标注"历史同类为 L2",供用户参考 |
|
|
66
|
+
| 命中"曾踩坑 / 曾升级" | 在判定卡"⚠ 风险提示"中引用原文 |
|
|
67
|
+
| 无命中 | 忽略,按常规维度打分 |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### Step 2:逐维度打分
|
|
72
|
+
|
|
73
|
+
对下表 **10 个维度**逐一判级,无信号时默认 L1(保守估计):
|
|
74
|
+
|
|
75
|
+
| 维度 | L0 信号 | L1 信号 | L2 信号 | L3 信号 |
|
|
76
|
+
| --- | --- | --- | --- | --- |
|
|
77
|
+
| **代码规模** | 单处改动、已明确 | 单文件、diff < 100 行 | 2-8 文件、diff < 500 行 | > 8 文件 / 跨多模块 |
|
|
78
|
+
| **数据层** | 无 | 无 DDL | 有 DDL(幂等可回滚) | 跨表 / 大表改列 / 数据迁移 |
|
|
79
|
+
| **对外契约** | 无 | 无接口变更 | 新接口 / 改字段(兼容) | 删字段 / 改语义 / 跨服务契约 |
|
|
80
|
+
| **并发 / 一致性** | 无 | 单路径 | 单表事务 | 分布式锁 / Saga / 最终一致 |
|
|
81
|
+
| **性能要求** | 无 | 用户无感知 | 不退化即可 | 明确 SLO / 压测 / 容量 |
|
|
82
|
+
| **安全 / 合规** | 无 | 无敏感数据 | 权限校验 / 脱敏 | 合规审计 / 隐私变更 |
|
|
83
|
+
| **团队 / 依赖** | 一人 | 一人 | 本团队 2-3 人 | 跨团队 / 跨部门 |
|
|
84
|
+
| **灰度 / 回滚** | 无 | 不需要 | 简单 feature flag | 分批灰度 + 白名单 + 演练 |
|
|
85
|
+
| **监控 / 告警** | 无 | 不需要 | 加指标 | 加指标 + 告警 + runbook |
|
|
86
|
+
| **测试类型** | 单测(≤ 1 个) | 单元 + 冒烟 | + 集成 | + e2e / 性能 / 回归 |
|
|
87
|
+
|
|
88
|
+
**综合判定规则(就高不就低):**
|
|
89
|
+
1. 任一维度命中 L3 → 整体 L3
|
|
90
|
+
2. 任一维度命中 L2 → 整体 ≥ L2
|
|
91
|
+
3. 所有维度 ≤ L1,且用户已明确改法 → L0 候选(需用户确认)
|
|
92
|
+
4. 无法判断某维度 → 默认 L1(不降低保守估计)
|
|
93
|
+
5. 拿不准整体 → 默认 L2
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### Step 3:输出判定卡(必须用此格式)
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
┌─────────────────────────────────────────────────────────┐
|
|
101
|
+
│ 问题卡:早筛幽门结果导入功能 │
|
|
102
|
+
├─────────────────────────────────────────────────────────┤
|
|
103
|
+
│ 来源:Wiki #142565872 │
|
|
104
|
+
│ change:feature-hp-import │
|
|
105
|
+
│ 材料:refs/intake-wiki.md;图片 6 张;KB 命中 2 条 │
|
|
106
|
+
│ 目标:导入早筛幽门结果,生成成功/失败明细 │
|
|
107
|
+
│ 不确定项:失败明细字段、重复导入策略 │
|
|
108
|
+
├─────────────────────────────────────────────────────────┤
|
|
109
|
+
│ 涉及项目确认: │
|
|
110
|
+
│ primary → health-mall │
|
|
111
|
+
│ dependency → health-marketing, health-portal │
|
|
112
|
+
│ 候选 → health-mall-local, health-user │
|
|
113
|
+
│ │
|
|
114
|
+
│ 如需修改:回复 项目=health-mall,health-user │
|
|
115
|
+
│ 如不关联代码项目:回复 项目=none │
|
|
116
|
+
├─────────────────────────────────────────────────────────┤
|
|
117
|
+
│ 复杂度初判:L2 │
|
|
118
|
+
├─────────────────────────────────────────────────────────┤
|
|
119
|
+
│ 维度打分: │
|
|
120
|
+
│ ✓ 代码规模 → L2(预计改 4-6 个文件) │
|
|
121
|
+
│ ✓ 数据层 → L2(新增 1 张表,DDL 可重入) │
|
|
122
|
+
│ ✓ 对外契约 → L2(新增 1 个接口,字段兼容) │
|
|
123
|
+
│ · 并发一致性 → L1(单表事务) │
|
|
124
|
+
│ · 安全合规 → L1(无敏感数据) │
|
|
125
|
+
│ · 团队依赖 → L1(一人完成) │
|
|
126
|
+
│ · 其余维度 → L1 │
|
|
127
|
+
│ │
|
|
128
|
+
│ 综合:取最高维度 → L2 │
|
|
129
|
+
├─────────────────────────────────────────────────────────┤
|
|
130
|
+
│ L2 流程包含: │
|
|
131
|
+
│ requirement(双轮) → design → test-spec → plan │
|
|
132
|
+
│ → apply → code-review → verify(unit+集成) → deliver│
|
|
133
|
+
│ → archive │
|
|
134
|
+
│ │
|
|
135
|
+
│ ⚠ 若后续发现 DDL 有跨服务一致性 → 升 L3 │
|
|
136
|
+
│ 📚 KB 历史参考:上次"会员权益升级"定为 L2(见 kb-context)│
|
|
137
|
+
├─────────────────────────────────────────────────────────┤
|
|
138
|
+
│ 请确认: │
|
|
139
|
+
│ 回车 = 确认问题卡 + 项目 + L2,继续 requirement-analysis │
|
|
140
|
+
│ L0 / L1 / L3 = 调整级别(请说明原因) │
|
|
141
|
+
│ 项目=<primary>[,<dependency>] = 修改涉及项目 │
|
|
142
|
+
│ ? = 我来解释每个维度的判断依据 │
|
|
143
|
+
└─────────────────────────────────────────────────────────┘
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### Step 4:等待用户确认
|
|
149
|
+
|
|
150
|
+
**确认字段防伪规则(硬约束)**:
|
|
151
|
+
|
|
152
|
+
- `problemCardConfirmedAt` 和 `projectConfirmationAt` 只能在本 skill 写入;其他 skill 不能代写。
|
|
153
|
+
- 写入前,当前回复正文必须已经完整展示"问题卡 + 涉及项目确认 + 复杂度初判"。
|
|
154
|
+
- 只有用户明确确认上一条回复里的判定卡后,才能写 `state.json`。仅有"继续"、"下一步"、"没有问题"但上一条回复没有展示判定卡时,不算确认。
|
|
155
|
+
- 如果发现旧状态已有 `state.level` 但缺少确认字段,必须重新展示简版问题卡并等待用户明确确认,不得直接补写字段。
|
|
156
|
+
- 如果用户修改项目或级别,先重出判定卡摘要,再等下一次确认。
|
|
157
|
+
|
|
158
|
+
| 用户响应 | 处理 |
|
|
159
|
+
| --- | --- |
|
|
160
|
+
| 回车 / "确认" / "OK" | 写 `state.level = <判定级>`,保留当前 `state.projects` → 进入下一 phase |
|
|
161
|
+
| `L0` / `L1` / `L2` / `L3` | 询问"调整原因?"→ 记 audit → 写新 level → 进入下一 phase |
|
|
162
|
+
| `项目=<primary>[,<dependency>]` | 更新 `state.projects` 与 `state.projectRouting.recommended`,重新展示判定卡摘要,等待确认 |
|
|
163
|
+
| `项目=none` | 清空本次 `state.projects`,记录"暂不关联代码项目",重新展示判定卡摘要,等待确认 |
|
|
164
|
+
| "项目不对" / "换项目" | 展示候选项目和命令格式,不写 level,等待用户给出 `项目=...` |
|
|
165
|
+
| `?` 或 "为什么" | 逐维度解释判断依据,不重新判级,再次等确认 |
|
|
166
|
+
| "改动比我说的大" | 重新收集信号,更新打分,再次输出判定卡 |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### Step 5:写 state.json
|
|
171
|
+
|
|
172
|
+
```json
|
|
173
|
+
{
|
|
174
|
+
"level": "L2",
|
|
175
|
+
"levelSetAt": "<ISO timestamp>",
|
|
176
|
+
"levelSource": "complexity-grading",
|
|
177
|
+
"problemCardConfirmedAt": "<ISO timestamp>",
|
|
178
|
+
"projectConfirmationAt": "<ISO timestamp>",
|
|
179
|
+
"projects": [
|
|
180
|
+
{
|
|
181
|
+
"name": "health-mall",
|
|
182
|
+
"root": "/path/to/health-mall",
|
|
183
|
+
"role": "primary"
|
|
184
|
+
}
|
|
185
|
+
],
|
|
186
|
+
"levelAudit": [
|
|
187
|
+
{
|
|
188
|
+
"type": "initial_grading",
|
|
189
|
+
"level": "L2",
|
|
190
|
+
"scores": {
|
|
191
|
+
"代码规模": "L2",
|
|
192
|
+
"数据层": "L2",
|
|
193
|
+
"对外契约": "L2",
|
|
194
|
+
"并发一致性": "L1"
|
|
195
|
+
},
|
|
196
|
+
"confirmedBy": "user",
|
|
197
|
+
"confirmedProjects": ["health-mall"],
|
|
198
|
+
"at": "<ISO timestamp>"
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
写完后输出:
|
|
205
|
+
```
|
|
206
|
+
✔ level=L2 和涉及项目已写入 state.json,进入 requirement-analysis。
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 特殊场景
|
|
212
|
+
|
|
213
|
+
### 极简模式(L0)的识别与确认
|
|
214
|
+
|
|
215
|
+
L0 是最严格的级别(paradox:最轻的流程但最严的前置条件):
|
|
216
|
+
|
|
217
|
+
**自动识别信号**(需全部满足):
|
|
218
|
+
- 用户明确说"极简"/"不要文档"/"直接改"
|
|
219
|
+
- 改动描述具体到文件名 + 行号 / 函数名
|
|
220
|
+
- 无 DDL / 无接口变更 / 预计 ≤ 1 个文件
|
|
221
|
+
|
|
222
|
+
输出判定卡时,额外显示:
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
⚠ L0 极简模式:跳过所有文档 phase,直接 apply → code-review → verify → deliver(含测试邮件)
|
|
226
|
+
⚠ 如果 apply 过程中发现改动超出 1 个文件,必须升级到 L1。确认继续?
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 升级触发(中途发现)
|
|
230
|
+
|
|
231
|
+
非本 skill 阶段(如 apply 时发现 DDL),其他 skill 可调用:
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
devflow status set-level L3 --reason="发现跨服务数据一致性问题"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
本 skill 不处理中途升级,仅负责初始定级。
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 不做的事
|
|
242
|
+
|
|
243
|
+
- **不做 requirement-analysis**:读需求 + 判级,不问"边界条件是什么"
|
|
244
|
+
- **不做 brainstorm**:不扩展用户的想法,只从现有材料提取信号
|
|
245
|
+
- **不替用户拍板**:判级卡必须等用户确认后才写 state,不能默默写
|
|
246
|
+
- **不反复触发**:一个 change 只在 intake/brainstorm 完成时触发一次初判;后续 phase 不重复触发,除非用户主动要求重新评级
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 完成状态协议
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
---STATUS---
|
|
254
|
+
result: DONE | NEEDS_INPUT
|
|
255
|
+
level: L0 | L1 | L2 | L3
|
|
256
|
+
confirmedBy: user | auto (auto 仅在 --ci 模式且 level 无争议时)
|
|
257
|
+
nextPhase: requirement | plan (L0 直接 plan)
|
|
258
|
+
---END_STATUS---
|
|
259
|
+
```
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devflow-deliver
|
|
3
|
+
description: |
|
|
4
|
+
devflow-kit deliver 阶段交付 change。4 种模式 —— `pr`(默认,提 PR/MR)、`merge`(本地合并)、`keep`(搁置)、
|
|
5
|
+
`discard`(丢弃,危险)。自动构建 PR/MR 描述(标题、提测自测、关联文档、回滚方案),
|
|
6
|
+
可选 notify(SMTP / IM)。硬闸:verify.status=completed、review.status=completed、
|
|
7
|
+
`devflow doctor` 无 error。触发:`devflow deliver [--mode=<m>]` 或 `/df:deliver`。
|
|
8
|
+
when_to_use: |
|
|
9
|
+
`devflow verify finalize` 通过后。根据项目流程选 mode。 pr / merge 后提醒用户等 MR 合并 / 上线后接
|
|
10
|
+
`devflow archive`,archive 会合并 specs 并执行 knowledge deposit / sync / MR;keep 搁置等复工;
|
|
11
|
+
discard 需确认后彻底清理。
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# deliver
|
|
15
|
+
|
|
16
|
+
**交付专家**,不是实现者。代码和文档已齐,verify 通过;deliver 把它"安全、可追溯、可回滚"地送到集成轨道。
|
|
17
|
+
|
|
18
|
+
## 前置硬闸
|
|
19
|
+
|
|
20
|
+
| 条件 | 必需 | 失败处理 |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| `state.verify.status === "completed"` | 是 | 退回 verify,除非 `--skip-verify`(审计) |
|
|
23
|
+
| `state.review.status === "completed"` | 是 | 退回 review,除非 `--skip-review`(审计) |
|
|
24
|
+
| `devflow doctor --scope cred` 无 error | 是 | 修完再来(credential 泄露 → 报告里不能含明文 token) |
|
|
25
|
+
| 分支不是 `main/master/default` | 是 | 切到 feature 分支再发 |
|
|
26
|
+
| git 工作区干净(无未提交) | 是 | 先 commit / stash |
|
|
27
|
+
| 所有 task 都 commit 到当前分支 | 是 | 回退 apply 补 |
|
|
28
|
+
|
|
29
|
+
每个硬闸的跳过都要走 `--skip-<gate> --reason="..."`,并记进 state.json 的审计日志。
|
|
30
|
+
|
|
31
|
+
## 4 种 Mode 的决策
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
想让别人 review / CI 跑 → pr (默认)
|
|
35
|
+
个人项目 / 微不足道修复,直接合 → merge
|
|
36
|
+
想搁置几天再回来 → keep
|
|
37
|
+
完全放弃这个 change → discard
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
详细决策矩阵 + 组织规范建议:见 [`references/delivery-modes.md`](references/delivery-modes.md)。
|
|
41
|
+
|
|
42
|
+
## Mode: `pr` (默认)
|
|
43
|
+
|
|
44
|
+
### 构造 PR/MR 描述
|
|
45
|
+
|
|
46
|
+
自动拼装:
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
# [<slug>] <change.title>
|
|
50
|
+
|
|
51
|
+
## 变更概要
|
|
52
|
+
<requirement.md#背景 + change.summary>
|
|
53
|
+
|
|
54
|
+
## 范围
|
|
55
|
+
- F-01, F-02, ... (from requirement.md)
|
|
56
|
+
|
|
57
|
+
## 提测自测
|
|
58
|
+
<verbatim reports/test-report.md#self-test 的验收 / 自测区块>
|
|
59
|
+
|
|
60
|
+
## 关联文档
|
|
61
|
+
- [proposal](devflow/changes/<slug>/proposal.md)
|
|
62
|
+
- [requirement](devflow/changes/<slug>/requirement.md)
|
|
63
|
+
- [design](devflow/changes/<slug>/design.md)
|
|
64
|
+
- [plan](devflow/changes/<slug>/plan.md)
|
|
65
|
+
- [review](devflow/changes/<slug>/review.md)
|
|
66
|
+
- [verify](devflow/changes/<slug>/verify.md)
|
|
67
|
+
|
|
68
|
+
## 回滚方案
|
|
69
|
+
<design.md#rollback>
|
|
70
|
+
|
|
71
|
+
## reviewer 提示(手动追加)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
构造规则、描述风格、提交给 reviewer 的视角转换:见 [`references/pr-description.md`](references/pr-description.md)。
|
|
75
|
+
|
|
76
|
+
### 提交到哪
|
|
77
|
+
|
|
78
|
+
- 若配了 `vcs.<provider>`(`vcs.gh`、`vcs.gitlab`、`vcs.bridge`) → 用 provider 调 API 提
|
|
79
|
+
- 否则尝试 `gh` CLI(GitHub)
|
|
80
|
+
- 否则 print 出 PR body,让用户手动粘贴
|
|
81
|
+
|
|
82
|
+
### 常用 flags
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
--reviewers=@alice,@bob 指定 reviewer(视 provider 支持)
|
|
86
|
+
--labels=bugfix,l2 加 label
|
|
87
|
+
--target=develop 目标分支(默认由 devflow init 自动检测,master / main 均兼容)
|
|
88
|
+
--draft Draft PR / Work-in-progress MR
|
|
89
|
+
--notify 用 notify provider 发通知(SMTP 邮件 / IM)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Mode: `merge`
|
|
93
|
+
|
|
94
|
+
本地直接合并到目标分支(默认用 `devflow init` 检测到的默认分支,`master` 或 `main`)。
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
devflow deliver --mode=merge # 默认分支(自动检测)
|
|
98
|
+
devflow deliver --mode=merge --target=master # 显式指定 master
|
|
99
|
+
devflow deliver --mode=merge --target=main # 显式指定 main
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
执行(假设默认分支为 master):
|
|
103
|
+
|
|
104
|
+
1. `git checkout master`
|
|
105
|
+
2. `git merge --no-ff <feature-branch>` (或 rebase,看项目配置)
|
|
106
|
+
3. 不 push(用户自己决定)
|
|
107
|
+
4. state.delivery.mode = "merge",记录 merge commit sha
|
|
108
|
+
|
|
109
|
+
**典型场景**:
|
|
110
|
+
|
|
111
|
+
- 个人 / 小团队项目,没 CI 门禁
|
|
112
|
+
- hotfix 紧急修复(但要立刻跟 archive)
|
|
113
|
+
- 文档 / 配置微改
|
|
114
|
+
|
|
115
|
+
**不推荐场景**:
|
|
116
|
+
|
|
117
|
+
- 正常 feature(应走 PR 让他人 review)
|
|
118
|
+
- 团队项目(绕过 review 流程)
|
|
119
|
+
- 需要 CI gating 的项目
|
|
120
|
+
|
|
121
|
+
## Mode: `keep`
|
|
122
|
+
|
|
123
|
+
不提、不合、不丢,就地搁置。
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
devflow deliver --mode=keep --reason="等上游依赖合完再走"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
- state.delivery.mode = "keep"
|
|
130
|
+
- state.phase 保持 deliver
|
|
131
|
+
- `devflow status` 列为 "pending delivery",到时再 `devflow deliver --mode=pr` 继续
|
|
132
|
+
|
|
133
|
+
**典型场景**:
|
|
134
|
+
|
|
135
|
+
- 等上游 change 合并
|
|
136
|
+
- 等用户 / PM 确认方案
|
|
137
|
+
- 临时搁置(最多 1-2 周,否则考虑 discard)
|
|
138
|
+
|
|
139
|
+
## Mode: `discard`
|
|
140
|
+
|
|
141
|
+
彻底放弃 change,清理痕迹。
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
devflow deliver --mode=discard --reason="需求已取消"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
执行**前必须二次确认**,交互式:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
[CONFIRM] This will permanently delete devflow/changes/<slug>/. Type the slug to confirm:
|
|
151
|
+
> <slug>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
清理:
|
|
155
|
+
|
|
156
|
+
- 移除 `devflow/changes/<slug>/`(可选 `--keep-archive` 归档到 `devflow/archive/discarded/<slug>/`)
|
|
157
|
+
- 删本地分支 `devflow/<slug>/*`(可选 `--keep-branches`)
|
|
158
|
+
- 清 worktree
|
|
159
|
+
- state 整体删除
|
|
160
|
+
|
|
161
|
+
**默认行为**:discarded change 归档到 `devflow/archive/discarded/<slug>/` + 留 `DISCARD.md`(reason + timestamp + who),**不是**物理删除。要彻底删用 `--purge`。
|
|
162
|
+
|
|
163
|
+
**典型场景**:
|
|
164
|
+
|
|
165
|
+
- 需求被取消(PM 撤方案)
|
|
166
|
+
- 走不通的 spike(保留 knowledge 里即可,不走 deliver)
|
|
167
|
+
- 方案错误,重做(重做应开新 slug,不改旧 slug)
|
|
168
|
+
|
|
169
|
+
## Notify(可选)
|
|
170
|
+
|
|
171
|
+
配了 `notify.smtp` / `notify.im` provider 后:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
devflow deliver --mode=pr --notify
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
发邮件 / IM 通知,内容默认是:变更概要 + 库表变更 + 测试重点 + 自测汇总。库表变更从 `design.md` 的 DDL / 数据层章节和根目录 `ddl.sql` 提取,正文里要列出新建表、新增字段、修改字段、删除字段。SMTP 收件人优先使用 `--to/--cc`;未传时读取 `notify.smtp` provider 的 `config.defaults.to` / `config.defaults.cc`。这些默认收件人可在 `devflow provider setup` 里配置,发送前必须预览 To / Cc 并确认。
|
|
178
|
+
|
|
179
|
+
邮件正文不要写本地 markdown 引用链接。`reports/submit.md` 作为正文和本地留档;默认只附一份汇总后的 `reports/test-report.md`,其中要合并 unit / integration / e2e / joint / remote / smoke / self-test / deploy 结果,并把联调测试按"环境信息、执行结果、用例执行详情、失败详情"整理出来。测试同学需要技术方案和任务拆解时,显式加 `--attach-design-plan` 只附 `design.md` / `plan.md`;确实需要全部原始材料时,才显式加 `--attach-docs` / `--attach-reports` / `--attach=<path>`。
|
|
180
|
+
|
|
181
|
+
发送结果必须区分"外部 SMTP 接受"和"本机 MTA 入队"。本机 `sendmail` / `postfix` / `localhost:25` 接受消息时,只能说 queued by local SMTP/MTA,不能说真实送达;需要提示检查 mail queue / provider 日志。
|
|
182
|
+
|
|
183
|
+
### 极简模式(L0):测试邮件
|
|
184
|
+
|
|
185
|
+
极简模式下 deliver 完成后 **必须** 发测试结果邮件(取代 PR review 通知,因为 L0 通常直接 merge):
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
devflow deliver --mode=pr --notify=test-report
|
|
189
|
+
# 或极简模式自动触发(state.mode=micro 时 deliver 默认追加 --notify=test-report)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
邮件内容自动从 `reports/submit.md` 和 `reports/test-report.md` 提取:
|
|
193
|
+
|
|
194
|
+
- 测试总数 / 通过数 / 失败数
|
|
195
|
+
- 覆盖率(如有)
|
|
196
|
+
- 失败用例明细(如有)
|
|
197
|
+
- code-review 结论摘要(来自 `code-review-report.md`)
|
|
198
|
+
|
|
199
|
+
> **必须配 notify provider 才能发**。若未配,deliver 仍正常完成,但会在输出中打 WARNING:
|
|
200
|
+
> ```
|
|
201
|
+
> ⚠ --notify=test-report: no notify provider configured. Skip sending.
|
|
202
|
+
> 配置方法: 参考 ~/.devflow/providers.example.json 复制 notify.smtp 到
|
|
203
|
+
> ~/.devflow/providers.json,或执行 devflow provider setup → 选 notify.smtp
|
|
204
|
+
> ```
|
|
205
|
+
|
|
206
|
+
模板、抄送规则、订阅机制:见 [`references/notify.md`](references/notify.md)。
|
|
207
|
+
|
|
208
|
+
## 回滚方案(必写)
|
|
209
|
+
|
|
210
|
+
PR 描述里必须有 "回滚方案" 段,源自 design.md。如果 design.md 没有,deliver 会提示补写(回退 tech-spec),**不接受"一句话 rollback: git revert"**。
|
|
211
|
+
|
|
212
|
+
rollback 必须含:
|
|
213
|
+
|
|
214
|
+
- 触发条件(什么指标/现象触发回滚)
|
|
215
|
+
- 步骤(分几步)
|
|
216
|
+
- 影响(数据 / 下游 / 用户)
|
|
217
|
+
- 验证(回滚后如何确认 OK)
|
|
218
|
+
|
|
219
|
+
详见 [`../tech-spec/references/rollout-and-rollback.md`](../tech-spec/references/rollout-and-rollback.md)。
|
|
220
|
+
|
|
221
|
+
## 凭据安全自动扫描
|
|
222
|
+
|
|
223
|
+
`devflow deliver` 内部会:
|
|
224
|
+
|
|
225
|
+
1. 扫 reports/ 下所有 md 是否含 token / secret 模式(AKIA*, ghp_*, JWT-like)
|
|
226
|
+
2. 扫 PR body 是否含 token
|
|
227
|
+
3. 扫 git diff 是否含 key 文件(`.pem`, `.key`, `.env`)
|
|
228
|
+
|
|
229
|
+
任一命中 → 拒绝提交,提示修。审计绕过需 `--allow-secrets`(极不推荐)。
|
|
230
|
+
|
|
231
|
+
## 完成状态协议
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
---STATUS---
|
|
235
|
+
result: DONE | BLOCKED | NEEDS_INPUT
|
|
236
|
+
deliveryMode: pr | merge | keep | discard
|
|
237
|
+
prUrl: https://gitlab.example.com/group/repo/-/merge_requests/123
|
|
238
|
+
mergeSha: abc1234 (merge mode)
|
|
239
|
+
discardedTo: devflow/archive/discarded/<slug>/ (discard mode)
|
|
240
|
+
notified:
|
|
241
|
+
- email: ["@team-a@example.com"]
|
|
242
|
+
- im: "#coupon-dev"
|
|
243
|
+
testReportNotified: true | false | skipped # 极简模式(L0)时额外字段
|
|
244
|
+
nextAction: after MR merged / change live, run devflow archive
|
|
245
|
+
knowledgeReminder: archive will merge specs and run knowledge deposit / sync / MR when configured
|
|
246
|
+
---END_STATUS---
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
> **极简模式(L0)**:`nextAction` 为空(不进 archive);`testReportNotified` 字段必须存在。
|
|
250
|
+
> **非 L0 必须提醒知识沉淀**:deliver 完成时不能只说“交付完成”。必须明确告诉用户:合并或上线后运行 `devflow archive`,该步骤会把 delta 合并到 specs,并从 workspace/change 产物自动执行知识沉淀;如果配置了 `kb.git` / `kb.weknora`,还会继续走 KB MR、push 或 sync。
|
|
251
|
+
|
|
252
|
+
## 反模式
|
|
253
|
+
|
|
254
|
+
- **跳过 verify 硬闸**直接 deliver → 生产 bug 的温床
|
|
255
|
+
- **PR body 拷 verify 表**:verify 是 dashboard,PR 要自测证据
|
|
256
|
+
- **rollback 写一句"git revert"**:信息量零
|
|
257
|
+
- **把 self-test 截屏一张图算完**:reviewer 不可能看清
|
|
258
|
+
- **discard 直接 `rm -rf`**:必须走 --mode=discard,留 DISCARD.md
|
|
259
|
+
- **merge mode 走正式 feature**:绕过 review,不符合流程
|
|
260
|
+
- **keep 超 2 周不动**:要么 discard,要么继续,不能无限挂
|
|
261
|
+
- **deliver 后立刻 archive**:必须等 merge / 上线后再 archive(否则 spec 与生产不一致)
|
|
262
|
+
- **多 change 同时 merge/pr 没协调**:下游 conflict 风暴;orchestrator 应协调
|
|
263
|
+
- **PR body 贴 token**:已有自动扫描,但别依赖它,主动检查
|
|
264
|
+
- **notify 一次全公司 cc**:只发利益相关方
|
|
265
|
+
|
|
266
|
+
## 参考
|
|
267
|
+
|
|
268
|
+
- [`references/delivery-modes.md`](references/delivery-modes.md) — 4 种 mode 的详细决策树、组织规范建议、边界 case
|
|
269
|
+
- [`references/pr-description.md`](references/pr-description.md) — PR/MR 描述构造规则、reviewer 视角、范例、反模式
|
|
270
|
+
- [`references/notify.md`](references/notify.md) — SMTP / IM notify 模板、抄送策略、订阅机制
|
|
271
|
+
- [`../tech-spec/references/rollout-and-rollback.md`](../tech-spec/references/rollout-and-rollback.md) — 回滚方案模板(与 tech-spec 共享)
|