@chenmk/superflow 0.5.8 → 0.5.10
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.md +1 -2
- package/README.md +5 -0
- package/README.zh-CN.md +5 -0
- package/assets/manifest.json +1 -0
- package/assets/scripts/superflow-coding-ready.mjs +88 -19
- package/assets/scripts/superflow-document-audit.mjs +29 -5
- package/assets/scripts/superflow-hook-guard.sh +3 -14
- package/assets/scripts/superflow-review-coverage.mjs +258 -0
- package/assets/skills/superflow-docs/SKILL.md +5 -0
- package/assets/skills/superflow-pipeline/SKILL.md +10 -8
- package/assets/skills/superflow-pipeline/references/document-readiness.md +4 -0
- package/assets/skills/superflow-pipeline/references/document-review-coverage.md +82 -0
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +8 -8
- package/assets/skills/superflow-pipeline/references/quality-gate.md +4 -4
- package/assets/skills/superflow-pipeline/references/quality-standards.md +1 -1
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +2 -2
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +6 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +7 -5
- package/assets/skills/superflow-pipeline/scripts/superflow-handoff.sh +15 -2
- package/assets/skills/superflow-requirement-review/SKILL.md +4 -0
- package/assets/skills/superflow-verify/SKILL.md +4 -0
- package/assets/skills-en/superflow-docs/SKILL.md +6 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +4 -4
- package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +1 -1
- package/assets/skills-en/superflow-pipeline/references/document-readiness.md +4 -0
- package/assets/skills-en/superflow-pipeline/references/document-review-coverage.md +89 -0
- package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +4 -3
- package/assets/skills-en/superflow-pipeline/references/quality-gate.md +1 -1
- package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +1 -2
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +9 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +7 -5
- package/assets/skills-en/superflow-pipeline/scripts/superflow-handoff.sh +15 -2
- package/assets/skills-en/superflow-requirement-review/SKILL.md +5 -0
- package/assets/skills-en/superflow-verify/SKILL.md +5 -0
- package/dist/app/commands/init.js +4 -5
- package/dist/app/commands/init.js.map +1 -1
- package/dist/domains/config/cli-help.js +2 -2
- package/dist/domains/config/cli-help.js.map +1 -1
- package/dist/domains/managed-work/cleanup.js +6 -2
- package/dist/domains/managed-work/cleanup.js.map +1 -1
- package/dist/domains/managed-work/contract.js +4 -1
- package/dist/domains/managed-work/contract.js.map +1 -1
- package/dist/domains/managed-work/gitignore.js +29 -0
- package/dist/domains/managed-work/gitignore.js.map +1 -0
- package/dist/domains/managed-work/runner.js +56 -0
- package/dist/domains/managed-work/runner.js.map +1 -1
- package/dist/domains/managed-work/storage.js +6 -0
- package/dist/domains/managed-work/storage.js.map +1 -1
- package/dist/domains/sdd-readiness.js +9 -0
- package/dist/domains/sdd-readiness.js.map +1 -1
- package/dist/domains/skill/deploy.js +2 -9
- package/dist/domains/skill/deploy.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# 需求 × 真实入口评审
|
|
2
|
+
|
|
3
|
+
0.5.10 起,完整文档交付在已有 `document-review.json` 中添加 `coverage`。
|
|
4
|
+
这是现有来源清单、源码审计、入口台账和测试合同的机器索引,不是第二套需求文档。
|
|
5
|
+
稳定 ID 复用现有清单;正文继续放原文档。不要从 FIX 任务倒推入口全集。
|
|
6
|
+
|
|
7
|
+
## 谁负责什么
|
|
8
|
+
|
|
9
|
+
- Agent:从用户原文和确认记录提取需求;从当前调用方、控制器、写入方发现真实入口。
|
|
10
|
+
独立对照这两份清单,检查新增、遗漏、收窄、反转和排除。源码可解的问题自行查明。
|
|
11
|
+
- 脚本:检查每个需求与每个已登记入口的适用性、来源文件指纹、用例引用、逐项评审记录。
|
|
12
|
+
无法证明清单完整、排除合理、断言充分或实现正确;结构 PASS 不是语义 PASS。
|
|
13
|
+
- 用户:只确认新的业务歧义、实现方向和需要授权的操作,不接收本应自行排查的源码问题。
|
|
14
|
+
|
|
15
|
+
## 必须执行的语义审查
|
|
16
|
+
|
|
17
|
+
1. 明确区分“允许执行某行为”和“该行为允许产生什么归属/状态/资源”。
|
|
18
|
+
不能把“允许,但应归属原主体”改成“拒绝且零副作用”。
|
|
19
|
+
2. EXCLUDED 只能对应一个需求维度 × 一个入口,不能因“不适用站点过滤”等理由
|
|
20
|
+
把同一入口在账号归属、权限、资金或其他需求维度整体排除。
|
|
21
|
+
3. 评审覆盖 FIX、VERIFY_EXISTING、EXCLUDED 和不改代码的入口。每个排除项必须回到
|
|
22
|
+
原始需求核验;引用源码当前行为不能授权偏离需求。确需改范围回到用户确认。
|
|
23
|
+
4. 按角色从真实用户动作走到实际请求、业务写入、查询可见性及下游资源。
|
|
24
|
+
同页面不同角色的分支用不同入口 ID;不得只测试开发者选中的新接口。
|
|
25
|
+
5. 验收同时断言返回、最终状态和禁止的副作用。只读/纯函数场景也要给出明确
|
|
26
|
+
无持久化变更的理由,不能留空。browser 入口必须有 browser 验收,API 测试只能补充。
|
|
27
|
+
|
|
28
|
+
## 凭证扩展
|
|
29
|
+
|
|
30
|
+
下面是 `coverage` 最小结构,添加到现有三轮凭证,不替换其它字段。
|
|
31
|
+
`sources.path` 相对 change 目录,可引用授权范围内的跨仓文件;在线来源保存带 URL、
|
|
32
|
+
原文和确认上下文的本地快照。SHA-256 是文件字节哈希,不是 handoff 的规范化哈希。
|
|
33
|
+
不要复制源码正文;只登记定位与指纹。`sourceRefs` 均引用 sources 中的 ID。
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"schemaVersion": "superflow.review-coverage.v1",
|
|
38
|
+
"sources": [
|
|
39
|
+
{"id":"S1","role":"requirement","path":"source-ingestion.md","sha256":"<64 hex>"},
|
|
40
|
+
{"id":"S2","role":"code","path":"../../../src/caller.ts","sha256":"<64 hex>"},
|
|
41
|
+
{"id":"S3","role":"contract","path":"tests.md","sha256":"<64 hex>"}
|
|
42
|
+
],
|
|
43
|
+
"requirements": [
|
|
44
|
+
{"id":"R1","statement":"用户确认的完整约束,保留允许行为和结果边界","sourceRefs":["S1"]}
|
|
45
|
+
],
|
|
46
|
+
"entries": [
|
|
47
|
+
{"id":"E1","kind":"browser","actor":"指定角色","route":"页面动作 -> 实际请求路径","sourceRefs":["S2"]}
|
|
48
|
+
],
|
|
49
|
+
"decisions": [
|
|
50
|
+
{"requirementId":"R1","entryId":"E1","disposition":"FIX","rationale":"该入口适用此需求,详见设计","currentBehavior":"当前实际行为","targetBehavior":"保留允许动作并约束归属","sourceRefs":["S1","S2"],"caseIds":["C1"]}
|
|
51
|
+
],
|
|
52
|
+
"cases": [
|
|
53
|
+
{"id":"C1","entryId":"E1","level":"browser","action":"角色从实际页面执行动作","sourceRefs":["S3"],
|
|
54
|
+
"assertions":{"response":"约定成功结果","state":"归属及查询结果正确","forbiddenEffects":"不会创建独立资源"}}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- 每个 requirements × entries 组合必须有唯一 decision。按已界定 change 范围登记,
|
|
60
|
+
不扫描无关全平台。EXCLUDED 必须有 requirement 来源和具体理由、空 caseIds;
|
|
61
|
+
FIX/VERIFY_EXISTING 必须有对应入口的用例,不接受拿另一条接口用例顶替。
|
|
62
|
+
- `kind`/`level` 为 `browser|api|job|event|library|cli`,用例等级必须匹配入口。
|
|
63
|
+
- `source-contract` 和 `e2e-environment` 轮都添加
|
|
64
|
+
`"reviewedPairs": [["R1", "E1"]]`,覆盖全部组合(包括排除项),不得填完即视为审查完成。
|
|
65
|
+
- 先完善权威文档与清单,再刷新 handoff,再由 Agent 三轮核验当前内容、填写 coverage
|
|
66
|
+
文件指纹及评审记录,最后执行 coding-ready。未关闭发现保留,禁止刷 hash 冒充复审。
|
|
67
|
+
|
|
68
|
+
## 验证与失效
|
|
69
|
+
|
|
70
|
+
`superflow-document-audit.mjs` 校验内容和清单;coding-ready 绑定评审文件指纹。
|
|
71
|
+
CLI/托管启动重算 handoff 和所有来源指纹;编辑 Hook 同步核验文档与评审,但允许实现阶段
|
|
72
|
+
源码变化。复用 handoff 既有规范化:任务勾选、test-report 回填不使合同失效。
|
|
73
|
+
新 Prompt 派发前若前一批已改变入口源码,主 Agent 检查影响并刷新相应评审,不能盲目更新指纹。
|
|
74
|
+
coding-ready 复检失败会写 BLOCKED 撤销旧 READY。
|
|
75
|
+
|
|
76
|
+
升级后已有评审文件仍可读取;缺 coverage/reviewHash 的旧文档交付不能用于新的启动,
|
|
77
|
+
需按上述步骤补齐复审,不能填空对象绕过。已启动托管 Run 的恢复协议不变。
|
|
78
|
+
直接编辑 Hook 遇旧凭证也需补齐;这属于修复旧门禁误放行,不自动重写项目资料。
|
|
79
|
+
|
|
80
|
+
验收阶段沿同一 R/E/C ID 在 `test-report.md` 回填实际角色、动作、请求路由、状态/
|
|
81
|
+
副作用断言、原始日志路径及结果。主 Agent 对照原始来源和实际证据,不只看测试汇总。
|
|
82
|
+
计划用例不是执行证据;API-only 不能报页面 E2E 成功。脚本未验证业务语义的部分不得宣称自动保证。
|
|
@@ -39,16 +39,16 @@ Worker 自测通过 ≠ 完成任务
|
|
|
39
39
|
12. 涉及第三方/设备/支付/客户端/外部集成时,已区分 mock、测试端点和真实入口证据;mock-only 不得标记真实链路完成
|
|
40
40
|
13. 五项硬门禁全部通过:字段语义合同、写入闭环、真实入口调用链、禁止 fallback 与猜测实现、Agent 执行前自检
|
|
41
41
|
14. Superpowers 技术详设接管源码级 HOW,但不得覆盖 OpenSpec/SDD 的需求、API、DB、字段语义、tests 或验收门禁
|
|
42
|
-
15. SDD handoff
|
|
42
|
+
15. SDD handoff 继承已核对(.sdd/state.yaml 与 sdd-context.sha256 一致),不能凭压缩后的聊天记忆继续开发
|
|
43
43
|
|
|
44
44
|
## Superpower 技术详设继承(强制)
|
|
45
45
|
|
|
46
46
|
读取 [Superpowers 技术详设](../docs/superpowers/specs/YYYY-MM-DD-{change-id}-technical-design.md),继承其中与本批次相关的源码级 HOW 和执行约束。
|
|
47
47
|
本章节只允许描述实现路径、团队组织、拆分、TDD/RED、独立测试、Review 和验证闭环,不允许新增或替换需求/API/DB/tests 合同。
|
|
48
48
|
|
|
49
|
-
| 执行模式 | 团队角色 | 拆分建议 | TDD/RED切入点 | 独立Tester验证点 | 高风险猜测点 | 禁止自由发挥项 |
|
|
50
|
-
|
|
51
|
-
| ____ | Worker / Tester / Reviewer / Leader | ____ | ____ | ____ | ____ | ____ | ____ |
|
|
49
|
+
| 执行模式 | 团队角色 | 拆分建议 | TDD/RED切入点 | 独立Tester验证点 | 高风险猜测点 | 禁止自由发挥项 | 进入prompt的强制要求 |
|
|
50
|
+
|----------|----------|----------|----------------|------------------|--------------|----------------|----------------------|
|
|
51
|
+
| ____ | Worker / Tester / Reviewer / Leader | ____ | ____ | ____ | ____ | ____ | ____ |
|
|
52
52
|
|
|
53
53
|
规则:
|
|
54
54
|
- OpenSpec/SDD 的 [design.md](../design.md)、[api.md](../api.md)、[tests.md](../tests.md) 是 WHAT/API/DB/tests 事实源。
|
|
@@ -61,17 +61,17 @@ Worker 自测通过 ≠ 完成任务
|
|
|
61
61
|
|
|
62
62
|
- Handoff: [.sdd/handoff/sdd-context.md](../.sdd/handoff/sdd-context.md)
|
|
63
63
|
- Handoff JSON: [.sdd/handoff/sdd-context.json](../.sdd/handoff/sdd-context.json)
|
|
64
|
-
- Handoff hash: `{handoff_hash}`
|
|
65
64
|
- State file: [.sdd/state.yaml](../.sdd/state.yaml)
|
|
65
|
+
- Hash 绑定:`.sdd/state.yaml` 的 `handoff_hash` 单点维护,编码前核对其与 sdd-context.sha256 一致
|
|
66
66
|
|
|
67
67
|
执行规则:
|
|
68
68
|
1. Worker、Tester、Reviewer 都必须先读 handoff,再回读原始 [api.md](../api.md)、
|
|
69
69
|
[design.md](../design.md)、[tests.md](../tests.md) 和 Superpowers 技术详设。
|
|
70
|
-
2.
|
|
70
|
+
2. 如果需求、设计、API、SQL、测试合同或任务内容发生修改,先执行(任务勾选和测试报告回填除外):
|
|
71
71
|
`~/.codex/skills/superflow-pipeline/scripts/superflow-handoff.sh {change-dir} --refresh`
|
|
72
72
|
并比较新的 `.sdd/handoff/sdd-context.sha256`。
|
|
73
|
-
3.
|
|
74
|
-
|
|
73
|
+
3. hash 仅由 `.sdd/state.yaml` 的 `handoff_hash` 绑定,必须与
|
|
74
|
+
`.sdd/handoff/sdd-context.sha256` 及当前合同一致;正文只链接上下文包,不复制 hash。
|
|
75
75
|
4. 进入验证前执行:
|
|
76
76
|
`~/.codex/skills/superflow-pipeline/scripts/superflow-guard.sh {change-dir} implement`
|
|
77
77
|
失败则补文档或 prompt,不得把失败项写成通过。
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
| 38 | **真实入口调用链** | **所有接口/MQ/定时/设备/小程序/第三方/后台操作链路强制** | design.md 包含 `用户/外部动作 | 上游服务/接口 | 本仓入口 | MQ/异步回调 | 关键字段变化 | DB 状态 | 结算/通知/展示消费点 | 真实验证方式`;测试端点不能替代真实入口 |
|
|
58
58
|
| 39 | **禁止 fallback 与猜测实现** | **所有实现任务强制** | sdd-quality-gate.md 或 design.md 明确禁止默认值、兜底反查、替代字段、保留旧值、空值转可用、静默跳过、下游补偿;批准兼容必须有 owner 确认和暴露/移除规则 |
|
|
59
59
|
| 40 | **Agent 执行前自检占位** | **所有实现 prompt 强制** | test-report.md 或 prompt 中预置 `真实入口已定位 | 字段语义合同已核对 | 写入闭环已核对 | 禁止兜底边界已确认 | RED 测试已执行 | 允许修改文件 | 禁止修改文件 | 阻塞项` |
|
|
60
|
-
| 41 | **Superpowers 技术详设(HOW)** | **完整 SDD 实现任务强制** | `docs/superpowers/specs/YYYY-MM-DD-*-technical-design.md`
|
|
60
|
+
| 41 | **Superpowers 技术详设(HOW)** | **完整 SDD 实现任务强制** | `docs/superpowers/specs/YYYY-MM-DD-*-technical-design.md` 存在并链接当前 handoff 上下文包;Superpowers 接管源码级 HOW、TDD/RED 切入点、团队/Reviewer/Tester 分工、worktree/端口计划和执行风险;不得覆盖 OpenSpec/SDD 的需求、API、DB、SQL、字段语义、tests 或验收门禁 |
|
|
61
61
|
| 42 | **字段/状态反向影响面** | **涉及字段值、状态/枚举、在线离线、删除恢复、同步标记、支付退款状态、第三方状态时强制** | Superpowers 技术详设包含 `Field And Status Reverse Impact`,列出 `字段/状态 | 写入点 | 读取/过滤点 | 派生/同步点 | 跨模块消费方 | 消费方测试 | 缺口/阻塞`;必须执行 `rg`/Mapper XML/实体/DTO/SQL/定时/MQ/回调/第三方/兄弟仓反查;只改直接 setter/writer 阻塞 |
|
|
62
62
|
| 43 | **架构师视角的模块职责与调用方向** | **涉及跨仓、跨服务、SDK、MQ、定时、设备、回调、第三方、小程序、网关或适配层时强制** | Superpowers 技术详设包含 `Architecture Boundary And Call Direction`,列出 `链路步骤 | 调用方向 | owner模块 | 既有入口/出口 | 拟新增入口/出口 | 是否允许 | 证据锚点 | 禁止绕路`;必须证明业务入口、出口适配、协议转换、设备网关、MQ 消费者的职责边界没有反转;不能仅以“技术上能调用”为设计依据 |
|
|
63
|
-
| 44 | **上下文防漂移 handoff** | **所有进入实现的任务强制** | `.sdd/handoff/sdd-context.md`、`.json`、`.sha256` 和 `.sdd/state.yaml` 已生成;
|
|
63
|
+
| 44 | **上下文防漂移 handoff** | **所有进入实现的任务强制** | `.sdd/handoff/sdd-context.md`、`.json`、`.sha256` 和 `.sdd/state.yaml` 已生成;handoff_hash 仅在 .sdd/state.yaml 绑定并与上下文包及当前合同一致;正文链接上下文包;`superflow-guard.sh <change-dir> docs` 通过 |
|
|
64
64
|
| 45 | **SDD 状态机字段** | **所有进入实现的任务强制** | `.sdd/state.yaml` 包含 workflow、phase、handoff_hash、build_mode、isolation、tdd_mode、review_mode、verify_mode、implementation_prompt、verification_report、archived;`superflow-state.sh status/next/recover` 输出一致 |
|
|
65
65
|
| 46 | **外部枚举绑定确认** | **涉及第三方、SDK、BEM/停车、支付退款、财务展示、来源字段、状态同步或外部字典时强制** | api.md、sdd-quality-gate.md 和 Superpowers 技术详设包含 `外部枚举绑定确认` / `External Enum Binding`,列出 `业务字段 | 本系统真源字段/枚举 | 外部系统字段 | 外部枚举/字典值 | 展示文案/业务语义/财务语义 | 取值来源 | owner/确认时间 | 不确定项/阻塞处理 | 测试证据`;不得用请求成功、值非空或字段存在替代业务语义确认;未确认时必须阻塞 |
|
|
66
66
|
| 47 | **金额精度边界** | **涉及金额、费用、优惠、抵扣、退款、分账、支付、发票、余额、电费、服务费、套餐结算、比例分摊、明细分配、对账或财务展示时强制** | Superpowers 技术详设包含 `Money Precision Boundary` 及金额恒等式、权威总额、独立计算项、差额反推项与公式、计算态来源、中间精度、舍入边界、scale/rounding mode、分配/对账规则、禁止提前舍入点和测试证据;存在加法恒等式且总额是真源时,最后一个组成项必须由权威总额减去其余组成项合计得到,禁止所有组成项分别计算和舍入后重建总额;测试必须覆盖半分、尾差或多明细分配场景 |
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
| 42 | **真实入口与测试端点分级(阻塞级)** | 涉及外部系统链路时:① test-report 必须分开记录 `Mock 验证`、`测试端点验证`、`真实入口验证`;② 测试 Controller/绕过鉴权端点只能标记局部通过;③ 无真实入口 payload/响应/trace/DB 时,不得写真实链路通过 |
|
|
88
88
|
| 44 | **Red-Green 证据占位(阻塞级)** | test-report.md 必须预置 `RED 失败证据`、`GREEN 通过证据`、`接口自动化证据`、`DB 核查证据`、`日志核查证据`、`未自动化/阻塞用例`;每项绑定 tests.md 用例 ID |
|
|
89
89
|
| 45 | **Superpowers 技术详设继承(阻塞级)** | implementation prompt 必须包含 `Superpower 技术详设继承`,链接 state 中的 `technical_design`,继承源码级 HOW、TDD/RED 顺序、团队分工和执行边界;prompt 不得让 agent 覆盖 OpenSpec/SDD 的 API、DB、字段语义、tests 或验收门禁 |
|
|
90
|
-
| 46 | **handoff hash 继承(阻塞级)** | implementation prompt 必须包含 `上下文防漂移与状态继承`,链接 `.sdd/handoff/sdd-context.md
|
|
90
|
+
| 46 | **handoff hash 继承(阻塞级)** | implementation prompt 必须包含 `上下文防漂移与状态继承`,链接 `.sdd/handoff/sdd-context.md`,引用 state.yaml 单点绑定,并要求修改冻结合同后(任务勾选与测试报告回填除外)重跑 `superflow-handoff.sh --refresh` 和 `superflow-guard.sh <change-dir> implement` |
|
|
91
91
|
| 47 | **状态机执行决策(阻塞级)** | implementation prompt 必须包含 `状态机执行决策`,记录 build_mode、isolation、tdd_mode、review_mode、implementation_prompt、worktree_ports,并要求进入 verify 前执行 `superflow-state.sh scale` 和 `superflow-guard.sh implement --apply` |
|
|
92
92
|
|
|
93
93
|
**结果处理**
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
| 15 | **RED-GREEN 收口** | 检查 test-report 同一用例的前后证据 | 编码前 RED 失败输出存在且失败原因正确;编码后同一命令 GREEN 通过;测试后补或未观察 RED 一律阻塞 | Worker + Tester + Leader |
|
|
124
124
|
| 16 | **接口自动化收口** | 检查每个 L3/L4 用例证据 | 包含真实命令、请求体来源、响应断言、DB SELECT、日志关键词和环境信息;HTTP 200 或 DB-only 不能单独通过 | Tester + Leader |
|
|
125
125
|
| 17 | **五项硬门禁收口** | 检查 prompt/test-report/design/tests | 字段语义合同、写入闭环、真实入口调用链、禁止 fallback 与猜测实现、Agent 执行前自检均有证据;任一缺失阻塞 | Reviewer + Leader |
|
|
126
|
-
| 18 | **上下文防漂移收口** | 检查 `.sdd/handoff/*`、`.sdd/state.yaml`、prompt、test-report | handoff_hash 一致;`superflow-guard.sh <change-dir> implement` 或 `verify` 通过;换会话/并行窗口后的执行报告证明已重读 handoff 和原始文档 | Leader |
|
|
126
|
+
| 18 | **上下文防漂移收口** | 检查 `.sdd/handoff/*`、`.sdd/state.yaml`、prompt、test-report | state.yaml 与当前合同的 handoff_hash 一致;`superflow-guard.sh <change-dir> implement` 或 `verify` 通过;换会话/并行窗口后的执行报告证明已重读 handoff 和原始文档 | Leader |
|
|
127
127
|
| 19 | **状态机收口** | 检查 `.sdd/state.yaml` 和 `superflow-state.sh recover/next` | verify 前 phase 已由 implement guard 推进;verify 后 verification_report、verify_result、verified_at 正确;archive 前必须等待用户确认 | Leader |
|
|
128
128
|
|
|
129
129
|
### 数据库迁移类任务特有加禁(触发条件:涉及表结构重构、旧数据迁移、状态字段变更、分页筛选依赖新表/新状态)
|
|
@@ -121,7 +121,7 @@ review.md(设计评审,检查 spec → design → tasks → tests 一致性
|
|
|
121
121
|
|
|
122
122
|
## Superpowers Technical Design Handoff
|
|
123
123
|
- 技术详设:`docs/superpowers/specs/YYYY-MM-DD-<change-id>-technical-design.md`
|
|
124
|
-
- handoff_hash
|
|
124
|
+
- hash 绑定:`.sdd/state.yaml` 的 `handoff_hash` 单点维护,正文不嵌入原始 hash
|
|
125
125
|
- 边界:OpenSpec/SDD 管 WHAT/API/DB/tests,Superpowers 管源码级 HOW/执行编排
|
|
126
126
|
|
|
127
127
|
## API Design(如有)
|
|
@@ -11,7 +11,6 @@ semantics, tests, and acceptance gates.
|
|
|
11
11
|
---
|
|
12
12
|
change: <change-id>
|
|
13
13
|
status: draft|ready|final
|
|
14
|
-
handoff_hash: <sha256>
|
|
15
14
|
canonical_sources:
|
|
16
15
|
- ../../openspec/changes/<change-id>/proposal.md
|
|
17
16
|
- ../../openspec/changes/<change-id>/api.md
|
|
@@ -247,5 +246,6 @@ already-rounded money.
|
|
|
247
246
|
- Do not invent API fields, DB columns, status semantics, fallback behavior, or
|
|
248
247
|
acceptance criteria.
|
|
249
248
|
- Keep unresolved source facts as blockers. Do not convert them to guesses.
|
|
250
|
-
-
|
|
249
|
+
- Hash binding is owned by `.sdd/state.yaml` (`handoff_hash`); this document
|
|
250
|
+
must not embed the raw hash.
|
|
251
251
|
```
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
记录测试的执行环境、执行过程和结果,作为交付物的一部分。
|
|
4
4
|
|
|
5
|
+
运行验收必须使用 tests.md 冻结的环境,不能擅自以本地容器或 Mock 替代共享开发环境。
|
|
6
|
+
用户要求全部接口实测时,先冻结“接口 × 角色 × 场景”矩阵,共用一次应用启动和测试账号,
|
|
7
|
+
逐项记录脱敏请求、响应文件、数据库预期集合与实际集合;遗漏、失败和阻塞单独列出。
|
|
8
|
+
进程健康且代码/配置未变化时复用同一实例,不为每个接口重启;必要重启记录原因。
|
|
9
|
+
开发任务仅以约定的开发环境验收,后续发布环境不得自动升级为当前开发交付门禁。
|
|
10
|
+
|
|
5
11
|
## 文档结构
|
|
6
12
|
|
|
7
13
|
```markdown
|
|
@@ -309,11 +309,13 @@ require_hash_recorded() {
|
|
|
309
309
|
issues+=("handoff hash file is empty")
|
|
310
310
|
return 0
|
|
311
311
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
312
|
+
# The state file is the machine-readable binding point. Requiring the raw
|
|
313
|
+
# hash inside prose documents turned every refresh into a four-file manual
|
|
314
|
+
# backfill loop that blocked real delivery work, so a human-readable pointer
|
|
315
|
+
# is enough here.
|
|
316
|
+
local binding
|
|
317
|
+
binding="$(state_get handoff_hash)"
|
|
318
|
+
[[ "$binding" == "$hash" ]] || issues+=("state handoff_hash does not match handoff pack; run superflow-handoff.sh --refresh")
|
|
317
319
|
}
|
|
318
320
|
|
|
319
321
|
change_has_field_status_risk() {
|
|
@@ -21,14 +21,26 @@ sha_file() {
|
|
|
21
21
|
# Ignore generated state/hash marker lines so recording the handoff hash in
|
|
22
22
|
# SDD docs does not change the handoff hash itself.
|
|
23
23
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
24
|
-
|
|
24
|
+
canonical_contract "$1" \
|
|
25
25
|
| sha256sum | awk '{print $1}'
|
|
26
26
|
else
|
|
27
|
-
|
|
27
|
+
canonical_contract "$1" \
|
|
28
28
|
| shasum -a 256 | awk '{print $1}'
|
|
29
29
|
fi
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
canonical_contract() {
|
|
33
|
+
# Reports are execution evidence, not frozen requirements. Their existence
|
|
34
|
+
# and validity are checked separately by the delivery/report gates.
|
|
35
|
+
if [[ "${1##*/}" == "test-report.md" ]]; then
|
|
36
|
+
return 0
|
|
37
|
+
fi
|
|
38
|
+
sed -E \
|
|
39
|
+
-e '/^[[:space:]]*(handoff_hash|context_hash):[[:space:]]*[^[:space:]]*[[:space:]]*$/d' \
|
|
40
|
+
-e 's/^([[:space:]]*[-*][[:space:]]+)\[[xX ]\]/\1[ ]/' \
|
|
41
|
+
-e '/^[[:space:]]*$/d' "$1"
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
json_escape() {
|
|
33
45
|
sed 's/\\/\\\\/g; s/"/\\"/g'
|
|
34
46
|
}
|
|
@@ -144,6 +156,7 @@ fi
|
|
|
144
156
|
context_hash_input=""
|
|
145
157
|
while IFS= read -r file; do
|
|
146
158
|
rel="${file#"$CHANGE_DIR"/}"
|
|
159
|
+
[[ "${file##*/}" == "test-report.md" ]] && continue
|
|
147
160
|
hash="$(sha_file "$file")"
|
|
148
161
|
context_hash_input+="${rel}:${hash}"$'\n'
|
|
149
162
|
done < "$TMP_LIST"
|
|
@@ -5,6 +5,10 @@ description: 对已澄清或已形成 OpenSpec/SDD 草案的需求和设计执
|
|
|
5
5
|
|
|
6
6
|
# Superflow Requirement Review
|
|
7
7
|
|
|
8
|
+
必须读取并执行[需求×真实入口评审](../superflow-pipeline/references/document-review-coverage.md)。
|
|
9
|
+
从原始需求独立建立核对清单,不从 FIX 任务反推范围;逐需求维度核对全部入口,特别是
|
|
10
|
+
EXCLUDED、VERIFY_EXISTING 和无代码改动的路径。用户允许的动作不能被擅自改成拒绝。
|
|
11
|
+
|
|
8
12
|
对当前 OpenSpec change 进行独立、对抗式但基于证据的反向评审。评审不是旁路建议:
|
|
9
13
|
阻塞级问题必须回写并修正文档,复审通过后才能离开 docs 阶段。
|
|
10
14
|
|
|
@@ -5,6 +5,10 @@ description: Use when an SDD/OpenSpec change is ready for verification, test-rep
|
|
|
5
5
|
|
|
6
6
|
# SDD Verify
|
|
7
7
|
|
|
8
|
+
完整 workflow 验收必须读取[需求×真实入口评审](../superflow-pipeline/references/document-review-coverage.md)。
|
|
9
|
+
沿 R/E/C ID 在现有 test-report 回填实际角色、页面动作、请求路由、最终状态与禁止副作用
|
|
10
|
+
的原始证据。独立对照原始来源及实际调用方;API-only 不得冒充 browser E2E,计划不等于执行。
|
|
11
|
+
|
|
8
12
|
Verification is a phase, not a final sentence. Use this skill after
|
|
9
13
|
implementation work claims completion and before archive or delivery.
|
|
10
14
|
|
|
@@ -5,6 +5,12 @@ description: Use when confirmed requirements or OpenSpec artifacts need SDD cont
|
|
|
5
5
|
|
|
6
6
|
# SDD Docs
|
|
7
7
|
|
|
8
|
+
For full document delivery, read and apply
|
|
9
|
+
[requirement × real-entry review](../superflow-pipeline/references/document-review-coverage.md).
|
|
10
|
+
Extend the existing three-round receipt with original-source, real-caller,
|
|
11
|
+
EXCLUDED/VERIFY_EXISTING and assertion coverage. Internal document consistency
|
|
12
|
+
is not evidence of fidelity to the user's original semantics.
|
|
13
|
+
|
|
8
14
|
Use this skill after a feature is frozen or after `$openspec-propose` has
|
|
9
15
|
created the base OpenSpec artifacts. This skill is an SDD contract-doc wrapper;
|
|
10
16
|
it must not replace the installed OpenSpec skills for core artifact generation
|
|
@@ -252,10 +252,10 @@ Before moving phases, run the local scripts from this skill directory:
|
|
|
252
252
|
Rules:
|
|
253
253
|
|
|
254
254
|
- Never proceed when superflow-guard fails.
|
|
255
|
-
- If
|
|
256
|
-
|
|
257
|
-
-
|
|
258
|
-
|
|
255
|
+
- If a frozen SDD/OpenSpec contract changes, regenerate handoff and its state-file
|
|
256
|
+
binding. Task checkbox progress and test-report updates do not require refresh.
|
|
257
|
+
- The handoff_hash binding lives in .sdd/state.yaml. Prose documents reference
|
|
258
|
+
the handoff context by path; do not copy the raw hash into every document.
|
|
259
259
|
- After context compaction or session handoff, reload .sdd/state.yaml and
|
|
260
260
|
.sdd/handoff/sdd-context.md before acting.
|
|
261
261
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- Branch: {branch}
|
|
10
10
|
- Ports: app={port}, debug={port}
|
|
11
11
|
- Handoff: .sdd/handoff/sdd-context.md
|
|
12
|
-
- Handoff
|
|
12
|
+
- Handoff binding: `.sdd/state.yaml` → `.sdd/handoff/sdd-context.sha256`; link the context pack without copying the hash into this prompt.
|
|
13
13
|
- Technical design: {path}
|
|
14
14
|
|
|
15
15
|
## Required Reading
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Document Delivery Readiness Contract
|
|
2
2
|
|
|
3
|
+
The base review example below is not a complete receipt. From 0.5.10, also apply
|
|
4
|
+
[requirement × real-entry review](document-review-coverage.md): add `coverage` and
|
|
5
|
+
`reviewedPairs` to source-contract/e2e-environment rounds. Old receipts require re-review.
|
|
6
|
+
|
|
3
7
|
## Applicability
|
|
4
8
|
|
|
5
9
|
Declare applicability in `.openspec.yaml`. Keyword scans may suggest a risk but
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Requirement × real-entry review
|
|
2
|
+
|
|
3
|
+
Starting in 0.5.10, full document delivery adds `coverage` to the existing
|
|
4
|
+
`document-review.json`. It indexes the existing source inventory, source audit,
|
|
5
|
+
entry ledger and test contract; it does not create a second requirements authority.
|
|
6
|
+
Reuse stable IDs. Discover entries from current callers/writers, never from FIX tasks alone.
|
|
7
|
+
|
|
8
|
+
## Ownership and semantic checks
|
|
9
|
+
|
|
10
|
+
The Agent extracts requirements from original user statements/confirmations, independently
|
|
11
|
+
discovers actual entry points, and checks omissions, narrowing, inversion and exclusions.
|
|
12
|
+
The script checks declared coverage, references, file hashes and review records. A structural
|
|
13
|
+
PASS cannot prove inventory completeness, business correctness or test sufficiency.
|
|
14
|
+
Ask the user only about real business ambiguity, implementation direction or authorization;
|
|
15
|
+
investigate source-resolvable questions autonomously.
|
|
16
|
+
|
|
17
|
+
1. Distinguish permission to act from allowed ownership/state/resource effects. Never change
|
|
18
|
+
“allowed, but owned by the original principal” into “reject with zero effects”.
|
|
19
|
+
2. EXCLUDED applies to one requirement × one entry. Inapplicability of one filter must not
|
|
20
|
+
exclude ownership, permissions, financial or other constraints on the same entry.
|
|
21
|
+
3. Independently review FIX, VERIFY_EXISTING, EXCLUDED and unchanged paths against original
|
|
22
|
+
requirements. Existing code is not authorization to deviate. Scope changes return to owner confirmation.
|
|
23
|
+
4. Follow each actor's real action through caller branch, request, writes, visibility and
|
|
24
|
+
downstream resources. Give different actor branches distinct entry IDs. Do not test only
|
|
25
|
+
the newly selected API.
|
|
26
|
+
5. Assert response, final state and forbidden effects. For read-only/pure-function work explain
|
|
27
|
+
why no persistent change applies; do not leave blanks. Browser paths require browser acceptance;
|
|
28
|
+
API checks can supplement, not replace them.
|
|
29
|
+
|
|
30
|
+
## Receipt extension
|
|
31
|
+
|
|
32
|
+
Add the following `coverage` object to the existing three-round review; preserve its other
|
|
33
|
+
fields. Paths are relative to the change and may reference authorized sibling repositories.
|
|
34
|
+
Save online originals as local snapshots with URL and confirmation context. SHA-256 hashes
|
|
35
|
+
file bytes, unlike the normalized handoff hash. Reference code, do not copy its body.
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"schemaVersion": "superflow.review-coverage.v1",
|
|
40
|
+
"sources": [
|
|
41
|
+
{"id":"S1","role":"requirement","path":"source-ingestion.md","sha256":"<64 hex>"},
|
|
42
|
+
{"id":"S2","role":"code","path":"../../../src/caller.ts","sha256":"<64 hex>"},
|
|
43
|
+
{"id":"S3","role":"contract","path":"tests.md","sha256":"<64 hex>"}
|
|
44
|
+
],
|
|
45
|
+
"requirements": [
|
|
46
|
+
{"id":"R1","statement":"Complete confirmed constraint, preserving allowed actions and outcome boundaries","sourceRefs":["S1"]}
|
|
47
|
+
],
|
|
48
|
+
"entries": [
|
|
49
|
+
{"id":"E1","kind":"browser","actor":"specified actor","route":"page action -> actual request path","sourceRefs":["S2"]}
|
|
50
|
+
],
|
|
51
|
+
"decisions": [
|
|
52
|
+
{"requirementId":"R1","entryId":"E1","disposition":"FIX","rationale":"This entry is subject to the requirement; see design","currentBehavior":"actual current behavior","targetBehavior":"preserve allowed action and constrain ownership","sourceRefs":["S1","S2"],"caseIds":["C1"]}
|
|
53
|
+
],
|
|
54
|
+
"cases": [
|
|
55
|
+
{"id":"C1","entryId":"E1","level":"browser","action":"Actor performs action on actual page","sourceRefs":["S3"],
|
|
56
|
+
"assertions":{"response":"contracted success","state":"correct ownership and visibility","forbiddenEffects":"no independent resources"}}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- Every requirements × entries pair requires exactly one decision. Bound the inventory to
|
|
62
|
+
the change; do not scan irrelevant platform modules. EXCLUDED requires a requirement source,
|
|
63
|
+
a specific rationale and empty caseIds. FIX/VERIFY_EXISTING require cases for that same entry.
|
|
64
|
+
- `kind`/`level`: `browser|api|job|event|library|cli`; case level must match entry kind.
|
|
65
|
+
- Both `source-contract` and `e2e-environment` rounds add
|
|
66
|
+
`"reviewedPairs": [["R1", "E1"]]` covering every pair, including exclusions.
|
|
67
|
+
Filling the record is not a substitute for performing the review.
|
|
68
|
+
- Complete canonical documents/inventories, refresh handoff, perform all three reviews against
|
|
69
|
+
current content, record coverage file hashes, then run coding-ready. Retain findings;
|
|
70
|
+
updating hashes alone is not re-review.
|
|
71
|
+
|
|
72
|
+
## Verification, invalidation and migration
|
|
73
|
+
|
|
74
|
+
Document audit checks current content and coverage. Coding-ready binds the review file hash.
|
|
75
|
+
CLI/managed dispatch recomputes handoff and every source hash. The edit Hook checks documents
|
|
76
|
+
and review while allowing implementation source changes. Existing handoff normalization
|
|
77
|
+
preserves task checkbox updates and test-report progress without invalidating contracts.
|
|
78
|
+
If an earlier batch changed entry source before a new Prompt dispatch, the Host assesses its
|
|
79
|
+
impact and refreshes affected review evidence rather than blindly updating hashes.
|
|
80
|
+
A failed coding-ready recheck persists BLOCKED, revoking an earlier READY.
|
|
81
|
+
|
|
82
|
+
Old receipts remain readable but cannot authorize new dispatch or source edits without
|
|
83
|
+
coverage/reviewHash. Follow the migration/re-review steps above; empty objects do not bypass
|
|
84
|
+
them. Existing managed Run recovery protocols are unchanged. No project records are silently rewritten.
|
|
85
|
+
|
|
86
|
+
During verification, reuse R/E/C IDs in `test-report.md`, recording actual actor, action,
|
|
87
|
+
request route, state/forbidden-effect assertions, raw evidence paths and outcomes. The Host
|
|
88
|
+
compares them to original sources, not only a test summary. Planned cases are not execution
|
|
89
|
+
evidence; API-only results cannot claim browser E2E. Do not claim automatic semantic assurance.
|
|
@@ -6,11 +6,12 @@ Use this as the prefix for every implementation prompt.
|
|
|
6
6
|
|
|
7
7
|
- Handoff: [.sdd/handoff/sdd-context.md](../.sdd/handoff/sdd-context.md)
|
|
8
8
|
- Handoff JSON: [.sdd/handoff/sdd-context.json](../.sdd/handoff/sdd-context.json)
|
|
9
|
-
-
|
|
9
|
+
- Hash binding: `handoff_hash` in `.sdd/state.yaml` must match `.sdd/handoff/sdd-context.sha256` and the current contract. Do not copy the hash into prose.
|
|
10
10
|
- State: .sdd/state.yaml
|
|
11
11
|
|
|
12
|
-
If
|
|
13
|
-
|
|
12
|
+
If requirements, design, API, SQL, test contracts or task content change, rerun
|
|
13
|
+
superflow-handoff.sh --refresh. Task checkbox progress and test-report updates
|
|
14
|
+
do not invalidate the frozen contract hash.
|
|
14
15
|
|
|
15
16
|
## Contract Boundary
|
|
16
17
|
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
## Implementation Gate
|
|
69
69
|
|
|
70
|
-
- Every prompt
|
|
70
|
+
- Every prompt links the handoff pack, state-file hash binding and technical design; no prose hash backfill is required. Task checkbox progress and test-report updates do not change the contract hash.
|
|
71
71
|
- Every prompt includes TDD RED/GREEN plan.
|
|
72
72
|
- Every L3/L4 test has executable command and evidence target.
|
|
73
73
|
- Workers update only task-local docs.
|
package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md
CHANGED
|
@@ -11,7 +11,6 @@ semantics, tests, and acceptance gates.
|
|
|
11
11
|
---
|
|
12
12
|
change: <change-id>
|
|
13
13
|
status: draft|ready|final
|
|
14
|
-
handoff_hash: <sha256>
|
|
15
14
|
canonical_sources:
|
|
16
15
|
- ../../openspec/changes/<change-id>/proposal.md
|
|
17
16
|
- ../../openspec/changes/<change-id>/api.md
|
|
@@ -228,4 +227,4 @@ already-rounded money.
|
|
|
228
227
|
- Do not invent API fields, DB columns, status semantics, fallback behavior, or
|
|
229
228
|
acceptance criteria.
|
|
230
229
|
- Keep unresolved source facts as blockers. Do not convert them to guesses.
|
|
231
|
-
-
|
|
230
|
+
- Link the handoff pack; `.sdd/state.yaml` owns the hash binding and must match `.sdd/handoff/sdd-context.sha256`. Do not copy raw hashes into this document.
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Test Execution Template
|
|
2
2
|
|
|
3
|
+
Use the environment frozen in tests.md; do not substitute local containers or
|
|
4
|
+
mocks for an explicitly required shared development environment. When the user
|
|
5
|
+
requires every endpoint to be exercised, freeze an endpoint/role/scenario matrix,
|
|
6
|
+
reuse one healthy application instance and test accounts, and record redacted
|
|
7
|
+
requests, response files, and expected versus actual database sets for every row.
|
|
8
|
+
List missing, failed and blocked rows explicitly. Restart only when code,
|
|
9
|
+
configuration or process health requires it, and record the reason. Future release
|
|
10
|
+
environments must not become gates for a development-only delivery.
|
|
11
|
+
|
|
3
12
|
## Test Case
|
|
4
13
|
|
|
5
14
|
- ID:
|
|
@@ -309,11 +309,13 @@ require_hash_recorded() {
|
|
|
309
309
|
issues+=("handoff hash file is empty")
|
|
310
310
|
return 0
|
|
311
311
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
312
|
+
# The state file is the machine-readable binding point. Requiring the raw
|
|
313
|
+
# hash inside prose documents turned every refresh into a four-file manual
|
|
314
|
+
# backfill loop that blocked real delivery work, so a human-readable pointer
|
|
315
|
+
# is enough here.
|
|
316
|
+
local binding
|
|
317
|
+
binding="$(state_get handoff_hash)"
|
|
318
|
+
[[ "$binding" == "$hash" ]] || issues+=("state handoff_hash does not match handoff pack; run superflow-handoff.sh --refresh")
|
|
317
319
|
}
|
|
318
320
|
|
|
319
321
|
change_has_field_status_risk() {
|
|
@@ -21,14 +21,26 @@ sha_file() {
|
|
|
21
21
|
# Ignore generated state/hash marker lines so recording the handoff hash in
|
|
22
22
|
# SDD docs does not change the handoff hash itself.
|
|
23
23
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
24
|
-
|
|
24
|
+
canonical_contract "$1" \
|
|
25
25
|
| sha256sum | awk '{print $1}'
|
|
26
26
|
else
|
|
27
|
-
|
|
27
|
+
canonical_contract "$1" \
|
|
28
28
|
| shasum -a 256 | awk '{print $1}'
|
|
29
29
|
fi
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
canonical_contract() {
|
|
33
|
+
# Reports are execution evidence, not frozen requirements. Their existence
|
|
34
|
+
# and validity are checked separately by the delivery/report gates.
|
|
35
|
+
if [[ "${1##*/}" == "test-report.md" ]]; then
|
|
36
|
+
return 0
|
|
37
|
+
fi
|
|
38
|
+
sed -E \
|
|
39
|
+
-e '/^[[:space:]]*(handoff_hash|context_hash):[[:space:]]*[^[:space:]]*[[:space:]]*$/d' \
|
|
40
|
+
-e 's/^([[:space:]]*[-*][[:space:]]+)\[[xX ]\]/\1[ ]/' \
|
|
41
|
+
-e '/^[[:space:]]*$/d' "$1"
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
json_escape() {
|
|
33
45
|
sed 's/\\/\\\\/g; s/"/\\"/g'
|
|
34
46
|
}
|
|
@@ -144,6 +156,7 @@ fi
|
|
|
144
156
|
context_hash_input=""
|
|
145
157
|
while IFS= read -r file; do
|
|
146
158
|
rel="${file#"$CHANGE_DIR"/}"
|
|
159
|
+
[[ "${file##*/}" == "test-report.md" ]] && continue
|
|
147
160
|
hash="$(sha_file "$file")"
|
|
148
161
|
context_hash_input+="${rel}:${hash}"$'\n'
|
|
149
162
|
done < "$TMP_LIST"
|
|
@@ -5,6 +5,11 @@ description: Perform source-backed reverse review of clarified requirements and
|
|
|
5
5
|
|
|
6
6
|
# Superflow Requirement Review
|
|
7
7
|
|
|
8
|
+
Read and apply [requirement × real-entry review](../superflow-pipeline/references/document-review-coverage.md).
|
|
9
|
+
Build an independent checklist from original requirements, not FIX tasks. Review every entry
|
|
10
|
+
per requirement dimension, especially EXCLUDED, VERIFY_EXISTING and unchanged paths.
|
|
11
|
+
Never silently turn a user-authorized action into a rejection.
|
|
12
|
+
|
|
8
13
|
Independently challenge the current OpenSpec change with source-backed evidence. This is not
|
|
9
14
|
an advisory side path: blocking findings must repair canonical documents and pass re-review
|
|
10
15
|
before the docs phase can close.
|
|
@@ -5,6 +5,11 @@ description: Use when an OpenSpec/SDD change is ready for verification, real evi
|
|
|
5
5
|
|
|
6
6
|
# SDD Verify
|
|
7
7
|
|
|
8
|
+
For full workflow acceptance, read [requirement × real-entry review](../superflow-pipeline/references/document-review-coverage.md).
|
|
9
|
+
Reuse R/E/C IDs in the existing test-report with actual actors, page actions, request routes,
|
|
10
|
+
final state and forbidden-effect evidence. Independently compare originals and actual callers;
|
|
11
|
+
API-only is not browser E2E, and planned cases are not execution evidence.
|
|
12
|
+
|
|
8
13
|
Verification is a phase, not a final sentence. Use this skill after
|
|
9
14
|
implementation work claims completion and before archive or delivery.
|
|
10
15
|
|