@chenmk/superflow 0.5.13 → 0.5.15
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/README.md +6 -0
- package/README.zh-CN.md +1 -0
- package/assets/scripts/superflow-test-report-lint.py +80 -2
- package/assets/skills/superflow-docs/SKILL.md +12 -0
- package/assets/skills/superflow-pipeline/SKILL.md +3 -0
- package/assets/skills/superflow-pipeline/references/document-review-coverage.md +18 -0
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +11 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +12 -2
- package/assets/skills/superflow-verify/SKILL.md +4 -1
- package/assets/skills-en/superflow-docs/SKILL.md +12 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +4 -0
- package/assets/skills-en/superflow-pipeline/references/document-review-coverage.md +20 -0
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +12 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +12 -2
- package/assets/skills-en/superflow-verify/SKILL.md +6 -1
- package/dist/app/cli.js +3 -1
- package/dist/app/cli.js.map +1 -1
- package/dist/app/commands/hook-migrate.js +21 -5
- package/dist/app/commands/hook-migrate.js.map +1 -1
- package/dist/domains/hook-migration.js +37 -4
- package/dist/domains/hook-migration.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -70,6 +70,12 @@ hotspots with evidence and a route, without modifying source files.
|
|
|
70
70
|
provenance or managed Superflow/SDD entries. Custom Hooks remain. Project init
|
|
71
71
|
and update use the same migration; the global prompt Hook also attempts one
|
|
72
72
|
safe migration per project session and asks for a restart if definitions changed.
|
|
73
|
+
Use `superflow hook-audit --scope global --agent both --json` to inspect old
|
|
74
|
+
relative global Hooks. After review, run `superflow hook-migrate --scope global
|
|
75
|
+
--agent both --apply`; it backs up both host configs and removes only exact
|
|
76
|
+
allowlisted legacy commands. Unknown and custom Hooks remain. A normal
|
|
77
|
+
`update` does not remove global registrations of uncertain origin. Restart the
|
|
78
|
+
host session after migration.
|
|
73
79
|
|
|
74
80
|
## Highlights
|
|
75
81
|
|
package/README.zh-CN.md
CHANGED
|
@@ -41,6 +41,7 @@ CLI 会把 SuperBridge Flow 技能、配套 hook/command 脚本整合为单一 n
|
|
|
41
41
|
`superflow map-audit` 只读比较 Understand Anything 的完整图谱、任务 Top-K 和目录/符号骨架,不创建第二套持久地图。
|
|
42
42
|
`superflow cleanup-audit` 只读输出重复文件名、复杂度线索和 TODO 热点,带证据与执行路由,不修改源码。
|
|
43
43
|
项目旧 Hook 可用 `superflow hook-migrate --path <项目> --json` 只读审计,追加 `--apply` 后只迁移有 ake 来源标记的已知旧 Hook 或 Superflow/SDD 管理项;先备份,保留自定义 Hook。项目级 init/update 自动执行同一迁移;全局会话 Hook 首次使用项目时也会尝试一次安全迁移,若配置已改变须重启当前会话。
|
|
44
|
+
全局旧相对路径 Hook 用 `superflow hook-audit --scope global --agent both --json` 只读盘点;确认后运行 `superflow hook-migrate --scope global --agent both --apply`,仅删除白名单内的完整旧命令,先备份 `~/.codex/hooks.json` 和 `~/.claude/settings.json`,保留未知及自定义 Hook。普通 `update` 不自动清理来源不明的全局注册;迁移后重启宿主会话。
|
|
44
45
|
自动部署到:
|
|
45
46
|
|
|
46
47
|
- Claude Code:`~/.claude/skills/`、`~/.claude/scripts/`,并注册 `~/.claude/settings.json` hook
|
|
@@ -14,6 +14,7 @@ mechanically:
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
16
|
import argparse
|
|
17
|
+
import json
|
|
17
18
|
import re
|
|
18
19
|
import subprocess
|
|
19
20
|
import sys
|
|
@@ -99,6 +100,13 @@ EXTERNAL_EVIDENCE_RE = re.compile(
|
|
|
99
100
|
re.I,
|
|
100
101
|
)
|
|
101
102
|
CASE_ID_RE = re.compile(r"\bT\d+(?:\.\d+)+\b")
|
|
103
|
+
CASE_EVIDENCE_HEADER = re.compile(
|
|
104
|
+
r"^\|\s*(?:用例\s*ID|Case\s*ID)\s*\|\s*(?:入口\s*ID|Entry\s*ID)\s*\|"
|
|
105
|
+
r"\s*(?:验收级别|Acceptance\s*level)\s*\|\s*(?:结果|Result)\s*\|"
|
|
106
|
+
r"\s*(?:证据|Evidence)(?:路径|\s*path)?\s*\|$",
|
|
107
|
+
re.I,
|
|
108
|
+
)
|
|
109
|
+
CASE_RESULTS = {"PASS", "FAIL", "BLOCKED", "PARTIAL"}
|
|
102
110
|
OLD_PHRASES = (
|
|
103
111
|
"不会按周期边界拆分子切片",
|
|
104
112
|
"1 秒空窗落入下一周期对账无实质影响",
|
|
@@ -253,6 +261,69 @@ def lint_against_tests_contract(report_path: Path, report_text: str, tests_path:
|
|
|
253
261
|
return issues
|
|
254
262
|
|
|
255
263
|
|
|
264
|
+
def lint_case_evidence(report_path: Path, report_text: str, review_path: Path) -> list[Issue]:
|
|
265
|
+
"""Check the frozen R/E/C index against per-case execution receipts."""
|
|
266
|
+
issues: list[Issue] = []
|
|
267
|
+
try:
|
|
268
|
+
review = json.loads(review_path.read_text(encoding="utf-8"))
|
|
269
|
+
coverage = review["coverage"]
|
|
270
|
+
if coverage["schemaVersion"] != "superflow.review-coverage.v1":
|
|
271
|
+
raise ValueError("unsupported coverage schema")
|
|
272
|
+
cases = {case["id"]: case for case in coverage["cases"]}
|
|
273
|
+
decisions = coverage["decisions"]
|
|
274
|
+
except (OSError, ValueError, KeyError, TypeError) as error:
|
|
275
|
+
return [Issue("FAIL", report_path, 0, f"入口评审凭证无法读取:{error}")]
|
|
276
|
+
|
|
277
|
+
required = {
|
|
278
|
+
case_id
|
|
279
|
+
for decision in decisions
|
|
280
|
+
if decision.get("disposition") != "EXCLUDED"
|
|
281
|
+
for case_id in decision.get("caseIds", [])
|
|
282
|
+
}
|
|
283
|
+
lines = report_text.splitlines()
|
|
284
|
+
header_at = next(
|
|
285
|
+
(i for i, line in enumerate(lines) if CASE_EVIDENCE_HEADER.fullmatch(line.strip())),
|
|
286
|
+
None,
|
|
287
|
+
)
|
|
288
|
+
if header_at is None:
|
|
289
|
+
return [Issue("FAIL", report_path, 0, "缺少逐用例执行证据表;不能用汇总通过数代替 R/E/C 回填")]
|
|
290
|
+
|
|
291
|
+
receipts: dict[str, tuple[str, str, str, str]] = {}
|
|
292
|
+
for index, line in enumerate(lines[header_at + 2 :], start=header_at + 3):
|
|
293
|
+
if not line.startswith("|"):
|
|
294
|
+
break
|
|
295
|
+
columns = [column.strip() for column in line.strip().strip("|").split("|")]
|
|
296
|
+
if len(columns) != 5:
|
|
297
|
+
issues.append(Issue("FAIL", report_path, index, "逐用例执行证据表必须有五列"))
|
|
298
|
+
continue
|
|
299
|
+
case_id, entry_id, level, result, evidence = columns
|
|
300
|
+
if case_id in receipts:
|
|
301
|
+
issues.append(Issue("FAIL", report_path, index, f"用例 {case_id} 重复回填"))
|
|
302
|
+
receipts[case_id] = (entry_id, level, result.upper(), evidence)
|
|
303
|
+
|
|
304
|
+
for case_id in sorted(required):
|
|
305
|
+
if case_id not in receipts:
|
|
306
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 缺少逐项执行结果"))
|
|
307
|
+
continue
|
|
308
|
+
entry_id, level, result, evidence = receipts[case_id]
|
|
309
|
+
case = cases.get(case_id)
|
|
310
|
+
if case is None or entry_id != case.get("entryId") or level != case.get("level"):
|
|
311
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 的入口或验收级别与冻结合同不一致"))
|
|
312
|
+
if result not in CASE_RESULTS or not evidence or evidence.lower() in {"pending", "todo", "待补"}:
|
|
313
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 缺少有效结果或证据位置"))
|
|
314
|
+
elif result == "PASS" and not re.match(r"^https?://", evidence, re.I):
|
|
315
|
+
evidence_file = Path(evidence.split("#", 1)[0])
|
|
316
|
+
if not evidence_file.is_absolute():
|
|
317
|
+
evidence_file = report_path.parent / evidence_file
|
|
318
|
+
if not evidence_file.is_file():
|
|
319
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 的通过证据文件不存在:{evidence}"))
|
|
320
|
+
if result != "PASS" and re.search(r"验证结果\s*[::]\s*PASS|Verification Result\s*[::]\s*PASS", report_text, re.I):
|
|
321
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 为 {result},报告不能声明整体验证 PASS"))
|
|
322
|
+
for case_id in receipts.keys() - required:
|
|
323
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 未在冻结入口评审中要求执行"))
|
|
324
|
+
return issues
|
|
325
|
+
|
|
326
|
+
|
|
256
327
|
def infer_tests_path(report: Path) -> Path | None:
|
|
257
328
|
direct = report.parent / "tests.md"
|
|
258
329
|
if direct.exists():
|
|
@@ -268,7 +339,8 @@ def infer_tests_path(report: Path) -> Path | None:
|
|
|
268
339
|
return None
|
|
269
340
|
|
|
270
341
|
|
|
271
|
-
def lint_report(path: Path, repo: Path | None, tests_path: Path | None = None
|
|
342
|
+
def lint_report(path: Path, repo: Path | None, tests_path: Path | None = None,
|
|
343
|
+
review_path: Path | None = None) -> list[Issue]:
|
|
272
344
|
issues: list[Issue] = []
|
|
273
345
|
text = path.read_text(encoding="utf-8", errors="replace")
|
|
274
346
|
lines = text.splitlines()
|
|
@@ -278,6 +350,8 @@ def lint_report(path: Path, repo: Path | None, tests_path: Path | None = None) -
|
|
|
278
350
|
blocked = bool(BLOCKED_RE.search(text))
|
|
279
351
|
passed_or_partial = bool(PASS_WORDS.search(text) or re.search(r"Partially verified|部分验证", text, re.I))
|
|
280
352
|
issues.extend(lint_against_tests_contract(path, text, tests_path or infer_tests_path(path)))
|
|
353
|
+
if review_path is not None:
|
|
354
|
+
issues.extend(lint_case_evidence(path, text, review_path))
|
|
281
355
|
|
|
282
356
|
if db_backed and passed_or_partial and not blocked:
|
|
283
357
|
if not TABLE_REVERSE_HEADER_RE.search(text):
|
|
@@ -395,6 +469,7 @@ def main() -> int:
|
|
|
395
469
|
parser = argparse.ArgumentParser(description="Lint SuperBridge Flow test-report evidence")
|
|
396
470
|
parser.add_argument("reports", nargs="+")
|
|
397
471
|
parser.add_argument("--tests", default="")
|
|
472
|
+
parser.add_argument("--review", default="")
|
|
398
473
|
parser.add_argument("--repo-root", default="")
|
|
399
474
|
parser.add_argument("--warn-only", action="store_true")
|
|
400
475
|
args = parser.parse_args()
|
|
@@ -407,7 +482,10 @@ def main() -> int:
|
|
|
407
482
|
continue
|
|
408
483
|
repo = Path(args.repo_root).resolve() if args.repo_root else repo_root_for(path)
|
|
409
484
|
tests_path = Path(args.tests).resolve() if args.tests else None
|
|
410
|
-
|
|
485
|
+
if tests_path is not None and not tests_path.exists():
|
|
486
|
+
all_issues.append(Issue("FAIL", path, 0, f"显式指定的 tests.md 不存在:{tests_path}"))
|
|
487
|
+
review_path = Path(args.review).resolve() if args.review else None
|
|
488
|
+
all_issues.extend(lint_report(path, repo, tests_path, review_path))
|
|
411
489
|
|
|
412
490
|
printable = []
|
|
413
491
|
for issue in all_issues:
|
|
@@ -380,6 +380,18 @@ DB 状态 | 结算/通知/展示消费点 | 真实验证方式`.
|
|
|
380
380
|
`用例ID | 需求/Scenario | 层级L1/L2/L3/L4 | 前置数据 | 操作步骤 |
|
|
381
381
|
自动化命令 | 响应断言 | DB断言 | 日志断言 | RED预期失败 | GREEN预期通过 |
|
|
382
382
|
test-report证据位置`.
|
|
383
|
+
- For cross-page management or database-backed display changes, reconcile the
|
|
384
|
+
frontend action/list inventory with real Controller, Service, exact Mapper
|
|
385
|
+
statement and table anchors before freezing tasks. Put the confirmed chain
|
|
386
|
+
and entry ID in `source-code-audit.md` and reuse it in `design.md`, `tasks.md`
|
|
387
|
+
and `tests.md`. A similarly named query is not evidence for the page route.
|
|
388
|
+
Include every visible mutation button, such as enable/disable, as an entry
|
|
389
|
+
even when the original task list omitted it.
|
|
390
|
+
- For a returned persisted field, `tests.md` must freeze at least one non-null
|
|
391
|
+
fixture and an allowed historical-NULL fixture separately. Assert API and DB
|
|
392
|
+
values for the same record ID, then browser rendering where a page is in
|
|
393
|
+
scope. Key-presence, HTTP 200, empty-page and NULL-only assertions cannot
|
|
394
|
+
close the non-null data path. Name the exact query/command and evidence file.
|
|
383
395
|
- 对 L3/L4 的输入校验、协议拒绝或异常分支,`tests.md` 还必须冻结真实注入载荷及其到达
|
|
384
396
|
目标解析/校验分支的证据;仅断言同一个 HTTP 状态码不算覆盖。原始畸形 JSON、错误
|
|
385
397
|
Content-Type、越权身份或非法字段必须按真实线协议发送,并同时断言无副作用。
|
|
@@ -41,6 +41,9 @@ CLI 命令:
|
|
|
41
41
|
停止,不创建托管 Task;已有用户评审通过的 change/Prompt 时原路径冻结;只有边界清晰的
|
|
42
42
|
口头小需求才直接进入 minimal/standard。若口头需求存在会改变实现方向的 API、数据、
|
|
43
43
|
并发、跨仓或 owner 决策,先进入澄清/文档流程,不能把这一判断交给 Runner 正则或 Executor。
|
|
44
|
+
多页面、跨前后端、数据库字段横向改造要求闭环交付时,按完整 SDD 冻结真实入口、
|
|
45
|
+
`tests.md` 和逐入口验收合同。仅有 OpenSpec `spec/design/tasks` 或通用冒烟报告,
|
|
46
|
+
只能声明相应范围已实现/验证,不得称为完整 SDD 验收。
|
|
44
47
|
|
|
45
48
|
```bash
|
|
46
49
|
superflow pipeline "<implementation-prompt 路径、change 目录或简单任务>" --managed --project "<项目根目录>" \
|
|
@@ -24,6 +24,14 @@
|
|
|
24
24
|
同页面不同角色的分支用不同入口 ID;不得只测试开发者选中的新接口。
|
|
25
25
|
5. 验收同时断言返回、最终状态和禁止的副作用。只读/纯函数场景也要给出明确
|
|
26
26
|
无持久化变更的理由,不能留空。browser 入口必须有 browser 验收,API 测试只能补充。
|
|
27
|
+
6. 横向页面/字段改造先从前端路由、列表列和可点击动作建立页面入口清单,再从后端
|
|
28
|
+
Controller、Mapper statement、全部写入方反向建立清单。逐项对账后才生成 tasks/tests;
|
|
29
|
+
相似方法名不得作为调用关系证据。每个列表记录实际页面请求、Controller、Service、
|
|
30
|
+
精确 Mapper statement、返回 DTO 与表;每个管理按钮记录实际 mutation API 和写入点。
|
|
31
|
+
未定位或两份清单不一致的入口标记待调查,不得以总数相等替代逐项核验。
|
|
32
|
+
7. 数据库字段展示用例必须分别覆盖一个非空记录与允许的历史 NULL 记录。非空记录
|
|
33
|
+
用同一业务 ID 比较 API 字段与数据库真源值,并在浏览器核对展示;仅有字段键、HTTP
|
|
34
|
+
200、空列表或历史 NULL 不能证明字段链路正确。修改入口还要验证写后读及禁止的副作用。
|
|
27
35
|
|
|
28
36
|
## 凭证扩展
|
|
29
37
|
|
|
@@ -80,3 +88,13 @@ coding-ready 复检失败会写 BLOCKED 撤销旧 READY。
|
|
|
80
88
|
验收阶段沿同一 R/E/C ID 在 `test-report.md` 回填实际角色、动作、请求路由、状态/
|
|
81
89
|
副作用断言、原始日志路径及结果。主 Agent 对照原始来源和实际证据,不只看测试汇总。
|
|
82
90
|
计划用例不是执行证据;API-only 不能报页面 E2E 成功。脚本未验证业务语义的部分不得宣称自动保证。
|
|
91
|
+
完整 SDD 报告使用唯一的逐用例执行证据表,供现有 report lint 核对冻结索引:
|
|
92
|
+
|
|
93
|
+
| 用例 ID | 入口 ID | 验收级别 | 结果 | 证据路径 |
|
|
94
|
+
|---|---|---|---|---|
|
|
95
|
+
| C1 | E1 | browser | PASS | logs/C1-trace.zip |
|
|
96
|
+
|
|
97
|
+
结果只用 `PASS/FAIL/BLOCKED/PARTIAL`;证据路径指向实际命令输出、浏览器 trace、
|
|
98
|
+
响应或数据库对账记录。PASS 的本地证据文件必须保留到验收并可读取;远端证据可用
|
|
99
|
+
HTTP(S) 链接。阻塞项在报告正文写明原因。表格仅证明用例逐项回填,不能证明
|
|
100
|
+
证据内容正确。任何非 PASS 用例存在时,不得声明整体验证 PASS。
|
|
@@ -71,6 +71,17 @@ mvn test -Dtest=UserServiceTest
|
|
|
71
71
|
|
|
72
72
|
## 4.1 真实测试数据与证据
|
|
73
73
|
|
|
74
|
+
完整 SDD 变更还需按 `document-review.json` 的 R/E/C 索引逐项回填,不得用总通过数
|
|
75
|
+
代替单个入口的结果。下表供 `superflow-test-report-lint.py --review` 校验:
|
|
76
|
+
|
|
77
|
+
| 用例 ID | 入口 ID | 验收级别 | 结果 | 证据路径 |
|
|
78
|
+
|---|---|---|---|---|
|
|
79
|
+
| C1 | E1 | browser | PASS | logs/C1-trace.zip |
|
|
80
|
+
|
|
81
|
+
`PASS/FAIL/BLOCKED/PARTIAL` 之外的值无效;非 PASS 项在正文说明原因。
|
|
82
|
+
数据库字段展示要分别记录非空数据按同一 ID 的 API/DB 值对账、历史 NULL 结果和
|
|
83
|
+
真实浏览器展示。API 键存在、静态前端配置与浏览器显示分别记录证据等级。
|
|
84
|
+
|
|
74
85
|
| 用例 ID | 真实参数 | 参数来源 | 自动化命令 | 证据等级 | 执行证据 | 结论 |
|
|
75
86
|
|---------|----------|----------|------------|----------|----------|------|
|
|
76
87
|
| TC-001 | parkCode=____ | 前端请求 / 用户提供 / DB查询 / Mock | curl/Newman/pytest/RestAssured | Mock only / 测试端点 / 真实入口 | 响应 + DB + 日志 | Passed / Blocked / Partial |
|
|
@@ -87,15 +87,25 @@ project_root_for_change() {
|
|
|
87
87
|
|
|
88
88
|
require_test_report_lint() {
|
|
89
89
|
local report="$CHANGE_DIR/test-report.md"
|
|
90
|
-
local root lint output
|
|
90
|
+
local root lint output review
|
|
91
|
+
local -a lint_args
|
|
91
92
|
root="$(project_root_for_change)"
|
|
93
|
+
review="$CHANGE_DIR/.sdd/reviews/document-review.json"
|
|
94
|
+
lint_args=(--tests "$CHANGE_DIR/tests.md")
|
|
95
|
+
if [[ "$(state_get workflow)" == "full" && ! -f "$review" ]]; then
|
|
96
|
+
issues+=("full SDD verify requires .sdd/reviews/document-review.json; complete the docs entry review before verify")
|
|
97
|
+
return
|
|
98
|
+
fi
|
|
99
|
+
if [[ -f "$review" ]]; then
|
|
100
|
+
lint_args+=(--review "$review")
|
|
101
|
+
fi
|
|
92
102
|
|
|
93
103
|
for lint in \
|
|
94
104
|
"$root/.codex/hooks/superflow-test-report-lint.py" \
|
|
95
105
|
"$HOME/.codex/hooks/superflow-test-report-lint.py"; do
|
|
96
106
|
if [[ -x "$lint" ]]; then
|
|
97
107
|
output="$(mktemp)"
|
|
98
|
-
if ! "$lint"
|
|
108
|
+
if ! "$lint" "${lint_args[@]}" "$report" >"$output" 2>&1; then
|
|
99
109
|
issues+=("superflow-test-report-lint failed: $(tr '\n' ' ' < "$output" | sed -E 's/[[:space:]]+/ /g')")
|
|
100
110
|
fi
|
|
101
111
|
rm -f "$output"
|
|
@@ -34,6 +34,8 @@ unverifiable claims separate rather than giving them a guessed severity.
|
|
|
34
34
|
完整 workflow 验收必须读取[需求×真实入口评审](../superflow-pipeline/references/document-review-coverage.md)。
|
|
35
35
|
沿 R/E/C ID 在现有 test-report 回填实际角色、页面动作、请求路由、最终状态与禁止副作用
|
|
36
36
|
的原始证据。独立对照原始来源及实际调用方;API-only 不得冒充 browser E2E,计划不等于执行。
|
|
37
|
+
横向字段改造还要复核页面请求命中的精确 Mapper statement,并查看非空记录的同 ID
|
|
38
|
+
API/DB 值对照与浏览器显示。历史 NULL、字段键存在和静态列配置各自只能支持较弱结论。
|
|
37
39
|
|
|
38
40
|
Verification is a phase, not a final sentence. Use this skill after
|
|
39
41
|
implementation work claims completion and before archive or delivery.
|
|
@@ -140,7 +142,8 @@ Before pass:
|
|
|
140
142
|
DB/log/API evidence, handoff hash, and phase state.
|
|
141
143
|
2. `~/.codex/hooks/superflow-verify-integration.sh <test-report.md>` passes when the
|
|
142
144
|
report involves integration evidence.
|
|
143
|
-
3. `~/.codex/hooks/superflow-test-report-lint.py --tests <tests.md>
|
|
145
|
+
3. `~/.codex/hooks/superflow-test-report-lint.py --tests <tests.md> --review
|
|
146
|
+
<.sdd/reviews/document-review.json> <test-report.md>`
|
|
144
147
|
passes. If `tests.md` declares L3/L4, real-entry, third-party, device,
|
|
145
148
|
database, log, or dev-tool evidence, mock-only/unit-only reports are hard
|
|
146
149
|
failures unless the report is explicitly `Blocked` or `Partially verified`
|
|
@@ -376,6 +376,18 @@ Use references only as needed:
|
|
|
376
376
|
`Case ID | Requirement/scenario | Level L1/L2/L3/L4 | Precondition data | Steps |
|
|
377
377
|
Automation command | Response assertion | DB assertion | Log assertion | RED expected failure | GREEN expected pass |
|
|
378
378
|
test-report evidence location`.
|
|
379
|
+
- For cross-page management or database-backed display changes, reconcile the
|
|
380
|
+
frontend action/list inventory with real Controller, Service, exact Mapper
|
|
381
|
+
statement and table anchors before freezing tasks. Put the confirmed chain
|
|
382
|
+
and entry ID in `source-code-audit.md` and reuse it in `design.md`, `tasks.md`
|
|
383
|
+
and `tests.md`. A similarly named query is not evidence for the page route.
|
|
384
|
+
Include every visible mutation button, such as enable/disable, as an entry
|
|
385
|
+
even when the original task list omitted it.
|
|
386
|
+
- For a returned persisted field, `tests.md` must freeze at least one non-null
|
|
387
|
+
fixture and an allowed historical-NULL fixture separately. Assert API and DB
|
|
388
|
+
values for the same record ID, then browser rendering where a page is in
|
|
389
|
+
scope. Key-presence, HTTP 200, empty-page and NULL-only assertions cannot
|
|
390
|
+
close the non-null data path. Name the exact query/command and evidence file.
|
|
379
391
|
- For L3/L4 input validation, protocol rejection, and exceptional branches,
|
|
380
392
|
`tests.md` also freezes the real injected payload and evidence that it reaches
|
|
381
393
|
the intended parser or validation branch; matching the same HTTP status alone
|
|
@@ -61,6 +61,10 @@ user-approved change/prompt is frozen from its original path. Only a bounded
|
|
|
61
61
|
verbal request enters minimal or standard directly. Direction-changing API,
|
|
62
62
|
data, concurrency, cross-repository, or owner choices return to
|
|
63
63
|
clarification/documents; Runner regexes and Executor improvisation do not decide them.
|
|
64
|
+
For cross-page, cross-stack or database-field changes requesting closed delivery,
|
|
65
|
+
use full SDD to freeze real entries, `tests.md` and per-entry acceptance. A raw
|
|
66
|
+
OpenSpec `spec/design/tasks` set or generic smoke report supports only its
|
|
67
|
+
actually verified scope, not a full SDD acceptance claim.
|
|
64
68
|
|
|
65
69
|
```bash
|
|
66
70
|
superflow pipeline "<implementation prompt, change directory, or direct task>" --managed --project "<project root>" \
|
|
@@ -26,6 +26,16 @@ investigate source-resolvable questions autonomously.
|
|
|
26
26
|
5. Assert response, final state and forbidden effects. For read-only/pure-function work explain
|
|
27
27
|
why no persistent change applies; do not leave blanks. Browser paths require browser acceptance;
|
|
28
28
|
API checks can supplement, not replace them.
|
|
29
|
+
6. For cross-page or field changes, inventory frontend routes, list columns and clickable actions
|
|
30
|
+
independently from backend Controllers, exact Mapper statements and all writers. Reconcile both
|
|
31
|
+
inventories before writing tasks/tests. Similar method names are not call-chain evidence. For
|
|
32
|
+
every list record page request, Controller, Service, exact Mapper statement, response DTO and
|
|
33
|
+
table; for every management button record its mutation API and write point. Investigate missing
|
|
34
|
+
or conflicting entries instead of treating matching totals as proof.
|
|
35
|
+
7. A database-backed display case needs both a non-null fixture and a separate allowed historical
|
|
36
|
+
NULL case. Compare API fields with authoritative DB values for the same business ID, then check
|
|
37
|
+
browser rendering. Field keys, HTTP 200, empty lists and historical NULL alone are insufficient.
|
|
38
|
+
Mutation cases also check write-then-read behavior and forbidden side effects.
|
|
29
39
|
|
|
30
40
|
## Receipt extension
|
|
31
41
|
|
|
@@ -87,3 +97,13 @@ During verification, reuse R/E/C IDs in `test-report.md`, recording actual actor
|
|
|
87
97
|
request route, state/forbidden-effect assertions, raw evidence paths and outcomes. The Host
|
|
88
98
|
compares them to original sources, not only a test summary. Planned cases are not execution
|
|
89
99
|
evidence; API-only results cannot claim browser E2E. Do not claim automatic semantic assurance.
|
|
100
|
+
Full SDD reports use one per-case execution evidence table for the existing report linter:
|
|
101
|
+
|
|
102
|
+
| Case ID | Entry ID | Acceptance level | Result | Evidence path |
|
|
103
|
+
|---|---|---|---|---|
|
|
104
|
+
| C1 | E1 | browser | PASS | logs/C1-trace.zip |
|
|
105
|
+
|
|
106
|
+
Results are `PASS/FAIL/BLOCKED/PARTIAL`. Evidence points to actual command output, browser trace,
|
|
107
|
+
response or DB reconciliation. Retain readable local evidence files for PASS; HTTP(S) links may
|
|
108
|
+
identify remote evidence. Explain blockers in the report body. This table proves case-level
|
|
109
|
+
accounting only; the Host must inspect evidence contents. Any non-PASS case prevents an overall PASS.
|
|
@@ -55,6 +55,18 @@ Archive Readiness: PASS / BLOCKED
|
|
|
55
55
|
|
|
56
56
|
Required for `verify_mode: full`:
|
|
57
57
|
|
|
58
|
+
For full SDD changes, fill every R/E/C case from `document-review.json` in one
|
|
59
|
+
execution table checked by `superflow-test-report-lint.py --review`:
|
|
60
|
+
|
|
61
|
+
| Case ID | Entry ID | Acceptance level | Result | Evidence path |
|
|
62
|
+
|---|---|---|---|---|
|
|
63
|
+
| C1 | E1 | browser | PASS | logs/C1-trace.zip |
|
|
64
|
+
|
|
65
|
+
Use only `PASS/FAIL/BLOCKED/PARTIAL`; explain non-PASS results in the report.
|
|
66
|
+
For database-backed display fields, record same-ID API/DB values on non-null
|
|
67
|
+
data, historical NULL separately, and real browser rendering. Distinguish
|
|
68
|
+
field-key checks, static frontend inspection and browser evidence.
|
|
69
|
+
|
|
58
70
|
- Test environment:
|
|
59
71
|
- Branch/commit/build number or image:
|
|
60
72
|
- Base URL:
|
|
@@ -87,15 +87,25 @@ project_root_for_change() {
|
|
|
87
87
|
|
|
88
88
|
require_test_report_lint() {
|
|
89
89
|
local report="$CHANGE_DIR/test-report.md"
|
|
90
|
-
local root lint output
|
|
90
|
+
local root lint output review
|
|
91
|
+
local -a lint_args
|
|
91
92
|
root="$(project_root_for_change)"
|
|
93
|
+
review="$CHANGE_DIR/.sdd/reviews/document-review.json"
|
|
94
|
+
lint_args=(--tests "$CHANGE_DIR/tests.md")
|
|
95
|
+
if [[ "$(state_get workflow)" == "full" && ! -f "$review" ]]; then
|
|
96
|
+
issues+=("full SDD verify requires .sdd/reviews/document-review.json; complete the docs entry review before verify")
|
|
97
|
+
return
|
|
98
|
+
fi
|
|
99
|
+
if [[ -f "$review" ]]; then
|
|
100
|
+
lint_args+=(--review "$review")
|
|
101
|
+
fi
|
|
92
102
|
|
|
93
103
|
for lint in \
|
|
94
104
|
"$root/.codex/hooks/superflow-test-report-lint.py" \
|
|
95
105
|
"$HOME/.codex/hooks/superflow-test-report-lint.py"; do
|
|
96
106
|
if [[ -x "$lint" ]]; then
|
|
97
107
|
output="$(mktemp)"
|
|
98
|
-
if ! "$lint"
|
|
108
|
+
if ! "$lint" "${lint_args[@]}" "$report" >"$output" 2>&1; then
|
|
99
109
|
issues+=("superflow-test-report-lint failed: $(tr '\n' ' ' < "$output" | sed -E 's/[[:space:]]+/ /g')")
|
|
100
110
|
fi
|
|
101
111
|
rm -f "$output"
|
|
@@ -40,6 +40,10 @@ For full workflow acceptance, read [requirement × real-entry review](../superfl
|
|
|
40
40
|
Reuse R/E/C IDs in the existing test-report with actual actors, page actions, request routes,
|
|
41
41
|
final state and forbidden-effect evidence. Independently compare originals and actual callers;
|
|
42
42
|
API-only is not browser E2E, and planned cases are not execution evidence.
|
|
43
|
+
For cross-page field changes, recheck the exact Mapper statement reached by each
|
|
44
|
+
page request and inspect same-ID API/DB comparisons on non-null records plus
|
|
45
|
+
browser rendering. Historical NULL, field keys and static column configuration
|
|
46
|
+
support narrower claims only.
|
|
43
47
|
|
|
44
48
|
Verification is a phase, not a final sentence. Use this skill after
|
|
45
49
|
implementation work claims completion and before archive or delivery.
|
|
@@ -146,7 +150,8 @@ Before pass:
|
|
|
146
150
|
DB/log/API evidence, handoff hash, and phase state.
|
|
147
151
|
2. `~/.codex/hooks/superflow-verify-integration.sh <test-report.md>` passes when the
|
|
148
152
|
report involves integration evidence.
|
|
149
|
-
3. `~/.codex/hooks/superflow-test-report-lint.py --tests <tests.md>
|
|
153
|
+
3. `~/.codex/hooks/superflow-test-report-lint.py --tests <tests.md> --review
|
|
154
|
+
<.sdd/reviews/document-review.json> <test-report.md>`
|
|
150
155
|
passes. If `tests.md` declares L3/L4, real-entry, third-party, device,
|
|
151
156
|
database, log, or dev-tool evidence, mock-only/unit-only reports are hard
|
|
152
157
|
failures unless the report is explicitly `Blocked` or `Partially verified`
|
package/dist/app/cli.js
CHANGED
|
@@ -323,8 +323,9 @@ program
|
|
|
323
323
|
});
|
|
324
324
|
program
|
|
325
325
|
.command("hook-migrate")
|
|
326
|
-
.description("Audit or migrate legacy
|
|
326
|
+
.description("Audit or migrate known legacy Hook registrations safely")
|
|
327
327
|
.option("--path <path>", "Project path")
|
|
328
|
+
.option("--scope <scope>", "project | global", "project")
|
|
328
329
|
.option("--agent <agent>", "codex | claude | both", "both")
|
|
329
330
|
.option("--apply", "Back up and remove only known legacy managed Hooks")
|
|
330
331
|
.option("--json", "Output JSON")
|
|
@@ -336,6 +337,7 @@ program
|
|
|
336
337
|
.command("hook-audit")
|
|
337
338
|
.description("Read-only audit of global and project Hook conflicts")
|
|
338
339
|
.option("--path <path>", "Project path")
|
|
340
|
+
.option("--scope <scope>", "project | global", "project")
|
|
339
341
|
.option("--agent <agent>", "codex | claude | both", "both")
|
|
340
342
|
.option("--json", "Output JSON")
|
|
341
343
|
.action(async (options) => {
|
package/dist/app/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/app/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/app/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,35 @@
|
|
|
1
|
+
import os from "node:os";
|
|
1
2
|
import path from "node:path";
|
|
2
|
-
import { auditProjectHooks, migrateProjectHooks } from "../../domains/hook-migration.js";
|
|
3
|
+
import { auditGlobalHooks, auditProjectHooks, migrateGlobalHooks, migrateProjectHooks, } from "../../domains/hook-migration.js";
|
|
3
4
|
export function hookMigrateCommand(options = {}) {
|
|
4
5
|
if (options.agent && !["codex", "claude", "both"].includes(options.agent)) {
|
|
5
6
|
throw new Error(`Unsupported agent: ${options.agent}`);
|
|
6
7
|
}
|
|
7
|
-
const
|
|
8
|
+
const scope = options.scope ?? "project";
|
|
9
|
+
if (scope !== "project" && scope !== "global") {
|
|
10
|
+
throw new Error(`Unsupported hook scope: ${scope}`);
|
|
11
|
+
}
|
|
12
|
+
if (scope === "global" && options.path) {
|
|
13
|
+
throw new Error("--path only applies to project Hook migration");
|
|
14
|
+
}
|
|
15
|
+
const root = scope === "global" ? os.homedir() : path.resolve(options.path ?? process.cwd());
|
|
8
16
|
const hosts = options.agent === "claude" ? ["claude"] : options.agent === "codex" ? ["codex"] : ["codex", "claude"];
|
|
9
|
-
const result = hosts.map((host) =>
|
|
17
|
+
const result = hosts.map((host) => scope === "global"
|
|
18
|
+
? options.apply ? migrateGlobalHooks(root, host) : auditGlobalHooks(root, host)
|
|
19
|
+
: options.apply ? migrateProjectHooks(root, host) : auditProjectHooks(root, host));
|
|
10
20
|
if (options.json)
|
|
11
|
-
console.log(JSON.stringify({
|
|
21
|
+
console.log(JSON.stringify({
|
|
22
|
+
scope, ...(scope === "global" ? { homePath: root } : { projectPath: root }),
|
|
23
|
+
apply: !!options.apply, hosts: result,
|
|
24
|
+
}, null, 2));
|
|
12
25
|
else
|
|
13
26
|
for (const item of result) {
|
|
14
27
|
const migrated = "changed" in item && Boolean(item.changed);
|
|
15
28
|
const backup = "backup" in item ? item.backup : undefined;
|
|
16
|
-
|
|
29
|
+
const prefix = scope === "global"
|
|
30
|
+
? `${item.autoMigratable} 条已知旧全局 Hook 可清理,${item.retained} 条保留`
|
|
31
|
+
: `全局替代=${item.globalReplacement ? "可用" : "缺失"};${item.autoMigratable} 条可迁移,${item.retained} 条保留`;
|
|
32
|
+
console.log(`${item.host}: ${prefix}${migrated ? `;已备份 ${backup}` : ""}`);
|
|
17
33
|
for (const finding of item.findings)
|
|
18
34
|
console.log(` - [${finding.classification}] ${finding.event}/${finding.matcher ?? "*"}: ${finding.command}(${finding.reason})`);
|
|
19
35
|
if (item.error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-migrate.js","sourceRoot":"","sources":["../../../src/app/commands/hook-migrate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"hook-migrate.js","sourceRoot":"","sources":["../../../src/app/commands/hook-migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,14 @@ function classify(command, provenance) {
|
|
|
31
31
|
}
|
|
32
32
|
return { classification: "custom", reason: "来源不确定或属于项目自定义 Hook,保留" };
|
|
33
33
|
}
|
|
34
|
+
function classifyGlobal(command) {
|
|
35
|
+
const match = /^bash scripts\/hooks\/([a-z][a-z0-9-]*\.sh)(?: (record (?:codex|claude)|flush))?(?: \|\| true)?$/.exec(command.trim());
|
|
36
|
+
if (match && LEGACY_AKE_NAMES.has(match[1]) &&
|
|
37
|
+
(match[1] === "usage-collector.sh") === Boolean(match[2])) {
|
|
38
|
+
return { classification: "legacy-ake", reason: "命中已知旧 AKE 全局相对路径 Hook 的完整命令" };
|
|
39
|
+
}
|
|
40
|
+
return { classification: "custom", reason: "非白名单完整命令,保留" };
|
|
41
|
+
}
|
|
34
42
|
function readConfig(root, host) {
|
|
35
43
|
const file = hookConfigPath(root, host);
|
|
36
44
|
if (!fs.existsSync(file))
|
|
@@ -50,7 +58,7 @@ function readConfig(root, host) {
|
|
|
50
58
|
return { file, data: null, error: `Hook 配置无法解析:${error.message}` };
|
|
51
59
|
}
|
|
52
60
|
}
|
|
53
|
-
|
|
61
|
+
function auditHooks(root, host, scope) {
|
|
54
62
|
const provenance = hasAkeProvenance(root);
|
|
55
63
|
const { file, data, error } = readConfig(root, host);
|
|
56
64
|
const findings = [];
|
|
@@ -65,7 +73,8 @@ export function auditProjectHooks(root, host) {
|
|
|
65
73
|
if (typeof hook?.command !== "string")
|
|
66
74
|
continue;
|
|
67
75
|
findings.push({ event, matcher: typeof entry.matcher === "string" ? entry.matcher : null,
|
|
68
|
-
command: hook.command, ...
|
|
76
|
+
command: hook.command, ...(scope === "global"
|
|
77
|
+
? classifyGlobal(hook.command) : classify(hook.command, provenance)) });
|
|
69
78
|
}
|
|
70
79
|
}
|
|
71
80
|
}
|
|
@@ -76,6 +85,12 @@ export function auditProjectHooks(root, host) {
|
|
|
76
85
|
retained: findings.filter((item) => item.classification === "custom").length,
|
|
77
86
|
...(error ? { error } : {}) };
|
|
78
87
|
}
|
|
88
|
+
export function auditProjectHooks(root, host) {
|
|
89
|
+
return auditHooks(root, host, "project");
|
|
90
|
+
}
|
|
91
|
+
export function auditGlobalHooks(homeRoot, host) {
|
|
92
|
+
return auditHooks(homeRoot, host, "global");
|
|
93
|
+
}
|
|
79
94
|
function hasGlobalReplacement(host) {
|
|
80
95
|
const { data } = readConfig(os.homedir(), host);
|
|
81
96
|
const commands = Object.values(data?.hooks ?? {}).flatMap((entries) => Array.isArray(entries) ? entries.flatMap((entry) => Array.isArray(entry?.hooks) ? entry.hooks.map((hook) => hook?.command) : []) : []);
|
|
@@ -98,19 +113,37 @@ export function migrateProjectHooks(root, host, options = {}) {
|
|
|
98
113
|
const { file, data, error } = readConfig(root, host);
|
|
99
114
|
if (error || !data)
|
|
100
115
|
return { ...audit, changed: false, error: error ?? "配置不存在" };
|
|
116
|
+
removeKnownHooks(data, (command) => classify(command, audit.provenance).classification !== "custom");
|
|
117
|
+
const backup = writeMigrationConfig(file, data);
|
|
118
|
+
return { ...audit, changed: true, backup };
|
|
119
|
+
}
|
|
120
|
+
export function migrateGlobalHooks(homeRoot, host) {
|
|
121
|
+
const audit = auditGlobalHooks(homeRoot, host);
|
|
122
|
+
if (audit.error || audit.autoMigratable === 0)
|
|
123
|
+
return { ...audit, changed: false };
|
|
124
|
+
const { file, data, error } = readConfig(homeRoot, host);
|
|
125
|
+
if (error || !data)
|
|
126
|
+
return { ...audit, changed: false, error: error ?? "配置不存在" };
|
|
127
|
+
removeKnownHooks(data, (command) => classifyGlobal(command).classification === "legacy-ake");
|
|
128
|
+
const backup = writeMigrationConfig(file, data);
|
|
129
|
+
return { ...audit, changed: true, backup };
|
|
130
|
+
}
|
|
131
|
+
function removeKnownHooks(data, shouldRemove) {
|
|
101
132
|
for (const [event, entries] of Object.entries(data.hooks ?? {})) {
|
|
102
133
|
if (!Array.isArray(entries))
|
|
103
134
|
continue;
|
|
104
135
|
const kept = entries.map((entry) => {
|
|
105
136
|
if (!Array.isArray(entry?.hooks))
|
|
106
137
|
return entry;
|
|
107
|
-
return { ...entry, hooks: entry.hooks.filter((hook) => typeof hook?.command !== "string" ||
|
|
138
|
+
return { ...entry, hooks: entry.hooks.filter((hook) => typeof hook?.command !== "string" || !shouldRemove(hook.command)) };
|
|
108
139
|
}).filter((entry) => !Array.isArray(entry?.hooks) || entry.hooks.length > 0);
|
|
109
140
|
if (kept.length)
|
|
110
141
|
data.hooks[event] = kept;
|
|
111
142
|
else
|
|
112
143
|
delete data.hooks[event];
|
|
113
144
|
}
|
|
145
|
+
}
|
|
146
|
+
function writeMigrationConfig(file, data) {
|
|
114
147
|
const backup = `${file}.superflow-migrate-${Date.now()}.bak`;
|
|
115
148
|
fs.copyFileSync(file, backup, fs.constants.COPYFILE_EXCL);
|
|
116
149
|
const temporary = `${file}.superflow-migrate-${process.pid}.tmp`;
|
|
@@ -122,6 +155,6 @@ export function migrateProjectHooks(root, host, options = {}) {
|
|
|
122
155
|
fs.rmSync(temporary, { force: true });
|
|
123
156
|
throw error;
|
|
124
157
|
}
|
|
125
|
-
return
|
|
158
|
+
return backup;
|
|
126
159
|
}
|
|
127
160
|
//# sourceMappingURL=hook-migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-migration.js","sourceRoot":"","sources":["../../src/domains/hook-migration.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hook-migration.js","sourceRoot":"","sources":["../../src/domains/hook-migration.ts"],"names":[],"mappings":"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"}
|