共享记忆补记本轮 3D 收口的三条决策与一条踩坑

- decision-log:视图输入显式化并改按文档 view-key 形态发出、派生来源取自请求 source、失败态提交开新一代
- pitfalls:失败态沿用同一尝试代次会让主按钮只是重现同一次失败,以及新增提交入口时的判断口径
This commit is contained in:
2026-09-23 18:59:54 +08:00
parent f198b7a6d0
commit 5ee9a1e2e2
2 changed files with 18 additions and 0 deletions
@@ -6025,3 +6025,12 @@ Cocos Creator 根目录由 `package.json.creator.version` 与普通 `assets/`
- **易错点**:① 改定价内部结构时,先确认公开读模型的形状有没有被顺手带出去,测试要直接断言公开路由的字段名;② 「两段可以独立定价」不等于「两段可以随便不同」,加价项差异会先影响画布预估价。
- **验证**:`app::tests::public_editor_generation_pricing_route_returns_default_config`(断言 `model3d.basePrices` / `model3d.addOnPrices` 与内部 `textToModelPricing` 不出现);`tripo3d::pricing` 与 `editor_generation_model3d_records` 的定向用例。
- **关联**:`docs/adr/【ADR】0005-3D生成定价迁入SpacetimeDB与后台编辑-2026-09-23.md`。
## 2026-09-23 失败态沿用同一个 3D 尝试代次,主按钮点下去只是重现同一次失败
- **现象**:3D 生成失败后,用户不改任何参数直接点「生成 3D 模型」,界面没有任何新的尝试,拿回来的还是原来那个失败操作。
- **成因**:幂等键 = 尝试代次(`model3dAttemptNonce`)+ 请求内容指纹,服务端按「键 + payload 指纹」dedupe。参数一改本来就会换代号次(`applyModel3dPromptChange` / `applyModel3dTierChange` / `applyModel3dSwitchChange`),但「什么都不改再点一次」既不换代次也不改内容,于是命中同一次已终态的 operation。
- **处理(现行口径)**:失败态下的任何提交入口都先 `refreshModel3dAttemptNonce` 再提交(主按钮与「重试」共用同一份重置后的 dialog)。幂等键的用途是把重复点击折成同一次请求,不是把已失败的尝试永久锁死。
- **易错点**:① 新增提交入口时要问「这次提交属于新的一代还是同一次尝试」,只看 `canSubmit`(价格 / 输入 / 上传中)挡不住这一类;② 别把失败态的主按钮改成禁用就算修好——参数改过再点主按钮是用户的自然路径,禁用会把这条路堵上。
- **验证**:`src/components/image-editor/model3d-generation/Model3dGenerationModal.test.tsx` 的「失败态下主按钮也开新一代」与「失败后展示原因与重试」两条用例;`Model3dGenerationFormModel.test.ts` 钉住参数改动换代次。
- **关联**:`src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts`(`resolveModel3dRequestKey`)。