Archived
tests/test_golden.py 的 fixture 直接指向 data/site.db 并注释为「只读」,但快照里 有 2 条 auth=user 的 POST /download(均返回 400),这条路径会 reserve_and_open 开账、失败后 settle_refund 退款——于是**每次 pytest 都往生产库插 2 行 billing_ledger**(status='rejected', reserved=1, refunded=1),并把该用户的 last_active 顶到测试时刻。 发现时生产库已累积 83 行这样的行(时间戳与历次 pytest 运行一一对应),库体积 也因此长了 2 个页(151552 → 159744)。净余额为 0(预扣 1、退款 1),不丢钱, 但污染台账与后台台账视图,而且让「跑测试不动生产数据」这个前提不再成立—— 排查时无法再用「库指纹没变」来证明冒烟/测试是安全的。 改法:复制一份 data/site.db(含 -wal/-shm 边车文件)到 tmp_path,再把 auth_system.DB_PATH/DATA_DIR 与 core.db.DB_PATH/DATA_DIR 一并指向副本。 契约保真度不变(同一份真实数据、同一 schema),写入全部落在临时目录。 _session_for 也改为读 auth_system.DB_PATH,保证「造 Cookie」与「发请求」 命中的是同一个库(原先写死路径,换库后会静默读生产库拿到错误 login_seq)。 验证:改前改后各跑一次完整套件,data/site.db 的 sha1 / 体积 / mtime 三项完全 不变,billing_ledger 行数停在 83;144 passed;ruff All checks passed; pyright 0 errors / 0 warnings。 注:生产库里既有的 83 行测试残留**未删除**(那是生产数据,需确认后再动); ledger 自带保留期清扫(auth_system/ledger.py 的 DELETE ... settled_at <= ?) 到期会自行回收。