diff --git a/docs/api-contract-v1.md b/docs/api-contract-v1.md index fbd6ff5..e67a21a 100644 --- a/docs/api-contract-v1.md +++ b/docs/api-contract-v1.md @@ -176,14 +176,21 @@ > **designData 结构遵循 `wechat_wc/docs/design-data-contract-v1.md`(R2/R4 冻结契约)。** > 该契约保证 R4 下单后能据此构造 `.wcd` 投递到词云平台。要点: -> 贴纸图 `src` 必须为 COS 持久 URL(禁止 `wxfile://`/`tmp`)、保留 `wordcloud` 分组、 -> 保留 `category.mask`;后端该 JSON 白名单须放行 `version/background/wordcloud/rotation/zIndex`。 +> 贴纸图 `src` 在**派单前**必须为 COS 持久 URL;R2 保存/更新清单时允许暂存 +> `wxfile://`/`tmp` 本地路径,由 R4 在下单/派单前上传 COS 并回写 +> (design-data-contract-v1.md 约束#1、决策#4,2026-08-12 冻结); +> 保留 `wordcloud` 分组、保留 `category.mask`;后端该 JSON 白名单须放行 +> `version/background/wordcloud/rotation/zIndex`。 >`items` 为服务端 JSON,需做结构白名单与大小校验(单条 ≤ 1MB)。 > > **实现补充(R2,非契约变更)**:服务端 JSON body 传输上限为 **2MB**(`main.ts`,Nest 默认 100KB > 会使 1MB 业务限制不可达)。三层边界:≤1MB 正常受理;1MB~2MB 由 design-list service 返回 > 400「单条设计数据超过 1MB 上限」;>2MB 返回 413「请求体过大」。文件上传(R4 multipart) > 不走此限制,沿用各模块独立校验(如底图 ≤10MB)。 +> +> **实现补充(DIY 修正,非契约变更)**:`stickers[].width/height` 语义为「画布显示像素」 +> (画布坐标空间 = `category.mask` 尺寸),渲染、碰撞检测、WCD 打包三方按同一语义消费; +> 历史数据中的原始像素值由读取端按 mask 归一化兼容。详见 design-data-contract-v1.md 注记。 ### PATCH /api/design-list/:id