Files
hepu/docs/handover/04_155条证据适用边界.md
aomin a7605ef8b8 chore(repo): 导入 M-Z 业务底座 V1.9 基线并建立仓库规范
按周工交付的 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),不做归一化以免整树摘要失效。
2026-11-13 17:32:37 +08:00

6.0 KiB
Raw Permalink Blame History

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 分钟

二、为什么必须重跑(不是"为了好看")

清理动了三处会影响执行的东西:

  1. application.yml 的 password 由「带默认值」改成「无默认值 + 缺参中止」——启动条件变了;
  2. 12 个证据脚本 的口令来源由「环境变量或内置默认」改成「只认环境变量」——脚本启动条件变了;
  3. 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 哈希与构建说明。