diff --git a/audit-2026-09-21.md b/audit-2026-09-21.md index ef9107b..de46639 100644 --- a/audit-2026-09-21.md +++ b/audit-2026-09-21.md @@ -1009,5 +1009,70 @@ go test -count=1 -v ./... 指到 `postgres` 维护库会多出 `TestChangeUsername` 失败(关系 users 不存在)+ 6 个 stats 用例 skip (没有生效数据集)+ `TestVisitorHomeStore` skip(库名不含 test)——本轮就先踩了一次,误以为是回归。 +--- + +# 稳定性基线(2026-09-24 实测) + +修完之后要回答「现在稳不稳」,先量四个数: + +| 指标 | 实测 | +|---|---| +| 语句覆盖率(`go test -cover ./...`,全套环境变量) | 按源码行数加权 **≈51%**(web 53.2% / stats 62.2% / rond 38.8% / fog 52.9% / db 53.4%) | +| 假绿规模(不设环境变量跑 web+rond+stats) | 三个包**全 `ok`、exit=0**,但 **95 PASS / 86 SKIP**(原始基线 62 SKIP ⇒ 随守卫增多而变大) | +| 路由触达 | 92 条注册路由里 41 条在测试中被直接引用(**高估**缺口:不少 handler 用函数直调覆盖) | +| 自动化 | 无 CI / 无 Makefile / 无 linter —— 0-skip 验收原本完全靠人记住六个变量 | + +结论:**已知缺陷已关闭且有网**,但「一半代码没被跑过 + 没有 CI」这两条当时的回答是"证明不了"。 + +# 收尾:让「验收」不再依赖记忆(2026-09-24 落地) + +## `scripts/verify.sh` —— 一键验收 + +| 能力 | 说明 | +|---|---| +| 六件套环境变量 | 自己从 `conf/app-test.ini` 取 DSN(**口令不进脚本**) | +| 拒跑非测试库 | 库名不含 `test` 直接报错退出(防「指到 postgres 维护库」那类假 skip) | +| **拒绝假绿** | 数 SKIP(**含子测试**),非 0 就失败退出 | +| 两段式导出 | 先跑 `TestMovementCleanExport` 产纯净包,再全量(免手工两步) | +| 模式 | `--fast`(gofmt+vet+build,~20s)/ `--race`(自动把 mingw 加进 PATH)/ `--cover` / `--pkg` / `--run` | + +实测闸门:DSN 指 `postgres` → 拒跑;缺 `ROND_SRC` → 拒跑;未知参数 → exit 2。 + +## 全新库冒烟(`internal/db/fresh_db_test.go`) + +空库 → `Open` 自动建库 → `Migrate` 跑两遍(验幂等)→ 断言 21 张表 / 迁移块补出来的列 / +三张附属表的主键已搬到坐标键 / 4 个索引 → 再用 `stats.DB{DB: d}` 真打 18 个读查询(空库上不该报错)。 + +**变异验证**:把 `CREATE INDEX idx_place_images_key` 挪到 `CREATE TABLE place_images` **之前** +⇒ 新库报 `关系 "place_images" 不存在 (SQLSTATE 42P01)`;同一条语句在老库上 `psql -c` 只提示 +「已存在,跳过」⇒ 正是「开发库无症、新库起不来」这个签名。 + +## `web` 整包 `-race` + +`./scripts/verify.sh --race --pkg ./internal/web/` ⇒ **161 PASS / 0 FAIL / 0 SKIP / 0 个 DATA RACE**。 +(此前只有迷雾索引那一条用例验过 race。) + +## 仓库卫生 + +删 6 个一次性探针(colprobe/diffprobe/exportprobe/fogprobe/idprobe/sqlprobe,git 历史可翻)与 +误入库的 `__pycache__/*.pyc`;`.gitignore` 补 `__pycache__/`、`*.pyc`;`tools/README.md` 说明留下的 +4 个工具。改动分 3 个提交落地(后端 / 前端 / 脚本与工具),工作区已干净。 + +## 收尾验收 + +``` +./scripts/verify.sh # 六件套 + 0-skip 判定 + 两段式导出,一条命令 +``` + +**244 个顶层用例(含子测试 271)/ 0 FAIL / 0 SKIP**,12 个包全 `ok`; +往返包 823/323/8/30/791/557/2246 全等、坐标偏差 `0.000000000`、时间偏差 `0s`、迷雾 8701 块一致。 +`--fast`(gofmt + vet + build)干净。 + +提交:`b4c2a84` 后端 → `d5f6dfa` 前端 → `d2e4392` 脚本与工具 → `ff59412` 脚本补丁。 +每个提交都过了 `go build ./...`;**中间提交没有单独跑全量**(实现与它的守卫是同一批落地的, +拆开跑会因守卫先于/后于实现而假红),最终状态是上面这个已验收的版本。 + + +