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

69 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 验收记录ACCEPTANCE
日期2026-09-10 · 基线 `9568622` · 本轮修复/部署版本 `8657f44`
状态标记:**通过 / 失败 / 待外部条件**。每项附测试版本与证据。故障注入均在隔离环境(隔离库 `kaotings_p5`、隔离音频目录、伪造上游)进行。
## 1. 任务与额度异常矩阵Phase 3 遗留)
| 编号 | 验收项 | 版本 | 结果 | 证据 |
| --- | --- | --- | --- | --- |
| A-1 | 成功基线(写入/结算/回放/下载) | 8657f44 | 通过 | S1`succeeded`used 2冻结 0回放/下载 200音频文件存在 |
| A-2 | 最后额度并发争用 | 8657f44 | 通过 | S2并发 2 请求 → `codes=[202,409]`,仅 1 个冻结成功used 3 / 冻结 0 / 可用 2 |
| A-3 | 管理员并发调减额度不变式 | 9568622 → 8657f44 | **失败→修复→通过** | S3基线 7/8 轮破坏不变式;修复后 8 轮恒 `limit+adjustment-used-reserved>=0`(最坏可用 10 |
| A-4 | 冻结与调减并发压测 | 8657f44 | 通过 | S4终态不变式成立、冻结归零used 24 / 冻结 0 / 可用 16 |
| A-5 | queued 重启恢复 | 8657f44 | 通过 | S9`queued→succeeded`,重启后音频存在 |
| A-6 | running 租约过期恢复 | 8657f44 | 通过 | S10`failed / WORKER_LEASE_EXPIRED`,冻结释放 |
| A-7 | 音频写入与结算中断(存储失败) | 8657f44 | 通过 | S7目录不可写 → `failed`,冻结释放,无残留文件 |
| A-8 | 上游超时 | 8657f44 | 通过 | S8`failed / UPSTREAM_TIMEOUT`,冻结释放 |
| A-9 | 非音频 / 损坏 / 超大 / 5xx 响应 | 8657f44 | 通过 | S5`UPSTREAM_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.txt`、`requirements-test.txt`、`tests/README.md`、`tests/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…` = 本地 `8657f44``is-active active``/healthz ok` |
## 未通过 / 待外部条件(不得标为完成)
- **D-1 / D-2 / D-3上线阻断**:公网 HTTP 上游未加密、无来源限制、未外部复测。
- **C-4**:音频容量/保留/清理参数待用户确认。
- **C-3 发现**4 条 `available` 音频行无文件,待调查根因(不阻断恢复)。
- 旧 Big-TTS Web 退役前需旧系统负责人提供源端备份证明与替代验收确认(沿用 Phase 3/4