按周工交付的 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),不做归一化以免整树摘要失效。
8.0 KiB
8.0 KiB
Z-02 清理后源码树哈希、包哈希与构建说明
| 项 | 内容 |
|---|---|
| 依据 | AM-S1-GOV-020 §4.4「Z-02」 |
| 交付人 | 周工 |
| 时间 | 2026-11-13 |
| 结论 | 清理后指纹已重算;155 条在本基线真实重跑并全过,不是沿用旧结果 |
一、清理前后指纹对比
| 指纹 | 清理前(V1.9 第二版) | 清理后(本件) | 变化原因 |
|---|---|---|---|
源码树摘要(01_后端源码/src,84 文件) |
60FA6938…(上批) |
5E9F894B0D1071969A968F2A9B1451279ADF39D423148186886BFD064398F286 |
改了 1 个 java(启动守卫)+ yml 注释与默认值 |
| 可执行 jar | 43,516,447 B / 652E1602… |
43,517,256 B / 1F38F527605F09AA45E9E54528AFB11230469E1B197FA001C06E8725FD102192 |
重新构建,含新配置与新类 |
| 契约版本 | 1.8.1 |
1.8.1 |
未变 |
| 迁移版本 | 1.0.28(12 条) |
1.0.28(12 条) |
未变(本次不动 DDL) |
| 明文口令 | 15 处 | 0 处 | 本件清理目标 |
源码树摘要算法:把
01_后端源码/src下每个文件的「相对路径 + 该文件 SHA-256」按路径排序后拼接,再整体算一次 SHA-256。改一个字节即变,等效于"这一棵树"的指纹(不是 Git commit)。
二、本次改动文件逐个哈希(16 个)
| # | 文件 | 字节 | SHA-256(改后) |
|---|---|---|---|
| 1 | 01_后端源码/src/main/resources/application.yml |
9,636 | 3912006F4C6432965DAF2F590D229509363A1FEAFF9D7FB60DF6F93E5D6C16C9 |
| 2 | 01_后端源码/src/main/java/cn/aomin/gateway/GatewayApplication.java |
2,639 | 2C315FCBABD70D5282AE33CA00DCEAFB352D14253C6B3D33D9C2A3FC717DC1B6 |
| 3 | 05_启动构建与测试说明/启动构建与测试说明.md |
16,116 | D4AAF430598FD1DB121697B5519F0206D7CFA5552C6C400292CABF18730A8BC1 |
| 4 | 09_代码与版本/README.md |
5,845 | 50F128904869F1F56676DA06A42794C77106154C946D91AEA95BF24A02CFA365 |
| 5 | 06_统一闭环题自测证据/alarm_retry_test.py |
6,708 | 24F062EAE16BF449170FA5D7A9404364F16950262108C9247C378DC2C9966E2A |
| 6 | 06_统一闭环题自测证据/closed_loop_test.py |
9,579 | F17E59D6B9F7B63CE7818108D4D574EEF60EB16FEB0E8E708EA91F15B5054C8E |
| 7 | 06_统一闭环题自测证据/cmd_chain_test.py |
17,290 | 1C4FD7CF30D7A4ADBA4D61683449B8954D2FA630E5FEB079C97E9BCC3958035B |
| 8 | 06_统一闭环题自测证据/run_evidence.py |
21,551 | 478D672726193874CD9544EAEDB92D6FA887A2BAAB7D211F753290204822CA37 |
| 9 | 06_统一闭环题自测证据/scope_test.py |
11,005 | ACE8150FBC566D5AF796D4FADA14CC9927E4C8D6114DB919C883F307309E0651 |
| 10 | 06_统一闭环题自测证据/stamp_evidence.py |
10,670 | DA33B7B431279FE5064420AD6C8BA7F48CED6E4B7EF79BC7AE0B3A0171D63035 |
| 11 | 06_统一闭环题自测证据/v15_fix_test.py |
11,575 | C0C073AE6495717AF902F94552D9E40A69DCC67A8D840ECC3C130F322F6518EA |
| 12 | 06_统一闭环题自测证据/v16_fix_test.py |
16,120 | 08C425D9620E414B56E2FEF59B9C632054F18BBA9EEBA92F640FB447CC3F51E7 |
| 13 | 06_统一闭环题自测证据/v17_merge_test.py |
11,748 | A2BCBED23683554B1E661BD85304F056B55F2149272A7CBC72D7EE92546F7603 |
| 14 | 06_统一闭环题自测证据/v18_fix_test.py |
7,375 | 48EC29ACFA0F9E9EAE28971973B1095FBA77B7CF42C8027FBAC615D66C7197A4 |
| 15 | 06_统一闭环题自测证据/v19_gov008_test.py |
15,881 | 8599CBCF41E81E670598310D003FC03BAAD21CB0B0130EADAAB7A15A8858A4DC |
| 16 | 06_统一闭环题自测证据/v20_node_test.py |
10,843 | 8DDBF8996B989D446D667D454DB222F2EAA15D0918F28C0033E4DAF53931088C |
除以上 16 个,包内其余文件的哈希都在
09_代码与版本/SHA256SUMS.txt里,本件已重新生成(原 131 项 → 现 131 项,内容更新)。
三、构建说明(可复现,约 21 秒)
环境
| 项 | 要求 |
|---|---|
| JDK | 21.0.2(G:/aomin-dev/jdk-21.0.2) |
| Maven | 3.x,离线仓库 G:/aomin-dev/downloads/settings.xml |
| 依赖 | 已预置在本地仓库,-o 离线模式可用 |
构建命令
cd <源码根>/aomin-gateway
mvn -o -q -s <settings.xml> -DskipTests clean package
# 产物:target/aomin-gateway-0.0.1-SNAPSHOT.jar
实测:21 秒,exit=0,产物 43,517,256 B。
启动(必须带 DB_PASS)
# Windows
set DB_PASS=<口令>
# Linux / macOS
export DB_PASS=<口令>
java -jar target/aomin-gateway-0.0.1-SNAPSHOT.jar --server.port=8080 --server.address=0.0.0.0
缺少 DB_PASS 会立即中止(退出码 1),不会带着空口令去连库:
[启动中止] 缺少必需的环境变量 DB_PASS(数据库口令)。
SEC-Z-01:程序不再内置任何默认口令,也不会回退到包内明文。
设置方法:Windows set DB_PASS=<口令> Linux/macOS export DB_PASS=<口令>
启动后自检
curl http://127.0.0.1:8080/health
本机实测返回:
{"code":0,"msg":"ok","data":{"app":"aomin-gateway","db":"connected","tables":87,
"schema":"aomin_dev","redis":"connected","flyway":"1.0.28","alarmBacklog":0,
"alarmStale":0,"alarmDeadLetter":0,"auditFailures":0,"warnings":[],"status":"UP"}}
要点:db: connected、tables: 87、flyway: 1.0.28、status: UP。
四、入库建议(给陈工建主干时用)
4.1 .gitignore
见同目录 gitignore_建议.txt,核心是三条:
target/、*.jar—— 构建产物不入库;.env、*.local.yml、application-local.yml—— 本地配置可能含口令;06_统一闭环题自测证据/raw|out|screenshots/—— 证据原始数据体积大、每轮变化,按受控目录单独交付,不进代码历史。
4.2 首次提交顺序(顺序不能反)
① 确认 15 处已清、扫描 0 命中
② git init
③ 放入 .gitignore
④ git add -A && git status ← 人工看一眼,确认没把 target/ 和 .env 加进来
⑤ git commit -m "初始提交:M-Z 业务底座 V1.9 基线(SEC-Z-01 清理后)"
⑥ git remote add origin <陈工给的地址> && git push -u origin main
为什么必须先清后推:git 记录每一版。今天删掉明文、明天再提交一次,第一条提交里照样有。要彻底清只能重写全部历史(filter-repo),成本远高于现在清 15 处。
好消息:当前 G:/aomin-dev/app/aomin-gateway 不是 git 仓库,包内也没有 .git,不存在历史污染,属于干净起点。
4.3 交付目录建议
主干/
├── src/main/java/… 业务代码(M-Z)
├── src/main/resources/
│ ├── application.yml 已无默认口令
│ └── db/migration/ Flyway 12 条,最新 1.0.28
├── pom.xml
└── .gitignore
证据材料(06_…/raw、06_…/out、截图)不进主干,走受控目录交付。
五、版本标识一致性(四项对齐)
| 标识 | 值 |
|---|---|
| 模型版本 | V1.9(已冻结,本次仅为 SEC-Z-01 最小安全清理,未升 V1.10) |
| 源码树摘要 | 5E9F894B0D1071969A968F2A9B1451279ADF39D423148186886BFD064398F286 |
| 可执行 jar | 1F38F527605F09AA45E9E54528AFB11230469E1B197FA001C06E8725FD102192(43,517,256 B) |
| 契约版本 | J-00 1.8.1 |
| 迁移版本 | Flyway 1.0.28,12 条 |
| 证据批次 | R20261113-112443,11 组 / 155 条 / 失败 0 |
六、交付包自检(打出包后实测)
| 项 | 结果 |
|---|---|
| 条目数 | 93(源码 87 + 4 份说明 + gitignore_建议.txt + SHA256SUMS_源码契约迁移脚本.txt) |
解压后 aomin-gateway/src |
84 个文件,与包内 01_后端源码/src 逐文件哈希完全一致 |
| 解压后含明文口令 | 0 |
| 独立编译 | 解压到空目录后 mvn -o -q -s <settings> -DskipTests compile → exit 0,GatewayApplication.class 正常生成 |
包自身的 SHA-256 只在交付渠道给出,不写进包内(写进去包一改哈希就变,形成死循环)。
配套材料:01 差异清单、02 扫描报告、04 155 条证据适用边界、gitignore_建议.txt。