版本:v1.0|执行:小齐|时间:2026-09-14 00:0x|基线 HEAD:9b88ece9
依据设计文档:docs/reports/gpt6-评审-2026-09-13/03-波波小齐苦力活长线包设计.md(14 要素 / 12 字段证据 / P0-P3 分级)
证据原件:docs/delivery/evidence/verify/318/(本文件 + 扫描输出)
Q01「后端 P0 缺口深验总包」。目标:对设计文档 §1.2 的十类 P0 缺口(①~⑩)做接口、字段、错误、权限、状态的覆盖核验,产出测试矩阵、执行记录与缺陷单;不修改任何核心代码,缺陷一律回原包。
十域全覆盖扫描 + 两个高风险点的源码级与行为级核验:
backend/app/routers/*.py(40+ 路由文件,401 个端点)miniapp_pay.py(支付)、feed_demand.py(聚合/资产)、merchant_console.py(商户/服务费回调)docs/contracts/api-v1.mddocs/delivery/evidence/verify/318/(仅此目录 + 回执 + TASKS 行尾)| 字段 | 含义 | 取值口径 |
|---|---|---|
| 域 | P0 十类缺口编号 | 设计文档 §1.2 |
| 端点数 | 该域匹配到的实现端点数 | 路由装饰器解析 |
| 有鉴权依赖 | 处理器中出现 Depends(<鉴权函数>) | 静态解析 |
| 有错误码 | 处理器中出现 HTTPException(<码> | 静态解析 |
| 涉金额 | 出现 total_fen/amount/price_fen 等 | 静态解析 |
| 覆盖判定 | 端点存在≠语义正确,仅做缺口提示 | — |
扫描器 docs/tools/verify_p0_coverage.py --selftest 通过 → 全量扫描出矩阵 → 对高风险点做源码核验与非破坏性探针 → 缺陷单按 P0-P3 分级。
扫描器为只读操作,可重复执行;证据文件按包版本落盘,重复执行覆盖同名文件(v1.0 → v1.1 递增)。
| 项 | 宣称/注释 | 实测 |
|---|---|---|
| 支付回调 | 文档字符串称「真实模式:验签后写库」 | 代码中无验签 |
/me/assets-overview | 注释称「登录用户由前端传 token 携带 user 信息」 | 函数签名无 user 参数,恒返回零态 |
/me/assets-overview 零态是否为有意占位?若是,需前端同步按占位处理、不得当作真实数据| 域 | 端点数 | 有鉴权 | 有错误码 | 涉金额 | 覆盖判定 |
|---|---|---|---|---|---|
| ① 支付域 | 14 | 13 | 13 | 7 | ⚠️ 部分端点无鉴权依赖 |
| ② 库存/排期/可售 | 5 | 3 | 0 | 1 | ⚠️ 无显式错误码 |
| ③ 商户入驻资料 | 54 | 46 | 34 | 8 | ⚠️ 部分端点无鉴权依赖 |
| ④ 退款/结算 | 14 | 14 | 13 | 4 | ✅ 端点/鉴权/错误码在位 |
| ⑤ 消息域 | 10 | 10 | 1 | 0 | ✅ 在位(错误码偏少) |
| ⑥ 核销码 | 9 | 9 | 8 | 5 | ✅ 端点/鉴权/错误码在位 |
| ⑦ 用户账户隐私 | 80 | 71 | 40 | 9 | ⚠️ 部分端点无鉴权依赖 |
| ⑧ 审计日志 | 9 | 6 | 6 | 1 | ⚠️ 部分端点无鉴权依赖 |
| ⑨ 搜索/聚合 | 23 | 9 | 6 | 3 | ⚠️ 部分端点无鉴权依赖(多为公开读) |
| ⑩ 错误契约/角色 | 118 | 117 | 67 | 12 | ⚠️ 部分端点无鉴权依赖 |
补充:契约 356 vs 实现 399、对齐 345 ⇒ 契约漂移仍在(仅契约 11 / 仅实现 54 量级),归 B01(波波)。
POST /api/miniapp/pay/notifyhttp://100.64.1.230:80899b88ece9;源码 backend/app/routers/miniapp_pay.py:107-188 curl -s -X POST http://100.64.1.230:8089/api/miniapp/pay/notify -H "Content-Type: application/json" -d '{"out_trade_no":"PROBE_NOT_EXIST_001","status":"SUCCESS"}'
HTTP 404 {"success": false, "error": {"code": 404, "message": "无 out_trade_no=PROBE_NOT_EXIST_001 的订单"}, ...} —— 请求直达查库逻辑GET /api/miniapp/pay/orders/1/status 无 token ⇒ HTTP 401(证明鉴权机制在该域是生效的,回调端点属漏配)sign/verify/hmac 类校验;文档字符串称「真实模式:验签后写库」但代码中不存在out_trade_no 的未授权请求可经状态机将订单置为 paid(pending_payment→paid 为合法迁移),并触发分销归因与佣金结算(distribution_attribution.resolve_attribution)sandbox 字段决定/me/assets-overview 恒返回零态(P1 严重)GET /api/miniapp/me/assets-overviewbackend/app/routers/feed_demand.py:279-295async def assets_overview(): 无任何 user 参数,返回体为硬编码零值(orders_count 全 0、benefits_count 全 0 等)verify_contract.py,差异收敛并说明剩余差异POST /api/miniapp/merchant-console/service-fee/notify 按 WIP-290 刘总裁定冻结并返回 501,符合预期docs/tools/verify_p0_coverage.py(十域覆盖扫描器,含 --selftest,可复用于 Q04/Q07/Q08)