dev-playbooks-cn 1.0.0
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/LICENSE +21 -0
- package/README.md +466 -0
- package/bin/devbooks.js +987 -0
- package/package.json +43 -0
- package/skills/Skills/344/275/277/347/224/250/350/257/264/346/230/216.md +446 -0
- package/skills/Skill/345/274/200/345/217/221/346/214/207/345/215/227.md +248 -0
- package/skills/_shared/context-detection-template.md +315 -0
- package/skills/_shared/mcp-enhancement-template.md +144 -0
- package/skills/_shared/references//351/200/232/347/224/250/345/256/210/351/227/250/345/215/217/350/256/256.md +114 -0
- package/skills/_template/config-discovery-template.md +126 -0
- package/skills/devbooks-brownfield-bootstrap/SKILL.md +167 -0
- package/skills/devbooks-brownfield-bootstrap/references//344/273/243/347/240/201/345/257/274/350/210/252/347/255/226/347/225/245.md +203 -0
- package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226.md +96 -0
- package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226/346/217/220/347/244/272/350/257/215.md +115 -0
- package/skills/devbooks-brownfield-bootstrap/references//346/234/257/350/257/255/350/241/250/346/250/241/346/235/277.md +42 -0
- package/skills/devbooks-brownfield-bootstrap/scripts/cod-update.sh +357 -0
- package/skills/devbooks-brownfield-bootstrap/templates/project-profile-template.md +172 -0
- package/skills/devbooks-c4-map/SKILL.md +151 -0
- package/skills/devbooks-c4-map/references/C4/346/236/266/346/236/204/345/234/260/345/233/276/346/217/220/347/244/272/350/257/215.md +33 -0
- package/skills/devbooks-c4-map/references//345/210/206/345/261/202/347/272/246/346/235/237/346/243/200/346/237/245/346/270/205/345/215/225.md +185 -0
- package/skills/devbooks-code-review/SKILL.md +175 -0
- package/skills/devbooks-code-review/references/PR/346/250/241/346/235/277/344/270/216/346/214/207/345/215/227.md +321 -0
- package/skills/devbooks-code-review/references//344/273/243/347/240/201/350/257/204/345/256/241/346/217/220/347/244/272/350/257/215.md +100 -0
- package/skills/devbooks-code-review/references//345/235/217/345/221/263/351/201/223/351/200/237/346/237/245/350/241/250.md +495 -0
- package/skills/devbooks-code-review/references//350/265/204/346/272/220/347/256/241/347/220/206/345/256/241/346/237/245/346/270/205/345/215/225.md +311 -0
- package/skills/devbooks-coder/SKILL.md +219 -0
- package/skills/devbooks-coder/references//344/273/243/347/240/201/345/256/236/347/216/260/346/217/220/347/244/272/350/257/215.md +70 -0
- package/skills/devbooks-coder/references//344/275/216/351/243/216/351/231/251/346/224/271/345/212/250/346/212/200/346/234/257.md +275 -0
- package/skills/devbooks-coder/references//346/227/245/345/277/227/350/247/204/350/214/203.md +329 -0
- package/skills/devbooks-coder/references//347/274/226/347/240/201/351/243/216/346/240/274/347/273/206/345/210/231.md +351 -0
- package/skills/devbooks-coder/references//351/224/231/350/257/257/347/240/201/350/247/204/350/214/203.md +463 -0
- package/skills/devbooks-delivery-workflow/SKILL.md +217 -0
- package/skills/devbooks-delivery-workflow/references//344/272/244/344/273/230/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md +256 -0
- package/skills/devbooks-delivery-workflow/references//345/216/237/345/236/213-/347/224/237/344/272/247/345/217/214/350/275/250/346/250/241/345/274/217.md +168 -0
- package/skills/devbooks-delivery-workflow/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +133 -0
- package/skills/devbooks-delivery-workflow/scripts/ac-trace-check.sh +330 -0
- package/skills/devbooks-delivery-workflow/scripts/audit-scope.sh +262 -0
- package/skills/devbooks-delivery-workflow/scripts/change-check.sh +1040 -0
- package/skills/devbooks-delivery-workflow/scripts/change-codemod-scaffold.sh +135 -0
- package/skills/devbooks-delivery-workflow/scripts/change-evidence.sh +152 -0
- package/skills/devbooks-delivery-workflow/scripts/change-scaffold.sh +442 -0
- package/skills/devbooks-delivery-workflow/scripts/change-spec-delta-scaffold.sh +136 -0
- package/skills/devbooks-delivery-workflow/scripts/constitution-check.sh +237 -0
- package/skills/devbooks-delivery-workflow/scripts/env-match-check.sh +128 -0
- package/skills/devbooks-delivery-workflow/scripts/fitness-check.sh +387 -0
- package/skills/devbooks-delivery-workflow/scripts/guardrail-check.sh +519 -0
- package/skills/devbooks-delivery-workflow/scripts/handoff-check.sh +141 -0
- package/skills/devbooks-delivery-workflow/scripts/hygiene-check.sh +340 -0
- package/skills/devbooks-delivery-workflow/scripts/migrate-from-openspec.sh +385 -0
- package/skills/devbooks-delivery-workflow/scripts/migrate-to-v2-gates.sh +202 -0
- package/skills/devbooks-delivery-workflow/scripts/progress-dashboard.sh +319 -0
- package/skills/devbooks-delivery-workflow/scripts/prototype-promote.sh +341 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-preview.sh +203 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-promote.sh +118 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-rollback.sh +124 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-stage.sh +117 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-all.sh +78 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-npm-package.sh +123 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-openspec-free.sh +81 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-slash-commands.sh +146 -0
- package/skills/devbooks-delivery-workflow/templates/handoff.md +50 -0
- package/skills/devbooks-design-backport/SKILL.md +73 -0
- package/skills/devbooks-design-backport/references//345/233/236/345/206/231/350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +196 -0
- package/skills/devbooks-design-doc/SKILL.md +121 -0
- package/skills/devbooks-design-doc/references//345/276/256/346/234/215/345/212/241/350/256/276/350/256/241/346/270/205/345/215/225.md +149 -0
- package/skills/devbooks-design-doc/references//350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +189 -0
- package/skills/devbooks-design-doc/references//351/232/220/347/247/201/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +240 -0
- package/skills/devbooks-entropy-monitor/SKILL.md +188 -0
- package/skills/devbooks-entropy-monitor/references//347/206/265/345/272/246/351/207/217/346/226/271/346/263/225/350/256/272.md +223 -0
- package/skills/devbooks-entropy-monitor/scripts/entropy-measure.sh +449 -0
- package/skills/devbooks-entropy-monitor/scripts/entropy-report.sh +303 -0
- package/skills/devbooks-entropy-monitor/templates/thresholds.json +99 -0
- package/skills/devbooks-federation/SKILL.md +264 -0
- package/skills/devbooks-federation/scripts/federation-check.sh +144 -0
- package/skills/devbooks-federation/templates/federation.yaml +89 -0
- package/skills/devbooks-impact-analysis/SKILL.md +135 -0
- package/skills/devbooks-impact-analysis/references//345/275/261/345/223/215/345/210/206/346/236/220/346/217/220/347/244/272/350/257/215.md +82 -0
- package/skills/devbooks-impact-analysis/scripts/graph-cache.sh +214 -0
- package/skills/devbooks-implementation-plan/SKILL.md +83 -0
- package/skills/devbooks-implementation-plan/references//347/274/226/347/240/201/350/256/241/345/210/222/346/217/220/347/244/272/350/257/215.md +99 -0
- package/skills/devbooks-index-bootstrap/SKILL.md +240 -0
- package/skills/devbooks-proposal-author/SKILL.md +83 -0
- package/skills/devbooks-proposal-author/references//346/217/220/346/241/210/346/222/260/345/206/231/346/217/220/347/244/272/350/257/215.md +66 -0
- package/skills/devbooks-proposal-challenger/SKILL.md +86 -0
- package/skills/devbooks-proposal-challenger/references//344/274/246/347/220/206/344/270/216/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +176 -0
- package/skills/devbooks-proposal-challenger/references//346/217/220/346/241/210/350/264/250/347/226/221/346/217/220/347/244/272/350/257/215.md +57 -0
- package/skills/devbooks-proposal-debate-workflow/SKILL.md +78 -0
- package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/345/267/245/344/275/234/346/265/201.md +24 -0
- package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/346/250/241/346/235/277.md +35 -0
- package/skills/devbooks-proposal-debate-workflow/scripts/proposal-debate-check.sh +102 -0
- package/skills/devbooks-proposal-judge/SKILL.md +78 -0
- package/skills/devbooks-proposal-judge/references//346/217/220/346/241/210/350/243/201/345/206/263/346/217/220/347/244/272/350/257/215.md +37 -0
- package/skills/devbooks-router/SKILL.md +346 -0
- package/skills/devbooks-spec-contract/SKILL.md +191 -0
- package/skills/devbooks-spec-contract/references/API/350/256/276/350/256/241/346/214/207/345/215/227.md +349 -0
- package/skills/devbooks-spec-contract/references//345/245/221/347/272/246/344/270/216/346/225/260/346/215/256/345/256/232/344/271/211/346/217/220/347/244/272/350/257/215.md +85 -0
- package/skills/devbooks-spec-contract/references//350/247/204/346/240/274/345/217/230/346/233/264/346/217/220/347/244/272/350/257/215.md +63 -0
- package/skills/devbooks-spec-contract/references//351/232/220/345/274/217/345/217/230/346/233/264/346/243/200/346/265/213/346/217/220/347/244/272/350/257/215.md +183 -0
- package/skills/devbooks-spec-contract/scripts/implicit-change-detect.sh +378 -0
- package/skills/devbooks-spec-gardener/SKILL.md +72 -0
- package/skills/devbooks-spec-gardener/references//350/247/204/346/240/274/345/233/255/344/270/201/346/217/220/347/244/272/350/257/215.md +41 -0
- package/skills/devbooks-test-owner/SKILL.md +172 -0
- package/skills/devbooks-test-owner/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +228 -0
- package/skills/devbooks-test-owner/references//345/274/202/346/255/245/347/263/273/347/273/237/346/265/213/350/257/225/347/255/226/347/225/245.md +316 -0
- package/skills/devbooks-test-owner/references//346/265/213/350/257/225/344/273/243/347/240/201/346/217/220/347/244/272/350/257/215.md +208 -0
- package/skills/devbooks-test-owner/references//346/265/213/350/257/225/345/210/206/345/261/202/347/255/226/347/225/245.md +281 -0
- package/skills/devbooks-test-owner/references//346/265/213/350/257/225/351/251/261/345/212/250.md +394 -0
- package/skills/devbooks-test-owner/references//350/247/243/344/276/235/350/265/226/346/212/200/346/234/257/351/200/237/346/237/245/350/241/250.md +432 -0
- package/skills/devbooks-test-reviewer/SKILL.md +189 -0
- package/templates/.devbooks/config.yaml +88 -0
- package/templates/claude-commands/devbooks/apply.md +38 -0
- package/templates/claude-commands/devbooks/archive.md +33 -0
- package/templates/claude-commands/devbooks/backport.md +19 -0
- package/templates/claude-commands/devbooks/bootstrap.md +19 -0
- package/templates/claude-commands/devbooks/c4.md +19 -0
- package/templates/claude-commands/devbooks/challenger.md +19 -0
- package/templates/claude-commands/devbooks/code.md +19 -0
- package/templates/claude-commands/devbooks/debate.md +19 -0
- package/templates/claude-commands/devbooks/delivery.md +19 -0
- package/templates/claude-commands/devbooks/design.md +19 -0
- package/templates/claude-commands/devbooks/entropy.md +19 -0
- package/templates/claude-commands/devbooks/federation.md +19 -0
- package/templates/claude-commands/devbooks/gardener.md +19 -0
- package/templates/claude-commands/devbooks/impact.md +19 -0
- package/templates/claude-commands/devbooks/index.md +19 -0
- package/templates/claude-commands/devbooks/judge.md +19 -0
- package/templates/claude-commands/devbooks/plan.md +19 -0
- package/templates/claude-commands/devbooks/proposal.md +19 -0
- package/templates/claude-commands/devbooks/quick.md +42 -0
- package/templates/claude-commands/devbooks/review.md +19 -0
- package/templates/claude-commands/devbooks/router.md +19 -0
- package/templates/claude-commands/devbooks/spec.md +19 -0
- package/templates/claude-commands/devbooks/test-review.md +19 -0
- package/templates/claude-commands/devbooks/test.md +19 -0
- package/templates/dev-playbooks/README.md +458 -0
- package/templates/dev-playbooks/changes/.gitkeep +1 -0
- package/templates/dev-playbooks/constitution.md +116 -0
- package/templates/dev-playbooks/project.md +96 -0
- package/templates/dev-playbooks/scripts/.gitkeep +1 -0
- package/templates/dev-playbooks/specs/_meta/anti-patterns/.gitkeep +2 -0
- package/templates/dev-playbooks/specs/_meta/glossary.md +47 -0
- package/templates/dev-playbooks/specs/_meta/project-profile.md +79 -0
- package/templates/dev-playbooks/specs/architecture/fitness-rules.md +95 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# 交付验收工作流(Design → Plan → Trace → Verify)
|
|
2
|
+
|
|
3
|
+
> 本文件为“开发作战手册”的流程骨架,面向单人/AI 代理式开发。
|
|
4
|
+
|
|
5
|
+
目录约定(协议无关):
|
|
6
|
+
- 当前真理源:`<truth-root>/`
|
|
7
|
+
- 单次变更包:`<change-root>/<change-id>/`(proposal/design/tasks/specs delta/verification/evidence)
|
|
8
|
+
- 归档:把 delta 合并进 `<truth-root>/`,并把变更包移入归档区(如果你的上下文协议提供 archive 命令,优先用命令)
|
|
9
|
+
|
|
10
|
+
> 目标:让“完成交付”具备可执行、可追溯、可争议处理的客观判据,避免出现“测试全绿但编码计划仍大量未完成”的失真状态。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 0) 角色隔离与测试完整性(强制)
|
|
15
|
+
|
|
16
|
+
- Test Owner 与 Coder 必须独立对话/独立实例;允许并行但不得共享上下文。
|
|
17
|
+
- Test Owner 只基于设计/规格产出 tests/verification,并先跑出 **Red** 基线;失败证据记录到 `<change-root>/<id>/evidence/`(推荐用 `change-evidence.sh <id> -- <test-command>` 采集落盘)。
|
|
18
|
+
- Coder 只按 tasks 实现并跑闸门;**禁止修改 tests/**。如需调整测试,必须交还 Test Owner 决策与改动。
|
|
19
|
+
|
|
20
|
+
## 0.1) 结构质量闸门(强制)
|
|
21
|
+
|
|
22
|
+
- 若出现“代理指标驱动”的要求(行数/文件数/机械拆分/命名格式),必须评估对内聚/耦合/可测试性的影响。
|
|
23
|
+
- 触发风险信号时必须“停线”:记录为决策问题并回到 Design/Proposal 处理,不得直接执行。
|
|
24
|
+
- 质量闸门优先级:复杂度、耦合度、依赖方向、变更频率、测试质量 > 代理指标。
|
|
25
|
+
|
|
26
|
+
## 1) `tests/` 里可以放什么?
|
|
27
|
+
|
|
28
|
+
`tests/` 的本质是**可执行的验收锚点(Executable Acceptance Anchors)**:任何能被机器稳定判定 Pass/Fail 的东西,都可以(也应该)进入自动化链路。
|
|
29
|
+
|
|
30
|
+
### 1.1 推荐放在 `tests/` 的内容(强约束/可回归)
|
|
31
|
+
|
|
32
|
+
1. **自动化测试(Behavior / Contract)**
|
|
33
|
+
- 单元测试(unit):纯逻辑、无 IO
|
|
34
|
+
- 集成测试(integration):多组件协作,但尽量使用 fake/mocked 依赖
|
|
35
|
+
- 端到端测试(e2e):最小关键链路(可离线)
|
|
36
|
+
- 契约测试(contract):schema、事件信封、API 输入输出形状、向后兼容等
|
|
37
|
+
2. **架构适配函数(Architecture Fitness Functions)**
|
|
38
|
+
- 依赖方向、分层边界、禁止循环依赖、模块职责边界等(本质上也是“测试”,只是验证结构而非行为)
|
|
39
|
+
|
|
40
|
+
### 1.2 不推荐直接放在 `tests/` 的内容(但可以被自动化执行)
|
|
41
|
+
|
|
42
|
+
3. **静态检查(Static Analysis / SAST / Type Check)**
|
|
43
|
+
- 这类通常以 `ruff/mypy/eslint/tsc/bandit/semgrep` 等“命令”形态存在,更适合在 CI 的独立步骤或 `scripts/` 中运行。
|
|
44
|
+
- 也可以“包一层”让它在 `pytest` 中失败(例如跑命令并断言退出码),但要谨慎:会拖慢测试、让输出不如原生工具清晰、并可能与 IDE/CI 并行策略冲突。
|
|
45
|
+
|
|
46
|
+
### 1.3 不应放在 `tests/` 的内容(不是机器可判定)
|
|
47
|
+
|
|
48
|
+
4. **明确的人工验收步骤(Manual Acceptance)**
|
|
49
|
+
- 例如 UI 编排/可用性、交互路径、视觉/文案一致性、产品体验等。
|
|
50
|
+
- 这些应以**清单(checklist)/验收脚本**放在“本次变更包”的验证文档中(例如 `<change-root>/<id>/verification.md`),并在追溯矩阵里作为“人工锚点”记录责任人和结论;仅当它属于对外公开的用户/运维文档时,才同步到 `docs/`。
|
|
51
|
+
|
|
52
|
+
结论:**自动化测试 + 架构适配函数**天然适合放进 `tests/`;**静态检查**更推荐独立跑;**人工验收**不应放在 `tests/`。
|
|
53
|
+
|
|
54
|
+
对外 docs vs 开发使用说明(你的偏好):
|
|
55
|
+
- `docs/` 建议只放“项目对外说明/用户可见说明”
|
|
56
|
+
- “开发使用说明/AI 工作流/验收追溯/人工验收清单”优先放在变更包里(例如 `<change-root>/<id>/verification.md`),避免污染对外文档
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 2) 验收方式的 MECE 划分(所有可用于“交付验收”的方式)
|
|
61
|
+
|
|
62
|
+
用“谁来当裁判(Oracle)”作为 MECE 维度,可把所有验收方式完整覆盖且互斥:
|
|
63
|
+
|
|
64
|
+
### A. 机器裁判(Automated / Deterministic)
|
|
65
|
+
|
|
66
|
+
> 判据由机器给出,稳定可重复,最终输出为 Pass/Fail。
|
|
67
|
+
|
|
68
|
+
- 动态测试:unit/contract/integration/e2e/snapshot/golden-master/property-based
|
|
69
|
+
- 架构适配函数:依赖方向、边界、分层、禁止循环、禁用包引用等
|
|
70
|
+
- 静态检查:lint、type check、SAST、依赖/许可证/secret 扫描、schema 校验、API breaking change 检测
|
|
71
|
+
- 构建与发布校验:build、打包、镜像构建、迁移脚本校验、配置/模板渲染校验
|
|
72
|
+
- 自动化运行时校验:smoke test、健康检查、最小回放、离线回归包 determinism(前提是环境可控)
|
|
73
|
+
|
|
74
|
+
### B. 人工裁判 + 工具证据(Hybrid / Evidence-Assisted)
|
|
75
|
+
|
|
76
|
+
> 工具产出客观证据,但是否通过仍需要人判断/签字。
|
|
77
|
+
|
|
78
|
+
- 性能/成本基准:benchmark 结果、成本报表、容量评估(通常需要阈值讨论与取舍)
|
|
79
|
+
- 安全评审:扫描结果的 triage、威胁建模复核(不是“0 告警=通过”这么简单)
|
|
80
|
+
- 可观测性验收:仪表盘/告警规则检查、SLO 报表评审(证据客观,但是否达标需解释上下文)
|
|
81
|
+
- UX 视觉/交互证据:截图对比、录像、埋点漏斗(证据在,是否满意仍是主观决策)
|
|
82
|
+
|
|
83
|
+
### C. 纯人工裁判(Manual / Judgment-Based)
|
|
84
|
+
|
|
85
|
+
> 主要依赖人类判断,难以完全形式化为机器判据。
|
|
86
|
+
|
|
87
|
+
- UI/交互验收、内容与信息架构评审、可用性走查
|
|
88
|
+
- 产品/业务验收:需求理解、边界条件、例外处理是否“符合预期”
|
|
89
|
+
- 合规/流程验收:权限、审计、合规文本、法务条款、发布流程签核
|
|
90
|
+
|
|
91
|
+
你原来的“四类”:自动化测试 / 架构适配函数 / 静态检查 / 人工验收步骤,是对 A 与 C 的一个实用切分;严格 MECE 的“裁判视角”会把它扩展成 A/B/C 三类,覆盖面更完整,也更不易争议。
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 3) 测试应该基于设计文档还是编码计划?
|
|
96
|
+
|
|
97
|
+
### 3.1 默认原则(推荐)
|
|
98
|
+
|
|
99
|
+
- **对外可感知的需求/约束**:测试应来自**设计文档(Design Doc)**,因为设计文档错误率更低、且是“what”的权威来源。
|
|
100
|
+
- **编码计划(Implementation Plan)**负责“how”:拆任务、排顺序、选方案、选模块、落地步骤。它不应成为对外行为的唯一裁判。
|
|
101
|
+
|
|
102
|
+
## 4) 适用于大型项目的 DoD(Definition of Done,MECE)
|
|
103
|
+
|
|
104
|
+
每次变更必须至少声明覆盖到哪些闸门;缺失项必须写原因与补救计划:
|
|
105
|
+
|
|
106
|
+
- A. 行为(Behavior):unit/integration/e2e(按项目类型取最小集)
|
|
107
|
+
- B. 契约(Contract):OpenAPI/Proto/Schema/事件 envelope + contract tests
|
|
108
|
+
- C. 结构(Structure):架构适配函数(依赖方向/分层/禁止循环/模块边界)
|
|
109
|
+
- D. 静态与安全(Static/Security):lint/typecheck/build + SAST/secret scan
|
|
110
|
+
- E. 证据(Evidence,按需):截图/录像/报告(UI、性能、安全 triage)
|
|
111
|
+
|
|
112
|
+
## 5) “推翻旧设计/旧测试”如何优雅处理(当前真理 vs 历史)
|
|
113
|
+
|
|
114
|
+
- 权威定义:`<truth-root>/` 是“当前真理”;历史变更包是审计记录
|
|
115
|
+
- 新变更推翻旧行为:在新变更包中更新 specs 与 tests,并在 proposal 中标注 `Supersedes/Breaking`;不要回改历史归档来“统一口径”
|
|
116
|
+
|
|
117
|
+
### 3.2 什么时候可以用“编码计划生成测试”?
|
|
118
|
+
|
|
119
|
+
只有在以下条件同时满足时才建议:
|
|
120
|
+
|
|
121
|
+
- 该计划条目属于**纯工程实现约束**(例如“必须有幂等键”“必须有迁移脚本”“必须有架构边界约束”),且不会改变设计的对外语义;
|
|
122
|
+
- 或者你愿意把它升级为**规范**:把计划条目提炼成 ADR/设计补充,进入设计文档的“验收标准”,再写测试。
|
|
123
|
+
|
|
124
|
+
否则,“用编码计划写测试”容易导致:**计划写错 → 测试也跟着错 → 代码在错误的目标上自洽全绿(False Green)**。
|
|
125
|
+
|
|
126
|
+
结论:**设计文档是验收真理源(Golden Truth)**;编码计划可以驱动“工程约束类”测试,但要么升级进设计验收,要么明确标注为“工程内部验收”。
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 4) 追溯矩阵(Traceability Matrix):把“完成”变成可计算
|
|
131
|
+
|
|
132
|
+
追溯矩阵解决两个关键问题:
|
|
133
|
+
|
|
134
|
+
1. “这条计划到底怎么验收?”(每个计划项必须绑定一个验收锚点)
|
|
135
|
+
2. “测试全绿为什么还没做完?”(因为有计划项没锚点、或锚点是人工/混合未完成)
|
|
136
|
+
|
|
137
|
+
### 4.1 最小字段模板(可复制到任意版本/任意项目)
|
|
138
|
+
|
|
139
|
+
| Design AC ID | 设计验收点(原文/摘要) | Plan ID | 验收方式(A/B/C) | 验收锚点(测试ID/命令/Checklist) | 状态 | 备注 |
|
|
140
|
+
|---|---|---|---|---|---|---|
|
|
141
|
+
| AC-01 | … | MP1.3 | A | T0014-I-05 / `pytest ...` | DONE | … |
|
|
142
|
+
|
|
143
|
+
### 4.2 DoD(Definition of Done)
|
|
144
|
+
|
|
145
|
+
- **Plan ID 只有在其绑定的验收锚点为 PASS(或人工签核为通过)时,才允许标记 DONE。**
|
|
146
|
+
- 任何未绑定锚点的 Plan 项,状态只能是:`UNSCOPED / DEFERRED / TODO(缺锚点)`,不能被"测试全绿"自动宣告完成。
|
|
147
|
+
|
|
148
|
+
### 4.3 端到端正确性检查清单(End-to-End Correctness Checklist)
|
|
149
|
+
|
|
150
|
+
> 确保从需求 → 设计 → 测试 → 实现 → 归档的完整追溯链不断裂。
|
|
151
|
+
|
|
152
|
+
**阶段间传递检查(必须逐条验证)**:
|
|
153
|
+
|
|
154
|
+
| 检查点 | 验证问题 | 失败时行动 |
|
|
155
|
+
|--------|----------|------------|
|
|
156
|
+
| **proposal → design** | 设计是否覆盖所有提案目标?是否遗漏 Non-goals 边界? | 补充设计、回退到 proposal 修订 |
|
|
157
|
+
| **design → specs** | 对外行为/契约变化是否都有对应的 spec delta? | 补 spec delta |
|
|
158
|
+
| **design → tasks** | 任务是否覆盖所有 AC?是否有"无来源"的任务? | 补 AC 映射、或将任务升级进设计 |
|
|
159
|
+
| **tasks → tests** | 每个 AC 是否有对应的测试?测试是否基于设计而非实现? | 补测试、检查测试来源 |
|
|
160
|
+
| **tests → code** | 代码是否通过所有测试?是否有"改测试迁就代码"的行为? | 修复代码、恢复测试原貌 |
|
|
161
|
+
| **code → archive** | 归档前是否包含所有证据?specs 是否已合并到真理源? | 补证据、运行 spec gardener |
|
|
162
|
+
|
|
163
|
+
**追溯完整性检查**:
|
|
164
|
+
|
|
165
|
+
- [ ] 每个 AC 都能追溯到:`AC-xxx → Requirement/Scenario → Test IDs → Evidence`
|
|
166
|
+
- [ ] 没有"孤儿测试"(测试存在但无对应 AC 或设计来源)
|
|
167
|
+
- [ ] 没有"孤儿任务"(任务存在但无对应设计来源)
|
|
168
|
+
- [ ] 没有"无证据的 DONE"(标记完成但无测试通过或人工签核证据)
|
|
169
|
+
|
|
170
|
+
**归档前最终检查**:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# 建议运行以下检查(如有脚本支持)
|
|
174
|
+
change-check.sh <change-id> --mode strict --project-root "$(pwd)" --change-root <change-root> --truth-root <truth-root>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
- [ ] 所有 A 类验收锚点(tests/静态检查/build)通过
|
|
178
|
+
- [ ] 所有 B/C 类验收锚点(人工/混合)已签核并有证据
|
|
179
|
+
- [ ] 追溯矩阵无 `TODO(缺锚点)` 状态
|
|
180
|
+
- [ ] `evidence/` 目录包含 Red 基线证据和 Green 通过证据
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 5) 标准流程(固化版)
|
|
185
|
+
|
|
186
|
+
### Step 0:确定本次交付范围(强制)
|
|
187
|
+
|
|
188
|
+
- 选择要交付的 Phase/里程碑(MVP/Beta/Prod)
|
|
189
|
+
- 明确非目标(Non-goals)
|
|
190
|
+
- 产物:设计文档中的范围声明 + 版本号
|
|
191
|
+
|
|
192
|
+
### Step 1:创建设计文档(Design Doc)
|
|
193
|
+
|
|
194
|
+
- 写清楚:目标、非目标、关键决策、验收标准(Acceptance Criteria)
|
|
195
|
+
- 把“对外语义/不可变约束(invariants)”写成可测试语言
|
|
196
|
+
|
|
197
|
+
### Step 2:创建编码计划(Implementation Plan)
|
|
198
|
+
|
|
199
|
+
- 任务分解为可执行的 Plan 项(例如 `MPx.y`)
|
|
200
|
+
- 每个 Plan 项必须声明:
|
|
201
|
+
- Deliverables(交付物)
|
|
202
|
+
- 影响范围(模块/文件)
|
|
203
|
+
- 验收方式(A/B/C)与候选验收锚点(测试ID/命令/Checklist)
|
|
204
|
+
|
|
205
|
+
### Step 3:建立追溯矩阵(Traceability Matrix)
|
|
206
|
+
|
|
207
|
+
- 将**设计验收点(AC)**逐条映射到:Plan 项 + 验收锚点
|
|
208
|
+
- 发现两类缺口立即处理:
|
|
209
|
+
1. **设计有验收点但无锚点** → 补测试/补静态检查/补 checklist
|
|
210
|
+
2. **计划有任务但无设计来源** → 选择:降级为 DEFERRED,或升级进设计(ADR)再验收
|
|
211
|
+
|
|
212
|
+
### Step 4:编写/更新验收锚点(Verification Anchors)
|
|
213
|
+
|
|
214
|
+
- 产出 A 类锚点(机器裁判):根据设计验收点补齐/更新 `tests/`、架构适配函数、静态检查/构建校验命令(不绑定具体实现细节)。
|
|
215
|
+
- 若是重构/迁移/存量系统:优先补 **Snapshot/Golden Master** 测试作为安全网。
|
|
216
|
+
- 产出 B/C 类锚点(非机器):将无法稳定自动化的验收项写入 checklist,并定义“证据要求”(截图/录像/看板链接/日志等)。
|
|
217
|
+
- 同源隔离:验收锚点只从设计/规格抽取,不参考编码计划(避免“按计划出题、按计划答题”的自证闭环)。
|
|
218
|
+
- 回填追溯矩阵:把每条设计验收点与 Plan 项对应的锚点 ID/路径补齐,确保后续能按锚点客观宣告 DONE。
|
|
219
|
+
|
|
220
|
+
### Step 5:实现(Implementation)
|
|
221
|
+
|
|
222
|
+
- 编码执行以**编码计划**为主线:按 Plan 项(如 `MPx.y`)阅读“交付物/影响范围/约束/实现要点”,完成具体实现。
|
|
223
|
+
- Coder 禁止修改 tests/;如测试不合理或需要更新,只能反馈给 Test Owner。
|
|
224
|
+
- 追溯矩阵作为“任务筛选 + 验收看板”:优先选择**已绑定验收锚点**的 Plan 项推进;任何“无锚点”的 Plan 项先补锚点/回写设计/延期(否则无法客观宣告 DONE)。
|
|
225
|
+
- 开发循环:按编码计划实现 → 运行该 Plan 项对应的 A 类锚点(tests/命令)→ 修复 → 直到锚点 PASS(再把 Plan 与矩阵状态同步更新)。
|
|
226
|
+
|
|
227
|
+
### Step 6:全量验收(Verification)
|
|
228
|
+
|
|
229
|
+
- 运行本次范围内所有 A 类锚点(全套 tests + 静态检查 + build 校验)
|
|
230
|
+
- 静态检查优先使用机器可读输出(json/xml),便于机械式修复与可追溯存档。
|
|
231
|
+
- 执行 B/C 类:按 checklist 逐条勾选并记录证据(截图/录像/报表/签字)
|
|
232
|
+
- 可读性/依赖/坏味道审查(Reviewer):使用 `devbooks-code-review` Skill 输出审查意见
|
|
233
|
+
|
|
234
|
+
### Step 7:关账与沉淀(Close-out)
|
|
235
|
+
|
|
236
|
+
- 更新追溯矩阵状态(DONE/BLOCKED/DEFERRED)
|
|
237
|
+
- 更新编码计划的进度表(只以锚点结果为准)
|
|
238
|
+
- 更新价值流与度量口径:把本次“价值信号/排队点/稳定性指标”的证据链接写回 `verification.md`(建议落到 `evidence/`)
|
|
239
|
+
- 若发现“计划错误/设计遗漏”:在下一版本修正 Design Doc / ADR,而不是靠口头约定
|
|
240
|
+
- 活文档修剪(Spec Gardening):
|
|
241
|
+
- 使用 `devbooks-spec-gardener` Skill 执行
|
|
242
|
+
- 去重合并:合并相似/重叠的 spec,避免追加式堆叠
|
|
243
|
+
- 目录整理:按业务能力整理到 `<truth-root>/<capability>/`
|
|
244
|
+
- 删除过时:被新功能替代的 spec 必须删除
|
|
245
|
+
- 可选自动检查:`guardrail-check.sh <change-id>`(脚本位于本 Skill 的 `scripts/guardrail-check.sh`)
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## 6) 目录落点示例(便于对照)
|
|
250
|
+
|
|
251
|
+
- 设计文档:`<change-root>/<change-id>/design.md`
|
|
252
|
+
- 编码计划:`<change-root>/<change-id>/tasks.md`
|
|
253
|
+
- 规格 delta:`<change-root>/<change-id>/specs/<capability>/spec.md`
|
|
254
|
+
- 验证与追溯:`<change-root>/<change-id>/verification.md`(包含测试计划、追溯矩阵、MANUAL-* 清单与证据要求)
|
|
255
|
+
- 可执行验收:`tests/`(包含 contract/unit/integration/e2e 与架构适配函数)
|
|
256
|
+
- 归档:把 delta 合并进 `<truth-root>/`,并归档变更包
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# 原型-生产双轨模式(Prototype-Production Dual Track)
|
|
2
|
+
|
|
3
|
+
> 来源:《人月神话》第11章"未雨绸缪" — "第一个开发的系统并不合用...为舍弃而计划,无论如何,你一定要这样做。"
|
|
4
|
+
|
|
5
|
+
## 核心理念
|
|
6
|
+
|
|
7
|
+
**原型轨道**用于快速验证技术可行性,产出"可抛弃的第一版"。
|
|
8
|
+
**生产轨道**用于交付高质量代码,以测试/闸门为完成判据。
|
|
9
|
+
|
|
10
|
+
两条轨道**物理隔离**,通过显式的"提升"流程衔接。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 何时使用原型轨道
|
|
15
|
+
|
|
16
|
+
| 场景 | 信号 | 建议 |
|
|
17
|
+
|------|------|------|
|
|
18
|
+
| 技术不确定 | "不知道这个库能不能用" / "不确定性能够不够" | ✅ 原型 |
|
|
19
|
+
| 第一次做 | "第一次做这类功能" / "预期会重写" | ✅ 原型 |
|
|
20
|
+
| 探索行为 | "需要观察 API 的实际返回值" | ✅ 原型 |
|
|
21
|
+
| 需求明确 | 设计已确定、AC 已定义 | ❌ 直接生产轨道 |
|
|
22
|
+
| 小修小补 | Bug 修复、配置调整 | ❌ 直接生产轨道 |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 双轨模式流程图
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
30
|
+
│ Proposal 阶段 │
|
|
31
|
+
│ proposal.md(共用) │
|
|
32
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
33
|
+
│
|
|
34
|
+
▼
|
|
35
|
+
┌───────────────┴───────────────┐
|
|
36
|
+
│ │
|
|
37
|
+
▼ ▼
|
|
38
|
+
┌─────────────────┐ ┌─────────────────┐
|
|
39
|
+
│ 原型轨道 │ │ 生产轨道 │
|
|
40
|
+
│ (Prototype) │ │ (Production) │
|
|
41
|
+
├─────────────────┤ ├─────────────────┤
|
|
42
|
+
│ prototype/src/ │ │ design.md │
|
|
43
|
+
│ prototype/ │ │ tasks.md │
|
|
44
|
+
│ characterization/│ │ verification.md │
|
|
45
|
+
│ PROTOTYPE.md │ │ tests/** │
|
|
46
|
+
├─────────────────┤ ├─────────────────┤
|
|
47
|
+
│ 表征测试 │ │ 验收测试 │
|
|
48
|
+
│ (记录实际行为) │ │ (验证设计意图) │
|
|
49
|
+
│ 无 Red 基线要求 │ │ 必须 Red 基线 │
|
|
50
|
+
└────────┬────────┘ └────────┬────────┘
|
|
51
|
+
│ │
|
|
52
|
+
│ │
|
|
53
|
+
▼ │
|
|
54
|
+
┌─────────────────┐ │
|
|
55
|
+
│ 学习 & 决策 │ │
|
|
56
|
+
│ 提升 or 丢弃? │ │
|
|
57
|
+
└────────┬────────┘ │
|
|
58
|
+
│ │
|
|
59
|
+
┌───────┴───────┐ │
|
|
60
|
+
▼ ▼ │
|
|
61
|
+
[提升] [丢弃] │
|
|
62
|
+
│ │ │
|
|
63
|
+
▼ ▼ │
|
|
64
|
+
prototype-promote.sh 删除 prototype/ │
|
|
65
|
+
│ └─────────────────────►──┤
|
|
66
|
+
│ │
|
|
67
|
+
└────────────────────────────────────────┘
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
┌─────────────────┐
|
|
71
|
+
│ 归档阶段 │
|
|
72
|
+
│ (Archive) │
|
|
73
|
+
└─────────────────┘
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 表征测试 vs 验收测试
|
|
79
|
+
|
|
80
|
+
| 维度 | 验收测试(Acceptance Test) | 表征测试(Characterization Test) |
|
|
81
|
+
|------|---------------------------|----------------------------------|
|
|
82
|
+
| **目的** | 断言"应该是什么" | 断言"实际是什么" |
|
|
83
|
+
| **来源** | 设计文档 / AC-xxx | 运行观察 |
|
|
84
|
+
| **基线** | 必须先 Red | 初始就是 Green |
|
|
85
|
+
| **轨道** | 生产轨道 | 原型轨道 |
|
|
86
|
+
| **用途** | 验证设计意图 | 记录行为快照 |
|
|
87
|
+
| **CI** | 进入主流程 | 标记跳过 / 隔离 |
|
|
88
|
+
|
|
89
|
+
### 表征测试命名约定
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
# Python
|
|
93
|
+
test_characterize_<behavior>.py
|
|
94
|
+
@pytest.mark.characterization
|
|
95
|
+
|
|
96
|
+
# TypeScript/JavaScript
|
|
97
|
+
*.characterization.test.ts
|
|
98
|
+
describe.skip('characterization: <behavior>')
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 角色隔离(不变)
|
|
104
|
+
|
|
105
|
+
原型模式下,角色隔离原则与生产轨道**完全一致**:
|
|
106
|
+
|
|
107
|
+
| 角色 | 职责 | 禁止 |
|
|
108
|
+
|------|------|------|
|
|
109
|
+
| Test Owner | 产出表征测试 | 不得与 Coder 共享上下文 |
|
|
110
|
+
| Coder | 产出原型代码 | 禁止修改 characterization/ |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 原型提升检查清单
|
|
115
|
+
|
|
116
|
+
运行 `prototype-promote.sh <change-id>` 前,必须完成:
|
|
117
|
+
|
|
118
|
+
- [ ] 创建生产级 `design.md`(从原型学习中提炼 What/Constraints/AC-xxx)
|
|
119
|
+
- [ ] Test Owner 产出验收测试 `verification.md`(替代表征测试)
|
|
120
|
+
- [ ] 完成 `prototype/PROTOTYPE.md` 中的提升检查清单
|
|
121
|
+
- [ ] 在 `prototype/PROTOTYPE.md` 的"学习记录"中写明技术发现
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 原型丢弃检查清单
|
|
126
|
+
|
|
127
|
+
如果决定丢弃原型:
|
|
128
|
+
|
|
129
|
+
- [ ] 记录学习到的关键洞察到 `proposal.md` 的 Decision Log
|
|
130
|
+
- [ ] 删除 `prototype/` 目录
|
|
131
|
+
- [ ] 可选:保留部分洞察到 `<truth-root>/_meta/lessons-learned/`
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 脚本参考
|
|
136
|
+
|
|
137
|
+
| 脚本 | 用途 | 示例 |
|
|
138
|
+
|------|------|------|
|
|
139
|
+
| `change-scaffold.sh --prototype` | 创建原型骨架 | `change-scaffold.sh feat-001 --prototype` |
|
|
140
|
+
| `prototype-promote.sh` | 提升原型到生产轨道 | `prototype-promote.sh feat-001` |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 常见问题
|
|
145
|
+
|
|
146
|
+
### Q: 原型代码可以直接用于生产吗?
|
|
147
|
+
|
|
148
|
+
**不可以**。原型代码物理隔离在 `prototype/src/`,禁止直接落到仓库 `src/`。必须通过 `prototype-promote.sh` 显式提升。
|
|
149
|
+
|
|
150
|
+
### Q: 表征测试进入 CI 吗?
|
|
151
|
+
|
|
152
|
+
**不进入**。表征测试使用 `@characterization` 标记,默认跳过。提升时会归档到 `tests/archived-characterization/`。
|
|
153
|
+
|
|
154
|
+
### Q: 原型模式下需要写 design.md 吗?
|
|
155
|
+
|
|
156
|
+
**原型阶段不需要**。原型结束后,如果决定提升,再从原型学习中提炼生产级 `design.md`。
|
|
157
|
+
|
|
158
|
+
### Q: 可以跳过原型直接做生产吗?
|
|
159
|
+
|
|
160
|
+
**可以**。如果需求明确、技术方案确定,直接走生产轨道(A/B/C/D 阶段)。
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 参考文献
|
|
165
|
+
|
|
166
|
+
- 《人月神话》第11章"未雨绸缪"
|
|
167
|
+
- Michael Feathers,《修改代码的艺术》— Characterization Tests
|
|
168
|
+
- Martin Fowler, "Is High Quality Software Worth the Cost?"
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# verification.md 模板(变更包内)
|
|
2
|
+
|
|
3
|
+
> 推荐路径:`<change-root>/<change-id>/verification.md`
|
|
4
|
+
>
|
|
5
|
+
> 目标:把“完成定义”落到可执行锚点与证据上,并提供 `AC-xxx -> Requirement/Scenario -> Test IDs -> Evidence` 的追溯。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 元信息
|
|
10
|
+
|
|
11
|
+
- Change ID:`<change-id>`
|
|
12
|
+
- 状态:`Draft | Ready | Done | Archived`
|
|
13
|
+
- 关联:
|
|
14
|
+
- Proposal:`<change-root>/<change-id>/proposal.md`
|
|
15
|
+
- Design:`<change-root>/<change-id>/design.md`
|
|
16
|
+
- Tasks:`<change-root>/<change-id>/tasks.md`
|
|
17
|
+
- Spec deltas:`<change-root>/<change-id>/specs/**`
|
|
18
|
+
- 维护者:`<you>`
|
|
19
|
+
- 更新时间:`YYYY-MM-DD`
|
|
20
|
+
- Test Owner(独立对话):`<session/agent>`
|
|
21
|
+
- Coder(独立对话):`<session/agent>`
|
|
22
|
+
- Red 基线证据:`<change-root>/<change-id>/evidence/`
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
========================
|
|
27
|
+
A) 测试计划指令表
|
|
28
|
+
========================
|
|
29
|
+
|
|
30
|
+
### 主线计划区 (Main Plan Area)
|
|
31
|
+
|
|
32
|
+
- [ ] TP1.1 `<一句话目标>`
|
|
33
|
+
- Why:
|
|
34
|
+
- Acceptance Criteria(引用 AC-xxx / Requirement):
|
|
35
|
+
- Test Type:`unit | contract | integration | e2e | fitness | static`
|
|
36
|
+
- Non-goals:
|
|
37
|
+
- Candidate Anchors(Test IDs / commands / evidence):
|
|
38
|
+
|
|
39
|
+
### 临时计划区 (Temporary Plan Area)
|
|
40
|
+
|
|
41
|
+
- (留空/按需)
|
|
42
|
+
|
|
43
|
+
### 断点区 (Context Switch Breakpoint Area)
|
|
44
|
+
|
|
45
|
+
- 上次进度:
|
|
46
|
+
- 当前阻塞:
|
|
47
|
+
- 下一步最短路径:
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
========================
|
|
52
|
+
B) 追溯矩阵(Traceability Matrix)
|
|
53
|
+
========================
|
|
54
|
+
|
|
55
|
+
> 建议按 AC-xxx 为主键;如果你维护了 Requirements/Scenarios 规格条目,可同时列出对应项。
|
|
56
|
+
|
|
57
|
+
| AC | Requirement/Scenario | Test IDs / Commands | Evidence / MANUAL-* | Status |
|
|
58
|
+
|---|---|---|---|---|
|
|
59
|
+
| AC-001 | `<capability>/Requirement...` | `TEST-...` / `pnpm test ...` | `MANUAL-001` / link | TODO |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
========================
|
|
64
|
+
C) 执行锚点(Deterministic Anchors)
|
|
65
|
+
========================
|
|
66
|
+
|
|
67
|
+
### 1) 行为(Behavior)
|
|
68
|
+
|
|
69
|
+
- unit:
|
|
70
|
+
- integration:
|
|
71
|
+
- e2e:
|
|
72
|
+
|
|
73
|
+
### 2) 契约(Contract)
|
|
74
|
+
|
|
75
|
+
- OpenAPI/Proto/Schema:
|
|
76
|
+
- contract tests:
|
|
77
|
+
|
|
78
|
+
### 3) 结构(Structure / Fitness Functions)
|
|
79
|
+
|
|
80
|
+
- 分层/依赖方向/禁止循环:
|
|
81
|
+
|
|
82
|
+
### 4) 静态与安全(Static/Security)
|
|
83
|
+
|
|
84
|
+
- lint/typecheck/build:
|
|
85
|
+
- SAST/secret scan:
|
|
86
|
+
- 报告格式:`json|xml`(优先机器可读)
|
|
87
|
+
- 质量闸门:复杂度/重复度/依赖规则(如有)
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
========================
|
|
92
|
+
D) MANUAL-* 清单(人工/混合验收)
|
|
93
|
+
========================
|
|
94
|
+
|
|
95
|
+
> 只收录“无法稳定自动化”的验收项;每条必须写清证据要求。
|
|
96
|
+
|
|
97
|
+
- [ ] MANUAL-001 `<验收项>`
|
|
98
|
+
- Pass/Fail 判据:
|
|
99
|
+
- Evidence(截图/录像/链接/日志):
|
|
100
|
+
- 责任人/签字:
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
========================
|
|
105
|
+
E) 风险与降级(可选)
|
|
106
|
+
========================
|
|
107
|
+
|
|
108
|
+
- 风险:
|
|
109
|
+
- 降级策略:
|
|
110
|
+
- 回滚策略:
|
|
111
|
+
|
|
112
|
+
========================
|
|
113
|
+
F) 结构质量守门记录(可选)
|
|
114
|
+
========================
|
|
115
|
+
|
|
116
|
+
> 若本次变更涉及“代理指标驱动”的要求或潜在结构风险,请记录决策与替代闸门。
|
|
117
|
+
|
|
118
|
+
- 冲突点:
|
|
119
|
+
- 评估影响(内聚/耦合/可测试性):
|
|
120
|
+
- 替代闸门(复杂度/耦合/依赖方向/测试质量):
|
|
121
|
+
- 决策与授权:
|
|
122
|
+
|
|
123
|
+
========================
|
|
124
|
+
G) 价值流与度量(可选,但必须显式填“无”)
|
|
125
|
+
========================
|
|
126
|
+
|
|
127
|
+
> 目的:把“交付更快/更稳/更有价值”的判断落到可观测口径;避免只看局部写码速度。
|
|
128
|
+
|
|
129
|
+
- 目标价值信号:`<填“无”或写明指标/看板/日志/业务事件>`
|
|
130
|
+
- 价值流瓶颈假设(哪里会堵):`<填“无”或写明 PR review / tests / 发布 / 手工验收 的排队点>`
|
|
131
|
+
- 交付与稳定性指标(可选 DORA):`<填“无”或写明 Lead Time / Deploy Frequency / Change Failure Rate / MTTR 的观测口径>`
|
|
132
|
+
- 观测窗口与触发点:`<填“无”或写明上线后多久、观察哪些告警/报表>`
|
|
133
|
+
- Evidence:`<填“无”或写明链接/截图/报表路径(建议落到 evidence/)>`
|