文档
03 平台04 媒体供应02_需求与工作包

MG-02-016 验收测试(续)

验收测试下半部分

本页是 测试与验收的前半部分 的续篇,2026-10-18 按章节拆分;上半部分仍在原页。

13. 成本

P0-COST-001 按秒

单价、最小计费时长、时长取整和分辨率倍率准确,使用十进制定点。

P0-COST-002 按次和固定区间

4–15 秒固定价格时,5 秒与 15 秒 Quote 相同。

P0-COST-003 累计尝试

首个 Attempt 可能收费时,第二次换供给的成本护栏包含已发生或可能发生的成本。

P0-COST-004 价格版本

价格修改后旧 Attempt 继续引用旧版本,新 Attempt 使用新版本;历史成本可复现。

P0-COST-005 未知价格

价格、币种或计费点未知时禁止自动调度,并在后台给出明确配置错误。

P0-COST-006 默认售价与用户专属售价

  • 模型每个素材配置、分辨率和计费方式均有系统默认售价;缺少默认售价的规格不在模型 广场展示;
  • 用户没有覆盖时 amount = default_amount 且 pricing_scope = default;有覆盖时 amount 返回该用户专属价、default_amount 保持系统默认价且 pricing_scope = user;
  • 另一个用户不能读取或继承前一用户的专属价;删除覆盖后立即回退系统默认价;
  • 默认价和专属价完整替换均检查 If-Match,过期版本失败且不产生部分写入;
  • 售价修改不改变同一请求的调度候选、Cost Rule Quote、成本护栏或实际 Provider 成本。

14. 错误分类与重试

P0-RET-001 内容错误

内容审核、用户素材和参数错误不重试,不触发基础设施熔断,错误直接返回用户。

P0-RET-002 Supply 故障

模型不存在、模型级 5xx 或模型库存故障时熔断/冷却当前 Supply,选择另一个 Supply 重试一次。

P0-RET-003 Channel 故障

认证、余额、DNS、TLS 和全局连接故障影响 Channel 全部新 Attempt;可换其他 Channel 的 Supply 一次。

P0-RET-004 最大尝试

任何路径最多两次 Provider 提交。重复消息、Worker 崩溃和并发 Dispatcher 都不能 创建第三次 Attempt。

P0-RET-005 20 分钟截止

Task 创建超过 20 分钟后即使收到可重试失败,也不开始新的 Attempt;已经正常处理的 Provider Task 不因此被终止。

P0-RET-006 提交未知

POST 超时且无法确认受理时进入 submission_uncertain,不换 Provider、不释放普通 重试,进入对账和告警。

15. Channel 与 Supply 健康

P0-HLT-001 单模型故障隔离

Channel 106 的 lingjing Supply 连续失败时只熔断该 Supply;同 Channel 的 Seedance 和 Omni Supply 继续接收任务。

P0-HLT-002 分辨率 SKU 隔离

同 Provider 模型 1080p Supply 故障不影响 720p 和 480p Supply。

P0-HLT-003 Channel 升级

任一 Supply 返回 Credential 失效,或多个 Supply 同时出现相同连接故障时,升级为 Channel 熔断。

P0-HLT-004 存量查询

Channel/Supply 熔断或人工停用后不接受新 Attempt,但已提交异步 Attempt 继续使用 原 Credential Version 查询。

P0-HLT-005 半开恢复

到达冷却时间后只允许有限探测;达到成功门槛后逐步恢复,不能瞬间承接全部并发。

P0-HLT-006 真人无限制供给优先

真人视频请求同时存在 allowed 和 restricted 硬能力候选时选择 allowed,不因 restricted 更便宜或短期成功率更高而改变;只有所有 allowed 候选不可用时才 允许进入 restricted 排序层。prohibited 始终排除。图像候选不包含真人政策。

16. 933→900 能力降级

P0-DEG-001 Strict

933 精确和兜底 Supply 全部不可用,fallback_mode=strict 时失败,不删除素材。

P0-DEG-002 Best Effort

存在已验证规则时,933 请求可以选择 900 Supply,保留图片和顺序,移除参考视频与 音频,并保存变换前后快照。

P0-DEG-003 披露

任务查询、使用记录和模型广场均显示:

degraded=true
requested_profile=933
actual_profile=900
dropped_inputs=reference_videos,reference_audios

P0-DEG-004 告警

第一次进入降级立即告警;持续故障按窗口聚合;精确 Supply 恢复后发送恢复通知。

P0-DEG-005 非法替代

没有 Binding 或 Degradation Rule 的任意可用模型不能临时承接请求。

P0-DEG-006 降级后再校验

变换后的请求仍需通过 Target Supply 能力、健康、容量和成本检查。

17. 使用记录与任务详情

P0-OPS-001 渠道模型统计

  • 给定固定 Attempt Fixture,按 Channel/Supply 返回准确调用量、成功/失败数和成功率;
  • 未终态 Attempt 计入调用量但不进入成功率分母,无终态时成功率为 null;
  • 错误按 category/code 聚合,最近失败不返回 Provider 原文、Prompt、素材或 Credential;
  • 24 小时产生小时桶,7/30 天产生日桶,图像和视频互不混入;
  • UI 使用调用量趋势、独立成功率趋势、错误横向条形分布和最近失败表,不伪造空数据。

P0-LOG-001 统一列表

同步图像、异步图像和视频出现在同一个使用记录列表,可按媒体、模式、状态筛选。

P0-LOG-002 同步不伪造任务

同步图像详情没有 AsyncTask ID 或异步状态时间线,但有 Attempt 和输出。

P0-LOG-003 异步时间线

异步详情包含 queued、submit、poll、retry、result 和终态,以及所有 Attempt。 事件由 PostgreSQL 只追加保存,并包含 dispatch 与跨 Supply/Channel 时的 reroute; 每次 Provider Poll 都有独立、单调序号事件,Worker 重启或幂等重放不能覆盖历史。

P0-LOG-004 管理员和用户差异

管理员可见 Supply、Provider Task、成本和脱敏错误;普通用户不可见内部供给和成本。 普通用户时间线不含 Attempt/Supply/Channel 稳定 ID、Provider Task、成本、URL、 Prompt 或内部错误;管理员时间线只增加稳定 ID 和安全错误分类,Provider Task 与 成本继续由详情的独立管理员字段提供。

P0-LOG-005 状态一致

数据看板、使用记录、任务查询和 API 返回同一个权威状态,不通过多张独立日志推测。

18. 内容与对象存储

P0-AST-001 异步素材稳定

用户素材 URL 在任务排队后过期,Provider 重试仍能使用平台临时对象。

P0-AST-002 SSRF

私网、环回、云元数据地址、DNS 重绑定、超限大小和错误类型被拒绝。

P0-AST-003 平台结果

用户结果不暴露 Provider 临时 URL 或对象存储原始地址。

P0-AST-004 307 和重新签名

默认内容请求返回 307;签名过期后重新访问 Gateway 得到新 URL。

P0-AST-005 HEAD 和 Range

HEAD 元数据正确;无 Range 返回 200;合法单段 Range 返回 206;越界返回 416。

P0-AST-006 代理模式

流式代理不完整缓冲大视频,不把用户 Bearer Token 转发到对象存储。

P0-AST-007 转存失败

Provider 成功但转存失败不能标记请求成功,也不能触发重新生成。

P0-AST-008 Result Spool 隐私与孤儿清理

PostgreSQL Spool 行不含 Provider URL、Base64、Credential 或媒体正文;命名卷目录和 文件权限仅允许网关 UID。模拟文件已落盘但数据库写入失败,宽限期内保留,宽限期后由 Reconciler 清除;仍有数据库行的待发布文件不得误删。

P0-AST-009 Result Spool 容量

并发 Stage 通过 PostgreSQL 容量锁预留空间,超过配置上限立即拒绝且不留下正式 Spool 行或文件。磁盘规划必须在上限外为同时在途的下载临时文件保留余量。

19. 安全

P0-SEC-001 Credential

Provider Credential 加密且版本化;后台更新后无法重新获取旧明文。

P0-SEC-002 日志脱敏

自动扫描日志、Trace、错误和 Fixture,不能包含完整用户 Key、Provider Key、 Authorization、Base64、签名 URL 和生产素材 URL。

P0-SEC-003 管理 API

普通用户访问所有 /admin/v1 路由返回拒绝;关键写操作有审计。

P0-SEC-004 配置并发

两个管理员同时修改同一 Public Model,旧版本写入返回 409,不覆盖新版本。

本地开发阶段使用隔离的单机 Compose 安全门禁统一复核 P0-AUTH-001、 P0-AUTH-004 和 P0-SEC-001 至 P0-SEC-004:

scripts/security-gate.sh
scripts/secret-scan.sh

安全门禁必须从实际 HTTP 入口验证未认证、普通用户、管理员缺失/错误 CSRF、 两用户资源隔离和旧 If-Match,并检查 PostgreSQL 中的 Credential 信封密文与 API Key 哈希。运行时 Canary 扫描覆盖 API/Worker 日志、错误响应和审计摘要;扫描 内容至少包含完整 Key、Credential、Authorization、Prompt、素材 URL、Provider 原文、Base64 和签名 URL。脚本只能启动独立 Test Fixture Compose 项目,退出时删除 一次性卷,不读取生产 Credential,不调用真实 Provider,也不执行部署或切流。

20. 故障恢复

P0-FT-001 API 崩溃

异步 Task 事务提交后 API 崩溃,任务仍可由 Outbox 恢复;事务提交前崩溃不留下孤儿。

P0-FT-002 Dispatcher 崩溃

Capacity Lease 和任务领取在超时后可接管,不重复 Provider 提交。

P0-FT-003 Poller 崩溃

已提交 Provider Task 保留绑定,新 Poller 可继续查询。

P0-FT-004 PostgreSQL 短时不可用

同步写请求快速失败;Worker 不伪造成功;数据库恢复后任务状态可继续推进。

P0-FT-005 Redis 短时不可用

正确性不丢失;恢复后未交付事件可以重放。

P0-FT-006 对象存储故障

Provider 已成功但平台输出未完成时维持处理中并重试转存,达到上限后稳定失败和告警。

20.1 单机 Compose 故障演练入口

以下脚本只操作独立项目名和独立卷,验证 Worker 暂停、PostgreSQL、Redis 和对象存储 短时不可用后的恢复,不访问真实 Provider:

scripts/compose-fault-test.sh

组件测试继续负责精确验证领取 fencing、租约超时接管、Redis 重建竞态和错误分类; Compose 演练负责验证实际进程、网络依赖、持久卷和公开 API 的组合行为。二者都通过 才可关闭 P0-FT,真实 Provider 的受控故障证据仍按第 22 节单独保存。

2026-10-18 拆分:本页只保留验收测试续篇的前半部分;其余章节见 验收测试(续二)。

On this page

验收测试(续)13. 成本P0-COST-001 按秒P0-COST-002 按次和固定区间P0-COST-003 累计尝试P0-COST-004 价格版本P0-COST-005 未知价格P0-COST-006 默认售价与用户专属售价14. 错误分类与重试P0-RET-001 内容错误P0-RET-002 Supply 故障P0-RET-003 Channel 故障P0-RET-004 最大尝试P0-RET-005 20 分钟截止P0-RET-006 提交未知15. Channel 与 Supply 健康P0-HLT-001 单模型故障隔离P0-HLT-002 分辨率 SKU 隔离P0-HLT-003 Channel 升级P0-HLT-004 存量查询P0-HLT-005 半开恢复P0-HLT-006 真人无限制供给优先16. 933→900 能力降级P0-DEG-001 StrictP0-DEG-002 Best EffortP0-DEG-003 披露P0-DEG-004 告警P0-DEG-005 非法替代P0-DEG-006 降级后再校验17. 使用记录与任务详情P0-OPS-001 渠道模型统计P0-LOG-001 统一列表P0-LOG-002 同步不伪造任务P0-LOG-003 异步时间线P0-LOG-004 管理员和用户差异P0-LOG-005 状态一致18. 内容与对象存储P0-AST-001 异步素材稳定P0-AST-002 SSRFP0-AST-003 平台结果P0-AST-004 307 和重新签名P0-AST-005 HEAD 和 RangeP0-AST-006 代理模式P0-AST-007 转存失败P0-AST-008 Result Spool 隐私与孤儿清理P0-AST-009 Result Spool 容量19. 安全P0-SEC-001 CredentialP0-SEC-002 日志脱敏P0-SEC-003 管理 APIP0-SEC-004 配置并发20. 故障恢复P0-FT-001 API 崩溃P0-FT-002 Dispatcher 崩溃P0-FT-003 Poller 崩溃P0-FT-004 PostgreSQL 短时不可用P0-FT-005 Redis 短时不可用P0-FT-006 对象存储故障20.1 单机 Compose 故障演练入口