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_audiosP0-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 拆分:本页只保留验收测试续篇的前半部分;其余章节见 验收测试(续二)。