@chenmk/superflow 0.1.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/INSTALL.en.md +106 -0
- package/INSTALL.md +664 -0
- package/LICENSE +21 -0
- package/README.md +142 -0
- package/README.zh-CN.md +117 -0
- package/assets/context-templates/business-rules.md +98 -0
- package/assets/context-templates/decisions.md +153 -0
- package/assets/context-templates/external-systems.md +166 -0
- package/assets/context-templates/incidents.md +89 -0
- package/assets/manifest.json +53 -0
- package/assets/prompts/superflow-archive.md +9 -0
- package/assets/prompts/superflow-clarify.md +10 -0
- package/assets/prompts/superflow-design.md +10 -0
- package/assets/prompts/superflow-docs.md +10 -0
- package/assets/prompts/superflow-implement.md +10 -0
- package/assets/prompts/superflow-pipeline.md +13 -0
- package/assets/prompts/superflow-verify.md +10 -0
- package/assets/rules/superflow-phase-guard.md +50 -0
- package/assets/scripts/claude-auto-backup-hook.sh +313 -0
- package/assets/scripts/codex-auto-backup-hook.sh +361 -0
- package/assets/scripts/install-sql-pre-commit.sh +44 -0
- package/assets/scripts/superflow-contract-hooks.sh +744 -0
- package/assets/scripts/superflow-delivery-check.sh +315 -0
- package/assets/scripts/superflow-dependency-update-hook.sh +161 -0
- package/assets/scripts/superflow-enforce-hook.sh +70 -0
- package/assets/scripts/superflow-hook-guard.sh +132 -0
- package/assets/scripts/superflow-integration-evidence-hook.sh +80 -0
- package/assets/scripts/superflow-sql-sync-hook.py +950 -0
- package/assets/scripts/superflow-test-report-lint.py +433 -0
- package/assets/scripts/superflow-verify-integration.sh +90 -0
- package/assets/scripts/sync-settings-json.py +52 -0
- package/assets/skills/api-doc-changelog/SKILL.md +193 -0
- package/assets/skills/openspec-apply-change/SKILL.md +156 -0
- package/assets/skills/openspec-archive-change/SKILL.md +114 -0
- package/assets/skills/openspec-explore/SKILL.md +288 -0
- package/assets/skills/openspec-propose/SKILL.md +110 -0
- package/assets/skills/superflow-archive/SKILL.md +61 -0
- package/assets/skills/superflow-clarify/SKILL.md +146 -0
- package/assets/skills/superflow-clarify/agents/openai.yaml +4 -0
- package/assets/skills/superflow-design/SKILL.md +83 -0
- package/assets/skills/superflow-design/agents/openai.yaml +4 -0
- package/assets/skills/superflow-docs/SKILL.md +316 -0
- package/assets/skills/superflow-docs/agents/openai.yaml +4 -0
- package/assets/skills/superflow-hotfix/SKILL.md +48 -0
- package/assets/skills/superflow-implement/SKILL.md +461 -0
- package/assets/skills/superflow-implement/agents/openai.yaml +4 -0
- package/assets/skills/superflow-pipeline/SKILL.md +844 -0
- package/assets/skills/superflow-pipeline/agents/openai.yaml +4 -0
- package/assets/skills/superflow-pipeline/references/api-design-template.md +431 -0
- package/assets/skills/superflow-pipeline/references/architecture-design-template.md +119 -0
- package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +536 -0
- package/assets/skills/superflow-pipeline/references/batch-split-guide.md +140 -0
- package/assets/skills/superflow-pipeline/references/decision-point.md +30 -0
- package/assets/skills/superflow-pipeline/references/dirty-worktree.md +35 -0
- package/assets/skills/superflow-pipeline/references/document-templates.md +123 -0
- package/assets/skills/superflow-pipeline/references/feature-gated-workflow.md +124 -0
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +1056 -0
- package/assets/skills/superflow-pipeline/references/mock-strategy-guide.md +86 -0
- package/assets/skills/superflow-pipeline/references/openspec-format.md +57 -0
- package/assets/skills/superflow-pipeline/references/orchestration.md +639 -0
- package/assets/skills/superflow-pipeline/references/p0-baseline-template.md +174 -0
- package/assets/skills/superflow-pipeline/references/project-config.md +40 -0
- package/assets/skills/superflow-pipeline/references/prompt-usage-template.md +152 -0
- package/assets/skills/superflow-pipeline/references/quality-gate.md +299 -0
- package/assets/skills/superflow-pipeline/references/quality-standards.md +190 -0
- package/assets/skills/superflow-pipeline/references/reviewer-checklist.md +154 -0
- package/assets/skills/superflow-pipeline/references/sql-risk-review-checklist.md +323 -0
- package/assets/skills/superflow-pipeline/references/subagent-progress.md +90 -0
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +125 -0
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +220 -0
- package/assets/skills/superflow-pipeline/references/test-guide.md +30 -0
- package/assets/skills/superflow-pipeline/references/traceability-matrix.md +106 -0
- package/assets/skills/superflow-pipeline/references/validation-integrity.md +134 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-archive.sh +178 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-env.sh +118 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +428 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-handoff.sh +296 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-state.sh +574 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-status.sh +172 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-yaml-validate.sh +138 -0
- package/assets/skills/superflow-table-impact-analysis/SKILL.md +77 -0
- package/assets/skills/superflow-tweak/SKILL.md +46 -0
- package/assets/skills/superflow-verify/SKILL.md +112 -0
- package/assets/skills-en/api-doc-changelog/SKILL.md +193 -0
- package/assets/skills-en/openspec-apply-change/SKILL.md +156 -0
- package/assets/skills-en/openspec-archive-change/SKILL.md +114 -0
- package/assets/skills-en/openspec-explore/SKILL.md +288 -0
- package/assets/skills-en/openspec-propose/SKILL.md +110 -0
- package/assets/skills-en/superflow-archive/SKILL.md +61 -0
- package/assets/skills-en/superflow-clarify/SKILL.md +146 -0
- package/assets/skills-en/superflow-clarify/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-design/SKILL.md +83 -0
- package/assets/skills-en/superflow-design/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-docs/SKILL.md +316 -0
- package/assets/skills-en/superflow-docs/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-hotfix/SKILL.md +48 -0
- package/assets/skills-en/superflow-implement/SKILL.md +461 -0
- package/assets/skills-en/superflow-implement/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +844 -0
- package/assets/skills-en/superflow-pipeline/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-pipeline/references/api-design-template.md +431 -0
- package/assets/skills-en/superflow-pipeline/references/architecture-design-template.md +119 -0
- package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +536 -0
- package/assets/skills-en/superflow-pipeline/references/batch-split-guide.md +140 -0
- package/assets/skills-en/superflow-pipeline/references/decision-point.md +30 -0
- package/assets/skills-en/superflow-pipeline/references/dirty-worktree.md +35 -0
- package/assets/skills-en/superflow-pipeline/references/document-templates.md +123 -0
- package/assets/skills-en/superflow-pipeline/references/feature-gated-workflow.md +124 -0
- package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +1056 -0
- package/assets/skills-en/superflow-pipeline/references/mock-strategy-guide.md +86 -0
- package/assets/skills-en/superflow-pipeline/references/openspec-format.md +57 -0
- package/assets/skills-en/superflow-pipeline/references/orchestration.md +639 -0
- package/assets/skills-en/superflow-pipeline/references/p0-baseline-template.md +174 -0
- package/assets/skills-en/superflow-pipeline/references/project-config.md +40 -0
- package/assets/skills-en/superflow-pipeline/references/prompt-usage-template.md +152 -0
- package/assets/skills-en/superflow-pipeline/references/quality-gate.md +299 -0
- package/assets/skills-en/superflow-pipeline/references/quality-standards.md +190 -0
- package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +154 -0
- package/assets/skills-en/superflow-pipeline/references/sql-risk-review-checklist.md +323 -0
- package/assets/skills-en/superflow-pipeline/references/subagent-progress.md +90 -0
- package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +125 -0
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +220 -0
- package/assets/skills-en/superflow-pipeline/references/test-guide.md +30 -0
- package/assets/skills-en/superflow-pipeline/references/traceability-matrix.md +106 -0
- package/assets/skills-en/superflow-pipeline/references/validation-integrity.md +134 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-archive.sh +178 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-env.sh +118 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +428 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-handoff.sh +296 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-state.sh +574 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-status.sh +172 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-yaml-validate.sh +138 -0
- package/assets/skills-en/superflow-table-impact-analysis/SKILL.md +77 -0
- package/assets/skills-en/superflow-tweak/SKILL.md +46 -0
- package/assets/skills-en/superflow-verify/SKILL.md +112 -0
- package/dist/cli/index.js +186 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/archive.js +6 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/clarify.js +6 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/design.js +6 -0
- package/dist/commands/design.js.map +1 -0
- package/dist/commands/docs.js +6 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/doctor.js +473 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/implement.js +6 -0
- package/dist/commands/implement.js.map +1 -0
- package/dist/commands/init.js +471 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/pipeline.js +6 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/scan.js +59 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.js +173 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.js +213 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +187 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.js +6 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/assets.js +27 -0
- package/dist/core/assets.js.map +1 -0
- package/dist/core/context.js +100 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/dependencies.js +146 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/detect.js +71 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/i18n.js +103 -0
- package/dist/core/i18n.js.map +1 -0
- package/dist/core/integrity.js +46 -0
- package/dist/core/integrity.js.map +1 -0
- package/dist/core/manifest.js +18 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/prompts.js +20 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/registry.js +134 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/rules.js +17 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/scripts.js +40 -0
- package/dist/core/scripts.js.map +1 -0
- package/dist/core/skill-check.js +31 -0
- package/dist/core/skill-check.js.map +1 -0
- package/dist/core/skills.js +56 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/state.js +43 -0
- package/dist/core/state.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/path.js +11 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/shell.js +29 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,844 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: superflow-pipeline
|
|
3
|
+
description: Use when the user asks for SDD, SuperBridge Flow, OpenSpec documents, requirement clarification, spec/design/tasks/tests generation, implementation prompts, verification, archive, or which workflow phase to use.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Spec Pipeline
|
|
7
|
+
|
|
8
|
+
This is the lightweight SDD router. Do not load the whole SDD process when a smaller phase skill is enough.
|
|
9
|
+
|
|
10
|
+
## Choose The Right SDD Skill
|
|
11
|
+
|
|
12
|
+
- Use `$openspec-explore` when the user is still thinking through a requirement,
|
|
13
|
+
wants to compare options, or needs codebase investigation before a change.
|
|
14
|
+
- Use `$superflow-clarify` only when product inputs are complex and must be frozen one
|
|
15
|
+
feature at a time before creating OpenSpec artifacts.
|
|
16
|
+
- Long PRDs, Lark/Feishu exports, screenshot-heavy requirements, and mixed
|
|
17
|
+
product documents must not be converted into proposal/tasks in one pass.
|
|
18
|
+
Route them through `$superflow-clarify` first. The clarify phase must create a
|
|
19
|
+
source index and freeze or block one bounded feature/section at a time before
|
|
20
|
+
`$openspec-propose` or `$superflow-docs` can write full documents.
|
|
21
|
+
- Use `$openspec-propose` as the primary path for OpenSpec document generation.
|
|
22
|
+
It must create the change with `openspec new`, inspect artifact order with
|
|
23
|
+
`openspec status --change <name> --json`, and write artifacts from
|
|
24
|
+
`openspec instructions <artifact-id> --change <name> --json`.
|
|
25
|
+
- Use `$superflow-docs` only as an SDD quality wrapper around `$openspec-propose`
|
|
26
|
+
output: API-first checks, UI/API/DB/test traceability, real-data test
|
|
27
|
+
evidence, quality gates, and prompt handoff checks. Do not let `$superflow-docs`
|
|
28
|
+
replace the OpenSpec skill workflow for core OpenSpec artifacts.
|
|
29
|
+
- Use `$superflow-design` after `$superflow-docs` passes when full workflow needs
|
|
30
|
+
Superpowers source-level HOW, technical design, reverse impact analysis,
|
|
31
|
+
TDD/RED strategy, Worker/Tester/Reviewer split, or worktree/port planning.
|
|
32
|
+
- Use `$openspec-apply-change` as the primary path when the user wants to
|
|
33
|
+
implement tasks from an OpenSpec change.
|
|
34
|
+
- Use `$superflow-implement` only for SDD-specific prompt splitting, P0/P1/P2
|
|
35
|
+
handoff, CR/Px follow-up prompts, reviewer checklists, validation plans, or
|
|
36
|
+
test-report updates that are not covered by `$openspec-apply-change`.
|
|
37
|
+
- Use `$superflow-verify` when implementation claims completion and the change needs
|
|
38
|
+
scale-based verification, Superpowers verification/code review, test-report
|
|
39
|
+
closure, branch/worktree handling, retry decisions, or transition to archive.
|
|
40
|
+
- Use `$superflow-hotfix` only for small bug fixes with clear intended behavior and
|
|
41
|
+
no API/DB/SQL/status/cross-repo/SDK/real-entry uncertainty. Upgrade to full
|
|
42
|
+
SDD when any hard gate is triggered.
|
|
43
|
+
- Use `$superflow-tweak` only for tiny non-runtime wording/process/prompt tweaks.
|
|
44
|
+
Runtime behavior, API, DB, hook, integration, or user-facing changes upgrade
|
|
45
|
+
to full SDD.
|
|
46
|
+
- Use `$superflow-archive` after verification passes and the user explicitly confirms
|
|
47
|
+
lifecycle closeout.
|
|
48
|
+
- Use `$superflow-table-impact-analysis` whenever a requirement, bug fix, sync task,
|
|
49
|
+
SQL change, status field, Mapper/XML query, or cross-repo shared table affects
|
|
50
|
+
database-backed behavior.
|
|
51
|
+
|
|
52
|
+
## Non-Negotiable Rules
|
|
53
|
+
|
|
54
|
+
### 上下文防漂移与状态门禁(阻塞级)
|
|
55
|
+
|
|
56
|
+
SDD 的核心价值是可追溯事实链、接口验证、hook 质量监控、任务 prompt
|
|
57
|
+
和 worktree 并行开发能力。为避免长会话压缩、换 agent、切 worktree 或多终端并行
|
|
58
|
+
后丢失细节,任何进入 Superpowers 执行策略、实现 prompt 或验收收口的任务,都必须
|
|
59
|
+
把当前 OpenSpec/SDD 文档固化成确定性 handoff,并用状态文件记录阶段。
|
|
60
|
+
|
|
61
|
+
**必须使用的 Codex 侧脚本:**
|
|
62
|
+
|
|
63
|
+
- `~/.codex/skills/superflow-pipeline/scripts/superflow-handoff.sh <change-dir> --refresh`
|
|
64
|
+
生成 `.sdd/handoff/sdd-context.md`、`.sdd/handoff/sdd-context.json` 和
|
|
65
|
+
`.sdd/handoff/sdd-context.sha256`。
|
|
66
|
+
- `~/.codex/skills/superflow-pipeline/scripts/superflow-env.sh`
|
|
67
|
+
导出 `SDD_STATE`、`SDD_GUARD`、`SDD_HANDOFF`、`SDD_ARCHIVE`、
|
|
68
|
+
`SDD_YAML_VALIDATE` 和跨平台 `SDD_BASH`。
|
|
69
|
+
- `~/.codex/skills/superflow-pipeline/scripts/superflow-state.sh init <change-dir> <phase>`
|
|
70
|
+
初始化 `.sdd/state.yaml`。
|
|
71
|
+
- `~/.codex/skills/superflow-pipeline/scripts/superflow-yaml-validate.sh <change-dir>`
|
|
72
|
+
校验 `.sdd/state.yaml` 的必备字段、枚举、路径和 hash 格式。
|
|
73
|
+
- `~/.codex/skills/superflow-pipeline/scripts/superflow-guard.sh <change-dir> docs|implement|verify|archive`
|
|
74
|
+
校验阶段出口;只有确认要推进阶段时才加 `--apply`。
|
|
75
|
+
- `~/.codex/skills/superflow-pipeline/scripts/superflow-archive.sh <change-dir> --dry-run|--apply`
|
|
76
|
+
统一执行归档前状态校验、archive guard 和最终状态推进。
|
|
77
|
+
- `~/.codex/hooks/superflow-hook-guard.sh` 是 Codex PreToolUse 阶段写入保护:
|
|
78
|
+
`phase: docs` 阻塞运行时代码写入,`phase: archive|done` 阻塞继续改动。
|
|
79
|
+
|
|
80
|
+
**权责边界:**
|
|
81
|
+
|
|
82
|
+
- OpenSpec/SDD 文档仍是 canonical source of truth,尤其是 `api.md`、
|
|
83
|
+
`design.md`、`tests.md`、SQL/DB 证据、字段语义合同和真实入口验证。
|
|
84
|
+
- Superpowers 正式接管源码级 HOW:技术详设、任务计划、TDD 顺序、
|
|
85
|
+
Reviewer/Tester 分工、worktree/端口编排和验证职责。HOW 文档落在
|
|
86
|
+
`docs/superpowers/specs/YYYY-MM-DD-<change-id>-technical-design.md`,
|
|
87
|
+
并记录到 `.sdd/state.yaml` 的 `technical_design`。
|
|
88
|
+
- Superpowers 不得接管 WHAT/合同:需求、API、DB、SQL、字段语义、tests、
|
|
89
|
+
真实入口验收和 SDD hook/quality gate 仍由 OpenSpec/SDD 文档约束。
|
|
90
|
+
- `.sdd/handoff/*` 是压缩恢复和多 agent 协作的上下文包,不是新的需求源。
|
|
91
|
+
如果 handoff 与原文冲突,必须回读原始 OpenSpec/SDD 文档。
|
|
92
|
+
|
|
93
|
+
**强制记录:**
|
|
94
|
+
|
|
95
|
+
- `sdd-quality-gate.md` 必须记录 handoff 文件路径、hash、生成命令和生成时间。
|
|
96
|
+
- 需求澄清、方案讨论或设计路线仍在变化时,必须增量维护
|
|
97
|
+
`.sdd/handoff/brainstorm-summary.md`,把已确认结论、候选方案、待确认问题、
|
|
98
|
+
放弃方案和下一步决策点分开记录。它是压缩恢复检查点,不替代 OpenSpec/SDD
|
|
99
|
+
原文。
|
|
100
|
+
- `brainstorm-summary.md` 定稿后、创建或重写 `design.md` 前,必须执行主动压缩
|
|
101
|
+
门禁:优先使用当前宿主的原生压缩/新会话能力;无法程序化触发时,必须提示用户
|
|
102
|
+
手动压缩或明确确认继续。确认结果写入 `.sdd/state.yaml` 的
|
|
103
|
+
`context_compression` 相关记录或 `sdd-quality-gate.md`。
|
|
104
|
+
- `design.md` 的 "Superpowers Technical Design Handoff" 必须引用
|
|
105
|
+
`technical_design` 和 handoff hash,并声明 OpenSpec/SDD 文档仍是
|
|
106
|
+
WHAT/API/DB/tests 的事实源。
|
|
107
|
+
- 每个实现 prompt 必须引用 `.sdd/handoff/sdd-context.md`,写明继承的
|
|
108
|
+
`handoff_hash`,并要求 agent 在编码前核对 hash 是否与当前文档一致。
|
|
109
|
+
- `test-report.md` 必须记录本批次使用的 handoff hash、状态阶段和执行过的
|
|
110
|
+
SDD hook/guard 脚本。
|
|
111
|
+
|
|
112
|
+
**阻塞规则:**
|
|
113
|
+
|
|
114
|
+
- 未生成 `.sdd/handoff/sdd-context.*` 就让 Superpowers 写执行策略或生成实现
|
|
115
|
+
prompt,阻塞。
|
|
116
|
+
- 方案讨论已发生但没有 `.sdd/handoff/brainstorm-summary.md`,或该文件未区分
|
|
117
|
+
confirmed/candidate/pending/rejected,阻塞创建最终设计。
|
|
118
|
+
- `brainstorm-summary.md` 已定稿但未经过主动压缩门禁或用户确认继续,阻塞进入
|
|
119
|
+
`design.md` 生成/重写。
|
|
120
|
+
- `design.md`/prompt/test-report 中记录的 handoff hash 与
|
|
121
|
+
`.sdd/handoff/sdd-context.sha256` 不一致,阻塞。
|
|
122
|
+
- 会话压缩、换 agent、切 worktree 或并行窗口后,只凭聊天记忆继续设计/编码,
|
|
123
|
+
未先读 handoff 和原始文档,阻塞。
|
|
124
|
+
- Superpowers 输出与 OpenSpec/SDD 事实源冲突时,必须回到 SDD docs 修正;
|
|
125
|
+
不得让实现 prompt 夹带第二套需求/API/DB/tests 合同。
|
|
126
|
+
- `superflow-guard.sh <change-dir> docs|implement|verify|archive` 不通过时,不得推进到下一阶段。
|
|
127
|
+
|
|
128
|
+
### SDD Workflow State Machine(阻塞级)
|
|
129
|
+
|
|
130
|
+
SDD 必须按状态机推进,不能靠聊天上下文、压缩摘要或 agent 自己判断当前阶段。
|
|
131
|
+
`.sdd/state.yaml` 是 workflow 状态源;OpenSpec/SDD 文档仍是设计事实源。
|
|
132
|
+
|
|
133
|
+
**阶段:**
|
|
134
|
+
|
|
135
|
+
`docs -> design -> implement -> verify -> archive -> done`
|
|
136
|
+
|
|
137
|
+
**状态字段:**
|
|
138
|
+
|
|
139
|
+
`.sdd/state.yaml` 至少维护:
|
|
140
|
+
|
|
141
|
+
`workflow | phase | canonical_spec | design_doc | technical_design | plan | base_ref | build_mode |
|
|
142
|
+
build_pause | subagent_dispatch | tdd_mode | review_mode | isolation | verify_mode |
|
|
143
|
+
auto_transition | verify_result | verification_report | branch_status | archived |
|
|
144
|
+
direct_override | build_command | verify_command | handoff_context | handoff_hash |
|
|
145
|
+
superpower_strategy | implementation_prompt | worktree_ports |
|
|
146
|
+
context_compression | created_at | verified_at | updated_at`
|
|
147
|
+
|
|
148
|
+
**上下文压缩模式:**
|
|
149
|
+
|
|
150
|
+
- 默认 `context_compression: off`,handoff 保留较长文档摘录,适合单仓或中等变更。
|
|
151
|
+
- 可在 `<change-dir>/.sdd/config.yaml` 设置 `context_compression: beta`,
|
|
152
|
+
handoff 会压缩摘录长度并在 `.sdd/state.yaml`、`.sdd/handoff/sdd-context.*`
|
|
153
|
+
中记录该模式,适合超长会话、多 agent、多 worktree 交接。
|
|
154
|
+
- 可在项目根 `.sdd/config.yaml` 设置 `auto_transition` 和
|
|
155
|
+
`context_compression` 默认值;`SDD_AUTO_TRANSITION` 与
|
|
156
|
+
`SDD_CONTEXT_COMPRESSION` 环境变量拥有最高优先级。
|
|
157
|
+
- `context_compression: beta` 必须保留 API/spec/test 合同投影,辅助文档只做
|
|
158
|
+
hash 引用。实现阶段如遇设计、任务或需求细节不清,必须回读原始文件。
|
|
159
|
+
- 无论模式如何,`.sdd/handoff/*` 只是恢复索引;任何争议必须回读原始
|
|
160
|
+
OpenSpec/SDD 文档。
|
|
161
|
+
|
|
162
|
+
**状态命令:**
|
|
163
|
+
|
|
164
|
+
- `superflow-state.sh status <change-dir>`:输出完整状态。
|
|
165
|
+
- `superflow-state.sh next <change-dir>`:根据 phase/workflow/auto_transition 输出下一步 skill。
|
|
166
|
+
- `superflow-state.sh recover <change-dir>`:会话压缩、换 agent、切 worktree 后输出恢复动作。
|
|
167
|
+
- `superflow-state.sh transition <change-dir> <event>`:只允许合法事件推进:
|
|
168
|
+
`docs-complete`、`design-complete`、`implement-complete`、`verify-pass`、
|
|
169
|
+
`verify-fail`、`archive-reopen`、`archived`。
|
|
170
|
+
- `superflow-state.sh scale <change-dir>`:计算 `verify_mode: light|full`。
|
|
171
|
+
- `superflow-state.sh task-checkoff <file> <task-text>`:校验任务文本唯一且已勾选。
|
|
172
|
+
- `superflow-status.sh <repo-root> [--json]`:列出 active SDD changes、phase、
|
|
173
|
+
workflow、任务完成数和 next skill。
|
|
174
|
+
|
|
175
|
+
**自动衔接协议:**
|
|
176
|
+
|
|
177
|
+
- `superflow-guard.sh <phase> --apply` 只负责状态推进。
|
|
178
|
+
- 是否自动调用下一个 skill 由 `.sdd/state.yaml` 的 `auto_transition` 决定。
|
|
179
|
+
- `auto_transition: false` 时,必须停下并按 `superflow-state.sh next <change-dir>`
|
|
180
|
+
的 `HINT` 提示用户手动进入下一阶段。
|
|
181
|
+
|
|
182
|
+
**决策点协议:**
|
|
183
|
+
|
|
184
|
+
- 设计范围、API/DB 合同、执行模式、验证边界、archive closeout 需要用户取舍时,
|
|
185
|
+
使用 `references/decision-point.md` 的格式记录,不用聊天记忆代替。
|
|
186
|
+
- 脏工作区、并行 worktree 或跨会话接力前,使用 `references/dirty-worktree.md`
|
|
187
|
+
的检查项,避免覆盖用户改动或拿旧 handoff 继续。
|
|
188
|
+
- `build_mode: subagent-driven-development` 时,维护
|
|
189
|
+
`.sdd/subagent-progress.md`,按 `references/subagent-progress.md` 记录
|
|
190
|
+
唯一任务文本、stage、commit、RED/GREEN、双 reviewer 状态、review-fix
|
|
191
|
+
轮次、worktree、端口、证据和 blocker。
|
|
192
|
+
|
|
193
|
+
**压缩恢复协议:**
|
|
194
|
+
|
|
195
|
+
当发现会话被压缩、上下文丢失、换 agent、切 worktree 或多终端并行接力时,必须先执行:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
~/.codex/skills/superflow-pipeline/scripts/superflow-state.sh recover <change-dir>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
然后按输出动作恢复:
|
|
202
|
+
|
|
203
|
+
- `docs`:重读 OpenSpec/SDD 合同文档和 handoff,必要时重跑 handoff,再跑 docs guard。
|
|
204
|
+
- `design`:进入 `$superflow-design`,重读 handoff、`api.md`、`design.md`、
|
|
205
|
+
`tasks.md`、`tests.md` 和 `.sdd/handoff/brainstorm-summary.md`,生成或刷新
|
|
206
|
+
`technical_design` 后跑 design guard。
|
|
207
|
+
- `implement`:重读 `.sdd/handoff/sdd-context.md`、`api.md`、`design.md`、
|
|
208
|
+
`tests.md`、`technical_design` 和实现 prompt,从第一个未完成批次继续。
|
|
209
|
+
- 若 `build_pause: plan-ready` 且 `plan` 存在、`isolation/build_mode`
|
|
210
|
+
还没定,不得重写 plan;必须回到计划确认点让用户选择隔离方式、执行模式和
|
|
211
|
+
TDD 策略。
|
|
212
|
+
- 若 `build_pause: plan-ready` 但 `isolation/build_mode` 已存在,视为陈旧暂停;
|
|
213
|
+
先清空 `build_pause`,再按既定 `build_mode` 从第一个未勾选任务恢复。
|
|
214
|
+
- 若 `build_pause: plan-ready` 但 `plan` 缺失,视为坏状态;回到
|
|
215
|
+
`$superflow-implement` 修复或重建计划,禁止直接编码。
|
|
216
|
+
- 若 `build_mode: subagent-driven-development`,主会话只做协调者,必须重读
|
|
217
|
+
`.sdd/subagent-progress.md` 和 `references/subagent-progress.md`,不得直接
|
|
218
|
+
执行 worker task。
|
|
219
|
+
- `verify`:进入 `$superflow-verify`,重读 `test-report.md`,重跑 hook/guard,
|
|
220
|
+
完成 Superpowers verification/code review/branch handling,并记录
|
|
221
|
+
`verification_report` 与 `branch_status`。
|
|
222
|
+
- `archive`:验证已通过,必须等待用户确认归档。
|
|
223
|
+
|
|
224
|
+
**轻重验证:**
|
|
225
|
+
|
|
226
|
+
- 进入 verify 前运行 `superflow-state.sh scale <change-dir>`。
|
|
227
|
+
- `light` 只适用于小范围文档/prompt/非运行时代码改动。
|
|
228
|
+
- 任一涉及 API、接口自动化、SQL、数据库、Mapper/XML、跨仓、状态/枚举、
|
|
229
|
+
真实入口、MQ、定时任务、第三方、SDK、支付/退款/设备链路的任务,必须是
|
|
230
|
+
`verify_mode: full`。
|
|
231
|
+
|
|
232
|
+
**预设 workflow:**
|
|
233
|
+
|
|
234
|
+
- `workflow: hotfix` 或 `workflow: tweak` 只是轻流程预设,不是绕过 SDD。
|
|
235
|
+
- 只要触发 API/DB/跨仓/状态字段/真实入口/SQL/SDK/第三方等硬门禁,必须升级为
|
|
236
|
+
`workflow: full`,并回到完整 docs/implement/verify/archive 流程。
|
|
237
|
+
|
|
238
|
+
### 任务级 SDD 文档完整性门禁(阻塞级)
|
|
239
|
+
|
|
240
|
+
任何新建或补建的 P/CR/bug-fix/follow-up 任务,都必须先建立“任务本地文档集”,
|
|
241
|
+
再挂接到根级聚合文档。不能只在根级 `prompt/`、根级 `tasks.md` 或根级
|
|
242
|
+
`traceability-matrix.md` 里留一条链接就进入实现。
|
|
243
|
+
|
|
244
|
+
**任务本地必备文件:**
|
|
245
|
+
- `.openspec.yaml`
|
|
246
|
+
- `proposal.md`,说明背景、目标、非目标、影响范围、验收标准
|
|
247
|
+
- `bug-fix-plan.md`,仅 bug fix / incident / report-driven 修复必备
|
|
248
|
+
- `api.md`
|
|
249
|
+
- `spec.md` 或 `specs/<capability>/spec.md`
|
|
250
|
+
- `design.md`
|
|
251
|
+
- `tasks.md`
|
|
252
|
+
- `tests.md`
|
|
253
|
+
- `traceability-matrix.md`
|
|
254
|
+
- `review-checklist.md`
|
|
255
|
+
- `sdd-quality-gate.md`
|
|
256
|
+
- `test-report.md`
|
|
257
|
+
- `prompt/<p-or-cr-task-name>.md`
|
|
258
|
+
|
|
259
|
+
**根级挂接必备:**
|
|
260
|
+
- 根级 `tasks.md` 必须链接任务目录、任务 prompt、`api.md`、`tests.md`、
|
|
261
|
+
`test-report.md`。
|
|
262
|
+
- 根级 `tests.md` 必须挂入任务用例 ID、自动化命令、DB/log 断言和真实入口。
|
|
263
|
+
- 根级 `traceability-matrix.md` 必须挂入任务 requirement、测试用例、文档和禁止项。
|
|
264
|
+
- 根级 `sdd-quality-gate.md` 必须显式写明任务本地文档完整性已通过。
|
|
265
|
+
- 根级 `test-report.md` 必须链接任务本地报告。
|
|
266
|
+
- 根级 `prompt/implementation.md` 必须链接根级任务 prompt。
|
|
267
|
+
- 根级 `prompt/<p-or-cr-task-name>.md` 必须存在,并指向任务本地文档集和任务本地
|
|
268
|
+
prompt。
|
|
269
|
+
|
|
270
|
+
**阻塞规则:**
|
|
271
|
+
- 缺任一任务本地必备文件,阻塞生成实现 prompt 或进入编码。
|
|
272
|
+
- 只有根级 prompt、没有任务本地 `prompt/`,阻塞。
|
|
273
|
+
- 只有根级 traceability、没有任务本地 `traceability-matrix.md`,阻塞。
|
|
274
|
+
- 只有 bug-fix-plan/design/tasks/tests,没有 `proposal.md`,阻塞。
|
|
275
|
+
- `sdd-quality-gate.md` 写“文档完整性通过”但未列出实际文件清单,阻塞。
|
|
276
|
+
- 任务文档补齐前,不得把状态写成 `PASS`;只能写 `Blocked for docs`。
|
|
277
|
+
|
|
278
|
+
### 平台级影响面发现门禁(understand-anything 只是导航,不是事实源)
|
|
279
|
+
|
|
280
|
+
无论是新需求、修复 bug、CR/Px follow-up,还是只生成实现 prompt,SDD 流程都必须先
|
|
281
|
+
发现整个平台代码影响面,再开展设计和修复分析。`understand-anything` 只能作为
|
|
282
|
+
locator / 代码地图 / 影响面初筛工具,不能作为设计事实源,不能替代当前源码、
|
|
283
|
+
Mapper/XML、数据库样例、接口契约和真实消费入口验证。
|
|
284
|
+
|
|
285
|
+
**影响面发现方式(优先但可降级):**
|
|
286
|
+
- 优先检查当前仓库是否存在 understand-anything 相关索引/产物,例如
|
|
287
|
+
`.understand-anything/`、`understand-anything.md`、`understand anything.md`、
|
|
288
|
+
或项目约定的 understand-anything 图谱文件。
|
|
289
|
+
- 如果索引存在,可以用它快速定位整个平台相关代码,包括当前仓库、同平台
|
|
290
|
+
sibling repo、共享 SDK、公共 DTO、数据库表消费方、定时任务、回调入口、外部平台
|
|
291
|
+
适配器和配置引用。
|
|
292
|
+
- 如果索引缺失、过期、范围不完整或无法调用,不得把“缺少 understand-anything”
|
|
293
|
+
作为唯一阻塞原因;必须降级为 `rg`、源码阅读、Mapper/XML、数据库只读核查、
|
|
294
|
+
sibling repo 搜索、日志模板和真实接口入口反查。
|
|
295
|
+
- 在 `design.md`、`bug-fix-plan.md`、`tasks.md`、`tests.md`、`prompt/pXX-xxx.md`
|
|
296
|
+
或 `test-report.md` 中至少写明:
|
|
297
|
+
`影响面发现方式 | understand 索引状态 | 已分析代码范围 | 影响模块/接口/表 | 潜在回归点 | 后续事实核实方式`。
|
|
298
|
+
- 发现跨仓、SDK、共享表或公共协议影响时,继续触发对应的跨仓 SDK/引用项目版本门禁、
|
|
299
|
+
跨仓数据合同门禁和真实集成测试门禁。
|
|
300
|
+
|
|
301
|
+
**阻塞规则:**
|
|
302
|
+
- 没有任何平台级影响面发现证据,只阅读当前文件、当前 Service、当前接口,阻塞。
|
|
303
|
+
- 只阅读当前文件、当前 Service、当前接口,不分析平台级调用和消费方,阻塞。
|
|
304
|
+
- 把 understand-anything 图谱、聊天解释或旧索引当成最终事实源,未回读当前源码、
|
|
305
|
+
Mapper/XML、数据库样例、接口契约和真实消费入口,阻塞。
|
|
306
|
+
- 未在最终 SDD 完整性自检中展示影响面发现方式、understand 索引状态和事实核实摘要,
|
|
307
|
+
阻塞。
|
|
308
|
+
|
|
309
|
+
### 既有代码与数据关系核实门禁(阻塞级)
|
|
310
|
+
|
|
311
|
+
当 SDD 任务需要判断已有代码里的字段来源、表关系、接口调用链、数据权限、
|
|
312
|
+
状态流转、外部平台参数、Mapper/XML 查询条件或跨仓消费关系时,必须先用证据
|
|
313
|
+
核实,再进入设计。禁止从字段名、历史记忆、单个截图或口头猜测直接推导业务关系。
|
|
314
|
+
|
|
315
|
+
**强制核实顺序:**
|
|
316
|
+
|
|
317
|
+
1. 先做平台级影响面发现:优先用 understand-anything 图谱定位相关模块、类、
|
|
318
|
+
接口、Mapper、表、跨仓引用和上下游消费方;索引缺失或不可信时,降级使用
|
|
319
|
+
`rg`、源码目录、Mapper/XML、日志模板、配置、数据库表名和 sibling repo 搜索。
|
|
320
|
+
记录发现方式、索引状态、节点/文件范围和 1-hop 影响面。
|
|
321
|
+
2. 再阅读源码和 Mapper/XML,核对字段注释、`@TableName`、resultMap、查询条件、
|
|
322
|
+
join 条件、权限过滤、枚举转换、DTO 入参出参和调用链。
|
|
323
|
+
3. 若源码仍无法证明真实数据关系,连接开发/测试数据库只读核查:
|
|
324
|
+
`SHOW CREATE TABLE`、`DESC`、字段样例、关联数据、索引和实际枚举值。
|
|
325
|
+
4. 如果影响面发现、源码和数据库核查后仍不能确定,必须把问题列为
|
|
326
|
+
`待用户澄清/产品确认/数据 owner 确认`,并停止冻结设计或生成实现 prompt。
|
|
327
|
+
|
|
328
|
+
**文档必须记录的证据:**
|
|
329
|
+
|
|
330
|
+
- `影响面发现方式、understand 索引状态和分析范围`
|
|
331
|
+
- `源码锚点:文件/类/方法/Mapper/XML 行为`
|
|
332
|
+
- `数据库核查:库表字段、样例 SQL、样例结果或未执行原因`
|
|
333
|
+
- `关系判断结论:确定/部分确定/不确定`
|
|
334
|
+
- `不确定时的澄清问题和阻塞范围`
|
|
335
|
+
|
|
336
|
+
**阻塞规则:**
|
|
337
|
+
|
|
338
|
+
- 只凭字段名相似或记忆判断表关系,阻塞。
|
|
339
|
+
- 没有源码锚点就把字段写成真源,阻塞。
|
|
340
|
+
- 数据库能核查但没有核查,也没有说明无法连接原因,阻塞。
|
|
341
|
+
- 仍不确定却继续设计表结构、数据权限或调用链,阻塞。
|
|
342
|
+
|
|
343
|
+
### 数据表反向影响面门禁(阻塞级)
|
|
344
|
+
|
|
345
|
+
当需求新增、修改、同步、回填或依赖任何业务表/状态字段时,必须从“表和字段”
|
|
346
|
+
反向扫描全部读写与消费入口,再设计 API、同步逻辑和测试。不能只从本次要改的
|
|
347
|
+
上游流程正向推导。
|
|
348
|
+
|
|
349
|
+
此场景必须使用 `$superflow-table-impact-analysis`;若该 skill 不可用,仍必须按
|
|
350
|
+
本节规则执行并在交付中说明降级原因。
|
|
351
|
+
|
|
352
|
+
**触发条件(任一满足即触发):**
|
|
353
|
+
- 新增/修改表、字段、索引、枚举、默认值、初始化数据或同步规则。
|
|
354
|
+
- 引入状态字段,例如 `running_status`、`connector_status`、`own_status`、
|
|
355
|
+
`is_online`、`is_use`、`deleted/is_deleted`。
|
|
356
|
+
- 某张表被跨仓同步、复制实体、API 查询、定时任务、MQ 消费、前端/小程序入口、
|
|
357
|
+
第三方适配器或启动/扫码/支付/退款等业务入口间接使用。
|
|
358
|
+
|
|
359
|
+
**强制反查步骤:**
|
|
360
|
+
1. 以每张表和字段为 key 反查全部引用。understand-anything 可用时作为定位工具;
|
|
361
|
+
不可用或不可信时,必须用 `rg`、Mapper/XML、实体注解、SQL、DTO、枚举、
|
|
362
|
+
日志模板、配置和 sibling repo 搜索完成反查。
|
|
363
|
+
2. 对每个引用点分类:写入方、读取方、过滤条件、默认值/保留旧值逻辑、状态恢复
|
|
364
|
+
逻辑、跨仓同步方、前端/小程序/第三方真实入口。
|
|
365
|
+
3. 识别“反向恢复”场景:下线后上线、删除后重建、缺失后重新出现、旧值为不可用
|
|
366
|
+
但上游本次未传字段、历史脏数据被新过滤条件消费。
|
|
367
|
+
4. 将所有会消费该字段的接口/任务/MQ 写入 `design.md`、`tests.md`、
|
|
368
|
+
`traceability-matrix.md` 和实现 prompt;至少覆盖一个最终用户真实入口。
|
|
369
|
+
5. 若无法确认某个消费方入口或字段语义,必须标记阻塞并问 owner,不能只验证同步
|
|
370
|
+
任务本身成功。
|
|
371
|
+
|
|
372
|
+
**阻塞规则:**
|
|
373
|
+
- 只证明“同步任务执行成功”,没有证明消费该表的真实入口通过,阻塞。
|
|
374
|
+
- 只看写入方,不反查读取/过滤/启动前校验/扫码/小程序入口,阻塞。
|
|
375
|
+
- 状态字段只测置为不可用,不测恢复可用和旧值清理,阻塞。
|
|
376
|
+
- 跨仓表没有列出全部消费仓和接口,阻塞。
|
|
377
|
+
- `tests.md` 没有表级反向影响面用例,阻塞。
|
|
378
|
+
|
|
379
|
+
### 业务语义优先与禁止默认兜底门禁(阻塞级)
|
|
380
|
+
|
|
381
|
+
SDD 设计、评审、实现 prompt 和测试报告中,字段/状态/枚举/同步值必须先证明
|
|
382
|
+
业务语义正确,再证明链路能跑通。禁止把“非空”“有值”“不报错”“接口返回成功”
|
|
383
|
+
当作正确结果。
|
|
384
|
+
|
|
385
|
+
**强制设计要求:**
|
|
386
|
+
- 对每个状态字段、枚举字段、同步字段,必须写清:
|
|
387
|
+
`真源字段 | 真源枚举 | 目标字段 | 目标枚举 | 消费方解释 | 业务依据 | 不确定项`。
|
|
388
|
+
- 如果上下游字段名相似、数值相同或看起来可转换,仍必须回到源码、数据库样例、
|
|
389
|
+
接口文档和真实消费入口确认语义;不能只按字段名、默认值或历史记忆设计。
|
|
390
|
+
- 禁止为了让链路通过而新增默认值、空值转可用、保留旧值、兼容值、fallback、
|
|
391
|
+
“取另一个看起来有值的字段”等兜底逻辑。
|
|
392
|
+
- 只有需求、产品、owner 或兼容方案明确要求处理历史脏数据/外部不可控输入时,
|
|
393
|
+
才允许设计兜底。此时必须记录:
|
|
394
|
+
`兜底触发条件 | 业务依据 | 会掩盖的异常 | 监控/告警/暴露方式 | 移除条件 | owner确认`。
|
|
395
|
+
- 测试必须断言业务语义,例如“运行态对外解释为可用”“离线态对外解释为不可用”,
|
|
396
|
+
不能只断言字段存在、非空、接口 200 或同步任务成功。
|
|
397
|
+
|
|
398
|
+
**阻塞规则:**
|
|
399
|
+
- 只写默认值/兜底值,没有业务依据和 owner 确认,阻塞。
|
|
400
|
+
- 用“有值”的字段替代真实业务真源,例如用枪口状态替代桩运行状态,阻塞。
|
|
401
|
+
- 只验证返回有值或链路成功,不验证值是否符合消费方业务语义,阻塞。
|
|
402
|
+
- 兜底让异常数据、缺失字段、旧错误状态静默通过,且没有暴露机制,阻塞。
|
|
403
|
+
- 无法证明字段值符合业务语义时,必须标记 `Blocked`,不得冻结设计或生成实现 prompt。
|
|
404
|
+
|
|
405
|
+
### 低自由度研发 Agent 五项硬门禁(阻塞级)
|
|
406
|
+
|
|
407
|
+
面向低能力或高自由发挥风险的研发 agent,SDD 文档必须把可猜测空间压到最低。
|
|
408
|
+
以下五项门禁必须写入 `design.md`、`tests.md`、`traceability-matrix.md`、
|
|
409
|
+
`sdd-quality-gate.md` 和实现 prompt。缺一项即阻塞进入编码。
|
|
410
|
+
|
|
411
|
+
#### 1. 字段语义合同门禁
|
|
412
|
+
|
|
413
|
+
凡涉及 ID、状态、类型、金额、额度、时间、设备号、站点、用户、订单、订阅、
|
|
414
|
+
外部流水、枚举或跨表关联字段,必须建立字段语义合同:
|
|
415
|
+
|
|
416
|
+
`字段 | 来源表/DTO/事件 | 真实语义 | 目标字段 | 目标语义 | 是否可等价 |
|
|
417
|
+
证据锚点 | 禁止用法 | 不确定项/owner`
|
|
418
|
+
|
|
419
|
+
要求:
|
|
420
|
+
- 不能用字段名相似、类型相同、值非空来判断两个字段等价。
|
|
421
|
+
- 像 `{externalDeviceId}`、`{siteId}`、`{portId}`、`{tenantId}`、
|
|
422
|
+
`{businessId}`、`{contractId}`、`{benefitType}` 这类字段,
|
|
423
|
+
必须写清真源和消费方解释。
|
|
424
|
+
- 若字段语义未确认,必须标记 `Blocked`,不得继续设计、生成 prompt 或编码。
|
|
425
|
+
|
|
426
|
+
#### 2. 写入闭环门禁
|
|
427
|
+
|
|
428
|
+
凡设计写了“回填、落库、更新、绑定、持久化、快照、同步、状态推进”,必须证明
|
|
429
|
+
从 Java 到数据库再到消费方的闭环:
|
|
430
|
+
|
|
431
|
+
`业务动作 | Java setter/赋值点 | Converter/DTO 映射 | Mapper insert/update |
|
|
432
|
+
DB column | 后续读取方 | 消费入口 | 验证 SQL | 测试用例`
|
|
433
|
+
|
|
434
|
+
要求:
|
|
435
|
+
- 只看到 Java setter 不等于已落库;必须核对 Mapper XML、注解 SQL、BaseMapper、
|
|
436
|
+
resultMap 和条件更新。
|
|
437
|
+
- 成组字段必须作为一个合同验证,例如业务绑定三元组
|
|
438
|
+
`{contract_id}/{business_id}/{benefit_type}`,不得只证明其中一个字段。
|
|
439
|
+
- 若写入闭环缺 Mapper/DB/消费方任一证据,阻塞。
|
|
440
|
+
|
|
441
|
+
#### 3. 调用链真实入口门禁
|
|
442
|
+
|
|
443
|
+
设计和 prompt 必须按真实用户或真实系统入口描述链路:
|
|
444
|
+
|
|
445
|
+
`用户/外部动作 | 上游服务/接口 | 本仓入口 | MQ/异步回调 | 关键字段变化 |
|
|
446
|
+
DB 状态 | 结算/通知/展示消费点 | 真实验证方式`
|
|
447
|
+
|
|
448
|
+
要求:
|
|
449
|
+
- 不能只写 Service 方法或工具类;必须写到 Controller/RPC/MQ/定时任务/设备/小程序/
|
|
450
|
+
第三方真实入口。
|
|
451
|
+
- 同一能力存在多条路径时必须拆开,例如用户入口、后台操作、外部集成、MQ 补偿。
|
|
452
|
+
- 测试 Controller、mock endpoint、绕过鉴权端点只能作为局部证据,不能替代真实入口。
|
|
453
|
+
|
|
454
|
+
#### 4. 禁止 fallback 与猜测实现门禁
|
|
455
|
+
|
|
456
|
+
实现 prompt 必须明确禁止研发 agent 临场自由发挥:
|
|
457
|
+
|
|
458
|
+
- 禁止因为字段缺失、查不到数据或链路不通就新增默认值、兜底反查、替代字段、
|
|
459
|
+
保留旧值、空值转可用、静默跳过。
|
|
460
|
+
- 禁止在下游结算/展示/通知层补偿上游本该写入的业务快照,除非设计明确批准。
|
|
461
|
+
- 禁止修改测试断言来迎合实现。
|
|
462
|
+
- 只有产品、owner 或兼容方案明确批准历史脏数据/外部不可控输入时,才允许兜底;
|
|
463
|
+
必须记录:
|
|
464
|
+
`兜底触发条件 | 业务依据 | 会掩盖的异常 | 暴露/告警方式 | 移除条件 | owner确认`。
|
|
465
|
+
|
|
466
|
+
#### 5. Agent 执行前自检门禁
|
|
467
|
+
|
|
468
|
+
每份实现 prompt 必须要求研发 agent 在编码前填写自检表,并回填到
|
|
469
|
+
`test-report.md` 或 P-local 执行记录:
|
|
470
|
+
|
|
471
|
+
`真实入口已定位 | 字段语义合同已核对 | 写入闭环已核对 |
|
|
472
|
+
禁止兜底边界已确认 | RED 测试已执行 | 允许修改文件 | 禁止修改文件 |
|
|
473
|
+
阻塞项`
|
|
474
|
+
|
|
475
|
+
任一项未填、填“不确定”但继续编码、或未记录证据,均视为阻塞。
|
|
476
|
+
|
|
477
|
+
### 测试先行与接口自动化门禁(阻塞级)
|
|
478
|
+
|
|
479
|
+
SDD 文档必须先冻结测试,再允许生成实现 prompt。研发 agent 不得先编码再临场补
|
|
480
|
+
测试,也不得把人工随手调用、编译成功或接口 200 当作验收。
|
|
481
|
+
|
|
482
|
+
**测试冻结要求:**
|
|
483
|
+
- `tests.md` 必须为每个 spec scenario、API、状态/枚举分支、DB 写入闭环和真实
|
|
484
|
+
消费入口生成可执行测试用例,包含:
|
|
485
|
+
`用例ID | 层级L1/L2/L3/L4 | 前置数据 | 操作步骤 | 自动化命令 | 断言 |
|
|
486
|
+
RED预期失败 | GREEN预期通过 | DB核查 | 日志核查 | test-report证据位置`。
|
|
487
|
+
- 涉及接口、CRUD、Mapper/XML、数据库字段、配置驱动行为或跨系统链路时,至少
|
|
488
|
+
有一个 L3/L4 自动化接口用例。用例必须写出完整 Base URL、token/cookie 获取
|
|
489
|
+
方式、curl/Postman/Newman/pytest/RestAssured 等可执行命令、请求体、响应断言、
|
|
490
|
+
DB SELECT 和日志关键词。
|
|
491
|
+
- Bug fix、CR/Px follow-up 和回归修复必须写 Red-Green 用例:先定义修复前应失败
|
|
492
|
+
的同一路径,再定义修复后同一路径应通过。没有 RED 失败证据,不得宣称该测试能
|
|
493
|
+
防住回归。
|
|
494
|
+
- 测试断言必须验证业务语义和持久化闭环,不能只断言 HTTP 200、字段非空、接口
|
|
495
|
+
不报错、`BUILD SUCCESS` 或 mock 返回成功。
|
|
496
|
+
- 如果真实环境、真实 token、第三方系统、设备、支付或测试数据不可用,必须把
|
|
497
|
+
用例状态标记为 `Blocked` 或 `Partially verified`,写明缺口和替代证据边界;
|
|
498
|
+
不得把 mock-only 或跳过测试写成 Passed。
|
|
499
|
+
|
|
500
|
+
**实现前阻塞规则:**
|
|
501
|
+
- `tests.md` 没有可执行自动化命令,阻塞。
|
|
502
|
+
- `test-report.md` 没有 Red-Green 证据占位和接口自动化证据表,阻塞。
|
|
503
|
+
- prompt 未引用 `tests.md` 的具体用例 ID、自动化命令和 RED/GREEN 要求,阻塞。
|
|
504
|
+
- 研发 agent 未先执行 RED 测试或未记录失败原因就开始生产代码,阻塞。
|
|
505
|
+
|
|
506
|
+
### 阶段与文档门禁
|
|
507
|
+
|
|
508
|
+
- Complex PRD work must start with `$superflow-clarify`.
|
|
509
|
+
- Current feature must be confirmed and marked `已冻结` before moving to the next feature.
|
|
510
|
+
- OpenSpec artifact creation must go through the installed OpenSpec skills
|
|
511
|
+
first. Prefer `$openspec-propose` for proposal/design/spec/tasks generation,
|
|
512
|
+
then layer SDD checks on top.
|
|
513
|
+
- OpenSpec/SDD owns WHAT and contracts. Superpowers owns source-level HOW in
|
|
514
|
+
`docs/superpowers/specs/*-technical-design.md`, but must not replace
|
|
515
|
+
OpenSpec/SDD requirements, API, database, field semantics, tests, or gates.
|
|
516
|
+
- API documentation is design input, not a post-coding supplement.
|
|
517
|
+
- Do not generate implementation prompts before `api.md`, `design.md`, `tasks.md`, and `tests.md` exist.
|
|
518
|
+
- Do not generate implementation prompts before
|
|
519
|
+
`docs/superpowers/specs/*-technical-design.md` exists, `.sdd/state.yaml`
|
|
520
|
+
records it as `technical_design`, and `sdd-quality-gate.md` confirms it is
|
|
521
|
+
limited to source-level HOW. If it is missing, return to `$superflow-docs`.
|
|
522
|
+
- Do not generate implementation prompts before `.sdd/handoff/sdd-context.md`,
|
|
523
|
+
`.sdd/handoff/sdd-context.json`, `.sdd/handoff/sdd-context.sha256`, and
|
|
524
|
+
`.sdd/state.yaml` exist for the change/task. Generate them with
|
|
525
|
+
`scripts/superflow-handoff.sh <change-dir> --refresh` and
|
|
526
|
+
`scripts/superflow-state.sh init <change-dir> docs`. The prompt must record and
|
|
527
|
+
inherit the same handoff hash.
|
|
528
|
+
- Do not generate implementation prompts before `tests.md` contains executable
|
|
529
|
+
test cases, Red-Green expectations, interface automation commands, DB/log
|
|
530
|
+
assertions, and matching `test-report.md` evidence placeholders.
|
|
531
|
+
- When writing Markdown SDD docs, especially task prompts, any referenced
|
|
532
|
+
`.md` document must be a clickable Markdown link. Use relative links from the
|
|
533
|
+
current document, for example `[design.md](../design.md)` from a prompt file
|
|
534
|
+
or `[P64 prompt](prompt/p64-export-plot-display.md)` from the change root.
|
|
535
|
+
Do not leave handoff docs as plain text such as `design.md` or
|
|
536
|
+
`prompt/p64-export-plot-display.md` when they are meant for navigation.
|
|
537
|
+
- Do not make UI-invisible fields required unless the programmer confirmed backend default or backend-derived behavior.
|
|
538
|
+
- Do not modify already executed prompts; create a CR/Px or later-number prompt for integration fixes.
|
|
539
|
+
|
|
540
|
+
#### 完整 SDD 文档请求行为要求(强制)
|
|
541
|
+
|
|
542
|
+
当用户明确要求按 SDD/OpenSpec 流程生成完整文档,或当前需求已经冻结且没有
|
|
543
|
+
开放问题时,不得在只生成基础 OpenSpec 文档后停下来询问是否继续。
|
|
544
|
+
|
|
545
|
+
**正确顺序:**
|
|
546
|
+
|
|
547
|
+
1. 先使用已安装的 OpenSpec skill 生成 proposal/design/spec/tasks 等核心
|
|
548
|
+
OpenSpec artifacts。
|
|
549
|
+
2. 然后继续补齐 SDD 质量文档:`api.md`、`tests.md`、
|
|
550
|
+
`review-checklist.md`、`sdd-quality-gate.md`,以及任务要求的
|
|
551
|
+
traceability/test-report 占位。
|
|
552
|
+
3. 如需求已明确,应继续生成或更新实现 prompt,例如
|
|
553
|
+
`prompt/pXX-xxx.md` 和 `prompt/implementation.md` 总入口引用。
|
|
554
|
+
4. 最终一次性汇报已生成/更新的文件清单、仍有占位或开放问题的文件、以及
|
|
555
|
+
进入开发前的下一步。
|
|
556
|
+
|
|
557
|
+
**如果信息不足:**
|
|
558
|
+
|
|
559
|
+
- 能生成的文档继续生成,不因单个文档有缺口而停止整个流程。
|
|
560
|
+
- 在对应文件写明待补充项,并在最终输出中明确说明。
|
|
561
|
+
- 只有存在影响需求冻结的开放问题时,才把 prompt 标记为待需求冻结后生成。
|
|
562
|
+
|
|
563
|
+
### Prompt 衔接门禁(不可遗漏,阻塞级)
|
|
564
|
+
|
|
565
|
+
当一个独立 P 任务完成 SDD docs 阶段后,必须确保实现 prompt 已生成并完成交叉挂接,
|
|
566
|
+
禁止出现"只有 embedded 文档,没有 prompt"的悬空状态。默认行为是生成 prompt;
|
|
567
|
+
只有用户明确说"只讨论/只完善文档/不要生成 prompt"时,才允许不生成,并必须在最终
|
|
568
|
+
回复中报告阻塞状态。提醒用户"进入开发前再生成 prompt"不能替代本阶段生成 prompt。
|
|
569
|
+
|
|
570
|
+
**生成或更新 `embedded-changes/pXX-xxx/` 下任一文档时,必须执行以下检查清单(不可跳过):**
|
|
571
|
+
|
|
572
|
+
- [ ] `prompt/pXX-xxx.md` 是否已实际生成?
|
|
573
|
+
- [ ] `prompt/implementation.md` 中是否已包含该 PXX 的总入口引用?
|
|
574
|
+
- [ ] 根 `tasks.md` 中该 PXX 的条目是否已指向对应的 prompt 文件?
|
|
575
|
+
- [ ] `traceability-matrix.md` 是否已包含该 prompt 或实现入口引用?
|
|
576
|
+
- [ ] `tests.md` 和 `test-report.md` 是否已包含该 PXX 的验证用例和 Red-Green/阻塞证据占位?
|
|
577
|
+
- [ ] prompt 内引用的 `.md` 文档是否全部使用可点击 Markdown 相对链接,且目标文件存在?
|
|
578
|
+
- [ ] `.sdd/handoff/sdd-context.md`、`.json`、`.sha256` 是否已生成并记录到
|
|
579
|
+
`design.md`、`sdd-quality-gate.md`、prompt 和 `test-report.md`?
|
|
580
|
+
- [ ] `.sdd/state.yaml` 是否已初始化,并能反映当前阶段?
|
|
581
|
+
- [ ] `~/.codex/skills/superflow-pipeline/scripts/superflow-guard.sh <change-dir> docs`
|
|
582
|
+
是否通过?
|
|
583
|
+
- [ ] PXX 完成验收前是否已执行 `~/.codex/hooks/superflow-test-report-lint.py --tests <tests.md> <embedded test-report.md>`,并确认测试数字、真实链路证据、源码锚点、`Tests are skipped`、跨仓证据口径一致?
|
|
584
|
+
- [ ] 如用户明确禁止生成 prompt,最终输出是否写明 `Prompt 衔接检查未通过` 和缺失文件?
|
|
585
|
+
|
|
586
|
+
**阻塞规则(以下任一情况视为交付不完整):**
|
|
587
|
+
|
|
588
|
+
1. PXX 的 embedded 文档目录中不存在实现 prompt 文件(`prompt/pXX-xxx.md`)
|
|
589
|
+
2. 根 `tasks.md`、`prompt/implementation.md`、`traceability-matrix.md` 中任一处缺少该 prompt 引用
|
|
590
|
+
3. `tests.md` 或 `test-report.md` 缺少该 PXX 的验证入口、失败证据或阻塞判定
|
|
591
|
+
4. prompt 内引用的 `.md` 交接文档不是可点击相对链接,或链接目标不存在
|
|
592
|
+
5. `.sdd/handoff/*` 或 `.sdd/state.yaml` 缺失,或 handoff hash 未被 prompt 继承
|
|
593
|
+
6. 当前阶段未生成 prompt,且用户没有明确禁止生成 prompt
|
|
594
|
+
|
|
595
|
+
**以上任一条件触发时,必须阻止进入开发阶段,并在输出中显式报告:**
|
|
596
|
+
> ⚠️ Prompt 衔接检查未通过:P{xx} 缺少实现 prompt 或交叉挂接。必须先生成
|
|
597
|
+
> `prompt/pXX-xxx.md` 并更新 `prompt/implementation.md`、`tasks.md`、
|
|
598
|
+
> `traceability-matrix.md`、`tests.md`、`test-report.md`,不得只提醒后续生成。
|
|
599
|
+
|
|
600
|
+
**必须在最终回复展示自检证据(不可省略):**
|
|
601
|
+
|
|
602
|
+
```text
|
|
603
|
+
SDD 完整性自检:
|
|
604
|
+
- prompt 文件:已生成/缺失 -> <path>
|
|
605
|
+
- implementation 总入口:已挂接/缺失 -> <grep 结果摘要>
|
|
606
|
+
- tasks.md:已挂接/缺失 -> <grep 结果摘要>
|
|
607
|
+
- traceability-matrix.md:已挂接/缺失 -> <grep 结果摘要>
|
|
608
|
+
- tests.md:已补验证用例/缺失 -> <用例 ID>
|
|
609
|
+
- test-report.md:已补 Red-Green 占位/缺失 -> <章节名>
|
|
610
|
+
- test-report 证据 lint:已通过/未执行/阻塞 -> <命令与摘要>
|
|
611
|
+
- prompt Markdown 链接:已核对/缺失 -> <抽样链接或缺失列表>
|
|
612
|
+
- SDD handoff:已生成/缺失/hash不一致 -> <sdd-context.md、hash、guard 摘要>
|
|
613
|
+
- 平台级影响面发现:已完成/缺失 -> <发现方式、understand 索引状态、影响面摘要、事实核实摘要>
|
|
614
|
+
- 跨仓/SDK/依赖版本门禁:不涉及/已落实/缺失 -> <版本号或阻塞说明>
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
### 跨仓 SDK / 引用项目版本门禁(阻塞级)
|
|
618
|
+
|
|
619
|
+
当 SDD 任务涉及 sibling repo、SDK、公共模块、Maven/Gradle 依赖、RPC DTO、协议类、
|
|
620
|
+
starter、connector 或任何被当前项目引用的外部项目时,必须把"引用版本"作为交付物,
|
|
621
|
+
不能只改本地源码或同版本 SNAPSHOT。
|
|
622
|
+
|
|
623
|
+
**触发条件(任一满足即触发):**
|
|
624
|
+
- 修改 `*-api`、`*-sdk`、公共 jar、协议类、DTO、枚举、校验注解或序列化字段类型。
|
|
625
|
+
- 修改 sibling repo 后,当前仓库通过 Maven/Gradle 依赖、RPC、HTTP SDK 或本地 jar 消费它。
|
|
626
|
+
- 字段类型、方法签名、setter/getter、接口入参出参发生变化。
|
|
627
|
+
- 需要先在另一个仓库 `mvn install/deploy`,当前仓库才能编译或运行。
|
|
628
|
+
|
|
629
|
+
**强制要求:**
|
|
630
|
+
- 在 `bug-fix-plan.md` / `design.md` / `tasks.md` / prompt 中写明:
|
|
631
|
+
`引用项目 | 当前版本 | 目标版本 | 当前仓库依赖文件 | 发布/安装命令 | 验证命令`。
|
|
632
|
+
- 修改被引用项目的协议/API 时,必须升级版本号,例如 `1.0.8-SNAPSHOT -> 1.0.9-SNAPSHOT`;
|
|
633
|
+
不得只覆盖同版本 SNAPSHOT。
|
|
634
|
+
- 当前项目必须同步更新依赖版本,并验证实际解析到新版本。
|
|
635
|
+
- `test-report.md` 必须记录版本证据:SDK 新版本、当前项目依赖版本、`mvn dependency:tree`
|
|
636
|
+
或等价解析结果、编译结果。
|
|
637
|
+
- 如果版本号由发布平台统一管理,必须把"由谁发布/发布到哪里/当前仓库如何引用"写成阻塞项。
|
|
638
|
+
|
|
639
|
+
**阻塞规则:**
|
|
640
|
+
- 被引用项目改了代码但未升级版本号,阻塞。
|
|
641
|
+
- 当前仓库未更新依赖版本,阻塞。
|
|
642
|
+
- 只在本机同版本 SNAPSHOT 覆盖安装,阻塞。
|
|
643
|
+
- 测试报告没有版本解析证据,阻塞。
|
|
644
|
+
|
|
645
|
+
### 数据库 SQL 门禁(不可绕过,迁移类任务为硬门禁)
|
|
646
|
+
|
|
647
|
+
开发环境数据库结构与设计文档一致是业务代码正确运行的前提。历史上多次出现研发 agent 忘记执行增量 SQL,导致字段缺失、默认值缺失、初始化数据缺失,最终用业务代码绕过数据库问题,产生隐蔽 bug。以下规则必须严格执行:
|
|
648
|
+
|
|
649
|
+
#### 通用规则(所有涉及数据库的任务)
|
|
650
|
+
|
|
651
|
+
- **写代码前必须先检查数据库**:研发 agent 在写任何业务代码前,必须先对照 design.md / api.md / spec.md / tasks.md 中涉及的表、字段、索引、默认值、枚举值、初始化数据,连接开发环境数据库执行 DESC / SHOW CREATE TABLE / SHOW COLUMNS / SELECT 等命令确认实际结构。
|
|
652
|
+
- **发现缺失必须先执行 SQL**:如果数据库结构或数据不满足设计要求,研发 agent 必须先找到本需求的汇总 SQL 文件,连接开发环境数据库执行对应脚本,执行成功后再继续开发。
|
|
653
|
+
- **禁止用代码绕过数据库缺失**:不得因为字段缺失、默认值缺失、初始化数据缺失而在业务代码里写绕过逻辑、兼容逻辑或假修复。根因是 SQL 未执行时,修复方向应是执行 SQL,不是改代码。
|
|
654
|
+
- **只维护需求级汇总 SQL 文件**:同一个需求下所有新增表、改表、索引、默认值、初始化数据脚本,统一追加到该需求的汇总 SQL 文件(如 `sql/{version}.sql`),禁止各任务各自新建独立 SQL 文件。
|
|
655
|
+
- **独立 P/CR 任务必须回写版本总 SQL**:开发库已有、局部 SQL 已执行、agent 回复里写过 SQL,都不等于交付完成。只要源码/Mapper 依赖了表结构或初始化数据,必须确认版本总 SQL 已包含对应变更。
|
|
656
|
+
- **任务完成必须有 SQL 收口对账表**:涉及数据库的任务必须输出 `P编号 | 表 | 字段/索引/数据 | 源码引用 | 总SQL位置 | 开发库状态 | 测试库状态 | 处理结论`。没有该表不得标记完成。
|
|
657
|
+
- **发布前必须做三方对账**:最终脚本必须对齐 `源码/Mapper 读写字段`、`开发库结构`、`测试库现状 + 版本总 SQL 执行后结构`。测试库已有字段不得重复 ADD;类型/注释不一致时生成 MODIFY 或写明不采纳理由。
|
|
658
|
+
- **SQL 脚本采用简单直接格式**:不使用 INFORMATION_SCHEMA 判断、PREPARE/EXECUTE、动态 SQL 等过度兼容脚本。开发/测试环境应直接暴露问题,脚本执行失败就应该失败。
|
|
659
|
+
- **SQL 文件变更后必须执行本地检查**:新增或修改 `sql/**/*.sql` 后,必须执行 `~/.codex/hooks/superflow-sql-sync-hook.py --check-staged` 或由本地 `pre-commit` 自动执行;检查不通过不得提交。
|
|
660
|
+
- **任务交付必须包含数据库核查证据**:报告中必须写明检查了哪些表/字段/索引/初始化数据,执行了哪个汇总 SQL 文件里的哪段脚本,执行结果是什么。没有真实数据库核查证据时不得标记任务完成。
|
|
661
|
+
|
|
662
|
+
#### 跨仓数据合同门禁(阻塞级)
|
|
663
|
+
|
|
664
|
+
同一张业务表被多个服务读取、复制实体、复用 Mapper 或通过外部集成/网关链路间接消费时,必须把表结构当作跨仓合同处理。单仓 SQL 执行成功不代表其他消费仓可运行。
|
|
665
|
+
|
|
666
|
+
**触发条件(任一满足即触发):**
|
|
667
|
+
- 多仓共享同一数据库表、视图、字典或初始化数据
|
|
668
|
+
- 一个仓库复制了另一个仓库的 PO/Entity/Mapper/DTO
|
|
669
|
+
- MyBatis-Plus `@TableName` + `BaseMapper` 自动 SELECT 实体字段
|
|
670
|
+
- 表结构变更、字段删除、字段迁移、状态字段从持久化改为动态计算
|
|
671
|
+
- 查询条件从旧字段切换到新字段,例如单字段 `plot_id` 切换到 JSON/多站点快照字段
|
|
672
|
+
- 真实链路入口在 A 服务,业务校验落在 B 服务或 sibling service
|
|
673
|
+
|
|
674
|
+
**强制要求:**
|
|
675
|
+
1. 指定表结构真源:明确本需求以哪个 SQL 文件、哪个库的 `SHOW CREATE TABLE`、哪个仓库模型作为最终合同。
|
|
676
|
+
2. 列出全部消费仓:包括直接 CRUD 仓库、外部集成仓库、定时任务、回调服务、导入导出服务和测试端点。
|
|
677
|
+
3. 对每个消费仓执行字段对账:`@TableName` 实体字段、`BaseMapper` 默认查询列、Mapper XML/resultMap、手写 SQL、查询条件必须逐项对照 `information_schema.columns` 或 `SHOW CREATE TABLE`。
|
|
678
|
+
4. 不存在列不得映射:实体旧字段必须删除,或显式标注 `@TableField(exist = false)`;不得让 MyBatis-Plus 自动生成包含不存在列的 SELECT。
|
|
679
|
+
5. 查询逻辑同步迁移:字段从持久化状态改成派生状态、从单站点改成多站点、从主表字段改到流水表后,消费仓查询条件必须同步,不得继续按旧字段过滤。
|
|
680
|
+
6. 版本总 SQL 只能表达真实最终结构:不得为了迁就旧实体给测试库补回已废弃字段;如果代码依赖废弃字段,结论是代码合同漂移。
|
|
681
|
+
7. test-report 必须记录跨仓对账表:`表 | 真源结构 | 消费仓 | 实体/Mapper/SQL 字段 | 实际库字段 | 处理结论 | 验证证据`。
|
|
682
|
+
|
|
683
|
+
**阻塞规则:**
|
|
684
|
+
- 任一消费仓存在实体映射不存在列、Mapper 查询不存在列、查询条件依赖已删除字段时,阻塞进入真实验收。
|
|
685
|
+
- 只有主仓编译通过、主仓 SQL 执行成功、主仓接口通过,不能关闭跨仓数据合同任务。
|
|
686
|
+
- 测试库缺字段时,必须先判断字段是否属于当前最终合同;如果不是最终合同字段,禁止补库绕过,必须修消费仓代码。
|
|
687
|
+
|
|
688
|
+
#### 数据库迁移类任务硬门禁(涉及以下任一条件时触发)
|
|
689
|
+
|
|
690
|
+
**触发条件(任一满足即触发硬门禁):**
|
|
691
|
+
- 新增表
|
|
692
|
+
- 删除字段
|
|
693
|
+
- 物理删除旧字段
|
|
694
|
+
- 表结构重构
|
|
695
|
+
- 旧数据迁移
|
|
696
|
+
- 状态字段从持久化改为动态计算
|
|
697
|
+
- 分页筛选依赖新表或新状态逻辑
|
|
698
|
+
- 总版 SQL 和开发库迁移 SQL 分离
|
|
699
|
+
- 需要迁移当前开发库/测试库已有数据
|
|
700
|
+
|
|
701
|
+
**硬门禁要求:**
|
|
702
|
+
|
|
703
|
+
1. **实现 prompt 必须自动包含"强制执行顺序"章节**:superflow-implement 生成 prompt/pXX-xxx.md 时,如检测到任务涉及上述任一条件,必须在 prompt 中自动加入"强制执行顺序"章节,不可遗漏。
|
|
704
|
+
2. **必须先完成数据库操作,再开始 Java 编码**:顺序为:核对当前数据库结构 → 执行表结构改造 SQL → 执行旧数据迁移 SQL → 回填 test-report 证据 → 才允许开始 Java 编码。
|
|
705
|
+
3. **失败必须阻塞**:表结构改造或数据迁移失败时,必须停止并报告,禁止先写业务代码绕过。
|
|
706
|
+
4. **质量门必须包含 D1~D5 检查**:sdd-quality-gate.md 或对应 quality gate 产物中,数据库迁移类任务必须包含:数据库前置核查、表结构改造 SQL、旧数据迁移 SQL、迁移证据已回填 test-report、Java 编码是否允许开始。任一未通过即阻塞。
|
|
707
|
+
|
|
708
|
+
### SQL 风险评审门禁(不可绕过,所有 SQL 任务为前置门禁)
|
|
709
|
+
|
|
710
|
+
项目发布前通常会经过平台 SQL 解析校验和人工/自动化风险评审。两层评审各自暴露
|
|
711
|
+
问题但串行返工成本高,因此 SDD 流程在进入实现阶段前必须完成 **L0 风险前置评审**,
|
|
712
|
+
把语法兼容、迁移幂等、性能、可维护性和业务语义风险提前消化。
|
|
713
|
+
|
|
714
|
+
**触发条件**:任何涉及数据库变更、SQL 脚本、Mapper/XML 字段调整、初始化
|
|
715
|
+
数据迁移的 P/CR 任务。
|
|
716
|
+
|
|
717
|
+
**强制要求**:
|
|
718
|
+
|
|
719
|
+
1. **完成 SQL 风险评审 checklist**:在 `tasks.md` 中按
|
|
720
|
+
`references/sql-risk-review-checklist.md` §3 的模板包含完整 checklist,
|
|
721
|
+
禁用项(B1-B8)和警告项(W1-W13)逐条勾选处理结论;评审人签字后才能进入
|
|
722
|
+
实现阶段。
|
|
723
|
+
2. **SQL 文件头必填**:每个 `sql/v*.x/*.sql` 文件按 reference §4 模板写明目标
|
|
724
|
+
MySQL 版本、关联批次、风险等级、评审人、涉及表、变更摘要。
|
|
725
|
+
`superflow-sql-sync-hook.py` 对缺文件头的 SQL 输出警告。
|
|
726
|
+
3. **hook 阻断 B1-B8 禁用项**:`superflow-sql-sync-hook.py` 在 commit/edit 阶段强制
|
|
727
|
+
阻断 §2.1 的 8 条禁用项;评审通过的豁免必须按 §5 写
|
|
728
|
+
`-- allow-dynamic-ddl:` 或 `-- allow-sql-risk-rule:` 注释。
|
|
729
|
+
4. **警告项必须落到 test-report**:W1-W13 警告项不阻断提交流程,但必须由
|
|
730
|
+
Worker 在 test-report.md 中显式记录处理结论(已修复 / 评审豁免 / 不适用及
|
|
731
|
+
理由);缺失处理结论的批次视为交付不完整。
|
|
732
|
+
5. **跨仓数据合同对账同步触发**:涉及跨仓共享表(多仓消费、复制实体、字段迁移)
|
|
733
|
+
时,SQL 风险评审与 superflow-pipeline "跨仓数据合同门禁" 联动,任一未完成都
|
|
734
|
+
阻塞。
|
|
735
|
+
6. **业务代码逆向审查**:W11 关系表误判、W12 JSON 兜底精确度、W13 宽索引无用
|
|
736
|
+
这类规则 hook 自动化检测不到,必须人工源码审查;详细 SOP 见
|
|
737
|
+
`references/sql-risk-review-checklist.md` §6。
|
|
738
|
+
7. **DML 段事务包裹**:单文件 SQL 应当把 DDL 段与 DML 段分节,DML 段显式包
|
|
739
|
+
`START TRANSACTION; ... COMMIT;`。DDL 在 MySQL 隐式提交,事务包不住;DML
|
|
740
|
+
段事务包裹提供失败整体回滚能力。
|
|
741
|
+
8. **目标 SQL 解析器兼容性实测**:评审通过后,发布/提测前必须使用目标环境的
|
|
742
|
+
SQL parser 或发布平台做一次解析校验。重点关注时间精度语法、JSON 函数链、
|
|
743
|
+
schema 限定符、REGEXP 转义、DDL 选项和目标数据库版本是否兼容。
|
|
744
|
+
|
|
745
|
+
**阻塞规则**:
|
|
746
|
+
|
|
747
|
+
- 任一 P/CR 任务的 `tasks.md` 缺少 SQL 风险评审 checklist,阻塞。
|
|
748
|
+
- SQL 文件头缺失或不符合 §4 模板,警告级但 reviewer 必须在评审记录中确认是否
|
|
749
|
+
豁免。
|
|
750
|
+
- B1-B8 违规未显式豁免,阻塞。
|
|
751
|
+
- W1-W13 警告项在 test-report.md 无处理结论,阻塞。
|
|
752
|
+
- W11/W12/W13 漏掉源码审查,阻塞。
|
|
753
|
+
- 跨仓 SQL 风险评审未与跨仓数据合同对账联动,阻塞。
|
|
754
|
+
|
|
755
|
+
详细规则、checklist 模板、文件头模板、豁免机制、与 hook 的联动见
|
|
756
|
+
`references/sql-risk-review-checklist.md`。
|
|
757
|
+
|
|
758
|
+
### 集成测试门禁(不可绕过,阻塞级)
|
|
759
|
+
|
|
760
|
+
历史上多次出现 agent 编码后只执行单元测试、编译通过就宣称任务完成,但从未启动应用、未调用真实接口、未验证数据库状态,导致交付质量不达标。以下规则必须严格执行:
|
|
761
|
+
|
|
762
|
+
#### 三层门禁模型(prompt + hook + 验收脚本)
|
|
763
|
+
|
|
764
|
+
所有涉及接口、CRUD、Mapper/XML、数据库字段、配置驱动行为或跨系统链路的
|
|
765
|
+
实现 prompt,必须同时落下三层门禁:
|
|
766
|
+
|
|
767
|
+
1. **Prompt 完成定义**:明确"单元测试通过不等于完成",任务完成必须包含
|
|
768
|
+
应用新进程启动、真实 curl/API 调用、数据库查询、日志检查和 test-report
|
|
769
|
+
证据回填。
|
|
770
|
+
2. **Hook 过程拦截**:启用 `.sdd-enforced` / `.db-verified`,禁止跳过
|
|
771
|
+
worktree、数据库前置核查和版本总 SQL 收口;运行时代码提交前必须有
|
|
772
|
+
test-report 证据。
|
|
773
|
+
3. **验收脚本判定**:在交付前执行
|
|
774
|
+
`~/.codex/hooks/superflow-verify-integration.sh <test-report.md>`。脚本不替代
|
|
775
|
+
真实测试命令,但用于阻断空泛报告、后续补测话术和缺证据交付。
|
|
776
|
+
4. **交付完整性判定**:提交前 staged 完所有变更后执行
|
|
777
|
+
`~/.codex/hooks/superflow-delivery-check.sh --check-staged <repo-root>`。脚本用于
|
|
778
|
+
阻断只改代码不回填当前 P 任务 `tasks.md`、`test-report.md`、
|
|
779
|
+
`sdd-quality-gate.md`,以及测试报告仍残留“待执行/待补充/后续补测”的交付。
|
|
780
|
+
并行研发 worktree 中,脚本还会阻断普通 Worker 修改根级汇总
|
|
781
|
+
`tasks.md`、`test-report.md`、`traceability-matrix.md`、`sdd-quality-gate.md`
|
|
782
|
+
和 `tests.md`,这些文件只允许 Leader/集成收口 worktree 最后统一更新。
|
|
783
|
+
|
|
784
|
+
缺少任一层时,不得把实现 prompt 标记为可执行完成态;已执行的 Worker
|
|
785
|
+
报告只能标记为 `Partially verified` 或 `Blocked`。
|
|
786
|
+
|
|
787
|
+
#### 通用规则(所有涉及接口实现的 prompt)
|
|
788
|
+
|
|
789
|
+
- **生成 prompt 时必须从 tests.md 提取 L3 接口用例**:superflow-implement 生成 `prompt/pXX-xxx.md` 时,必须读取 `tests.md` 中所有标注 `[自动化]` 的 L3 接口测试用例,将完整的 curl 命令(含 Method、URL、Headers、Body)、前置条件、断言标准嵌入 prompt 的"接口验证"章节。不得只写抽象的"接口验证必须覆盖 XXX"而不给出具体命令。
|
|
790
|
+
- **prompt 必须包含应用启动和进程验证步骤**:每个实现 prompt 必须明确要求:编译 → 停止旧进程 → 重新编译 → 启动应用 → 进程验证(PID、启动时间、端口绑定、日志时间戳)→ 健康检查。不得跳过启动直接测试,不得复用旧进程。
|
|
791
|
+
- **prompt 必须包含 Token 获取规范**:每个实现 prompt 必须包含完整的登录流程(/captcha/image + /login,Content-Type 为 application/x-www-form-urlencoded,userName 字段),不得省略或假设固定 token。
|
|
792
|
+
- **prompt 必须包含数据库验证步骤**:每个实现 prompt 必须要求执行 `SHOW CREATE TABLE`、`SELECT` 等数据库查询来验证数据状态,不能只靠接口返回值判断。
|
|
793
|
+
- **prompt 必须包含日志检查步骤**:每个实现 prompt 必须要求 `grep ERROR` 检查应用日志,不得只验证接口返回不检查日志。
|
|
794
|
+
- **prompt 必须包含验收脚本步骤**:每个实现 prompt 必须要求在完成前执行 `~/.codex/hooks/superflow-verify-integration.sh <test-report.md>`,脚本失败时不得提交、不得交付、不得写"后续补测"。
|
|
795
|
+
- **prompt 必须包含交付完整性检查步骤**:每个实现 prompt 必须要求在提交前执行 `~/.codex/hooks/superflow-delivery-check.sh --check-staged <repo-root>`,脚本失败时不得提交;必须先更新当前 P 任务的 `tasks.md`、`test-report.md`、`sdd-quality-gate.md`。
|
|
796
|
+
- **并行 Worker 禁止编辑根级汇总文档**:实现 prompt 必须要求普通研发 agent 只更新自己的 `embedded-changes/pXX-*` 目录;不得修改根级 `tasks.md`、`test-report.md`、`traceability-matrix.md`、`sdd-quality-gate.md`、`tests.md`。这些汇总文档由 Leader 在所有 P 任务合并后单独执行,必要时通过 `touch .sdd-aggregate-closeout` 打开汇总收口门禁。
|
|
797
|
+
- **任务完成定义必须包含集成测试证据**:prompt 中的"任务完成"条件必须明确列出:代码已修改、编译通过、**应用已启动**、**接口已真实调用**、**数据库已验证**、**日志无 ERROR**、test-report 已回填。缺少任一证据不得标记完成。
|
|
798
|
+
- **真实入口优先于测试端点**:涉及第三方、外部集成、支付、设备、回调、客户端或跨系统链路时,必须至少保留一条真实外部入口证据。测试 Controller、mock endpoint、绕过鉴权端点只能证明局部代码路径,不能替代真实入口验收。
|
|
799
|
+
- **区分 mock 通过与真实链路通过**:test-report 必须把 `Mock 验证`、`测试端点验证`、`真实入口验证` 分开记录;只有真实入口的请求参数、响应、日志 trace、DB 证据都闭环时,才能写 `Real integration passed`。
|
|
800
|
+
|
|
801
|
+
#### 阻塞规则
|
|
802
|
+
|
|
803
|
+
1. **如果 prompt 中缺少 L3 接口用例的完整 curl 命令** → 阻塞,补充后才能进入开发。
|
|
804
|
+
2. **如果 prompt 中缺少应用启动和进程验证步骤** → 阻塞,补充后才能进入开发。
|
|
805
|
+
3. **如果 prompt 中缺少 Token 获取规范** → 阻塞,补充后才能进入开发。
|
|
806
|
+
4. **如果 prompt 中缺少 `superflow-verify-integration.sh` 执行步骤** → 阻塞,补充后才能进入开发。
|
|
807
|
+
5. **如果 prompt 中缺少 `superflow-delivery-check.sh --check-staged` 执行步骤** → 阻塞,补充后才能进入开发。
|
|
808
|
+
6. **如果 Worker 报告"完成"但没有提供启动证据**(PID、启动时间、健康检查 UP)→ 标记未完成,必须补充。
|
|
809
|
+
7. **如果 Worker 报告"完成"但没有提供接口调用证据**(curl 命令、响应摘要)→ 标记未完成,必须补充。
|
|
810
|
+
8. **如果 Worker 报告"完成"但没有提供数据库验证证据**(SHOW CREATE / SELECT 结果)→ 标记未完成,必须补充。
|
|
811
|
+
9. **如果 Worker 没有执行或没有通过 `superflow-verify-integration.sh`** → 标记未完成,必须补充真实证据后重跑。
|
|
812
|
+
10. **如果 Worker 没有执行或没有通过 `superflow-delivery-check.sh --check-staged`** → 标记未完成,必须补齐当前 P 任务交付文档后重跑。
|
|
813
|
+
11. **如果跨系统链路只提供 mock/test controller 证据**,但缺少真实外部入口 payload、响应和 trace 日志 → 标记未完成,必须补充真实入口证据或写明外部阻塞。
|
|
814
|
+
|
|
815
|
+
### 文档完整性强制门禁(不可裁剪)
|
|
816
|
+
|
|
817
|
+
- **Do not skip any file in the embedded change document checklist regardless of perceived complexity.** Every embedded change must include `.openspec.yaml`, `api.md`, `spec.md`, `design.md`, `tasks.md`, `tests.md`, `review-checklist.md`, and `sdd-quality-gate.md`. No exceptions.
|
|
818
|
+
- **Do not mark any task or sub-change complete until all files in the checklist are generated and cross-referenced.** "编译成功" or "代码已修改" does not equal "文档完成".
|
|
819
|
+
- **Do not generate implementation prompts that only reference `api.md` and `spec.md`.** `design.md`, `tests.md`, `review-checklist.md`, and `sdd-quality-gate.md` must be in the required reading list of every implementation prompt.
|
|
820
|
+
- **Top-level documents are generated/indexed before parallel development and closed out after merge.** When creating embedded change docs, update root `tasks.md`, `traceability-matrix.md`, `sdd-quality-gate.md`, `tests.md`, and `test-report.md` only as initial index/placeholders. During parallel Worker implementation, do not edit these root aggregate documents; each Worker updates only its own `embedded-changes/pXX-*` files. After all related P worktrees merge, a Leader/closeout task updates root aggregate status in one separate commit.
|
|
821
|
+
|
|
822
|
+
## Shared References
|
|
823
|
+
|
|
824
|
+
Load only the reference needed for the current phase:
|
|
825
|
+
|
|
826
|
+
- Requirement gate: `references/feature-gated-workflow.md`
|
|
827
|
+
- API contract: `references/api-design-template.md`
|
|
828
|
+
- OpenSpec format: `references/openspec-format.md`
|
|
829
|
+
- Document quality: `references/quality-standards.md`
|
|
830
|
+
- Quality gate: `references/quality-gate.md`
|
|
831
|
+
- Batch prompt split: `references/batch-split-guide.md`
|
|
832
|
+
- Batch prompt template: `references/batch-prompt-template.md`
|
|
833
|
+
- Implementation orchestration: `references/orchestration.md`
|
|
834
|
+
- SQL risk review: `references/sql-risk-review-checklist.md`
|
|
835
|
+
- Project config: `references/project-config.md`
|
|
836
|
+
- Decision points: `references/decision-point.md`
|
|
837
|
+
- Dirty worktree policy: `references/dirty-worktree.md`
|
|
838
|
+
- Subagent progress: `references/subagent-progress.md`
|
|
839
|
+
- Context drift guard scripts:
|
|
840
|
+
`scripts/superflow-env.sh`, `scripts/superflow-handoff.sh`, `scripts/superflow-state.sh`,
|
|
841
|
+
`scripts/superflow-yaml-validate.sh`, `scripts/superflow-guard.sh`,
|
|
842
|
+
`scripts/superflow-archive.sh`, `scripts/superflow-status.sh`
|
|
843
|
+
|
|
844
|
+
When unsure, ask which phase the user is in: requirement clarification, SDD document generation, or implementation.
|