# 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` 离线模式可用 | ### 构建命令 ```bash cd <源码根>/aomin-gateway mvn -o -q -s -DskipTests clean package # 产物:target/aomin-gateway-0.0.1-SNAPSHOT.jar ``` 实测:**21 秒**,`exit=0`,产物 `43,517,256 B`。 ### 启动(**必须带 `DB_PASS`**) ```bash # 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=<口令> ``` ### 启动后自检 ```bash curl http://127.0.0.1:8080/health ``` 本机实测返回: ```json {"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 -DskipTests compile` → **exit 0**,`GatewayApplication.class` 正常生成 | > 包自身的 SHA-256 只在交付渠道给出,**不写进包内**(写进去包一改哈希就变,形成死循环)。 --- *配套材料:`01` 差异清单、`02` 扫描报告、`04` 155 条证据适用边界、`gitignore_建议.txt`。*