@chenmk/superflow 0.5.21 → 0.5.22
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 +2 -0
- package/INSTALL.md +2 -0
- package/assets/scripts/superflow-delivery-check.sh +36 -6
- package/assets/scripts/superflow-review-coverage.mjs +34 -0
- package/assets/scripts/superflow-test-report-lint.py +125 -4
- package/assets/skill-registry.json +23 -8
- package/assets/skills/openspec-apply-change/SKILL.md +7 -0
- package/assets/skills/openspec-archive-change/SKILL.md +13 -1
- package/assets/skills/superflow-archive/SKILL.md +17 -0
- package/assets/skills/superflow-docs/SKILL.md +11 -0
- package/assets/skills/superflow-implement/SKILL.md +11 -0
- package/assets/skills/superflow-pipeline/SKILL.md +6 -1
- package/assets/skills/superflow-pipeline/references/architecture-design-template.md +4 -2
- package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +6 -1
- package/assets/skills/superflow-pipeline/references/document-review-coverage.md +26 -0
- package/assets/skills/superflow-pipeline/references/document-templates.md +7 -0
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +41 -35
- package/assets/skills/superflow-pipeline/references/mock-strategy-guide.md +28 -74
- package/assets/skills/superflow-pipeline/references/orchestration.md +43 -101
- package/assets/skills/superflow-pipeline/references/quality-gate.md +8 -4
- package/assets/skills/superflow-pipeline/references/reviewer-checklist.md +99 -3
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +17 -0
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +16 -12
- package/assets/skills/superflow-pipeline/references/test-guide.md +82 -30
- package/assets/skills/superflow-pipeline/scripts/superflow-archive.sh +57 -10
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +23 -6
- package/assets/skills/superflow-quick-dev/SKILL.md +3 -3
- package/assets/skills/superflow-verify/SKILL.md +28 -12
- package/assets/skills-en/openspec-apply-change/SKILL.md +8 -0
- package/assets/skills-en/openspec-archive-change/SKILL.md +17 -1
- package/assets/skills-en/superflow-archive/SKILL.md +20 -0
- package/assets/skills-en/superflow-docs/SKILL.md +13 -0
- package/assets/skills-en/superflow-implement/SKILL.md +13 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +6 -0
- package/assets/skills-en/superflow-pipeline/references/architecture-design-template.md +3 -0
- package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +7 -0
- package/assets/skills-en/superflow-pipeline/references/document-review-coverage.md +32 -0
- package/assets/skills-en/superflow-pipeline/references/document-templates.md +8 -0
- package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +11 -0
- package/assets/skills-en/superflow-pipeline/references/mock-strategy-guide.md +41 -11
- package/assets/skills-en/superflow-pipeline/references/orchestration.md +11 -0
- package/assets/skills-en/superflow-pipeline/references/quality-gate.md +9 -0
- package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +122 -1
- package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +21 -0
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +5 -0
- package/assets/skills-en/superflow-pipeline/references/test-guide.md +106 -12
- package/assets/skills-en/superflow-pipeline/scripts/superflow-archive.sh +57 -10
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +23 -6
- package/assets/skills-en/superflow-quick-dev/SKILL.md +6 -3
- package/assets/skills-en/superflow-verify/SKILL.md +36 -12
- package/dist/app/cli.js +5 -5
- package/dist/app/cli.js.map +1 -1
- package/dist/app/commands/review-coverage.js +8 -3
- package/dist/app/commands/review-coverage.js.map +1 -1
- package/dist/app/commands/update.js +2 -0
- package/dist/app/commands/update.js.map +1 -1
- package/dist/build-info.json +1 -0
- package/dist/domains/config/cli-help.js +8 -0
- package/dist/domains/config/cli-help.js.map +1 -1
- package/dist/domains/managed-work/failure.js +9 -0
- package/dist/domains/managed-work/failure.js.map +1 -1
- package/dist/domains/managed-work/prompts.js +3 -0
- package/dist/domains/managed-work/prompts.js.map +1 -1
- package/dist/domains/managed-work/runner.js +29 -24
- package/dist/domains/managed-work/runner.js.map +1 -1
- package/dist/domains/managed-work/service.js +147 -19
- package/dist/domains/managed-work/service.js.map +1 -1
- package/dist/domains/review/coverage.js +12 -4
- package/dist/domains/review/coverage.js.map +1 -1
- package/dist/domains/review/report.js +67 -2
- package/dist/domains/review/report.js.map +1 -1
- package/dist/mcp/runtime-identity.js +19 -4
- package/dist/mcp/runtime-identity.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/platform/agent-process.js +48 -9
- package/dist/platform/agent-process.js.map +1 -1
- package/dist/platform/process-liveness.js +46 -0
- package/dist/platform/process-liveness.js.map +1 -1
- package/package.json +2 -1
- package/scripts/ensure-bin-modes.js +37 -2
- package/scripts/verify-changed.mjs +321 -0
|
@@ -1,8 +1,102 @@
|
|
|
1
1
|
# 代码评审清单
|
|
2
2
|
|
|
3
|
+
## 五维评审与独立上下文(规范入口)
|
|
4
|
+
|
|
5
|
+
适用于日常代码评审、Quick 验证、完整 SDD 和托管 Host 评审。输入为当前差异、
|
|
6
|
+
确认合同、适用路径规则与原始证据;输出复用现有 reviewer 报告或 Host review JSON。
|
|
7
|
+
本清单是五维、评审深度、隔离包和 finding 复核的唯一规范;superflow-verify 路由执行。
|
|
8
|
+
需求/设计符合度仍核对既有合同,五维不另建需求评审入口。脚本只校验路径、状态标记
|
|
9
|
+
与锚点,不能证明五维充分性;最终风险判断与结论由主 Agent / Host 持有。
|
|
10
|
+
|
|
11
|
+
### 五维覆盖
|
|
12
|
+
|
|
13
|
+
| 维度 | 关注点 | 最小证据 |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| security | 鉴权/权限边界、注入、敏感信息、外部输入 | 当前入口、参数绑定和权限调用链 |
|
|
16
|
+
| performance | 查询范围/N+1、处理规模、CPU/内存/I/O、资源上限 | 实际执行链、规模依据;风险需要时才跑基准 |
|
|
17
|
+
| correctness | 边界、失败恢复、状态、事务、并发、幂等 | 真实调用/写入链、对应断言与失败路径 |
|
|
18
|
+
| maintainability | 重复实现、命名、复杂度、异常处理、测试 seam | 现有复用点、具体源码与测试边界 |
|
|
19
|
+
| architecture | 模块 owner、调用方向、契约兼容、抽象边界 | 调用方/消费方及职责证据 |
|
|
20
|
+
|
|
21
|
+
每维记录 CHECKED / NOT_APPLICABLE / BLOCKED 与源码/证据依据。CHECKED 表示已检查,
|
|
22
|
+
不自动表示无缺陷;小改动可以一名 reviewer 覆盖五维,不按维度强制派五名 Agent。
|
|
23
|
+
专业视角 reviewer 可只检查明确分配的维度;主 Agent 必须合并覆盖记录,补齐遗漏,
|
|
24
|
+
不能把“未分配/未读取”当不适用。完整 SDD 的真实验收义务保持不变。
|
|
25
|
+
|
|
26
|
+
### 按实际影响选择深度
|
|
27
|
+
|
|
28
|
+
`superflow review-coverage` 的 `risk.basis=path-hint`、
|
|
29
|
+
`risk.requiresSemanticAssessment=true` 表示路径定位提示。主 Agent 读取差异、真实调用方
|
|
30
|
+
及写入/消费路径,记录提示档位、实际档位、源码依据和调整理由;文件名、行数或实现者
|
|
31
|
+
自述不作最终风险裁决。风险未知时至少按中档补证据,无法判断记录 NEEDS_CONTEXT。
|
|
32
|
+
|
|
33
|
+
| 实际影响 | 深度 |
|
|
34
|
+
|---|---|
|
|
35
|
+
| 小范围且已证实无契约、写入、并发、安全、跨模块影响 | 低档,可内联;仍覆盖适用五维 |
|
|
36
|
+
| 其余已明确范围的改动 | 中档,使用一个隔离的独立 reviewer |
|
|
37
|
+
| 有证据的公共契约破坏、迁移/数据一致性、锁/共享状态、安全边界或跨模块影响 | 高档,独立 reviewer + 对命名风险的专项视角;存在独立风险簇且宿主支持时才扇出 |
|
|
38
|
+
|
|
39
|
+
例如:只追加参数化 SELECT 条件,确认契约/schema/写路径未变且消费范围已核对,
|
|
40
|
+
可由 Mapper 路径提示 high 调整为实际 medium;普通文件新增原子占用/共享状态写入,
|
|
41
|
+
即使路径提示 low 也应升 high。上述示例须由当前源码证据确认,不能按描述自动套档。
|
|
42
|
+
高档不固定代理数、模型名或模型供应商;使用宿主原生配置。用户覆盖深度时记录理由,
|
|
43
|
+
必查范围、合同义务与已知风险不随深度覆盖而删除。
|
|
44
|
+
|
|
45
|
+
### 隔离包与派发
|
|
46
|
+
|
|
47
|
+
主 Agent 在临时目录组织下列包,再用宿主原生子代理派发;新 reviewer 不继承实现聊天
|
|
48
|
+
历史(支持 fork_turns 时用 none)。不可用时生成同一包供独立 reviewer 使用,明确独立
|
|
49
|
+
评审尚未执行;不能把主 Agent 自评改名为独立评审或把它计为完整覆盖。
|
|
50
|
+
|
|
51
|
+
1. 已确认的目标、范围、排除项、真实合同路径和本轮评审问题;自述标记为待核验。
|
|
52
|
+
2. baseline/head 或工作树状态、准确 diff、枚举文件和相关 bundle;不能只给 diff stat。
|
|
53
|
+
3. 当前适用的路径规则、相关源码/调用方/消费方路径、必要环境与原始测试证据路径。
|
|
54
|
+
4. 实际风险判断与本 reviewer 分配的维度/文件;规范清单及四状态/锚点报告要求。
|
|
55
|
+
|
|
56
|
+
包只保留必要内容与路径,不复制全部仓库、个人规则目录、凭据或整段聊天;遵守原任务
|
|
57
|
+
可读取范围。reviewer 从 diff 起读,只因命名风险扩查相关调用方,记录扩查原因;发现包
|
|
58
|
+
与当前源码/合同漂移时返回 NEEDS_CONTEXT,不凭旧包评当前代码。Reviewer 只读,不改
|
|
59
|
+
源码、运行应用、查写业务库或启动嵌套监督;需要新的运行证据交回实施方。
|
|
60
|
+
|
|
61
|
+
### 主 Agent 复核和合并
|
|
62
|
+
|
|
63
|
+
读取全部 reviewer 的覆盖表、原始 finding 与 concern;逐条重读 file:line、调用方、
|
|
64
|
+
冻结合同和相应原始测试证据,尝试用实际源码证伪。不能因“测试全绿”直接接受或拒绝。
|
|
65
|
+
按“根因 + 受影响路径 + 业务后果”合并重复项,保留各 reviewer 的来源和完整影响范围;
|
|
66
|
+
不能只按相同行号、措辞或严重度去重。冲突的判断列出证据,补查后裁决,不取多数票。
|
|
67
|
+
|
|
68
|
+
每项记录 accepted / rejected / needs-evidence 与理由;无证据的结论标记待证,不伪造
|
|
69
|
+
严重度。实际影响决定严重度,建议与阻断缺陷分开;缺陷无第二调用方时不强推通用抽象。
|
|
70
|
+
五维与纳入文件全部有记录后,主 Agent 一次提交全部实质 finding。托管继续使用已有
|
|
71
|
+
finding ID / acceptanceContractRefs,协议、预算和状态 owner 不变;子代理报告不能直接
|
|
72
|
+
晋升 pass,格式检查通过也不等于代码正确。只重跑失效或合同要求的证据。
|
|
73
|
+
|
|
74
|
+
### Reviewer 报告形状
|
|
75
|
+
|
|
76
|
+
沿用现有四状态报告,不另建机器协议;托管只在临时报告完成这些记录,最终投影进原
|
|
77
|
+
Host review JSON 的 summary/findings/coverage。`--report` 只检查原状态与锚点,五维完整性、
|
|
78
|
+
实际风险与结论仍由主 Agent 核实。历史未带五维记录的报告保留,但不能称已按本规范全查。
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
DONE
|
|
82
|
+
## Impact
|
|
83
|
+
路径提示 / 实际深度 / 源码依据 / 调整理由 / diff 与合同版本
|
|
84
|
+
## Axes
|
|
85
|
+
维度 | CHECKED / NOT_APPLICABLE / BLOCKED | 文件范围与依据
|
|
86
|
+
# 逐项填写 security / performance / correctness / maintainability / architecture
|
|
87
|
+
## Findings
|
|
88
|
+
- src/example.ts:12: [维度][严重度] 根因、后果、证据、修复与验收建议
|
|
89
|
+
# 无 finding 时写 None;不要用带 - 的占位 finding
|
|
90
|
+
## Concerns
|
|
91
|
+
未解决问题与缺少证据;DONE_WITH_CONCERNS 必须提供此段
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
旧专项检查按适用路径继续使用;不能用任一不适用项强加运行要求,也不能删减冻结的
|
|
95
|
+
必查项。以下细则提供五维的场景检查,不另持有分档、派发或最终结论。
|
|
96
|
+
|
|
3
97
|
## 使用方式
|
|
4
98
|
|
|
5
|
-
|
|
99
|
+
每批实现后按冻结合同与适用路径检查;主 Agent 复核全部实质 finding 后决定是否需要整改。建议、不适用项与阻断缺陷分开记录,不能用计数直接裁决交付。
|
|
6
100
|
|
|
7
101
|
---
|
|
8
102
|
|
|
@@ -31,7 +125,7 @@
|
|
|
31
125
|
|---|--------|----------|----------|
|
|
32
126
|
| 5 | 是否破坏历史枚举 | 检查枚举修改是否影响既有值 | 不删除/重命名已有枚举值,新增值只能追加 |
|
|
33
127
|
| 6 | 是否 fail-open | 检查服务间调用失败时的处理 | 失败时返回错误/降级,不返回成功或默认放行 |
|
|
34
|
-
| 7 | 是否缺少幂等 | 检查创建/更新/消费操作 |
|
|
128
|
+
| 7 | 是否缺少幂等 | 检查创建/更新/消费操作 | 按业务幂等键独立短事务原子占用并明确成功/失败/重试;唯一索引仅作合同认可的兜底 |
|
|
35
129
|
| 8 | 是否缺少事务边界 | 检查多表操作和消息发送 | @Transactional 覆盖正确,消息发送不在事务内或已做补偿 |
|
|
36
130
|
|
|
37
131
|
## 架构边界检查
|
|
@@ -169,7 +263,7 @@
|
|
|
169
263
|
```
|
|
170
264
|
批次评审报告:P{n} - {名称}
|
|
171
265
|
|
|
172
|
-
|
|
266
|
+
检查项总数:按本轮适用范围统计
|
|
173
267
|
通过:X 项
|
|
174
268
|
未通过:X 项
|
|
175
269
|
不适用:X 项
|
|
@@ -183,3 +277,5 @@
|
|
|
183
277
|
|
|
184
278
|
结论:通过 / 不通过(需修复后重新评审)
|
|
185
279
|
```
|
|
280
|
+
|
|
281
|
+
报告容器围栏使用空格缩进并明确闭合。列表/引用中含制表符的围栏目前明确拒绝结构核验;先规范格式,不用早期 DONE/PASS 绕过。原始执行日志中的制表符保留,不能为修格式改写证据。
|
|
@@ -45,6 +45,23 @@ canonical_sources:
|
|
|
45
45
|
- If this document conflicts with canonical sources, stop and return to
|
|
46
46
|
`$superflow-docs`; do not let implementation prompts carry the conflict forward.
|
|
47
47
|
|
|
48
|
+
## Directory Changes / 目录范围
|
|
49
|
+
|
|
50
|
+
逐项列出 Created / Modified / Deleted / Not created 的模块和关键文件,说明职责与复用依据。
|
|
51
|
+
可用树或列表,但路径不能只列名称:标明各项动作、owner 与原因;无变更类别明确写 None。
|
|
52
|
+
Not created 记录已考虑但不新增的模块、工具、缓存、状态或平行入口及拒绝理由。
|
|
53
|
+
纯实现内 helper/方法调整仍回填实际清单,不自动扩大业务范围;已确认模块内且不改变合同
|
|
54
|
+
的实现细节不重开需求确认,若需更新冻结 HOW 则由文档 owner 刷新交接并走既有复审。
|
|
55
|
+
新增职责、跨模块依赖、允许路径范围或验收义务变化时先回澄清/文档确认,不能以普通 helper
|
|
56
|
+
名义扩展。运行保护、源覆盖与已有确认规则保持适用;目录清单不成为另一套状态。
|
|
57
|
+
|
|
58
|
+
| Action | Module/file | Owner and responsibility | Reuse/evidence or rejection reason |
|
|
59
|
+
|---|---|---|---|
|
|
60
|
+
| Created | None / `<path>` | | |
|
|
61
|
+
| Modified | None / `<path>` | | |
|
|
62
|
+
| Deleted | None / `<path>` | | |
|
|
63
|
+
| Not created | None / `<candidate>` | | |
|
|
64
|
+
|
|
48
65
|
## Source-Level HOW
|
|
49
66
|
|
|
50
67
|
| Requirement/Scenario | Code anchor | Current behavior | Target HOW | Files/methods | Risk |
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# 测试执行与结果记录模板
|
|
2
2
|
|
|
3
|
+
先读 [test-guide.md](test-guide.md),继承 tests.md / Quick Spec 已冻结的验证信号。
|
|
4
|
+
下列模板按适用用例填写,不适用项写源码依据;必测项缺环境记录 BLOCKED/PARTIAL。
|
|
5
|
+
沿既有 coverage/receipt 核对事实,不用模板示例新建测试策略或降低冻结门禁。
|
|
6
|
+
|
|
3
7
|
记录测试的执行环境、执行过程和结果,作为交付物的一部分。
|
|
4
8
|
|
|
5
9
|
运行验收必须使用 tests.md 冻结的环境,不能擅自以本地容器或 Mock 替代共享开发环境。
|
|
@@ -21,7 +25,7 @@
|
|
|
21
25
|
| 执行人 | ____ |
|
|
22
26
|
| 操作系统 | Linux / macOS / Windows |
|
|
23
27
|
| JDK 版本 | 17 |
|
|
24
|
-
| 数据库 | MySQL 8.0
|
|
28
|
+
| 数据库 | tests.md 冻结的引擎/主版本(如 MySQL 8.0) |
|
|
25
29
|
| Spring Profile | dev / test / cmk |
|
|
26
30
|
| 应用端口 | 9527 |
|
|
27
31
|
| 上下文路径 | / |
|
|
@@ -195,9 +199,9 @@ HTTP 200、字段非空、mock-only、DB-only、`BUILD SUCCESS`、`Tests are ski
|
|
|
195
199
|
- 验证时间:
|
|
196
200
|
```
|
|
197
201
|
|
|
198
|
-
## 任务完成 Checklist
|
|
202
|
+
## 任务完成 Checklist(冻结的适用项全部满足)
|
|
199
203
|
|
|
200
|
-
|
|
204
|
+
先按 tests.md 的用例和信号确定适用项;全部必测项成立才能完成。纯函数不要求应用、登录或数据库;完整 SDD 的真实入口义务不得删减。独立核验复用有效原始证据,只有失效或合同明确要求的路径才重跑。
|
|
201
205
|
|
|
202
206
|
### 开发阶段(Worker 执行)
|
|
203
207
|
- [ ] 已从 tests.md 提取本批次用例 ID、自动化命令和断言
|
|
@@ -208,11 +212,11 @@ HTTP 200、字段非空、mock-only、DB-only、`BUILD SUCCESS`、`Tests are ski
|
|
|
208
212
|
- [ ] 代码自审通过(无 CRITICAL/HIGH 问题,检查空指针/异常/事务/日志)
|
|
209
213
|
- [ ] 编译通过(`mvn clean compile -DskipTests` BUILD SUCCESS)
|
|
210
214
|
- [ ] 已执行同一命令确认 GREEN,并回填通过证据
|
|
211
|
-
- [ ]
|
|
212
|
-
- [ ]
|
|
213
|
-
- [ ] 进程已验证(PID
|
|
215
|
+
- [ ] 需重启时仅通过 owner 校验的清理入口停止本任务进程,确认端口释放
|
|
216
|
+
- [ ] 已启动当前待测构建,或核验健康实例的构建/配置未变后复用
|
|
217
|
+
- [ ] 进程已验证(PID/启动指纹、当前构建与端口绑定正确)
|
|
214
218
|
- [ ] 健康检查通过(`curl /actuator/health` 返回 UP)
|
|
215
|
-
- [ ]
|
|
219
|
+
- [ ] 日志与本次验证的实例/构建身份一致
|
|
216
220
|
|
|
217
221
|
### 接口测试阶段(Worker 逐项执行)
|
|
218
222
|
- [ ] Token 已获取(完整的 `/captcha/image` + `/login` 流程,token 非空)
|
|
@@ -239,15 +243,15 @@ HTTP 200、字段非空、mock-only、DB-only、`BUILD SUCCESS`、`Tests are ski
|
|
|
239
243
|
- [ ] 包含:进程验证证据(PID、启动时间、端口)
|
|
240
244
|
|
|
241
245
|
### 独立验证阶段(Tester 执行)
|
|
242
|
-
- [ ] Tester
|
|
246
|
+
- [ ] Tester 独立核对全部必测用例与原始证据,重跑失效或合同指定路径
|
|
243
247
|
- [ ] Tester 客观报告通过/失败
|
|
244
248
|
|
|
245
249
|
### Leader 验证阶段(Leader 执行)
|
|
246
|
-
- [ ] Leader
|
|
247
|
-
- [ ] Leader
|
|
250
|
+
- [ ] Leader 按合同与风险检查关键用例和未关闭 finding
|
|
251
|
+
- [ ] Leader 确认运行实例对应当前待测构建/配置
|
|
248
252
|
- [ ] Leader 确认接口有真实调用证据
|
|
249
253
|
|
|
250
|
-
|
|
254
|
+
**冻结的全部适用项通过、无必测阻塞后,才能标记任务完成。**
|
|
251
255
|
|
|
252
256
|
## 质量红线
|
|
253
257
|
|
|
@@ -260,6 +264,6 @@ HTTP 200、字段非空、mock-only、DB-only、`BUILD SUCCESS`、`Tests are ski
|
|
|
260
264
|
- 不允许用测试 Controller、mock endpoint、绕过鉴权端点证明真实外部入口已通过
|
|
261
265
|
- 不允许把泛化外部失败当作通过,除非需求明确要求该失败结果
|
|
262
266
|
- 不允许只检查主仓数据库结构就关闭跨仓共享表任务;必须覆盖全部消费仓实体/Mapper/SQL
|
|
263
|
-
- **不允许"编译成功 + 单元测试通过"
|
|
267
|
+
- **不允许"编译成功 + 单元测试通过"就标记任务完成,必须完成冻结的全部适用验证项**
|
|
264
268
|
|
|
265
269
|
执行凭证格式与持久化前后对照遵循 [document-review-coverage.md](document-review-coverage.md),不要另建格式;历史局部结论保留,以最后一个中英文一致的验证结果为最终汇总。
|
|
@@ -1,30 +1,82 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
# 测试选择与验证闭环
|
|
2
|
+
|
|
3
|
+
## 适用范围与唯一 owner
|
|
4
|
+
|
|
5
|
+
在生成 tests.md、实现任务开始、整改和交付核验时读取本指南。输入是已确认需求、
|
|
6
|
+
源码差异、项目测试与冻结合同;输出写入现有 tests.md / Quick Spec 和 test-report.md。
|
|
7
|
+
纯文档修改只核验文档合同;纯函数只核验对应 seam,不虚构应用或数据库。
|
|
8
|
+
|
|
9
|
+
superflow-docs 冻结验证方案;实施方执行并留存证据;superflow-verify / Host 判断
|
|
10
|
+
充分性和历史证据适用性;既有 coverage/receipt/lint 核对确定事实,状态仍由原状态机持有。
|
|
11
|
+
数据库机器合同只引用 [document-review-coverage.md](document-review-coverage.md#数据库分层合同),
|
|
12
|
+
沿用 testLayer、mockBoundary 和 execution-receipt.v1,不引入另一套级别或证据格式。
|
|
13
|
+
本指南由 Superflow 分发;无需安装 ake 的验证技能或创建 .ake 记忆。
|
|
14
|
+
|
|
15
|
+
## 开工前选择信号
|
|
16
|
+
|
|
17
|
+
先检索现有测试、构建接线、环境配置和项目规则,复用相同 seam、命令与工具。
|
|
18
|
+
在生产代码修改前,把每个受影响行为映射到下面的信号,并冻结用例 ID、命令、断言和证据位置。
|
|
19
|
+
不适用项写明源码依据;环境缺失的必测项是 BLOCKED/PARTIAL,不能写“不适用”。
|
|
20
|
+
已冻结的必测项不得由实施方删减;发现遗漏返回文档 owner 修复合同。
|
|
21
|
+
|
|
22
|
+
| 改动/风险 | 需要冻结的信号 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| 纯函数或局部算法 | 窄化单测、边界/失败断言、项目适用的构建与静态检查 |
|
|
25
|
+
| 组件注册、装配、配置 | 上述检查 + 真实应用/上下文启动、就绪条件 |
|
|
26
|
+
| SQL、Mapper、持久化、事务、CAS、数据驱动行为 | 窄化逻辑检查 + 生产 statement 的同类型数据库验证;完整 SDD 还覆盖真实消费入口 |
|
|
27
|
+
| API、公开字段或鉴权 | 项目已有契约测试/快照 + 真实受影响入口;新增契约建立基线 |
|
|
28
|
+
| 新增贯穿接口、业务与存储的能力 | 构建、单测、装配、真实数据库、接口契约和至少一条真实主流程 |
|
|
29
|
+
| Bug 修复 | 同一症状的 RED → GREEN + 受影响回归;环境错误不算业务 RED |
|
|
30
|
+
| MQ、设备、回调、缓存或第三方语义 | 冻结真实协议/后端/入口验证与可隔离边界,缺环境保留阻塞 |
|
|
31
|
+
| 仅报告格式或测试隔离变更 | 核验受影响合同/证据,不自动重跑无关业务链路 |
|
|
32
|
+
|
|
33
|
+
保留现有项目用例的层级编号,不把 ake 的 L1/L3/L5/L7/L8/L10 编号移植进 Superflow。
|
|
34
|
+
数据库 testLayer 与入口验收 level 是不同维度,不能用同一编号掩盖真实后端缺失。
|
|
35
|
+
|
|
36
|
+
## Mock 与环境
|
|
37
|
+
|
|
38
|
+
[Mock 指南](mock-strategy-guide.md)只说明隔离边界。逻辑单测可 mock 数据访问依赖,
|
|
39
|
+
但该结果不能证明 SQL、事务或落库。必测数据库 case 禁止 mock 生产 Service/Mapper;
|
|
40
|
+
允许隔离的外部客户端由 mockBoundary 冻结。MySQL 不可用 H2/SQLite 的通过结果替代。
|
|
41
|
+
真实同引擎容器数据库不是 Mock;必须冻结引擎/主版本、schema 来源、生产 statement 和清理。
|
|
42
|
+
有共享环境要求就使用该环境;没有该要求且合同认可容器方案时,复用项目已有容器基建。
|
|
43
|
+
没有可执行环境时保留局部逻辑证据,真实数据库用例 BLOCKED/PARTIAL,不降低验收等级。
|
|
44
|
+
|
|
45
|
+
## 可留存的业务场景测试
|
|
46
|
+
|
|
47
|
+
优先把关键业务主流程和 Bug 复现写成项目内已有框架的可重复回归测试,复用现有目录、
|
|
48
|
+
夹具、登录、查库和运行脚本。已有等价测试时扩展它;不新建平行场景框架或公共 helper。
|
|
49
|
+
低层测试已能证明的纯逻辑留在低层。Java 可沿已有 JUnit/RestAssured/JdbcTemplate;
|
|
50
|
+
其他技术栈使用项目原生工具,不为执行本指南强制引入 Java 依赖。
|
|
51
|
+
|
|
52
|
+
业务场景分别断言:响应中的具体业务值;同业务 ID 的数据库状态;合同要求的消息、
|
|
53
|
+
日志或其他副作用。数据库前后值、影响行数、非目标记录保持不变按规范合同冻结。
|
|
54
|
+
HTTP 200、非空、调用次数或 affectedRows=1 都不能单独证明正确落库。
|
|
55
|
+
|
|
56
|
+
主体数据按每轮/用例唯一化,稳定基础数据按业务键或逻辑名解析,缺失在 setup 阶段报错。
|
|
57
|
+
复用项目环境配置与登录获取命令;只记录凭据来源,不把密码/token 固化进文档或源码。
|
|
58
|
+
共享基础数据不自动 seed 或删除;造数权限、owner、清理范围与失败清理由合同明确。
|
|
59
|
+
依赖环境的场景测试用项目已有 tag/profile/脚本单独执行,避免污染纯单测;分组不等于跳过
|
|
60
|
+
交付必测项,完整验收必须显式运行所需分组并核对执行数。轮次互不依赖、不共享可变主体。
|
|
61
|
+
|
|
62
|
+
## 执行、复核与证据继承
|
|
63
|
+
|
|
64
|
+
先执行窄化测试,再执行合同要求的构建、启动和真实调用;读退出码、执行数、原始输出,
|
|
65
|
+
按 [执行模板](test-execution-template.md)回填用例证据。断言冻结后不为迎合错误输出而修改。
|
|
66
|
+
通过结论只能覆盖实际执行的层级;零用例、skipped 和未执行项不能晋升 PASS。
|
|
67
|
+
|
|
68
|
+
整改先建立“当前差异 → 失效证据 → 重跑命令”映射。生产代码、SQL、配置、鉴权、公开
|
|
69
|
+
契约、运行入口或环境变化使相关证据失效;仅报告格式修改不自动失效旧源码的运行结果。
|
|
70
|
+
历史证据必须匹配源码/构建、后端/入口与合同,由独立评审确认适用;不能放行另一源码版本。
|
|
71
|
+
健康实例与待测构建一致时复用,代码/配置或身份不匹配时重启并重验;停止仅使用合同的
|
|
72
|
+
owner 校验与清理入口,不能用宽泛 pkill/killall。纯函数不要求进程;必测真实入口不能豁免。
|
|
73
|
+
评审方只读核验源码和原始证据,实施方负责运行与清理;独立评审不等于机械重跑全部环境。
|
|
74
|
+
|
|
75
|
+
## 失败修复
|
|
76
|
+
|
|
77
|
+
按用例前置条件复现,读取实际 SQL/绑定参数、事务边界、响应和日志定位根因。
|
|
78
|
+
数据库失败先查生产 statement、写入字段、schema 与同 ID 前后值,不凭症状直接加事务
|
|
79
|
+
注解或换 Mapper 方法。修复后跑同一路径和受影响回归;方案变化先修复规范合同。
|
|
80
|
+
不跳过失败项、不改断言迎合实现、不隐瞒阻塞。
|
|
81
|
+
|
|
82
|
+
跨轮复用对命令/目录/调用环境敏感的检查时,按 [声明式上下文](document-review-coverage.md#声明式执行上下文与证据复用)冻结 executionContext;保留历史证据,但不得把未绑定旧记录标为新上下文完整通过。
|
|
@@ -29,7 +29,8 @@ resolve_doc_path() {
|
|
|
29
29
|
printf '%s\n' "$CHANGE_DIR/$value"
|
|
30
30
|
return 0
|
|
31
31
|
fi
|
|
32
|
-
if [[ -f "$value" ]]; then
|
|
32
|
+
if [[ "$value" == /* && -f "$value" ]]; then
|
|
33
|
+
[[ ! -L "$value" ]] || die "symbolic document link rejected: $value"
|
|
33
34
|
printf '%s\n' "$value"
|
|
34
35
|
return 0
|
|
35
36
|
fi
|
|
@@ -47,11 +48,13 @@ annotate_frontmatter() {
|
|
|
47
48
|
local tmp
|
|
48
49
|
|
|
49
50
|
[[ -f "$file" ]] || return 0
|
|
51
|
+
[[ ! -L "$file" ]] || die "symbolic document link rejected: $file"
|
|
50
52
|
tmp="$(mktemp)"
|
|
51
53
|
chmod 600 "$tmp"
|
|
52
54
|
|
|
53
55
|
if head -1 "$file" | grep -q '^---'; then
|
|
54
56
|
awk -v archive="$archive_name" -v status_field="$status_field" '
|
|
57
|
+
closed { print; next }
|
|
55
58
|
/^archived-with:/ { next }
|
|
56
59
|
status_field != "" && /^status:/ { next }
|
|
57
60
|
NR == 1 && /^---/ { print; next }
|
|
@@ -59,6 +62,7 @@ annotate_frontmatter() {
|
|
|
59
62
|
print "archived-with: " archive
|
|
60
63
|
if (status_field != "") print "status: " status_field
|
|
61
64
|
print
|
|
65
|
+
closed = 1
|
|
62
66
|
next
|
|
63
67
|
}
|
|
64
68
|
{ print }
|
|
@@ -129,13 +133,45 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
129
133
|
STATE="$SCRIPT_DIR/superflow-state.sh"
|
|
130
134
|
GUARD="$SCRIPT_DIR/superflow-guard.sh"
|
|
131
135
|
VALIDATE="$SCRIPT_DIR/superflow-yaml-validate.sh"
|
|
132
|
-
|
|
136
|
+
[[ ! -L "${CHANGE_DIR%/}" ]] || die "canonical change directory required; symbolic link rejected"
|
|
137
|
+
CHANGE_DIR="$(cd "$CHANGE_DIR" && pwd -L)"
|
|
138
|
+
for component in "$CHANGE_DIR" "$(dirname "$CHANGE_DIR")" "$(dirname "$(dirname "$CHANGE_DIR")")" "$(dirname "$(dirname "$(dirname "$CHANGE_DIR")")")"; do
|
|
139
|
+
[[ ! -L "$component" ]] || die "canonical directory required; symbolic link rejected: $component"
|
|
140
|
+
done
|
|
141
|
+
CHANGE_DIR="$(cd "$CHANGE_DIR" && pwd -P)"
|
|
133
142
|
CHANGE_NAME="$(basename "$CHANGE_DIR")"
|
|
134
|
-
|
|
143
|
+
IS_MOVED=false
|
|
144
|
+
IS_STANDARD=false
|
|
145
|
+
case "$CHANGE_DIR" in
|
|
146
|
+
*/openspec/changes/archive/*)
|
|
147
|
+
[[ "$(basename "$(dirname "$CHANGE_DIR")")" == archive ]] || die "canonical archive directory required"
|
|
148
|
+
PROJECT_ROOT="$(cd "$CHANGE_DIR/../../../.." && pwd -P)"
|
|
149
|
+
IS_MOVED=true
|
|
150
|
+
;;
|
|
151
|
+
*/openspec/changes/*)
|
|
152
|
+
[[ "$(basename "$(dirname "$CHANGE_DIR")")" == changes ]] || die "canonical change directory required"
|
|
153
|
+
IS_STANDARD=true
|
|
154
|
+
PROJECT_ROOT="$(cd "$CHANGE_DIR/../../.." && pwd -P)"
|
|
155
|
+
;;
|
|
156
|
+
*) PROJECT_ROOT="$(cd "$CHANGE_DIR/../../.." && pwd -P)" ;;
|
|
157
|
+
esac
|
|
158
|
+
for component in "$PROJECT_ROOT/openspec" "$PROJECT_ROOT/openspec/changes" "$PROJECT_ROOT/openspec/changes/archive"; do
|
|
159
|
+
[[ ! -L "$component" ]] || die "canonical directory required; symbolic link rejected: $component"
|
|
160
|
+
done
|
|
135
161
|
ARCHIVE_ROOT="$PROJECT_ROOT/openspec/changes/archive"
|
|
136
162
|
ARCHIVE_NAME="$CHANGE_NAME"
|
|
137
163
|
|
|
138
164
|
"$VALIDATE" "$CHANGE_DIR"
|
|
165
|
+
if [[ "$IS_STANDARD" == true && ( "$(field_value archived)" == true || "$(field_value phase)" == done ) ]]; then
|
|
166
|
+
die "active standard directory has archived state: $CHANGE_DIR; confirm the physical archive location first. If this was state-only closeout, repair through the existing state owner: SUPERFLOW_FORCE_PHASE=1 $STATE set '$CHANGE_DIR' phase archive; $STATE set '$CHANGE_DIR' archived false; then rerun --apply with OpenSpec available"
|
|
167
|
+
fi
|
|
168
|
+
if [[ "$IS_STANDARD" == true ]] && ! command -v openspec >/dev/null 2>&1; then
|
|
169
|
+
die "OpenSpec is required for standard change directory: $CHANGE_DIR; install/restore openspec, then rerun this command"
|
|
170
|
+
fi
|
|
171
|
+
if [[ "$(field_value archived)" == true && "$(field_value phase)" == done ]]; then
|
|
172
|
+
printf 'already archived: %s; no changes required\n' "$CHANGE_DIR"
|
|
173
|
+
exit 0
|
|
174
|
+
fi
|
|
139
175
|
"$GUARD" "$CHANGE_DIR" archive
|
|
140
176
|
|
|
141
177
|
printf 'Archive summary:\n'
|
|
@@ -148,7 +184,11 @@ if [[ "$CHANGE_DIR" == "$PROJECT_ROOT/openspec/changes/$CHANGE_NAME" ]] && comma
|
|
|
148
184
|
printf '%s\n' "- openspec_archive: openspec archive $CHANGE_NAME --yes"
|
|
149
185
|
ARCHIVE_NAME="$(date -u '+%Y-%m-%d')-$CHANGE_NAME"
|
|
150
186
|
else
|
|
151
|
-
|
|
187
|
+
if [[ "$IS_MOVED" == true ]]; then
|
|
188
|
+
printf '%s\n' "- openspec_archive: already moved; recover remaining closeout"
|
|
189
|
+
else
|
|
190
|
+
printf '%s\n' "- openspec_archive: unavailable; fallback to state-only archive"
|
|
191
|
+
fi
|
|
152
192
|
fi
|
|
153
193
|
|
|
154
194
|
if [[ "$MODE" == "--dry-run" ]]; then
|
|
@@ -159,13 +199,20 @@ fi
|
|
|
159
199
|
|
|
160
200
|
if [[ "$CHANGE_DIR" == "$PROJECT_ROOT/openspec/changes/$CHANGE_NAME" ]] && command -v openspec >/dev/null 2>&1; then
|
|
161
201
|
(cd "$PROJECT_ROOT" && openspec archive "$CHANGE_NAME" --yes)
|
|
162
|
-
|
|
163
|
-
if [[ -d "$ARCHIVE_ROOT
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
202
|
+
candidates=()
|
|
203
|
+
if [[ -d "$ARCHIVE_ROOT" ]]; then
|
|
204
|
+
for candidate in "$ARCHIVE_ROOT"/*; do
|
|
205
|
+
[[ -d "$candidate" ]] || continue
|
|
206
|
+
candidate_name="$(basename "$candidate")"
|
|
207
|
+
if [[ "$candidate_name" == "$CHANGE_NAME" || "$candidate_name" == *-"$CHANGE_NAME" ]]; then
|
|
208
|
+
[[ ! -L "$candidate" ]] || die "canonical archive directory required; symbolic link rejected"
|
|
209
|
+
candidates+=("$candidate")
|
|
210
|
+
fi
|
|
211
|
+
done
|
|
167
212
|
fi
|
|
168
|
-
[[
|
|
213
|
+
[[ "${#candidates[@]}" -gt 0 ]] || die "openspec archive completed but archive dir was not found; supply explicit archive path"
|
|
214
|
+
[[ "${#candidates[@]}" -eq 1 ]] || die "multiple archive targets found; supply explicit archive path"
|
|
215
|
+
archived_dir="${candidates[0]}"
|
|
169
216
|
ARCHIVE_NAME="$(basename "$archived_dir")"
|
|
170
217
|
CHANGE_DIR="$(cd "$archived_dir" && pwd)"
|
|
171
218
|
annotate_archive_docs "$ARCHIVE_NAME"
|
|
@@ -235,16 +235,33 @@ verification_report_path() {
|
|
|
235
235
|
|
|
236
236
|
require_closeout_markers() {
|
|
237
237
|
local report="${1:-$CHANGE_DIR/test-report.md}"
|
|
238
|
+
local lint output
|
|
238
239
|
if [[ ! -f "$report" ]]; then
|
|
239
240
|
issues+=("verification report path does not exist: $report")
|
|
240
241
|
return 0
|
|
241
242
|
fi
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
243
|
+
for lint in \
|
|
244
|
+
"${SUPERFLOW_REPORT_LINT:-$SCRIPT_DIR/../../../scripts/superflow-test-report-lint.py}" \
|
|
245
|
+
"$SCRIPT_DIR/../../../hooks/superflow-test-report-lint.py"; do
|
|
246
|
+
[[ -f "$lint" ]] || continue
|
|
247
|
+
if ! output="$(python3 - "$lint" "$report" <<'PYCLOSEOUT'
|
|
248
|
+
import runpy, sys
|
|
249
|
+
from pathlib import Path
|
|
250
|
+
module = runpy.run_path(sys.argv[1])
|
|
251
|
+
text = Path(sys.argv[2]).read_text()
|
|
252
|
+
if module["final_report_result"](text) != "PASS":
|
|
253
|
+
print("verification result PASS marker not found in verification report")
|
|
254
|
+
if module["archive_readiness_result"](text) != "PASS":
|
|
255
|
+
print("archive readiness PASS marker not found in verification report")
|
|
256
|
+
PYCLOSEOUT
|
|
257
|
+
)"; then
|
|
258
|
+
issues+=("verification report closeout parser failed")
|
|
259
|
+
elif [[ -n "$output" ]]; then
|
|
260
|
+
issues+=("$output")
|
|
261
|
+
fi
|
|
262
|
+
return
|
|
263
|
+
done
|
|
264
|
+
issues+=("superflow-test-report-lint.py not found for closeout guard")
|
|
248
265
|
}
|
|
249
266
|
|
|
250
267
|
require_branch_handled() {
|
|
@@ -28,7 +28,7 @@ ake-harness 的 `ssd-propose`,不得因为它可见就自动改派;只有用
|
|
|
28
28
|
|
|
29
29
|
- Intent / Non-goals;
|
|
30
30
|
- Current behavior / Target behavior;
|
|
31
|
-
- 已确认的测试 seam
|
|
31
|
+
- 已确认的测试 seam,以及按[测试指南](../superflow-pipeline/references/test-guide.md)选择的适用信号、命令、断言和证据位置;
|
|
32
32
|
- 按依赖排序的实施步骤;
|
|
33
33
|
- Given / When / Then 验收条件;
|
|
34
34
|
- 风险、升级条件和 deferred;
|
|
@@ -37,8 +37,8 @@ ake-harness 的 `ssd-propose`,不得因为它可见就自动改派;只有用
|
|
|
37
37
|
用户批准前不得修改运行时代码;收到当前磁盘版本的明确批准后,才运行
|
|
38
38
|
`superflow quick "<request>" --path <files...> --seam <existing-file> --spec <spec> --approve`。
|
|
39
39
|
CLI 将当前内容摘要绑定到批准状态。Intent、Non-goals 或 Acceptance Criteria 变化时回到
|
|
40
|
-
`draft
|
|
41
|
-
|
|
40
|
+
`draft`,重新批准后才实施。先读取[测试指南](../superflow-pipeline/references/test-guide.md),核对当前批准的 Quick Spec 已冻结适用信号、命令、
|
|
41
|
+
断言和证据位置;缺项先补齐并重新批准;按 TDD 逐项跑 RED/GREEN,完成后复用 `superflow review-coverage` 和 `superflow eval` 的证据格式收口。
|
|
42
42
|
|
|
43
43
|
Quick 路径不创建 OpenSpec checkpoint,也不自动提交、推送或发布;一旦范围扩大,保留
|
|
44
44
|
spec 作为线索并转正式 SDD。
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: superflow-verify
|
|
3
|
-
description: Use when an SDD/OpenSpec
|
|
3
|
+
description: Use when reviewing code changes or verifying an SDD/OpenSpec implementation, test evidence, branch/worktree handling, or retry decisions.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDD Verify
|
|
7
7
|
|
|
8
|
+
## 验证信号复核
|
|
9
|
+
|
|
10
|
+
读取[测试指南](../superflow-pipeline/references/test-guide.md),核对当前差异、冻结用例及
|
|
11
|
+
实际执行数;区分逻辑、数据库和真实入口结论。先判断历史证据是否失效,再要求实施方
|
|
12
|
+
重跑受影响验证;仅报告格式变更不自动重跑全链路。评审方只读核验原始输出与源码。
|
|
13
|
+
|
|
8
14
|
Before semantic code review, run `superflow review-coverage --json` (or pass
|
|
9
15
|
`--base <ref>` for a branch review). Use its included/excluded inventory and
|
|
10
16
|
path-specific rules to account for every changed file. Review related Java
|
|
@@ -12,16 +18,23 @@ and Mapper XML files together when they share a bundle. Do not treat this
|
|
|
12
18
|
mechanical inventory as a correctness verdict: findings still need source
|
|
13
19
|
anchors, a fresh reading of the affected call path, and independent judgment.
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
复用检查存在 executionContext 声明时,独立核对当前命令、cwd、已选环境、源码、
|
|
22
|
+
构建和入口;调用环境与冻结要求不同时不能沿用 PASS。未声明旧证据保留原边界,
|
|
23
|
+
不以 JSON 存在或哈希一致代替执行真实性/业务充分性。
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## 五维与独立评审入口
|
|
27
|
+
|
|
28
|
+
代码质量评审必须读取[统一 Reviewer 清单](../superflow-pipeline/references/reviewer-checklist.md),
|
|
29
|
+
按其中的实际影响分档、隔离包、五维覆盖、finding 证伪与合并步骤执行。
|
|
30
|
+
`review-coverage` 的 risk.tier 是路径提示,不能直接决定实际深度;打印提示与实际档位及依据。
|
|
31
|
+
普通代码评审可以直接进入此入口,不要求先创建 SDD 状态;有冻结合同则同时核验符合度。
|
|
32
|
+
主 Agent 持有最终判断,Reviewer 只提供只读独立视角,Runner 不裁决语义风险。
|
|
33
|
+
|
|
34
|
+
沿现有四状态报告执行 `superflow review-coverage --report <file> --json`,检查标记与锚点。
|
|
35
|
+
它不证明五维充分性;主 Agent 仍须逐项核验原始证据。BLOCKED/NEEDS_CONTEXT 先补证据,
|
|
36
|
+
DONE_WITH_CONCERNS 先调查全部 concern,再决定。原生子代理支持时,中档以上以隔离上下文
|
|
37
|
+
派发;高档按独立风险簇追加专项视角,不固定代理数或模型。无法独立评审时如实记录缺口。
|
|
25
38
|
|
|
26
39
|
## 评审回应纪律
|
|
27
40
|
|
|
@@ -55,7 +68,10 @@ revert that simplification. Keep simplification in a separate commit from the
|
|
|
55
68
|
feature, and stop if it reaches files outside the original change. This is a
|
|
56
69
|
readability pass, not a second code review or a license for unrelated cleanup.
|
|
57
70
|
|
|
58
|
-
## Entry Check
|
|
71
|
+
## Entry Check (SDD only)
|
|
72
|
+
|
|
73
|
+
普通代码评审完成上述五维/独立核验后直接返回评审结论;以下阶段状态、
|
|
74
|
+
测试交付、分支和归档步骤仅适用于关联的 SDD/OpenSpec 交付,不为裸 diff 新建状态。
|
|
59
75
|
|
|
60
76
|
Run:
|
|
61
77
|
|
|
@@ -11,6 +11,14 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
Implement tasks from an OpenSpec change.
|
|
13
13
|
|
|
14
|
+
## Superflow implementation verification entry
|
|
15
|
+
|
|
16
|
+
Within the Superflow workflow, before the first task read the
|
|
17
|
+
[test guide](../superflow-pipeline/references/test-guide.md) and frozen tests.md/project
|
|
18
|
+
tests. Execute inherited RED/GREEN and required real verification per task; mark
|
|
19
|
+
complete only with evidence. Missing contracts return to superflow-docs; missing
|
|
20
|
+
environments remain blocked. Plain OpenSpec work follows project verification rules.
|
|
21
|
+
|
|
14
22
|
**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
15
23
|
|
|
16
24
|
**Steps**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: openspec-archive-change
|
|
3
|
-
description:
|
|
3
|
+
description: Use when the user wants to archive a completed pure OpenSpec change without .sdd/state.yaml.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Requires openspec CLI.
|
|
6
6
|
metadata:
|
|
@@ -13,6 +13,22 @@ Archive a completed change in the experimental workflow.
|
|
|
13
13
|
|
|
14
14
|
**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
15
15
|
|
|
16
|
+
## SDD Archive Routing (Run First)
|
|
17
|
+
|
|
18
|
+
Resolve the target change directory; if ambiguous, use the selection step below
|
|
19
|
+
to confirm it, then check that directory for `.sdd/state.yaml`. When it exists,
|
|
20
|
+
immediately load `$superflow-archive` and stop the remaining steps in this skill.
|
|
21
|
+
If verification has not passed or tasks remain incomplete, follow that skill back
|
|
22
|
+
to verification/implementation; do not fall back to this skill to archive.
|
|
23
|
+
SDD changes cannot use the incomplete-task confirmation, `Archive without syncing`,
|
|
24
|
+
or `mv` shortcuts below. `superflow-archive` owns readiness, confirmation, OpenSpec
|
|
25
|
+
merging, and state closeout. Moved SDD directories use that owner's recovery flow
|
|
26
|
+
with the explicit archive path.
|
|
27
|
+
|
|
28
|
+
Run the pure OpenSpec workflow below only when the target has no `.sdd/state.yaml`.
|
|
29
|
+
This is Agent semantic routing; the command Hook is not an operating-system-level
|
|
30
|
+
interceptor and must not be assumed to block arbitrary `mv` commands.
|
|
31
|
+
|
|
16
32
|
**Steps**
|
|
17
33
|
|
|
18
34
|
1. **If no change name provided, prompt for selection**
|