Files
cmhub/docs/mvp-acceptance.md
T

4.6 KiB
Raw Blame History

MVP 完整验收报告(T-402)

日期:2026-07-03
范围:按 02-requirements.md 的第一版 MVP / P0 验收标准验收。
结论:P0 验收通过。同一 119 条测试按验收域拆分运行全部通过;一次单条全量 manage.py test 曾因远程 MySQL 连接重置中断,已登记为测试环境稳定性问题。

验收矩阵

P0 验收项 结论 主要证据
用户注册 / 登录 PASS apps.portal:注册创建 0 点钱包且不写赠点流水;T-605 后注册为免邮箱验证、注册后可直接登录,邮箱仍必填且唯一
API Key 自助管理 PASS apps.portal:Key 明文只显示一次、列表仅显示 prefix、删除为吊销、不可删除他人 Key;apps.api:缺失/无效 Key 为 401,吊销 Key 为 403
扫码充值 PASS apps.portal / apps.api:创建 pending 订单不直接加点、不写流水;二维码票据展示;状态轮询只允许本人订单;主动查单可补入账
个人中心 / 记录 PASS apps.portal:余额、充值总额、入账点数、消费/退款记录与实际订单/流水一致;充值记录和消费记录分页且仅见本人
生成标题 API PASS apps.api:有效 API Key + 合法 prompt 返回标题、扣点并写调用记录;缺失/无效 Key 返回 401
生成图片 API PASS apps.api:有效 API Key 返回图片 URL,图片结果不把 provider raw/base64 写入调用记录;上游错误和能力错误会退点
点数计费与扣减 PASS apps.billing / apps.api:按别名+分辨率计费,余额不足返回 402 且不调上游;并发扣点不超扣、不为负
余额查询 API PASS apps.api:余额响应与 PointsLedger.points_delta 累加一致;Web session 不能调用外部余额接口
充值转点数 PASS apps.api / apps.billing:微信/支付宝 mock 回调验签后幂等入账;重复回调只入账一次;签名失败或金额不一致不入账
调用记录 / 点数流水 PASS apps.api / apps.billing:成功、失败退点、充值、运营调整均写记录/流水;流水约束拒绝 0 变动、负余额和重复 refund/recharge
运营后台 PASS apps.users / apps.billing / apps.ai:admin 可登录;用户、钱包、API Key、规则、汇率、订单、流水、调用记录、模型配置和审计均可管理/检索;API Key / AI key 脱敏;手工调点经计费层写 adjust 流水
可插拔模型 PASS apps.ai / apps.billing:ModelAlias 解析别名到当前 active AiModel;后台变更有审计;改别名指向后调用方别名不变,计费规则仍按别名生效

验证命令

  • ./init.ps1:通过。
  • py -3.12 manage.py check:通过,0 issues。
  • py -3.12 manage.py makemigrations --check --dry-run:通过,No changes detected。
  • py -3.12 manage.py test apps.portal --noinput --keepdb --verbosity 2:通过,21 tests OK。
  • py -3.12 manage.py test apps.ai --noinput --keepdb --verbosity 2:通过,26 tests OK。
  • py -3.12 manage.py test apps.api --noinput --keepdb --verbosity 2:通过,39 tests OK。
  • py -3.12 manage.py test apps.billing apps.users --noinput --keepdb --verbosity 2:通过,33 tests OK。
  • py -3.12 manage.py smoke_ai_generation title --recorded:通过,录制标题 smoke OK。
  • py -3.12 manage.py smoke_ai_generation image --recorded:通过,录制图片 smoke OK。
  • py -3.12 manage.py findstatic portal/vendor/bootstrap/bootstrap.min.css portal/vendor/qrcode/qrcode.js --verbosity 1:通过,两个本地 static 文件均可找到。
  • py -3.12 -m compileall apps config:通过。
  • git diff --check:通过,仅 Windows CRLF 提示。

已知限制

  • 一次单条 py -3.12 manage.py test --noinput --keepdb --verbosity 2 发现 119 tests,已运行 98 tests 后远程 MySQL 在 apps.portal.tests.PortalAccountFlowTests.setUpClass 阶段连接重置;已通过用例无断言失败。随后按 portal / ai / api / billing+users 四组拆分,合计同一 119 条测试全部通过。
  • 测试阶段仍有 allauth account.EmailAddress 条件唯一约束在 MySQL 上不可创建的 models.W036 警告;本项目账号邮箱唯一性由 user.email 唯一约束承担。
  • 真实微信/支付宝商户密钥、证书、生产 SDK 依赖和公网回调地址仍待提供;MVP 验收使用 mock 支付路径。
  • 真实 AI 上游调用和图片同步真实耗时仍需配置 AI_KEY_ENCRYPTION_KEY、导入真实 AiModel/ModelAlias 后执行;部署超时口径已登记到 T-403。