Files
TrueGrowth/openspec/changes/archive/2026-04-29-add-cache-failure-download-badges/design.md

2.7 KiB
Raw Blame History

Context

部分远程媒体 URL 可直接展示,但不允许前端读取响应体,或在缓存流程中因网络、响应类型、浏览器策略等原因失败。此时浏览器 Cache Storage / IndexedDB 无法保存稳定副本,只能继续依赖原始远程链接;如果链接带签名有效期,用户之后可能无法再次访问。

现有项目已有统一缓存服务、任务队列、素材库下载能力和 HoverTip 组件。本次需求重点是把“缓存失败且链接可能过期”显性化,而不是按模型或供应商做特殊分支。

Goals

  • 用户能在素材库和任务队列快速识别需要尽快下载的素材
  • hover 能解释“未能缓存到浏览器、原始链接可能过期”
  • 提示逻辑与模型无关,只取决于缓存结果和缓存状态
  • 不阻塞列表渲染,不批量发起跨域探测请求
  • 与现有下载按钮、素材保存、缓存状态兼容

Non-Goals

  • 不绕过 CORS、签名 URL 或浏览器缓存限制
  • 不新增后端转存/代理下载服务
  • 不按模型名、供应商名、URL 域名硬编码判断是否提示
  • 不保证所有历史素材都能精确判断链接有效期
  • 不改变任务生成与下载主流程

Decision

采用“缓存结果驱动”的设计:

  1. 数据状态
  • 新增可选 cacheWarning 元数据,挂在 TaskResultAssetStoredAsset 等媒体结果上
  • 字段只保存短文本和枚举,例如 reasonCodemessagedetectedAtexpiresHint
  • 缓存服务在明确失败时生成标准化失败结果,由任务和素材保存流程透传
  1. UI 展示
  • 素材库卡片显示黄色角标,例如“需下载”
  • 任务队列完成态媒体结果显示同类角标
  • HoverTip 文案统一:资源未能缓存到浏览器,原始链接可能过期,请尽快下载保存;并展示具体缓存失败原因
  1. 判断边界
  • 只在已有缓存流程返回失败、缓存状态为错误、或媒体对象已携带 cacheWarning 时展示角标
  • 已缓存成功的媒体优先以成功状态为准,不展示缓存失败提示
  • 对没有缓存尝试记录的历史远程资源,不凭模型名或供应商名推断失败,避免误报

Risks

  • 历史资源如果没有缓存失败记录,可能不会显示提示
  • 需要确保缓存失败原因能从缓存服务可靠透传到任务和素材
  • 若角标过多可能干扰卡片视觉,需要沿用现有 badge 层级和 HoverTip

Verification

  • 模拟缓存失败的图片任务任务队列应显示角标hover 说明原因
  • 保存该结果到素材库:素材卡片应保留角标
  • 已缓存成功的素材:不应显示缓存失败角标
  • 未进行缓存或没有失败记录的历史资源:不应仅凭模型名显示角标