# 资产历史接口补齐拼图封面素材类型 日期:`2026-04-27` ## 背景 拼图结果页会通过 `/api/assets/history?kind=puzzle_cover_image` 读取历史封面素材,供“生成或更换图片”面板复用旧图。 该链路与角色主视觉、场景图共用同一资产历史接口,因此后端白名单一旦漏掉 `puzzle_cover_image`,前端就会收到 `400 Bad Request`,表现为拼图封面历史素材列表无法打开。 ## 本次口径 1. `server-rs/crates/api-server/src/assets.rs` 中的历史素材类型白名单统一收口为单一常量源。 2. HTTP 层错误文案与实际支持列表由同一函数生成,避免后续再出现“校验改了但提示文案还是旧口径”的漂移。 3. 增加 `puzzle_cover_image` 的回归测试,确保拼图封面素材不会再次被历史接口遗漏。 4. `ownerLabel` 只表示资产归属账号,不是历史图片标题;前端历史素材卡片标题必须从 `imageSrc` 的路径末尾推导,例如 `/generated-puzzle-assets/history/image.png` 展示为 `image.png`。 5. `createdAt / updatedAt` 可能来自 SpacetimeDB / shared-kernel 的秒级字符串,例如 `1713686400.000000Z`,前端不得只用 `new Date(value)` 解析后把它显示成未知时间。 6. 历史素材选中后仍把 `imageSrc` 作为 `referenceImageSrc` 传给生成链路;创作页和关卡详情页的预览必须通过 `ResolvedAssetImage` 换签展示,不直接请求裸 `/generated-*` 路径。 ## 后续约束 1. 新增历史素材类型时,必须同时更新: - `api-server` 的 `SUPPORTED_ASSET_HISTORY_KINDS` - `spacetime-module` 的历史素材白名单 - 对应前端调用常量与测试 2. 如果运行态仍返回旧白名单错误,优先检查本地 `api-server.exe` 是否已按最新源码重新编译并重启,而不是先回退前端类型参数。 3. 历史素材列表的 UI 回归测试应覆盖: - 卡片标题不使用 `账号 user-1` 这类归属文案。 - `1713686400.000000Z` 能显示为可读生成时间。 - 选中素材后工作台 / 关卡详情展示 `历史素材 · image.png`,并继续提交原始 `imageSrc`。