fix(billing): 删任务/删项目级联吞 ACTIVE 预留致 reserved_balance 永久冻结(审计 I2)
- 根因: CreditReservation.task 是 OneToOneField(CASCADE), AITask.project 也是 CASCADE
—— 删项目→级联删任务→ACTIVE 预留行被吞, 账户冻结份额永不归还(实测 4 账户漂移共 ¥42,
且随删项目持续增长)
- 修法: billing/signals.py 挂 AITask pre_delete, 删除前先 release_credit 释放(级联同样
触发, release 自带行锁+幂等); apps.py ready() 接线
- 回归测试 x3: 直删任务/删项目级联/已扣费不重复释放
- qa/repair_reserved_drift.py: 存量漂移回填脚本(dry-run 默认, --apply 落 RELEASE 流水),
已对线上 4 账户执行并复验清零
- qa/function-audit/output: 本轮 18 页模拟点击审计报告(0 真死按钮 0 JS 报错)
验证: 后端测试 213/213 通过, django check 无警告
补齐 aab4d7e: 该提交带走了 signals.py 之外的测试轮改动, 信号挂载点与回归测试在本提交收口
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,27 +1,14 @@
|
||||
# 功能审计汇总
|
||||
|
||||
生成时间:2026-06-10T09:29:34.278Z · 模式:quick
|
||||
生成时间:2026-07-02T03:20:24.149Z · 模式:quick
|
||||
|
||||
| 页面 | 合计 | ✅works | ❌dead | 🛑error | ⏭skip | 🔍missing | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| dashboard | 25 | 20 | **0** | 0 | 5 | 18 | |
|
||||
| products | 25 | 24 | **0** | 0 | 0 | 6 | |
|
||||
| product-detail | 29 | 22 | **0** | 0 | 6 | 9 | |
|
||||
| product-create | 31 | 25 | **0** | 0 | 5 | 11 | |
|
||||
| projects | 24 | 15 | **0** | 0 | 9 | 19 | |
|
||||
| projects-new | 15 | 15 | **0** | 0 | 0 | 6 | |
|
||||
| pipeline | 34 | 26 | **0** | 0 | 0 | 15 | |
|
||||
| library | 38 | 23 | **0** | 0 | 13 | 10 | |
|
||||
| account | 26 | 20 | **0** | 0 | 5 | 4 | |
|
||||
| team | 17 | 17 | **0** | 0 | 0 | 4 | |
|
||||
| messages | 28 | 20 | **0** | 0 | 7 | 9 | |
|
||||
| asset-factory | 24 | 23 | **0** | 0 | 0 | 5 | |
|
||||
| image-optimize | 24 | 21 | **2** | 0 | 0 | 12 | |
|
||||
| model-photo | 32 | 31 | **0** | 0 | 0 | 8 | |
|
||||
| model-photo-demo-a | 38 | 33 | **0** | 0 | 4 | 5 | |
|
||||
| model-photo-demo-b | 37 | 34 | **0** | 0 | 2 | 5 | |
|
||||
| platform-cover | 38 | 35 | **0** | 0 | 1 | 8 | |
|
||||
| settings | 26 | 25 | **0** | 0 | 1 | 9 | |
|
||||
| asset-factory | 35 | 31 | **0** | 0 | 3 | 4 | |
|
||||
| model-photo | 49 | 44 | **0** | 0 | 5 | 7 | |
|
||||
| model-photo-demo-a | 39 | 34 | **0** | 0 | 4 | 5 | |
|
||||
| model-photo-demo-b | 38 | 36 | **0** | 0 | 2 | 5 | |
|
||||
| platform-cover | 48 | 46 | **0** | 0 | 0 | 7 | |
|
||||
|
||||
- ⛔blocked = 页面始终落登录页/未就绪(后端或远程库不可用),**未审计**,非「0 缺陷」。修好后端再单独 `--only <page>` 复跑。
|
||||
- ❌dead = 点了五路探针(URL/浮层/自身状态/网络/DOM)全无反应,优先修。
|
||||
|
||||
Reference in New Issue
Block a user