@chenmk/superflow 0.5.16 → 0.5.17
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 +9 -0
- package/README.zh-CN.md +9 -0
- package/assets/scripts/superflow-integration-evidence-hook.sh +1 -1
- package/assets/scripts/superflow-managed-executor-preflight.mjs +30 -0
- package/assets/scripts/superflow-managed-work-check.mjs +35 -0
- package/assets/scripts/superflow-review-coverage.mjs +34 -0
- package/assets/scripts/superflow-test-report-lint.py +165 -9
- package/assets/scripts/superflow-verify-integration.sh +4 -9
- package/assets/skills/superflow-docs/SKILL.md +3 -0
- package/assets/skills/superflow-implement/SKILL.md +3 -0
- package/assets/skills/superflow-pipeline/references/document-review-coverage.md +18 -3
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +3 -1
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +9 -5
- package/assets/skills/superflow-verify/SKILL.md +3 -0
- package/assets/skills-en/superflow-docs/SKILL.md +3 -0
- package/assets/skills-en/superflow-implement/SKILL.md +3 -0
- package/assets/skills-en/superflow-pipeline/references/document-review-coverage.md +18 -3
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +3 -1
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +9 -5
- package/assets/skills-en/superflow-verify/SKILL.md +3 -0
- package/dist/app/commands/change-guard.js +4 -0
- package/dist/app/commands/change-guard.js.map +1 -1
- package/dist/app/commands/update.js +8 -6
- package/dist/app/commands/update.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,6 +31,15 @@
|
|
|
31
31
|
SuperBridge Flow is a workflow CLI for bringing OpenSpec/SDD and Superpowers
|
|
32
32
|
together in real software delivery.
|
|
33
33
|
|
|
34
|
+
## 0.5.17 acceptance evidence fixes
|
|
35
|
+
|
|
36
|
+
- Per-case PASS binds retained receipts and raw output to the service entry and current source/build. Empty files, remote links, zero execution and substituted entries no longer pass.
|
|
37
|
+
- Persisted fields freeze before/after values for the same business ID and expected assertions. Independent review still checks the actual Service-to-Mapper statement.
|
|
38
|
+
- Keep partial results; only a complete final summary authorizes delivery. Lightweight documentation acquires no DB requirement.
|
|
39
|
+
- CLI and Codex/Claude scripts use the same installation source. Repeated updates refresh version records and preserve custom state.
|
|
40
|
+
|
|
41
|
+
Complete affected evidence for legacy reports. Hashes prove identity, not business correctness or authenticity.
|
|
42
|
+
|
|
34
43
|
## Why SuperBridge Flow
|
|
35
44
|
|
|
36
45
|
Modern agentic coding often fails in the gap between a well-written spec and
|
package/README.zh-CN.md
CHANGED
|
@@ -47,6 +47,15 @@ CLI 会把 SuperBridge Flow 技能、配套 hook/command 脚本整合为单一 n
|
|
|
47
47
|
- Claude Code:`~/.claude/skills/`、`~/.claude/scripts/`,并注册 `~/.claude/settings.json` hook
|
|
48
48
|
- Codex:`~/.codex/skills/`、`~/.codex/hooks/`
|
|
49
49
|
|
|
50
|
+
## 0.5.17 验收证据修复
|
|
51
|
+
|
|
52
|
+
- 逐用例 PASS 绑定本地执行凭证、原始输出、具体服务入口及当前源码/构建;空文件、远端链接、零执行和入口替代不再通过。
|
|
53
|
+
- 持久化字段需冻结同业务 ID 前后值与预期断言;独立评审继续核对实际 Service→Mapper statement。
|
|
54
|
+
- 局部结果保留 PARTIAL,最终完整汇总才可交付;轻量文档不追加数据库要求。
|
|
55
|
+
- CLI、Codex/Claude 脚本使用同一安装来源,重复更新刷新版本记录并保留自定义状态。
|
|
56
|
+
|
|
57
|
+
旧报告缺执行凭证时补齐受影响证据;哈希只证明身份,不证明业务正确性或防伪。
|
|
58
|
+
|
|
50
59
|
## 亮点
|
|
51
60
|
|
|
52
61
|
0.5.10 加强文档交付:逐需求×真实入口核对(含排除项)、真实入口验收合同、
|
|
@@ -3,6 +3,7 @@ import { execFileSync } from "node:child_process";
|
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
6
7
|
|
|
7
8
|
const [projectArg = ".", taskId] = process.argv.slice(2);
|
|
8
9
|
if (!taskId) {
|
|
@@ -102,6 +103,35 @@ if (changeDir) {
|
|
|
102
103
|
}
|
|
103
104
|
if (!fs.existsSync(reportFile))
|
|
104
105
|
errors.push(`缺少 test-report.md: ${reportFile}`);
|
|
106
|
+
const stateFile = path.join(changeDir, ".sdd/state.yaml");
|
|
107
|
+
const reviewFile = path.join(changeDir, ".sdd/reviews/document-review.json");
|
|
108
|
+
const full =
|
|
109
|
+
fs.existsSync(stateFile) &&
|
|
110
|
+
/^workflow:\s*full\s*$/m.test(fs.readFileSync(stateFile, "utf8"));
|
|
111
|
+
if (full && !fs.existsSync(reviewFile))
|
|
112
|
+
errors.push("完整 SDD 缺少冻结入口评审凭证");
|
|
113
|
+
if (fs.existsSync(reviewFile)) {
|
|
114
|
+
try {
|
|
115
|
+
execFileSync(
|
|
116
|
+
"python3",
|
|
117
|
+
[
|
|
118
|
+
path.join(
|
|
119
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
120
|
+
"superflow-test-report-lint.py",
|
|
121
|
+
),
|
|
122
|
+
"--tests",
|
|
123
|
+
path.join(changeDir, "tests.md"),
|
|
124
|
+
"--review",
|
|
125
|
+
reviewFile,
|
|
126
|
+
"--require-complete",
|
|
127
|
+
reportFile,
|
|
128
|
+
],
|
|
129
|
+
{ encoding: "utf8", stdio: "pipe" },
|
|
130
|
+
);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
errors.push(`逐用例执行凭证门禁失败: ${error.stdout ?? error.message}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
105
135
|
}
|
|
106
136
|
|
|
107
137
|
if (errors.length > 0) {
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import crypto from "crypto";
|
|
3
3
|
import fs from "fs";
|
|
4
4
|
import path from "path";
|
|
5
|
+
import { execFileSync } from "node:child_process";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
5
7
|
|
|
6
8
|
const [projectArg = ".", taskId, mode] = process.argv.slice(2);
|
|
7
9
|
const beforeReadyEvent = mode === "--before-ready-event";
|
|
@@ -328,6 +330,39 @@ function verifyOpenSpecTasksComplete(task, executor) {
|
|
|
328
330
|
while (current.startsWith(projectRoot)) {
|
|
329
331
|
const tasksFile = path.join(current, "tasks.md");
|
|
330
332
|
if (fs.existsSync(tasksFile)) {
|
|
333
|
+
const reviewFile = path.join(
|
|
334
|
+
current,
|
|
335
|
+
".sdd/reviews/document-review.json",
|
|
336
|
+
);
|
|
337
|
+
const stateFile = path.join(current, ".sdd/state.yaml");
|
|
338
|
+
const full =
|
|
339
|
+
fs.existsSync(stateFile) &&
|
|
340
|
+
/^workflow:\s*full\s*$/m.test(fs.readFileSync(stateFile, "utf8"));
|
|
341
|
+
if (full && !fs.existsSync(reviewFile))
|
|
342
|
+
fail("完整 SDD 缺少冻结入口评审凭证");
|
|
343
|
+
if (fs.existsSync(reviewFile)) {
|
|
344
|
+
try {
|
|
345
|
+
execFileSync(
|
|
346
|
+
"python3",
|
|
347
|
+
[
|
|
348
|
+
path.join(
|
|
349
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
350
|
+
"superflow-test-report-lint.py",
|
|
351
|
+
),
|
|
352
|
+
"--tests",
|
|
353
|
+
path.join(current, "tests.md"),
|
|
354
|
+
"--review",
|
|
355
|
+
reviewFile,
|
|
356
|
+
"--require-complete",
|
|
357
|
+
path.join(current, "test-report.md"),
|
|
358
|
+
],
|
|
359
|
+
{ encoding: "utf8", stdio: "pipe" },
|
|
360
|
+
);
|
|
361
|
+
} catch (error) {
|
|
362
|
+
fail(`逐用例执行凭证门禁失败: ${error.stdout ?? error.message}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
331
366
|
const tasks = fs
|
|
332
367
|
.readFileSync(tasksFile, "utf8")
|
|
333
368
|
.split(/\r?\n/)
|
|
@@ -138,6 +138,40 @@ export function validateCoverage(root, review, issues, checkCode = true) {
|
|
|
138
138
|
issues.push(`用例 ${test.id} 缺少 ${key} 断言`);
|
|
139
139
|
}
|
|
140
140
|
refs(test.sourceRefs, "contract", `用例 ${test.id}`);
|
|
141
|
+
if (
|
|
142
|
+
test.evidenceKind !== undefined &&
|
|
143
|
+
!["real", "controlled-simulation", "unit"].includes(test.evidenceKind)
|
|
144
|
+
)
|
|
145
|
+
issues.push(`用例 ${test.id} 的 evidenceKind 无效`);
|
|
146
|
+
const writes = test.assertions?.persistence ?? [];
|
|
147
|
+
if (
|
|
148
|
+
!Array.isArray(writes) ||
|
|
149
|
+
writes.some(
|
|
150
|
+
(write) =>
|
|
151
|
+
!nonempty(write?.id) ||
|
|
152
|
+
!nonempty(write.table) ||
|
|
153
|
+
!nonempty(write.field) ||
|
|
154
|
+
!("expected" in write) ||
|
|
155
|
+
(write.expected === null && write.allowNull !== true),
|
|
156
|
+
)
|
|
157
|
+
) {
|
|
158
|
+
issues.push(
|
|
159
|
+
`用例 ${test.id} 缺少持久化字段与非空预期值;历史 NULL 需明确 allowNull`,
|
|
160
|
+
);
|
|
161
|
+
} else {
|
|
162
|
+
const ids = new Set(writes.map((write) => write.id));
|
|
163
|
+
if (ids.size !== writes.length)
|
|
164
|
+
issues.push(`用例 ${test.id} 持久化断言 ID 重复`);
|
|
165
|
+
for (const field of entry?.persistence ?? []) {
|
|
166
|
+
if (
|
|
167
|
+
!writes.some(
|
|
168
|
+
(write) =>
|
|
169
|
+
write.table === field.table && write.field === field.field,
|
|
170
|
+
)
|
|
171
|
+
)
|
|
172
|
+
issues.push(`用例 ${test.id} 缺少入口写入字段的前后值断言`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
141
175
|
}
|
|
142
176
|
const pairs = new Set();
|
|
143
177
|
for (const decision of list(coverage.decisions)) {
|
|
@@ -14,6 +14,7 @@ mechanically:
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
16
|
import argparse
|
|
17
|
+
import hashlib
|
|
17
18
|
import json
|
|
18
19
|
import re
|
|
19
20
|
import subprocess
|
|
@@ -261,6 +262,146 @@ def lint_against_tests_contract(report_path: Path, report_text: str, tests_path:
|
|
|
261
262
|
return issues
|
|
262
263
|
|
|
263
264
|
|
|
265
|
+
def final_report_result(text: str) -> str:
|
|
266
|
+
# Only the latest explicit summary per language is authoritative. Historical
|
|
267
|
+
# notes and fenced examples do not invalidate the final execution ledger.
|
|
268
|
+
text = re.sub(r"```.*?```", "", text, flags=re.S)
|
|
269
|
+
results = {}
|
|
270
|
+
for match in re.finditer(r"^(验证结果|Verification Result)\s*[::]\s*([A-Z_]+)\s*$", text, re.I | re.M):
|
|
271
|
+
results[match[1].lower()] = match[2].upper()
|
|
272
|
+
if len(set(results.values())) > 1:
|
|
273
|
+
return "CONFLICT"
|
|
274
|
+
return next(iter(results.values()), "MISSING")
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def verified_file(base: Path, value: str) -> Path:
|
|
278
|
+
"""Local retained artifacts only. Hashes prove identity, not truthfulness."""
|
|
279
|
+
if not isinstance(value, str) or not value.strip() or re.match(r"^[a-z]+://", value, re.I):
|
|
280
|
+
raise ValueError("需要本地可读取的执行证据,远端 URL 不能作为通过凭据")
|
|
281
|
+
file = (base / value).resolve()
|
|
282
|
+
if not file.is_file() or file.stat().st_size == 0:
|
|
283
|
+
raise ValueError(f"证据文件不存在或无内容:{value}")
|
|
284
|
+
return file
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def hashed_file(base: Path, value: str, sha256: str) -> Path:
|
|
288
|
+
file = verified_file(base, value)
|
|
289
|
+
if not isinstance(sha256, str) or not re.fullmatch(r"[a-f0-9]{64}", sha256):
|
|
290
|
+
raise ValueError(f"缺少有效 SHA-256:{value}")
|
|
291
|
+
if hashlib.sha256(file.read_bytes()).hexdigest() != sha256:
|
|
292
|
+
raise ValueError(f"证据指纹不一致或源码已变化:{value}")
|
|
293
|
+
return file
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def validate_execution_receipt(file: Path, case: dict, coverage: dict, change: Path) -> None:
|
|
297
|
+
receipt = json.loads(file.read_text(encoding="utf-8"))
|
|
298
|
+
if receipt.get("schemaVersion") != "superflow.execution-receipt.v1":
|
|
299
|
+
raise ValueError("缺少 execution-receipt.v1;旧证据应保留为 PARTIAL")
|
|
300
|
+
for key, expected in [("caseId", case["id"]), ("entryId", case["entryId"]),
|
|
301
|
+
("level", case["level"]), ("status", "PASS")]:
|
|
302
|
+
if receipt.get(key) != expected:
|
|
303
|
+
raise ValueError(f"执行凭证 {key} 与冻结用例不一致")
|
|
304
|
+
if type(receipt.get("executed")) is not int or receipt["executed"] < 1:
|
|
305
|
+
raise ValueError("用例零执行/占位不能 PASS")
|
|
306
|
+
kind = case.get("evidenceKind", "real")
|
|
307
|
+
if kind not in {"real", "controlled-simulation", "unit"} or receipt.get("evidenceKind") != kind:
|
|
308
|
+
raise ValueError("执行证据等级与冻结合同不一致;模拟不能替代真实入口")
|
|
309
|
+
command = receipt["command"]
|
|
310
|
+
if (not isinstance(command.get("argv"), list) or not command["argv"]
|
|
311
|
+
or any(not isinstance(arg, str) or not arg.strip() for arg in command["argv"])
|
|
312
|
+
or type(command.get("exitCode")) is not int or command["exitCode"] != 0):
|
|
313
|
+
raise ValueError("缺少真实命令或命令退出码非零")
|
|
314
|
+
output = hashed_file(file.parent, command["output"], command["sha256"])
|
|
315
|
+
events = []
|
|
316
|
+
for line in output.read_text(encoding="utf-8").splitlines():
|
|
317
|
+
try:
|
|
318
|
+
event = json.loads(line)
|
|
319
|
+
if isinstance(event, dict) and event.get("caseId") == case["id"]:
|
|
320
|
+
events.append(event)
|
|
321
|
+
except ValueError:
|
|
322
|
+
continue
|
|
323
|
+
if len(events) != 1:
|
|
324
|
+
raise ValueError("原始输出缺少唯一用例执行事件;未知 ID/零执行不可 PASS")
|
|
325
|
+
event = events[0]
|
|
326
|
+
for key in ["caseId", "entryId", "level", "status", "executed", "assertions", "persistence",
|
|
327
|
+
"evidenceKind", "sources", "build", "target"]:
|
|
328
|
+
if event.get(key) != receipt.get(key):
|
|
329
|
+
raise ValueError(f"原始执行输出与凭证 {key} 不一致")
|
|
330
|
+
if event.get("command") != {"argv": command["argv"], "exitCode": command["exitCode"]}:
|
|
331
|
+
raise ValueError("原始执行命令与凭证不一致")
|
|
332
|
+
sources = receipt["sources"]
|
|
333
|
+
if not isinstance(sources, list) or not sources:
|
|
334
|
+
raise ValueError("缺少当前源码/构建指纹")
|
|
335
|
+
paths = set()
|
|
336
|
+
source_tokens = []
|
|
337
|
+
for source in sources:
|
|
338
|
+
paths.add(hashed_file(file.parent, source["path"], source["sha256"]))
|
|
339
|
+
source_tokens.append(source["path"] + ":" + source["sha256"])
|
|
340
|
+
entry = next((e for e in coverage.get("entries", []) if e["id"] == case["entryId"]), None)
|
|
341
|
+
if entry is None:
|
|
342
|
+
raise ValueError("执行凭证缺少冻结入口定义")
|
|
343
|
+
source_index = {s["id"]: s for s in coverage.get("sources", [])}
|
|
344
|
+
for ref in entry.get("sourceRefs", []):
|
|
345
|
+
source = source_index[ref]
|
|
346
|
+
if source.get("role") == "code" and (change / source["path"]).resolve() not in paths:
|
|
347
|
+
raise ValueError("执行凭证未覆盖该入口冻结的源码写入链")
|
|
348
|
+
build = receipt["build"]
|
|
349
|
+
target = receipt["target"]
|
|
350
|
+
fingerprint = hashlib.sha256("\n".join(sorted(source_tokens)).encode()).hexdigest()
|
|
351
|
+
if build.get("sourceFingerprint") != fingerprint or target.get("sourceFingerprint") != fingerprint:
|
|
352
|
+
raise ValueError("构建与运行目标未绑定当前源码指纹")
|
|
353
|
+
hashed_file(file.parent, build["artifact"], build["sha256"])
|
|
354
|
+
build_command = build["command"]
|
|
355
|
+
if (not isinstance(build_command.get("argv"), list) or not build_command["argv"]
|
|
356
|
+
or type(build_command.get("exitCode")) is not int or build_command["exitCode"] != 0):
|
|
357
|
+
raise ValueError("缺少成功构建命令")
|
|
358
|
+
build_output = hashed_file(file.parent, build_command["output"], build_command["sha256"])
|
|
359
|
+
expected_build = {"event": "build", "buildId": build["id"], "sourceFingerprint": fingerprint,
|
|
360
|
+
"artifactSha256": build["sha256"], "argv": build_command["argv"], "exitCode": 0}
|
|
361
|
+
build_events = []
|
|
362
|
+
for line in build_output.read_text(encoding="utf-8").splitlines():
|
|
363
|
+
try:
|
|
364
|
+
value = json.loads(line)
|
|
365
|
+
if isinstance(value, dict) and value.get("event") == "build" and value.get("buildId") == build["id"]:
|
|
366
|
+
build_events.append(value)
|
|
367
|
+
except ValueError:
|
|
368
|
+
continue
|
|
369
|
+
if len(build_events) != 1 or build_events[0] != expected_build:
|
|
370
|
+
raise ValueError("构建原始输出未关联当前源码与构建产物")
|
|
371
|
+
if target.get("buildSha256") != build["sha256"]:
|
|
372
|
+
raise ValueError("运行目标不是本次验证的构建产物")
|
|
373
|
+
if not isinstance(build.get("id"), str) or not build["id"].strip() or target.get("buildId") != build["id"]:
|
|
374
|
+
raise ValueError("真实运行目标与构建指纹不一致")
|
|
375
|
+
for key, expected in [("service", entry.get("service", entry["id"])),
|
|
376
|
+
("route", entry["route"]), ("kind", case["level"])]:
|
|
377
|
+
if target.get(key) != expected:
|
|
378
|
+
raise ValueError(f"真实运行目标 {key} 与冻结入口不一致")
|
|
379
|
+
assertions = receipt["assertions"]
|
|
380
|
+
required = set(case.get("assertions", {})) - {"persistence"}
|
|
381
|
+
required |= {"response", "state", "forbiddenEffects"}
|
|
382
|
+
if not isinstance(assertions, list) or {a["id"] for a in assertions} != required or len(assertions) != len(required):
|
|
383
|
+
raise ValueError("缺少冻结响应/状态/禁止副作用断言")
|
|
384
|
+
for assertion in assertions:
|
|
385
|
+
if (assertion.get("result") != "PASS" or "expected" not in assertion
|
|
386
|
+
or "actual" not in assertion or assertion["expected"] != assertion["actual"]):
|
|
387
|
+
raise ValueError("断言失败或缺少预期值/实际值")
|
|
388
|
+
expected_writes = case.get("assertions", {}).get("persistence", [])
|
|
389
|
+
writes = receipt.get("persistence", [])
|
|
390
|
+
if not isinstance(writes, list) or len(writes) != len(expected_writes):
|
|
391
|
+
raise ValueError("缺少持久化字段同业务 ID 的调用前后对照")
|
|
392
|
+
for expected, actual in zip(expected_writes, writes):
|
|
393
|
+
for key in ["id", "table", "field", "expected"]:
|
|
394
|
+
if key not in actual or actual[key] != expected[key]:
|
|
395
|
+
raise ValueError("持久化断言与冻结字段/预期值不一致")
|
|
396
|
+
before, after = actual["before"], actual["after"]
|
|
397
|
+
if (not before.get("businessId") or before["businessId"] != after.get("businessId")
|
|
398
|
+
or "value" not in before or "value" not in after
|
|
399
|
+
or after["value"] != expected["expected"]
|
|
400
|
+
or (after["value"] is None and not expected.get("allowNull", False))
|
|
401
|
+
or actual.get("result") != "PASS"):
|
|
402
|
+
raise ValueError("持久化值未达到预期;结构存在/全 NULL/跨业务 ID 不能替代写入")
|
|
403
|
+
|
|
404
|
+
|
|
264
405
|
def lint_case_evidence(report_path: Path, report_text: str, review_path: Path) -> list[Issue]:
|
|
265
406
|
"""Check the frozen R/E/C index against per-case execution receipts."""
|
|
266
407
|
issues: list[Issue] = []
|
|
@@ -280,6 +421,8 @@ def lint_case_evidence(report_path: Path, report_text: str, review_path: Path) -
|
|
|
280
421
|
if decision.get("disposition") != "EXCLUDED"
|
|
281
422
|
for case_id in decision.get("caseIds", [])
|
|
282
423
|
}
|
|
424
|
+
if final_report_result(report_text) == "CONFLICT":
|
|
425
|
+
issues.append(Issue("FAIL", report_path, 0, "中英文最终验证结果冲突"))
|
|
283
426
|
lines = report_text.splitlines()
|
|
284
427
|
header_at = next(
|
|
285
428
|
(i for i, line in enumerate(lines) if CASE_EVIDENCE_HEADER.fullmatch(line.strip())),
|
|
@@ -311,13 +454,13 @@ def lint_case_evidence(report_path: Path, report_text: str, review_path: Path) -
|
|
|
311
454
|
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 的入口或验收级别与冻结合同不一致"))
|
|
312
455
|
if result not in CASE_RESULTS or not evidence or evidence.lower() in {"pending", "todo", "待补"}:
|
|
313
456
|
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 缺少有效结果或证据位置"))
|
|
314
|
-
elif result == "PASS"
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
evidence_file
|
|
318
|
-
|
|
319
|
-
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id}
|
|
320
|
-
if result != "PASS" and
|
|
457
|
+
elif result == "PASS":
|
|
458
|
+
try:
|
|
459
|
+
evidence_file = verified_file(report_path.parent, evidence.split("#", 1)[0])
|
|
460
|
+
validate_execution_receipt(evidence_file, case or {}, coverage, report_path.parent)
|
|
461
|
+
except (OSError, ValueError, KeyError, TypeError, AttributeError) as error:
|
|
462
|
+
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 的通过证据不可验证:{error}"))
|
|
463
|
+
if result != "PASS" and final_report_result(report_text) == "PASS":
|
|
321
464
|
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 为 {result},报告不能声明整体验证 PASS"))
|
|
322
465
|
for case_id in receipts.keys() - required:
|
|
323
466
|
issues.append(Issue("FAIL", report_path, 0, f"用例 {case_id} 未在冻结入口评审中要求执行"))
|
|
@@ -349,11 +492,19 @@ def lint_report(path: Path, repo: Path | None, tests_path: Path | None = None,
|
|
|
349
492
|
db_backed = bool(DB_BACKED_RE.search(text))
|
|
350
493
|
blocked = bool(BLOCKED_RE.search(text))
|
|
351
494
|
passed_or_partial = bool(PASS_WORDS.search(text) or re.search(r"Partially verified|部分验证", text, re.I))
|
|
352
|
-
|
|
495
|
+
adjacent_review = path.parent / ".sdd/reviews/document-review.json"
|
|
496
|
+
if review_path is None and adjacent_review.is_file():
|
|
497
|
+
review_path = adjacent_review
|
|
498
|
+
state_path = path.parent / ".sdd/state.yaml"
|
|
499
|
+
full = state_path.is_file() and re.search(r"^workflow:\s*[\"']?full[\"']?\s*$", state_path.read_text(), re.M)
|
|
500
|
+
if full and review_path is None:
|
|
501
|
+
issues.append(Issue("FAIL", path, 0, "完整 SDD 缺少冻结入口评审凭证,不能以旧关键词报告交付"))
|
|
353
502
|
if review_path is not None:
|
|
354
503
|
issues.extend(lint_case_evidence(path, text, review_path))
|
|
504
|
+
else:
|
|
505
|
+
issues.extend(lint_against_tests_contract(path, text, tests_path or infer_tests_path(path)))
|
|
355
506
|
|
|
356
|
-
if db_backed and passed_or_partial and not blocked:
|
|
507
|
+
if review_path is None and db_backed and passed_or_partial and not blocked:
|
|
357
508
|
if not TABLE_REVERSE_HEADER_RE.search(text):
|
|
358
509
|
issues.append(
|
|
359
510
|
Issue(
|
|
@@ -471,6 +622,7 @@ def main() -> int:
|
|
|
471
622
|
parser.add_argument("--tests", default="")
|
|
472
623
|
parser.add_argument("--review", default="")
|
|
473
624
|
parser.add_argument("--repo-root", default="")
|
|
625
|
+
parser.add_argument("--require-complete", action="store_true")
|
|
474
626
|
parser.add_argument("--warn-only", action="store_true")
|
|
475
627
|
args = parser.parse_args()
|
|
476
628
|
|
|
@@ -486,6 +638,10 @@ def main() -> int:
|
|
|
486
638
|
all_issues.append(Issue("FAIL", path, 0, f"显式指定的 tests.md 不存在:{tests_path}"))
|
|
487
639
|
review_path = Path(args.review).resolve() if args.review else None
|
|
488
640
|
all_issues.extend(lint_report(path, repo, tests_path, review_path))
|
|
641
|
+
if args.require_complete:
|
|
642
|
+
text = path.read_text(encoding="utf-8")
|
|
643
|
+
if final_report_result(text) != "PASS":
|
|
644
|
+
all_issues.append(Issue("FAIL", path, 0, "完整交付要求最终验证结果 PASS;局部证据保留为 PARTIAL"))
|
|
489
645
|
|
|
490
646
|
printable = []
|
|
491
647
|
for issue in all_issues:
|
|
@@ -58,17 +58,12 @@ for REPORT in "$@"; do
|
|
|
58
58
|
check_pattern "$REPORT" "证据等级/真实验证结论" \
|
|
59
59
|
"Real integration passed|Partial real entry|Partially verified|Blocked|真实入口|API 集成|冒烟|Smoke"
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
FAILED=1
|
|
65
|
-
fi
|
|
66
|
-
fi
|
|
67
|
-
|
|
68
|
-
if grep -Eiq "跳过|未执行|待补充|TODO|后续测试|建议.*测试|是否.*测试" "$REPORT"; then
|
|
69
|
-
echo "FAIL [$REPORT] 存在跳过/待补充/后续测试类表述,不能标记完成"
|
|
61
|
+
# Always use the linter from this installation, on both Codex and Claude.
|
|
62
|
+
LINT="$(dirname "${BASH_SOURCE[0]}")/superflow-test-report-lint.py"
|
|
63
|
+
if [ ! -f "$LINT" ] || ! python3 "$LINT" --require-complete "$REPORT"; then
|
|
70
64
|
FAILED=1
|
|
71
65
|
fi
|
|
66
|
+
|
|
72
67
|
done
|
|
73
68
|
|
|
74
69
|
if [ "$FAILED" -ne 0 ]; then
|
|
@@ -486,3 +486,6 @@ DB 状态 | 结算/通知/展示消费点 | 真实验证方式`.
|
|
|
486
486
|
|
|
487
487
|
When SDD docs pass quality gates, continue with `$superflow-design` for Superpowers
|
|
488
488
|
technical design before prompt splitting or coding orchestration.
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
逐用例 PASS 必须提供可重放本地执行凭证;冻结服务/入口、源码写入链与持久化前后值断言。沿用 pipeline/references/document-review-coverage.md 的 execution-receipt.v1 合同,旧证据保留 PARTIAL;独立评审核对精确 Mapper statement 与原始输出,完整交付运行当前安装的 lint --require-complete。哈希不等同防伪或业务充分性。
|
|
@@ -484,3 +484,6 @@ Use a CR/Px prompt when frontend integration discovers:
|
|
|
484
484
|
- SQL/schema drift
|
|
485
485
|
|
|
486
486
|
CR/Px prompts must include the real frontend payload, screenshot or page path, error response, and validation evidence required after the fix.
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
逐用例 PASS 必须提供可重放本地执行凭证;冻结服务/入口、源码写入链与持久化前后值断言。沿用 pipeline/references/document-review-coverage.md 的 execution-receipt.v1 合同,旧证据保留 PARTIAL;独立评审核对精确 Mapper statement 与原始输出,完整交付运行当前安装的 lint --require-complete。哈希不等同防伪或业务充分性。
|
|
@@ -92,9 +92,24 @@ coding-ready 复检失败会写 BLOCKED 撤销旧 READY。
|
|
|
92
92
|
|
|
93
93
|
| 用例 ID | 入口 ID | 验收级别 | 结果 | 证据路径 |
|
|
94
94
|
|---|---|---|---|---|
|
|
95
|
-
| C1 | E1 | browser | PASS | logs/C1-
|
|
95
|
+
| C1 | E1 | browser | PASS | logs/C1-receipt.json |
|
|
96
96
|
|
|
97
97
|
结果只用 `PASS/FAIL/BLOCKED/PARTIAL`;证据路径指向实际命令输出、浏览器 trace、
|
|
98
|
-
响应或数据库对账记录。PASS
|
|
99
|
-
HTTP(S) 链接。阻塞项在报告正文写明原因。表格仅证明用例逐项回填,不能证明
|
|
98
|
+
响应或数据库对账记录。PASS 的本地证据文件必须保留到验收并可读取;远端资料须保存为本地可核验证据。阻塞项在报告正文写明原因。表格仅证明用例逐项回填,不能证明
|
|
100
99
|
证据内容正确。任何非 PASS 用例存在时,不得声明整体验证 PASS。
|
|
100
|
+
|
|
101
|
+
## 可重放执行凭证(0.5.17)
|
|
102
|
+
|
|
103
|
+
PASS 的证据路径现在必须指向本地 `superflow.execution-receipt.v1` JSON;不得以空文件、任意文本、远端 URL 或测试总数代替。旧报告保留 PARTIAL,补齐受影响证据后再整体 PASS。
|
|
104
|
+
|
|
105
|
+
凭证字段:`caseId/entryId/level/status=PASS/executed>=1/evidenceKind`;`command{argv,exitCode=0,output,sha256}`;`sources[{path,sha256}]`;`build{id,artifact,sha256,sourceFingerprint}`;`target{service,route,kind,buildId,buildSha256,sourceFingerprint}`;`assertions[{id,expected,actual,result=PASS}]`。路径相对凭证文件,可使用授权跨仓源码;输出需保留可读取的原始日志。源码指纹为 sources 按 `path:sha256` 排序后以换行连接的 SHA-256(末尾无换行)。构建与运行目标必须关联同一指纹和产物;Agent 仍核对构建命令与实际进程/镜像。
|
|
106
|
+
|
|
107
|
+
命令输出中每个用例包含一个 JSON 行执行事件,携带 `caseId/entryId/level/status/executed/assertions/persistence`,与凭证相同。普通日志可混排;未知 ID、零执行、SKIP、占位或缺少断言事件不可 PASS。一个日志可包含多个用例,各凭证分别定位自己的事件。
|
|
108
|
+
|
|
109
|
+
冻结入口可增加 `service`(默认 entryId)、`persistence:[{table,field}]`;用例默认 `evidenceKind=real`,只有冻结合同明确允许时才填 `controlled-simulation` 或 `unit`。两个服务写同表也必须分别登记入口和源码链,不得交换证据。
|
|
110
|
+
|
|
111
|
+
持久化写入用例在 `assertions.persistence` 冻结 `[{id,table,field,expected,allowNull?}]`,凭证/原始事件同名数组追加 `before{businessId,value}`、`after{businessId,value}`、`result`。业务 ID 一致且 after.value 等于冻结预期;新增/改字段用非空预期,历史 NULL 明确 allowNull。字段索引存在、mock 参数赋值、全 NULL 数据不能证明写入。
|
|
112
|
+
|
|
113
|
+
独立评审必须检查实际 Service 调用的精确 Mapper statement 和所有写入链、运行目标、原始断言及旧通知/新申请隔离;报告的“实现已补齐”必须与源码和运行证据一致。哈希和结构不保证日志真实或断言充分,不能当作防伪签名。该扩展不增加托管协议或状态 owner;纯文档/非行为轻量任务不强加 DB 验收。
|
|
114
|
+
|
|
115
|
+
原始用例事件还必须携带 evidenceKind/sources/build/target 和 command{argv,exitCode},与凭证完全一致。build.command{argv,exitCode,output,sha256} 引用构建原始日志,其中包含 JSON 行 {event:"build",buildId,sourceFingerprint,artifactSha256,argv,exitCode:0};日志与实际构建/运行仍由独立评审核验。最终汇总仅取最后一个中英文一致的“验证结果/Verification Result”,历史记录与代码块示例不用于晋升。
|
|
@@ -76,7 +76,7 @@ mvn test -Dtest=UserServiceTest
|
|
|
76
76
|
|
|
77
77
|
| 用例 ID | 入口 ID | 验收级别 | 结果 | 证据路径 |
|
|
78
78
|
|---|---|---|---|---|
|
|
79
|
-
| C1 | E1 | browser | PASS | logs/C1-
|
|
79
|
+
| C1 | E1 | browser | PASS | logs/C1-receipt.json |
|
|
80
80
|
|
|
81
81
|
`PASS/FAIL/BLOCKED/PARTIAL` 之外的值无效;非 PASS 项在正文说明原因。
|
|
82
82
|
数据库字段展示要分别记录非空数据按同一 ID 的 API/DB 值对账、历史 NULL 结果和
|
|
@@ -261,3 +261,5 @@ HTTP 200、字段非空、mock-only、DB-only、`BUILD SUCCESS`、`Tests are ski
|
|
|
261
261
|
- 不允许把泛化外部失败当作通过,除非需求明确要求该失败结果
|
|
262
262
|
- 不允许只检查主仓数据库结构就关闭跨仓共享表任务;必须覆盖全部消费仓实体/Mapper/SQL
|
|
263
263
|
- **不允许"编译成功 + 单元测试通过"就标记任务完成,必须完成上述 checklist 全部项**
|
|
264
|
+
|
|
265
|
+
执行凭证格式与持久化前后对照遵循 [document-review-coverage.md](document-review-coverage.md),不要另建格式;历史局部结论保留,以最后一个中英文一致的验证结果为最终汇总。
|
|
@@ -91,7 +91,7 @@ require_test_report_lint() {
|
|
|
91
91
|
local -a lint_args
|
|
92
92
|
root="$(project_root_for_change)"
|
|
93
93
|
review="$CHANGE_DIR/.sdd/reviews/document-review.json"
|
|
94
|
-
lint_args=(--tests "$CHANGE_DIR/tests.md")
|
|
94
|
+
lint_args=(--tests "$CHANGE_DIR/tests.md" --require-complete)
|
|
95
95
|
if [[ "$(state_get workflow)" == "full" && ! -f "$review" ]]; then
|
|
96
96
|
issues+=("full SDD verify requires .sdd/reviews/document-review.json; complete the docs entry review before verify")
|
|
97
97
|
return
|
|
@@ -101,8 +101,8 @@ require_test_report_lint() {
|
|
|
101
101
|
fi
|
|
102
102
|
|
|
103
103
|
for lint in \
|
|
104
|
-
"$
|
|
105
|
-
"$
|
|
104
|
+
"${SUPERFLOW_REPORT_LINT:-$SCRIPT_DIR/../../../scripts/superflow-test-report-lint.py}" \
|
|
105
|
+
"$SCRIPT_DIR/../../../hooks/superflow-test-report-lint.py"; do
|
|
106
106
|
if [[ -x "$lint" ]]; then
|
|
107
107
|
output="$(mktemp)"
|
|
108
108
|
if ! "$lint" "${lint_args[@]}" "$report" >"$output" 2>&1; then
|
|
@@ -907,8 +907,12 @@ case "$PHASE" in
|
|
|
907
907
|
require_file test-report.md
|
|
908
908
|
require_grep 'RED|失败证据' test-report.md "RED evidence"
|
|
909
909
|
require_grep 'GREEN|通过证据' test-report.md "GREEN evidence"
|
|
910
|
-
|
|
911
|
-
|
|
910
|
+
if [[ "$(state_get workflow)" == "full" ]]; then
|
|
911
|
+
require_grep '接口自动化|curl|Postman|Newman|pytest|RestAssured' test-report.md "interface automation evidence"
|
|
912
|
+
fi
|
|
913
|
+
if change_has_database_change; then
|
|
914
|
+
require_grep 'DB|数据库|SELECT|SHOW CREATE' test-report.md "DB evidence"
|
|
915
|
+
fi
|
|
912
916
|
require_grep 'superflow-verify-integration|superflow-delivery-check|superflow-test-report-lint' test-report.md "SuperBridge Flow hook/script evidence"
|
|
913
917
|
if change_has_external_enum_risk; then
|
|
914
918
|
require_grep 'External Enum Binding|外部枚举绑定|第三方字段语义绑定|外部展示|展示文案|业务语义|财务语义|BEM|真实入口' test-report.md "external enum binding runtime evidence"
|
|
@@ -180,3 +180,6 @@ This advances to `phase: archive`, sets `verify_result: pass`, and records
|
|
|
180
180
|
|
|
181
181
|
Passing verification does not authorize automatic archive. Enter `$superflow-archive`
|
|
182
182
|
and wait for explicit user confirmation.
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
逐用例 PASS 必须提供可重放本地执行凭证;冻结服务/入口、源码写入链与持久化前后值断言。沿用 pipeline/references/document-review-coverage.md 的 execution-receipt.v1 合同,旧证据保留 PARTIAL;独立评审核对精确 Mapper statement 与原始输出,完整交付运行当前安装的 lint --require-complete。哈希不等同防伪或业务充分性。
|
|
@@ -486,3 +486,6 @@ Use references only as needed:
|
|
|
486
486
|
|
|
487
487
|
When SDD docs pass quality gates, continue with `$superflow-design` for Superpowers
|
|
488
488
|
technical design before prompt splitting or coding orchestration.
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
Per-case PASS requires retained local execution receipts. Freeze service/entry, source write chains and before/after persistence assertions using pipeline/references/document-review-coverage.md and execution-receipt.v1. Keep legacy evidence PARTIAL. Independent review checks the exact Mapper statement and raw output; full delivery runs the current installation's lint --require-complete. Hashes do not prove authenticity or business sufficiency.
|
|
@@ -134,3 +134,6 @@ Before moving to verify, run:
|
|
|
134
134
|
Do not claim completion from unit tests alone. Runtime code changes require
|
|
135
135
|
compile/build evidence, app start evidence when applicable, real API or event
|
|
136
136
|
execution, DB/log checks, hook output, and test-report updates.
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
Per-case PASS requires retained local execution receipts. Freeze service/entry, source write chains and before/after persistence assertions using pipeline/references/document-review-coverage.md and execution-receipt.v1. Keep legacy evidence PARTIAL. Independent review checks the exact Mapper statement and raw output; full delivery runs the current installation's lint --require-complete. Hashes do not prove authenticity or business sufficiency.
|
|
@@ -101,9 +101,24 @@ Full SDD reports use one per-case execution evidence table for the existing repo
|
|
|
101
101
|
|
|
102
102
|
| Case ID | Entry ID | Acceptance level | Result | Evidence path |
|
|
103
103
|
|---|---|---|---|---|
|
|
104
|
-
| C1 | E1 | browser | PASS | logs/C1-
|
|
104
|
+
| C1 | E1 | browser | PASS | logs/C1-receipt.json |
|
|
105
105
|
|
|
106
106
|
Results are `PASS/FAIL/BLOCKED/PARTIAL`. Evidence points to actual command output, browser trace,
|
|
107
|
-
response or DB reconciliation. Retain readable local
|
|
108
|
-
identify remote evidence. Explain blockers in the report body. This table proves case-level
|
|
107
|
+
response or DB reconciliation. Retain readable local execution receipts for PASS; remote material must be saved locally. Explain blockers in the report body. This table proves case-level
|
|
109
108
|
accounting only; the Host must inspect evidence contents. Any non-PASS case prevents an overall PASS.
|
|
109
|
+
|
|
110
|
+
## Replayable execution receipts (0.5.17)
|
|
111
|
+
|
|
112
|
+
A PASS evidence path must reference a retained local `superflow.execution-receipt.v1` JSON. Empty files, arbitrary prose, remote URLs and aggregate counts cannot replace execution evidence. Keep legacy evidence PARTIAL until affected checks are completed.
|
|
113
|
+
|
|
114
|
+
Receipt fields: `caseId/entryId/level/status=PASS/executed>=1/evidenceKind`; `command{argv,exitCode=0,output,sha256}`; `sources[{path,sha256}]`; `build{id,artifact,sha256,sourceFingerprint}`; `target{service,route,kind,buildId,buildSha256,sourceFingerprint}`; `assertions[{id,expected,actual,result=PASS}]`. Paths are relative to the receipt, including authorized sibling sources. Retain raw output. Compute sourceFingerprint as SHA-256 of sorted `path:sha256` lines joined with newline, without a trailing newline. Build and runtime target share the fingerprint and artifact identity. The reviewer still checks build commands and the actual process/image.
|
|
115
|
+
|
|
116
|
+
Raw command output includes exactly one JSON line per case with `caseId/entryId/level/status/executed/assertions/persistence` matching the receipt. Other logs may coexist. Unknown IDs, zero execution, SKIP, placeholders and missing assertion events cannot PASS. Multiple cases may share one retained log, with each receipt selecting its own event.
|
|
117
|
+
|
|
118
|
+
Frozen entries may declare `service` (default entryId) and `persistence:[{table,field}]`. Cases default to `evidenceKind=real`; `controlled-simulation` or `unit` require explicit frozen approval. Services writing the same table remain separate entries and source chains, with separate evidence.
|
|
119
|
+
|
|
120
|
+
Freeze writes in `assertions.persistence:[{id,table,field,expected,allowNull?}]`. Receipt/raw event add `before{businessId,value}`, `after{businessId,value}`, and `result`. Business IDs must match and after.value must equal the frozen expectation. New/changed fields require non-null expectations; historical NULL explicitly uses allowNull. Schema/index existence, mock arguments and all-NULL samples cannot prove writes.
|
|
121
|
+
|
|
122
|
+
Independent review checks the exact Mapper statement called by Service, every write chain, runtime identity, raw assertions and old-event/new-request isolation. Claims that implementation is complete must agree with source and runtime evidence. Hashes prove identity, not authenticity or test sufficiency. No new managed protocol/state owner is introduced; non-behavioral lightweight work does not acquire DB obligations.
|
|
123
|
+
|
|
124
|
+
Raw case events also carry evidenceKind/sources/build/target and command{argv,exitCode}, exactly matching the receipt. build.command{argv,exitCode,output,sha256} retains build output with a JSON line {event:"build",buildId,sourceFingerprint,artifactSha256,argv,exitCode:0}. Independent review still verifies actual build/runtime behavior. Only the latest consistent bilingual Verification Result authorizes completion; historical records and fenced examples do not.
|
|
@@ -60,7 +60,7 @@ execution table checked by `superflow-test-report-lint.py --review`:
|
|
|
60
60
|
|
|
61
61
|
| Case ID | Entry ID | Acceptance level | Result | Evidence path |
|
|
62
62
|
|---|---|---|---|---|
|
|
63
|
-
| C1 | E1 | browser | PASS | logs/C1-
|
|
63
|
+
| C1 | E1 | browser | PASS | logs/C1-receipt.json |
|
|
64
64
|
|
|
65
65
|
Use only `PASS/FAIL/BLOCKED/PARTIAL`; explain non-PASS results in the report.
|
|
66
66
|
For database-backed display fields, record same-ID API/DB values on non-null
|
|
@@ -71,3 +71,5 @@ field-key checks, static frontend inspection and browser evidence.
|
|
|
71
71
|
- Branch/commit/build number or image:
|
|
72
72
|
- Base URL:
|
|
73
73
|
- Verification timestamp:
|
|
74
|
+
|
|
75
|
+
Use [document-review-coverage.md](document-review-coverage.md) for receipts and persistence comparisons. Do not invent another format. Retain historical partial results; the latest consistent bilingual Verification Result is authoritative.
|
|
@@ -91,7 +91,7 @@ require_test_report_lint() {
|
|
|
91
91
|
local -a lint_args
|
|
92
92
|
root="$(project_root_for_change)"
|
|
93
93
|
review="$CHANGE_DIR/.sdd/reviews/document-review.json"
|
|
94
|
-
lint_args=(--tests "$CHANGE_DIR/tests.md")
|
|
94
|
+
lint_args=(--tests "$CHANGE_DIR/tests.md" --require-complete)
|
|
95
95
|
if [[ "$(state_get workflow)" == "full" && ! -f "$review" ]]; then
|
|
96
96
|
issues+=("full SDD verify requires .sdd/reviews/document-review.json; complete the docs entry review before verify")
|
|
97
97
|
return
|
|
@@ -101,8 +101,8 @@ require_test_report_lint() {
|
|
|
101
101
|
fi
|
|
102
102
|
|
|
103
103
|
for lint in \
|
|
104
|
-
"$
|
|
105
|
-
"$
|
|
104
|
+
"${SUPERFLOW_REPORT_LINT:-$SCRIPT_DIR/../../../scripts/superflow-test-report-lint.py}" \
|
|
105
|
+
"$SCRIPT_DIR/../../../hooks/superflow-test-report-lint.py"; do
|
|
106
106
|
if [[ -x "$lint" ]]; then
|
|
107
107
|
output="$(mktemp)"
|
|
108
108
|
if ! "$lint" "${lint_args[@]}" "$report" >"$output" 2>&1; then
|
|
@@ -874,8 +874,12 @@ case "$PHASE" in
|
|
|
874
874
|
require_file test-report.md
|
|
875
875
|
require_grep 'RED|failure evidence' test-report.md "RED evidence"
|
|
876
876
|
require_grep 'GREEN|pass evidence' test-report.md "GREEN evidence"
|
|
877
|
-
|
|
878
|
-
|
|
877
|
+
if [[ "$(state_get workflow)" == "full" ]]; then
|
|
878
|
+
require_grep 'interface automation|curl|Postman|Newman|pytest|RestAssured' test-report.md "interface automation evidence"
|
|
879
|
+
fi
|
|
880
|
+
if change_has_database_change; then
|
|
881
|
+
require_grep 'DB|database|SELECT|SHOW CREATE' test-report.md "DB evidence"
|
|
882
|
+
fi
|
|
879
883
|
require_grep 'superflow-verify-integration|superflow-delivery-check|superflow-test-report-lint' test-report.md "SuperBridge Flow hook/script evidence"
|
|
880
884
|
if change_has_money_precision_risk; then
|
|
881
885
|
require_money_precision_evidence test-report.md "money precision runtime evidence"
|
|
@@ -189,3 +189,6 @@ This advances to `phase: archive`, sets `verify_result: pass`, and records
|
|
|
189
189
|
|
|
190
190
|
Passing verification does not authorize automatic archive. Enter `$superflow-archive`
|
|
191
191
|
and wait for explicit user confirmation.
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
Per-case PASS requires retained local execution receipts. Freeze service/entry, source write chains and before/after persistence assertions using pipeline/references/document-review-coverage.md and execution-receipt.v1. Keep legacy evidence PARTIAL. Independent review checks the exact Mapper statement and raw output; full delivery runs the current installation's lint --require-complete. Hashes do not prove authenticity or business sufficiency.
|
|
@@ -16,6 +16,10 @@ export function runChangeGuard(change, phase, options = {}) {
|
|
|
16
16
|
const guard = path.join(PIPELINE_SCRIPTS, "superflow-guard.sh");
|
|
17
17
|
execFileSync("bash", [guard, resolveChangeDir(change), phase], {
|
|
18
18
|
stdio: options.quiet ? "pipe" : "inherit",
|
|
19
|
+
env: {
|
|
20
|
+
...process.env,
|
|
21
|
+
SUPERFLOW_REPORT_LINT: path.join(ASSETS_DIR, "scripts", "superflow-test-report-lint.py"),
|
|
22
|
+
},
|
|
19
23
|
});
|
|
20
24
|
}
|
|
21
25
|
export function runCodingReady(change, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-guard.js","sourceRoot":"","sources":["../../../src/app/commands/change-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CACnC,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,SAAS,CACV,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAEtC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,cAAc,CAAC;IAEtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,KAAiD,EACjD,UAA+B,EAAE;IAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IAChE,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE;QAC7D,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"change-guard.js","sourceRoot":"","sources":["../../../src/app/commands/change-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CACnC,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,SAAS,CACV,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAEtC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,cAAc,CAAC;IAEtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,KAAiD,EACjD,UAA+B,EAAE;IAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;IAChE,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE;QAC7D,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACzC,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAC9B,UAAU,EACV,SAAS,EACT,+BAA+B,CAChC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,UAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAC5B,UAAU,EACV,SAAS,EACT,4BAA4B,CAC7B,CAAC;IACF,MAAM,IAAI,GAAG;QACX,SAAS;QACT,gBAAgB,CAAC,MAAM,CAAC;QACxB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;YAClD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CAAC;IACpE,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE;QACrE,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -281,15 +281,17 @@ function printPlan(plan, json, status = 'planned') {
|
|
|
281
281
|
console.log(`hooks: ${plan.hooks.total}`);
|
|
282
282
|
console.log(`mcp: ${plan.mcp.agents.join(', ')}`);
|
|
283
283
|
}
|
|
284
|
-
function persistUpdateLanguage(language, agents) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
284
|
+
export function persistUpdateLanguage(language, agents, file = stateFile) {
|
|
285
|
+
const packageJson = JSON.parse(readFileSync(path.join(PACKAGE_ROOT, "package.json"), "utf-8"));
|
|
286
|
+
const version = packageJson.version ?? "unknown";
|
|
287
|
+
const state = loadState(file) ?? initState(version, agents[0] ?? "claude", language);
|
|
288
|
+
if (state.version !== version) {
|
|
289
|
+
state.previousVersion = state.version;
|
|
290
|
+
state.version = version;
|
|
289
291
|
}
|
|
290
292
|
state.language = language;
|
|
291
293
|
state.lastInit = new Date().toISOString();
|
|
292
|
-
saveState(
|
|
294
|
+
saveState(file, state);
|
|
293
295
|
}
|
|
294
296
|
async function updateNpmPackage(packageName, scope, label) {
|
|
295
297
|
const npmResult = await runCommand('npm', buildNpmUpdateArgs(packageName, scope));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/app/commands/update.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/app/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,4BAA4B,EAC5B,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE1F,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AACrD,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAsBvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAUhC,EAAE;IACJ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,IAAI,aAAa,GAAoB,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yDAA0D,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACvG,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;QAC5D,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,gBAAgB,CAC3B,UAAU,EACV,SAAS,EACT,WAAW,EACX,CAAC,CAAC,OAAO,CAAC,WAAW,EACrB,OAAO,EACP,YAAY,EACZ,QAAQ,CACT,CAAC;IACF,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG;YACnB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,8BAA8B,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;SAC5E,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,CACxC,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,MAAM,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,CACxC,uBAAuB,CAAC;YACtB,MAAM,EAAE,UAAU;YAClB,YAAY;YACZ,WAAW;YACX,cAAc,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;YACvC,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC,CAAC;QACN,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,WAAW,CACT,QAAQ,EACR,qBAAqB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACzC,2DAA2D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CACF,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,yDAAyD;IACzD,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,oBAAoB,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAClD,gBAAgB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACzE,MAAM,oBAAoB,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,oBAAoB,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClI,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,mBAAmB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,MAAM,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;gBAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC5D,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,SAAS,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,2BAA2B,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClG,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,mBAAmB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,oBAAoB,CAClB,SAAS,EACT,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAC/B,QAAQ,CACT,CAAC;IAEF,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE5C,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,MAAe;IAEf,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAmB,EAAE,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YAC7D,IACE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAAC;gBAC3E,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC,EAC1E,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,MAAe,EACf,UAAmB;IAEnB,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,6BAA6B,CAC3C,WAAmB,EACnB,MAAe,EACf,UAAmB,EACnB,QAAyB,IAAI,EAC7B,OAAkC,GAAG,EAAE,GAAE,CAAC;IAE1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACnE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,4BAA4B,CACnE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CACjC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAe,EACf,QAAsB,QAAQ,EAC9B,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,EAC3B,WAAW,GAAG,KAAK,EACnB,UAA0B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,EAChF,eAA6B,KAAK,EAClC,WAAqB,IAAI;IAEzB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO;QACL,MAAM;QACN,KAAK;QACL,WAAW;QACX,OAAO;QACP,aAAa,EAAE;YACb,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,8BAA8B,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;SAClF;QACD,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE;QAC5D,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE;QACzD,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;QAC1D,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;QACpD,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE;QAC3C,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAe,EACf,MAAyB,OAAO,CAAC,GAAG,EACpC,kBAAkB,GAAG,SAAS;IAE9B,OAAO,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAmB;IACxD,OAAO,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,KAAmB;IACzE,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,WAAW,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC;QAC7E,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAmB;IAC5D,OAAO,CAAC,KAAK,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAe,EAAE,YAA0B;IACxF,MAAM,QAAQ,GAAG;QACf,0BAA0B,CAAC,YAAY,CAAC;QACxC,CAAC,KAAK,EAAE,GAAG,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAChD,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC3E,QAAQ,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,oBAAoB,wBAAwB,SAAS,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAQ3C;IACC,MAAM,IAAI,GAAG;QACX,KAAK,CAAC,OAAO;QACb,QAAQ;QACR,KAAK,CAAC,WAAW;QACjB,SAAS;QACT,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACtB,SAAS;QACT,KAAK,CAAC,cAAc;QACpB,YAAY;QACZ,KAAK,CAAC,QAAQ;QACd,qBAAqB;KACtB,CAAC;IACF,IAAI,KAAK,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,WAAW,GAAG,YAAY;IAE1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACxF,IAAI,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC;QAAE,OAAO,SAAS,CAAC;IAEpE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,IACE,GAAG,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC;gBAChC,GAAG,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC;gBACnC,GAAG,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,EACxC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,UAAkB;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAClF,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,SAAS,CAAC,IAAgB,EAAE,IAAa,EAAE,MAAM,GAAG,SAAS;IACpE,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CACT,WAAW,CACT,IAAI,CAAC,QAAQ,EACb,uBAAuB,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1D,2BAA2B,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9F,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAkB,EAClB,MAAe,EACf,IAAI,GAAG,SAAS;IAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACvC,CAAC;IAC1B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC;IACjD,MAAM,KAAK,GACT,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC;QACtC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,KAAmB,EACnB,KAAa;IAEb,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAClF,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAkB,EAClB,SAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,KAQtC;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,KAAK,SAAS;QAClD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC;QAC9C,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,WAAW,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,EACL,QAAQ,CACT,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,OAAO,CAAC,QAAQ,EAChB,2BAA2B,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CACnD,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAe;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
|