按周工交付的 SEC-Z-01 清理后源码建立 M-Z 主干,并按 Git 仓库惯例重排目录。 - aomin-gateway/ 后端工程 87 文件,原样保留,路径与构建命令未变 - demo/ 演示前端与设备模拟器 9 文件(原 02_前端与设备端),非正式三端 - docs/handover/ 交付与安全清理材料 6 份,内容未改 - docs/contract/ J-00 规格、OpenAPI、内部五接口、状态机、Mock 样例 - docs/reference/ 指纹与校验清单,含 84 个源码文件的 sha256 清单 目录重排只动位置不动内容:源码树 84 文件哈希与交付一致,逐文件自校验通过; 12 条 Flyway 迁移与交付包内镜像逐字节一致。 未纳入:迁移镜像目录(与工程内一套重复,改留指纹)、target/、证据 raw、 应急恢复脚本、评审用虚构台账数据。 安全:SEC-Z-01 15 处明文已清零,导入前重新扫描无新增命中,本仓库无历史污染。 行尾按交付字节原样保存(.gitattributes 设 * -text),不做归一化以免整树摘要失效。
6.0 KiB
6.0 KiB
155 条作者证据的适用边界(Z-02 附件)
| 项 | 内容 |
|---|---|
| 依据 | AM-S1-GOV-020 §4.4「Z-02:……现有 155 条作者证据的适用边界;若作为清理后当前结果,必须真实重跑」 |
| 处理结论 | 已真实重跑,不是沿用清理前结果 |
| 批次号 | R20261113-112443 |
| 结果 | 155 条 / 通过 155 / 未过 0,11 组脚本 失败 0 组 |
一、这 155 条是什么
| 证据文件 | 条数 | 覆盖内容 | 耗时 |
|---|---|---|---|
05_SOS链路.json |
—(非用例) | 单次闭环的原始请求/响应记录,不作计数 | 8.9s(与下一项同组) |
06_命令链.json |
23 | 命令七态、回执、幂等、状态机边界 | 58.6s |
06_异常与权限.json |
28 | 异常分支与对象级权限 | 同上组 |
07_告警失败不吞事件.json |
5 | 故障注入:规则异常 / 库异常 / 重试 / 死信 | 84.6s |
08_闭环后半段.json |
13 | 通知、家属确认、处置关闭 | 22.0s |
09_数据范围.json |
16 | 数据权限与可见范围 | 19.9s |
10_摘要与状态防护.json |
15 | rawRef 摘要、状态不可回退 | 34.0s |
11_超窗与死信.json |
15 | 时间源分流、退避、死信、审计回滚 | 286.2s |
12_合并与替代.json |
6 | 连续触发的合并与 superseded | 77.7s |
13_GOV008整改.json |
16 | GOV-008 定点整改项 | 105.8s |
13_分区与一致性.json |
8 | 分区维护、计数一致性 | 18.4s |
14_命令节点闭环.json |
10 | 领取节点、代次、租约、错节点拒收 | 42.7s |
| 合计 | 155 | — | 约 13 分钟 |
二、为什么必须重跑(不是"为了好看")
清理动了三处会影响执行的东西:
application.yml的password由「带默认值」改成「无默认值 + 缺参中止」——启动条件变了;- 12 个证据脚本 的口令来源由「环境变量或内置默认」改成「只认环境变量」——脚本启动条件变了;
GatewayApplication增加启动守卫——可执行产物变了。
换句话说,清理前的 155 条是在"另一套启动条件"下跑出来的,直接拿来当"清理后的当前结果"属于沿用旧结果。所以按 §4.4 那句"必须真实重跑"执行。
重跑后源码树摘要、jar 摘要、批次号全部更新,见 03。
三、这批证据能证明什么
| 能证明 | 依据 |
|---|---|
155 条在这一棵源码树(5E9F894B…)、这一个 jar(1F38F527…)、契约 1.8.1、迁移 1.0.28 上真实执行过 |
每份结果 JSON 的 _meta + raw/_execution_manifest.json |
| 每组是哪个脚本、什么参数、几点开始几点结束、耗时多少、退出码几 | raw/_run_logs/*.log(11 份完整 stdout+stderr) |
| 失败项不会被藏起来 | 清单外的结果自动标「历史结果补充索引」,不计入通过数;本次该数为 0 |
| 清理没有破坏原有功能 | 与清理前同为 155/155,无新增失败 |
四、这批证据不能证明什么(必须写明,否则就是夸大)
| 不能证明 | 说明 |
|---|---|
| 不是接收方复验 | 这是作者自测。按 §9.2 第 4 条,收到文件 ≠ 接收通过;A 类关闭要谢工、陈工签认,本件不构成关闭 |
| 不含并发 | v20_node_test.py 是串行 10 条,没有 Thread / 线程池 / 并发 PULL。并发领取、节点与租约不匹配、重复/乱序/迟到回执,由谢工按完整矩阵补测 |
| 不含真机 | 全部是接口级与故障注入。真实设备的上报、断连、无恢复帧场景,要等黄工真机窗口 |
| 不代表生产性能 | 单机、本地 MySQL、单实例;没有压测、没有长稳 |
| 不覆盖前端与小程序 | 只覆盖 M-Z 业务层与内部契约 |
| 不是重复性统计 | 每项跑一次。偶发失败只能靠重跑发现,本批失败 0 不代表永不失败 |
| 不覆盖 A-Z-02「停机超窗」的完整场景 | 有故障注入与死信验证,但"停服 60 分钟以上再起、事件被处理"需在共同环境由谢工/陈工复验 |
五、怎么复跑(陈工/谢工可按原样执行)
# 1) 先起服务(必须带口令)
set DB_PASS=<口令>
java -jar aomin-gateway-0.0.1-SNAPSHOT.jar --server.port=8080 --server.address=0.0.0.0
# 2) 跑全部 11 组(约 13 分钟)
cd 06_统一闭环题自测证据
python run_all_evidence.py # 产出 raw/_execution_manifest.json + raw/_run_logs/*.log
python stamp_evidence.py # 给每份结果写 _meta.execution
python count_evidence.py # 对账,exit 0 = 155 条一致
前置环境变量(缺一个都会失败或跳项):
| 变量 | 用途 | 缺失后果 |
|---|---|---|
DB_PASS |
应用启动 | 启动中止(退出码 1) |
AOMIN_DB_PASS |
12 个证据脚本 | 脚本退出,提示设置方法 |
AOMIN_MYSQL |
mysql 客户端路径 | 找不到命令,相关断言失败 |
AOMIN_LOG |
应用日志路径(v17 读横幅合并日志) |
误报"跳过 0 次" |
NO_PROXY |
本机回环不走代理 | 报 10061,与用例无关 |
六、复验入口(对应 GOV-011 / GOV-016 的 A 类)
| 关注点 | 脚本 | 建议核对 |
|---|---|---|
| A-Z-01 命令节点与代次 | v20_node_test.py(10 条)+ cmd_chain_test.py(23 条) |
领取后 claimed_node_id 落库、错节点 NODE_MISMATCH、历史空节点 NODE_UNKNOWN、旧节点+新代次仍被拒 |
| A-Z-02 超窗补偿 | v16_fix_test.py(15 条)+ alarm_retry_test.py(5 条) |
无时间窗过滤、receive_time 库端打戳、退避与死信、人工回放 |
| A-Z-03 审计可靠性 | v16_fix_test.py 的审计回滚段 |
审计写失败 → 业务整条回滚;audit_fail_log 可查可补录;重启后不清零 |
复验请填:结论(通过/失败/未执行/不适用)+ 证据位置 + 日期。作者不单方面宣布关闭。
关联:01 差异清单、02 扫描报告、03 哈希与构建说明。