www_site/docs/ACCEPTANCE.md
flym 34c2b436f0 docs: Phase 5 acceptance, deployment, operations and phase report
Record the task/quota exception matrix (isolated fault injection) results,
the admin quota concurrency fix, the isolated restore drill (business/CMS/audio,
with the pre-existing missing-audio finding), upstream security launch blocker,
and remaining minor items. Each item marked pass / fail / awaiting-external with
test version and evidence. Do not mark reliability/launch-blocking items complete.
2026-09-10 05:01:27 +08:00

5.2 KiB
Raw Blame History

验收记录ACCEPTANCE

日期2026-09-10 · 基线 9568622 · 本轮修复/部署版本 8657f44 状态标记:通过 / 失败 / 待外部条件。每项附测试版本与证据。故障注入均在隔离环境(隔离库 kaotings_p5、隔离音频目录、伪造上游)进行。

1. 任务与额度异常矩阵Phase 3 遗留)

编号 验收项 版本 结果 证据
A-1 成功基线(写入/结算/回放/下载) 8657f44 通过 S1succeededused 2冻结 0回放/下载 200音频文件存在
A-2 最后额度并发争用 8657f44 通过 S2并发 2 请求 → codes=[202,409],仅 1 个冻结成功used 3 / 冻结 0 / 可用 2
A-3 管理员并发调减额度不变式 95686228657f44 失败→修复→通过 S3基线 7/8 轮破坏不变式;修复后 8 轮恒 limit+adjustment-used-reserved>=0(最坏可用 10
A-4 冻结与调减并发压测 8657f44 通过 S4终态不变式成立、冻结归零used 24 / 冻结 0 / 可用 16
A-5 queued 重启恢复 8657f44 通过 S9queued→succeeded,重启后音频存在
A-6 running 租约过期恢复 8657f44 通过 S10failed / WORKER_LEASE_EXPIRED,冻结释放
A-7 音频写入与结算中断(存储失败) 8657f44 通过 S7目录不可写 → failed,冻结释放,无残留文件
A-8 上游超时 8657f44 通过 S8failed / UPSTREAM_TIMEOUT,冻结释放
A-9 非音频 / 损坏 / 超大 / 5xx 响应 8657f44 通过 S5UPSTREAM_NOT_AUDIO / UPSTREAM_AUDIO_CORRUPT / UPSTREAM_RESPONSE_TOO_LARGE / UPSTREAM_HTTP_500,均冻结释放、无文件
A-10 跨周期结算 8657f44 通过 S6结算落到任务创建时所属上一周期账户本周期 used 不变

复现:services/api/tests/phase5_exception_matrix.py(退出码 0 = 全通过)。

2. 自动化验收固化

编号 验收项 版本 结果 证据
B-1 测试工具/依赖版本/运行说明入仓库 8657f44 通过 services/api/requirements.txtrequirements-test.txttests/README.mdtests/provision_isolated_env.sh
B-2 秘密经环境注入,不落仓库 8657f44 通过 provision_isolated_env.sh 仅读 SUDO_PASSWORD/P5_DB_PASSWORD 等环境变量;仓库无秘密
B-3 独立环境可重复执行 8657f44 通过 隔离库 + 隔离音频 + 伪造上游多次运行,退出码稳定

3. 音频运维与恢复

编号 验收项 版本 结果 证据
C-1 业务库隔离恢复 8657f44 通过 行数源=恢复users 35 / quota 34 / tasks 28 / audio 26 / usage 61 / grants 10
C-2 CMS 库隔离恢复 8657f44 通过 14 张表products=1 / users=1 / migrations=1
C-3 音频恢复 + 历史↔音频关联 + 额度一致 8657f44 通过(带发现) 磁盘 22 文件全部被 available 引用(无孤儿);额度↔流水 0 不符;发现 4 条 available 行无文件(既有,回放 404 优雅降级)
C-4 容量/保留/清理/备份方案 待外部条件 保留期/容量上限/清理策略需用户确认(见 OPERATIONS.md §3本轮不擅自删除既有音频

4. 上游安全

编号 验收项 版本 结果 证据
D-1 上游传输加密HTTPS/mTLS/专线) 待外部条件(上线阻断) 现为公网 HTTP需上游提供加密端点与证书/接入方式
D-2 来源限制(限本站出口) 待外部条件(上线阻断) 需上游提供允许的来源网段;业务侧保留 Bearer Key
D-3 外部网络复测 待外部条件 D-1/D-2 解除后重跑成功/失败/超时矩阵与不可达核查

5. 剩余小项

编号 验收项 版本 结果 证据
E-1 不新增按 slug REST 路由,统一 where 查询 8657f44 通过 公网展示走 where[status][equals]=published + where[slug][equals]=200
E-2 非法 ID 500 不泄露堆栈/内部信息 8657f44 通过 GET /cms/api/products/:slug(非 UUID) → 500 通用 {"errors":[{"message":"Something went wrong."}]},扫描无堆栈/路径
E-3 SMTP 未接入维持 V1 限制,受控管理员恢复流程可用 8657f44 通过 验证渠道返回未启用;恢复流程见 docs/cms-admin-recovery.md

6. 部署与版本

编号 验收项 结果 证据
F-1 修复提交并部署 通过 发布 8657f44,软链已指向,仅重启 kaotings-api
F-2 版本核对 通过 线上 main.py SHA256 571037f4… = 本地 8657f44is-active active/healthz ok

未通过 / 待外部条件(不得标为完成)

  • D-1 / D-2 / D-3上线阻断:公网 HTTP 上游未加密、无来源限制、未外部复测。
  • C-4:音频容量/保留/清理参数待用户确认。
  • C-3 发现4 条 available 音频行无文件,待调查根因(不阻断恢复)。
  • 旧 Big-TTS Web 退役前需旧系统负责人提供源端备份证明与替代验收确认(沿用 Phase 3/4