Skip to content

v1.0.5-preview.3

Choose a tag to compare

@CSCITech CSCITech released this 05 Aug 04:35
· 77 commits to main since this release
4c62e58

Warning

v1.0.5-preview.3 为预览版本,包含计费结算、订阅预扣、异步任务退款、缓存失效、日志幂等以及模型/供应商名称唯一键相关数据库结构变更。升级前请备份主库与日志库,并在测试环境验证钱包/订阅计费、Realtime 长会话、异步任务成功/失败/超时、Redis 故障恢复、渠道状态码映射、模型元数据迁移和 Midjourney 图片转发。日志幂等使用独立小型 receipt 表,不会在大体量 logs 表上创建新的唯一索引。

Note

本稿只描述 v1.0.5-preview.2 之后需要对外说明的变化。preview.2 已覆盖的 generation fence、进程内缓存重试、BillingSession 补偿状态、quota_data 刷盘、OAuth/Turnstile 收口和管理端基础优化不在这里重复;本版仅描述这些机制在持久化恢复、原子结算、Redis 限流降级、渠道协议兼容和具体缺陷修复上的新增增量。

Release Notes

GitHub 地址

https://github.com/MAX-API-Next/MAX-API/releases/tag/v1.0.5-preview.3

Highlights

  • 计费结算进入持久化幂等阶段:钱包、订阅、Token 和异步任务额度调整使用稳定 operation key 与数据库结算记录,相关账本变更在同一事务内提交;瞬时失败保留为可恢复状态,参数冲突、跨订阅周期等不安全重放会失败关闭或进入人工处理。
  • 异步任务退款与差额结算可恢复:任务最终结算、失败退款、任务 quota 更新、账单日志和 usage 统计建立持久化关联;CAS 竞争只允许获胜者触发计费,进程重启后可继续恢复未完成退款及日志副作用。
  • 缓存失效支持跨进程恢复:preview.2 的进程内有限重试进一步增加数据库持久任务;用户资料/绑定/删除、Token 更新/删除及钱包/订阅额度变更会在业务事务内同时登记失效任务,Redis 抖动期间的待处理工作不会因进程退出直接丢失,并继续使用 revision 防止旧任务覆盖新状态。
  • Redis 限流故障保留本机保护:Redis 不能给出有效判定时不再直接放行,自动降级到进程内限流器;Redis 恢复后继续使用原子滚动窗口。
  • 渠道状态码映射形成保存到运行时闭环:修复表单更新后映射消失、未写入数据库的问题,补齐后端严格校验,并将映射扩展到通用异步任务和 Midjourney;重试判断仍以原始上游状态为准,避免把不可重试提交错误映射成 5xx 后重复创建任务。
  • 渠道适配器可靠性加固:AWS Bedrock 请求跟随客户端取消,讯飞 WebSocket 握手和上游业务错误不再挂起或伪装成功,Nova/Vertex 异常配置与空响应改为受控错误;Cohere、PaLM、智谱流式请求会随客户端断开退出,Gemini 等响应资源在失败路径也会正确释放。
  • 高风险账号与图片访问收口:删号必须完成 2FA、Passkey 或密码二次验证;Midjourney 图片转发改为绑定任务、用户和 15 分钟有效期的 HMAC URL,旧的匿名裸 URL 不再可用。
  • 前端会话恢复与复核收口:认证状态只保存在内存中,页面冷启动通过服务端 cookie session 恢复;会话按有界窗口重新校验,401 会清理状态,并防止切换用户时复用旧的并发校验结果。
  • Realtime 与模型配置兼容性修复:OpenAI Realtime 按 preview/正式模型决定是否发送旧 beta 协议头,双向 Ping/Pong 与读超时会回收异常断线会话,累计 usage 改为按会话目标额度预留;模型定价抽屉和共享 JSON 编辑器修复异步回填、模式切换及误清空配置问题。
  • 支付回调、订阅权限和渠道故障转移收口:Stripe 入账遇到可重试错误时会返回 500 交由上游重放;高等级订阅取消或到期后会按仍有效订阅的实际授权分组回落;单次中继重试会排除已经失败的渠道,避免重复消耗重试预算。
  • 模型目录与定价管理一致性增强:模型/供应商活跃名称使用非空唯一键约束,上游元数据同步失败会明确中止;Anthropic 空模型列表、供应商引用保护和表达式计费模型切换后的旧价格残留问题一并修复。

New Features

  • 通用视频任务协议新增 created_at_pathupdated_at_path 可视化配置,可从不同供应商响应中提取任务创建和更新时间;相关字段已同步到中、英、法、日、俄、越六种前端语言。
  • 计费结算与缓存失效新增后台恢复任务:服务启动后会继续处理数据库中待完成的结算、账单日志/usage 副作用及 Redis 缓存失效记录。

Improvements

  • 新增 BillingSettlement 持久化结算记录,operation key 会绑定资金来源、用户、订阅、Token、任务、额度参数和日志副作用;重复调用返回既有结果,参数变化或身份不一致不会再次扣费/退款。
  • 新增 BillingPreConsumeSelection,同一 request ID 首次选定钱包或订阅后不可在重试中切换资金来源,避免余额变化或并发回放把一次请求结算到两个来源。
  • 钱包/订阅预扣与 Token 预扣收敛到原子事务;订阅记录绑定用户、Token、模型、额度和 last_reset_time,跨重置周期的延迟结算或退款会失败关闭。
  • Realtime 追加预留使用递增 revision 和累计目标额度,每个 reserve 操作可幂等重放,不再把累计 usage 当作互相独立的扣费片段。
  • 任务最终结算与退款通过任务主键和旧 quota 做 CAS,资金、Token、任务 quota 和结算状态在同一事务中更新;日志以结算 operation key 去重,提交节点归属不会被后续轮询节点覆盖。
  • 任务轮询新增失败退款恢复扫描;Suno 响应按旧状态 CAS 更新,未知 task ID 会被忽略并记录,竞争失败的轮询实例不再继续执行计费。
  • 任务账单日志使用独立 BillingLogReceipt 表完成幂等声明和日志同事务写入,避免给高容量 logs 表增加唯一索引;receipt 通过随机 claim token 判断本次归属,不依赖 MySQL RowsAffected 的连接参数语义。
  • 用户/Token 缓存失效写入 CacheInvalidationTask;用户资料、OAuth 绑定、用户删除、Token 更新/删除及钱包/订阅结算会在同一数据库事务中登记任务,提交后由持久 runner 执行,成功处理时按 revision 删除,较旧 worker 不会误删更新后的任务。
  • 待处理的持久缓存失效任务同时构成读侧栅栏:任务未处理前不会命中或回填该用户/Token 的 Redis 缓存;签到、兑换码和直接用户额度调整也统一接入这一事务性失效路径。
  • Redis 限流返回错误、异常类型或非法判定时自动使用进程内同策略限流器,避免 Redis 短暂故障使登录、关键操作和全局 API 限流整体失效。
  • tiered billing 表达式和异步任务费率卡的运行时配置改为带读写锁的映射;管理员同步计价配置时不会与并发请求读取同一 Go map 发生数据竞争。
  • Realtime 连接会在关闭时终止 reader、Ping worker 和上下游 WebSocket;usage 累计与预扣序列化,避免异常断线长期占用 goroutine、上游连接或会话额度。
  • 渠道故障转移会在同一次普通中继或未锁定渠道的任务提交中记录已失败渠道,并在内存缓存与数据库选择路径中排除这些候选;优先级、权重、自动分组和新请求之间的选择语义保持不变。
  • 多密钥轮询索引在渠道缓存刷新时复用同一渠道锁进行读取和迁移,避免后台缓存重建与并发取 Key 使用不同锁访问同一状态。
  • max_tokens / max_completion_tokens 的解析收敛为共享规则,显式 0 在没有旧字段时仍会保留;AWS Nova、Baidu、Ollama、智谱、讯飞和阿里任务适配器也会保留客户端显式传入的 0 / false
  • 渠道多密钥操作在同一渠道锁内重新读取完整配置;无效渠道 ID 在建立锁之前拒绝,避免无效管理请求长期占用锁表条目。
  • 系统配置更新会在落库前拒绝 pointer-backed JSON 配置字段的 null,避免运行时配置被空值意外置空。
  • 状态码映射只接受规范的 100..599 源/目标状态码,拒绝 0429 等别名、重复规范化 key、null、非对象和越界值;运行时遇到无效配置会保持原状态码。
  • 通用异步任务和 Midjourney 返回现在复用统一状态码映射函数,同时保留原始上游状态用于任务重试分类。
  • 通用视频任务协议回写配置时保留未知厂商扩展字段,新增时间路径不会覆盖 vendor_extension 等自定义内容。
  • 前端 session verifier 合并并发 getSelf(),默认 30 秒内复用同一身份的验证结果;身份变化时会等待并重新验证,不应用旧用户的在途响应。
  • OpenAI Realtime 正式模型不再发送已废弃的 openai-beta: realtime=v1 / openai-beta.realtime-v1*-realtime-preview 模型继续保留旧协议兼容。
  • 模型定价抽屉将定价读取逻辑独立出来,系统设置异步到达后可正确回填固定价格/倍率/高级倍率;固定价格优先于残留倍率,并避免“同名新建”流程误删其他模型配置。
  • 模型固定价格和各类倍率在前后端统一要求有限且非负,拒绝负数、NaNInfinitynull 和非对象配置,避免产生负计费或静默写入无效 JSON。
  • 渠道模型多选不再只显示前 6 个标签,管理员可直接核对全部已选模型。
  • OAuth 已存在身份查询失败统一包装为安全业务错误,避免将数据库主机等内部细节返回给客户端。
  • 模型和供应商使用独立的非空 name_key 建立活跃名称唯一性;软删除时原子切换为记录专属保留键,使三种数据库都能阻止并发创建同名活跃记录,同时允许删除后重新使用原名称。
  • 模型元数据同步会同时校验供应商与模型数据源的 HTTP/业务结果,不再在供应商拉取失败时继续创建无归属模型;上游显式 status: 0 也会按禁用状态保留。
  • 系统 Option 写接口只接受已初始化注册表中的配置 key,并将 DataExportInterval 规范为 1..1440 分钟,避免任意配置落库和零/负间隔触发导出忙循环。
  • HTTPS ServerAddress 在未显式设置 SESSION_COOKIE_SECURE 时会自动启用 Secure cookie;显式环境变量仍保持最高优先级,纯 HTTP 部署继续兼容并输出风险日志。
  • 删除未被生产路径使用的旧 PreConsumeQuota / ReturnPreConsumedQuota 入口及重复 operation-key 命名空间,避免新代码绕开持久化幂等结算;同时移除需手工同步迁移列表的死代码 migrateDBFast()

Bug Fixes

  • 修复渠道 status_code_mapping 在编辑抽屉中填入后,保存时被表单转换遗漏,导致更新后内容消失且数据库字段未写入的问题。
  • 修复共享 JsonEditor 首次渲染已有 JSON 时可视行为空、切换“可视化/JSON”模式会回写空值,以及外部 value 更新后表格未同步的问题。
  • 修复异步任务提交和 Midjourney 接口未应用渠道状态码映射的问题。
  • 修复映射后的 5xx/429 可能改变原始任务错误的重试语义,进而把本应不可重试的非幂等提交再次发送到上游的问题。
  • 修复通用视频任务协议编辑后丢失 created_at_pathupdated_at_path 和未知扩展字段的问题。
  • 修复 AWS Bedrock 使用 context.Background() 导致客户端断开后仍继续调用上游的问题;无全局 Relay timeout 时也保留显式取消能力。
  • 修复 Redis 限流依赖异常时所有策略只记录日志后直接放行的问题;现在自动回退本机限流,而不会将 Redis 波动扩大为登录与关键接口防护失效。
  • 修复 SumUsedToken 使用 MySQL 专用 ifnull(),导致 PostgreSQL 日志统计查询报错的问题;现在使用三种数据库均支持的 COALESCE()
  • 修复 AWS Nova、Baidu、Ollama、智谱、讯飞和阿里任务请求在 JSON 重编码时丢失显式 0false 的问题;同时修复讯飞将 n 错写为 top_k,以及 max_completion_tokensmax_tokens 的优先级在渠道间不一致的问题。
  • 修复 Baidu access token 接口的非 2xx HTTP 响应仍按成功 JSON 解析的问题;修复 Cohere、PaLM、智谱流式客户端提前断开时 producer goroutine 可能阻塞泄漏的问题。
  • 修复 OpenAI Realtime 对异常网络断线没有读超时与心跳,造成上下游 WebSocket、worker 和预扣额度长期滞留的问题;并消除并发使用量累计的读写竞争。
  • 修复 Hailuo 任务在视频文件 URL 尚不可用时过早标记成功并结算的问题;修复即梦顶层错误响应没有立即进入失败/退款路径的问题。
  • 修复管理员并发启用、禁用或删除同一渠道多个密钥时,较旧 ChannelInfo 快照可能覆盖较新修改的问题。
  • 修复管理员一次提交 Token 重新启用和新过期时间/余额时仍按旧值拒绝的问题,并拒绝非法 Token 状态值。
  • 修复 MySQL/PostgreSQL 旧 subscription_plans.price_amount 类型迁移失败只记录日志后继续启动的问题;迁移现在在核心表创建后执行,并向上返回失败。
  • 修复 AWS Nova 在 guardrail 等场景返回空 content 时访问 Content[0] 引发 panic 的问题。
  • 修复讯飞 WebSocket 非 101 握手可能返回 nil 错误和 nil channel 并永久阻塞,以及未检查 Header.Code 导致上游业务错误被当作 200 成功的问题;读取、发送和客户端取消现在共享同一事件生命周期。
  • 修复 Vertex 渠道区域配置不是字符串时直接类型断言 panic 的问题;无效模型项会回退有效默认区域或 global
  • 修复模型价格/倍率允许负数或非有限数的问题,防止负计费增加余额或 Infinity 序列化为 null 后破坏配置。
  • 修复 Midjourney 图片代理只按可猜测的 mj_id 查询且无需身份凭据造成的跨用户读取问题;签名校验失败、过期或用户不匹配统一返回 403。
  • 修复账号删除只比较前端用户名、后端仅凭现有 session 即永久删号的问题;删除接口现在要求 account_delete 作用域的短期二次验证。
  • 修复 BillingSession、旧 post-consume 路径和异步任务在重复回调、并发 worker、进程中断或错误结果不明确时可能重复执行资金/Token 调整的问题。
  • 修复同一请求重放时可能因当前余额或订阅状态变化,从钱包切换到订阅或从订阅切换到钱包的问题。
  • 修复订阅退款被额度下限截断后,Token 仍按请求值全额回退而造成两个账本不一致的问题;现在使用资金侧实际应用的 signed delta 同步 Token。
  • 修复订阅重置后仍可能重放旧周期预扣/退款,以及相同 request ID 用不同用户、Token、模型或额度参数再次执行的问题。
  • 修复异步任务失败退款只依赖当次轮询,数据库或日志写入短暂失败后进入终态便不再恢复的问题。
  • 修复任务结算成功但账单日志/usage 写入失败后无法恢复,或并发恢复产生重复日志的问题。
  • 修复 Token 已删除时异步任务终态退款无法返还用户钱包/订阅额度的问题;终态退款允许跳过已不存在的 Token 镜像,但仍校验用户和资金来源。
  • 修复 Realtime 会话累计用量传参错误,导致后续 usage 未按累计目标正确预留和结算的问题。
  • 修复正式 OpenAI Realtime 模型仍携带 preview beta header,可能被新版上游拒绝的问题。
  • 修复前端“仅验证一次”的 session 标记在用户被封禁、会话过期或用户切换后仍可能继续信任旧状态的问题。
  • 修复认证 store 将完整用户对象写入 localStorage,以及登出/删号路径仍操作该持久缓存的问题。
  • 修复 User.Edit、邮箱/OAuth 绑定清理、GitHub 身份迁移和用户设置更新在数据库提交后才清理缓存,进程中断或 Redis 故障可能长期保留旧身份/分组/设置的问题;outbox 不可写时相关业务事务现在会整体回滚。
  • 修复软删除/硬删除用户与其 Token 缓存清理分散在 model/controller 两阶段执行的问题;用户删除、user cache 和该用户全部 Token cache 失效任务现在同事务提交,不再存在中途退出后遗漏 Token 失效的窗口。
  • 修复模型抽屉在系统定价设置尚未加载时初始化空字段,随后保存可能清除已有价格;同时修复同名模型创建流程误删既有价格配置的问题。
  • 修复 OAuth provider 身份回填查询失败时可能把底层数据库错误详情直接暴露给客户端的问题。
  • 修复 Gemini Chat/Image 在 io.ReadAll 失败路径未关闭上游响应体的问题;Baidu、Zhipu、Cohere 写客户端响应失败现在会记录错误而不再静默丢弃。
  • 修复 SQLite 日志库兜底分支错误修改主库类型标志的问题,并移除两套 AutoMigrate 列表长期漂移的维护隐患。
  • 修复 Stripe checkout 完成或异步支付成功事件在订阅/充值入账遇到临时数据库错误时仍返回 200、导致 Stripe 不再重试的问题;已完成订单、永久状态不匹配和并发完成事件仍会安全确认,避免重复入账。
  • 修复高等级订阅取消、替换或到期时,只要还有任意低等级活跃订阅就跳过用户分组回落的问题;现在只有仍授予当前相同分组的其他订阅才会保留该权限。
  • 修复渠道缓存刷新和多密钥轮询并发访问 MultiKeyPollingIndex 的数据竞争,以及故障转移可能反复选中本次请求中已经失败渠道的问题。
  • 修复 OpenAI、Replicate 和 Sora multipart 转发将客户端文件名直接拼入 Content-Disposition,可能破坏 part 头的问题;文件名现在通过标准媒体类型编码安全生成。
  • 修复 OpenAI 图片编辑仅按文件扩展名判断 MIME 类型的问题;图片和 mask 现在按实际内容识别并转发 JPEG、PNG 或 WebP,空文件和伪装内容会被拒绝。
  • 修复 Anthropic 格式 /v1/models 在可见模型列表为空时读取首尾元素导致 panic 的问题;空列表现在返回 data: []has_more: false
  • 修复模型/供应商原联合唯一索引无法在 MySQL、PostgreSQL 的 NULL deleted_at 语义下阻止并发同名创建的问题;同时阻止删除仍被模型引用的供应商,并让模型软删除中的保留键更新与删除动作同事务回滚。
  • 修复上游模型/供应商元数据拉取失败被静默吞掉,以及上游显式 status: 0 被当作未提供而回退启用的问题。
  • 修复表达式计费模型之间切换时编辑器只更新模型名、仍显示首次打开模型价格的问题;编辑器现在按所选模型的完整定价快照重建状态,并同步刷新输入/输出等表达式价格。

Compatibility Notes

  • 本版新增 billing_settlementsbilling_pre_consume_selectionsbilling_log_receiptscache_invalidation_tasks 四张表;subscription_pre_consume_records 新增 Token 和订阅重置周期绑定字段。SQLite、MySQL、PostgreSQL 部署均需先完成项目 AutoMigrate,生产升级前应在同版本数据副本上演练。
  • modelsvendors 新增非空 name_key 列和单列唯一索引,并移除原 (name, deleted_at) / (model_name, deleted_at) 联合唯一索引。迁移会保留 ID 最小的同名活跃记录作为名称占用者,其他历史重复记录改写为记录专属保留键;软删除后的名称可重新创建。生产升级前应先检查重复元数据并在三种数据库的同版本副本上演练。
  • MySQL/PostgreSQL 的既有 subscription_plans.price_amount 会在核心 schema 就绪后迁移为 decimal(10,6);元数据查询或 ALTER TABLE 失败会阻止启动,升级前应先在数据副本演练,不应依赖原先的仅日志告警行为。
  • 任务账单日志幂等信息写入小型 billing_log_receipts 表,不再修改 logs 表索引;独立日志库同样需要允许 AutoMigrate 创建该 receipt 表。receipt 会随幂等记录长期保留,未建立安全保留期前不要手工删除。
  • 结算和预扣幂等记录当前不会按固定 TTL 清理;这是为了覆盖长时间异步任务、延迟回调和重启恢复。请将相关表增长纳入数据库容量与归档监控,未建立安全保留期前不要手工清理。
  • 需要修改余额的兼容路径现在要求稳定 request_id;缺少 request ID 时会失败关闭,不再退回非幂等直接扣减。自定义 relay/插件若调用旧 PostConsumeQuota 路径,应确保整个请求生命周期复用同一 ID。
  • 2025-02-22 00:00:00 UTC 之前提交的旧失败任务仍按历史策略不自动退款;新恢复扫描只处理 cutoff 之后且仍有 quota 的失败任务。本版只修正注释和发布说明日期,不改变原有退款资格边界。
  • 状态码映射保存现在执行严格校验:key/value 必须是规范的 100..599 状态码。此前可保存但不规范的 0429、小数、越界值、null 或非对象配置需要先修正。
  • 模型固定价格及 prompt/completion/cache/image/audio 倍率现在必须是有限非负数;已有负数、NaNInfinitynull 或非对象设置在再次保存前需要修正。
  • 旧的裸 /mj/image/:id 地址现在返回 403。客户端应重新查询任务并使用带 uidexpiressignature 的 15 分钟签名 URL;不要长期缓存或持久化该临时地址。
  • DELETE /api/user/self 现在要求先完成 account_delete 安全验证。启用 2FA/Passkey 的账号必须使用已配置的强验证方式;未配置时可回退当前密码。自定义客户端需按更新后的 OpenAPI 流程调用。
  • 未显式设置 SESSION_COOKIE_SECUREServerAddress 为有效 HTTPS URL 时,session cookie 现在自动标记 Secure;显式配置仍优先。HTTP 部署不会被强制开启,但会记录明文传输风险提示。
  • Redis 限流故障现在改为回退进程内同策略限流。多实例部署在 Redis 故障期间只能按实例分别计数,不能替代 Redis 恢复后的全局窗口;仍应监控 Redis 可用性和对应错误日志。
  • OpenAI *-realtime-preview 模型继续发送 beta header;正式 Realtime 模型改用当前协议。使用自定义模型别名时,应确认别名是否仍包含 -realtime-preview 并与实际上游协议一致。
  • 管理 API 对已注册、使用 pointer-backed JSON 字段的配置不再接受字符串 null;自动化配置脚本应发送有效 JSON 值,或省略未修改的字段。
  • Option 更新接口现在拒绝未注册 key,DataExportInterval 仅接受 1..1440 的整数分钟值;依赖写入自定义 options 行或零/负导出间隔的自动化脚本需要调整。
  • 仍被模型引用的供应商现在不能删除,需先重新分配或删除关联模型。OpenAI 图片编辑上传会按文件内容校验,且仅接受 JPEG、PNG、WebP;仅修改扩展名不再能绕过类型限制。
  • 上游适配器现在会将客户端显式传入的 00.0false 转发给相关供应商;此前依赖网关静默省略这些零值以使用供应商默认值的调用方,需要改为省略字段。
  • 前端不再从 localStorage.user 恢复登录状态,升级后以 HttpOnly cookie session 为准,并默认每 30 秒重新确认一次;依赖读取该非公开 localStorage 项的自定义脚本需要调整。
  • 发布前必须执行 cd web/default && bun run build 生成最新嵌入资源,再重启 Go 进程;直接运行旧 dist 会缺少状态码映射、视频时间路径和会话校验修复。

Verification

  • 后端全量测试通过:go test -p 1 ./... -count=1 -timeout=120s;静态检查通过:go vet ./...。串行包执行用于隔离各包共享 SQLite 测试资源,避免测试进程并发争用。
  • JSON wrapper 规则检查通过:go run ./tools/jsonwrapcheck;本轮触及的 AWS/讯飞 JSON 调用已迁移到 common wrapper,其余历史调用仍由既有 allowlist 管理。
  • 前端类型检查与生产构建通过:cd web/default && bun run typecheckbun run build:check;Rsbuild 与 Tailwind 构建校验通过。
  • 前端全量 Bun 测试通过:118 项通过、0 项失败,覆盖 JsonEditor、session verifier、auth store、渠道表单 round trip、模型定价、渠道模型展示、删号流程及表达式计费模型切换后的价格刷新。
  • 本次涉及的前端文件定向 ESLint 通过;全仓 bun run lint 仍有本次范围外的 75 个 error 和 6 个 warning,主要是既有 React 19 Hooks 规则债务,因此不列为全量通过项。
  • 后端测试覆盖重复/并发结算、资金来源竞争、实际退款 delta、任务 quota CAS、跨订阅重置周期、身份/参数冲突、进程重启恢复、Token 删除退款、账单日志幂等、状态码映射与任务重试语义。
  • 本稿补充范围的后端定向测试通过:controllermiddlewaremodeldtosetting/config、计费/任务费率设置,以及 OpenAI、AWS、Baidu、Cohere、Ollama、PaLM、Ali、Hailuo、Jimeng、讯飞和智谱渠道包均以 -count=1 通过。
  • 本轮新增范围另行通过 controllermodelservicerelay/helper、OpenAI、Replicate 和 Sora 包测试,覆盖 Stripe webhook 重试/幂等、订阅分组回落、渠道排除与轮询并发、multipart 文件名编码、图片内容识别、Anthropic 空列表、元数据唯一键迁移、供应商引用保护、上游同步错误和 Option 边界。
  • 当前工作树的 go vet ./...go run ./tools/jsonwrapcheck 通过。
  • AWS context/Nova、讯飞握手与业务错误、Vertex 配置、Midjourney 签名 URL、删号验证 scope、价格有限值、Cookie Secure 推导和日志 receipt claim 均有聚焦回归测试。
  • .test 已同步 173 个测试源和 2 个 workflow 文件,sync-tests.ps1 -Mode Check 通过。
  • git diff --check 通过,未发现新增尾随空白或补丁格式错误。
  • 本轮未连接独立 MySQL/PostgreSQL 实例执行迁移/事务矩阵,也未运行真实 Redis 故障、多实例集成、浏览器 E2E 或外部渠道 canary;正式发布前仍需补齐这些环境级验证。

Full Changelog: v1.0.5-preview.2...v1.0.5-preview.3