写入Tripo 3D泥点默认价并锁定credit换算口径

- 受控默认配置新增 model3d 段:底价按端点 × 模型版本 × 是否有贴图,add-on 六项独立计价

- 换算口径固定为泥点 = ceil(0.8 × Tripo 官方 credit),H 系列 10/20 与 20/30、P1 30/40 与 40/50、P2 100/110

- editor_generation_config 定向用例按 credit 表反算默认泥点价,改价必须先改 credit 表

- 段缺失语义改为显式摘段验证,仍保持 fail closed 不扣费不入队

- 主规范、里程碑、实施计划与定价管理方案同步默认价已确认与部署侧 override 风险
This commit is contained in:
2026-09-21 22:07:55 +08:00
parent 2691ca8aca
commit 9fc55a5cac
6 changed files with 166 additions and 13 deletions
@@ -73,7 +73,7 @@ Milestone Spec: `docs/project-memory/plans/【里程碑】Tripo生成Worker执
- 图片输入在提交时已补元数据预检(`tripo3d::image_source::preflight_image_source`):按 `source.kind` 分支配对记录类型并复用既有定点引用查询 `resolve_editor_reference_record_by_id_for_owner`,取代原先“列工程 / 列素材库再筛”的宽查询;跨 owner、未登记、已删除与 `kind` 不符都在扣费与入队前返回 400,worker 执行时再重新确认同一事实。
- 提交路由已补应用级验收用例:走真实 `build_router` 断言两个端点未鉴权 401、缺 `Idempotency-Key` 400、组合校验与定价必填字段冲突在定价与 provider 之前 400,因此路由 merge、鉴权中间件与校验顺序都有可执行证据,不依赖 provider 与 SpacetimeDB 环境。
- 默认配置里的 `model3d` 泥点定价数值仍未确认,缺段时提交按 fail closed 拒绝。
- `model3d` 泥点定价已写入受控默认配置:换算口径 `ceil(0.8 × Tripo 官方 credit)`H 系列文生 `10 / 20`、图生 `20 / 30`P1 文生 `30 / 40`、图生 `40 / 50`P2 两端均 `100 / 110`add-on 六项按同一系数换算;`editor_generation_config` 的定向用例按 credit 表反算默认价,段缺失仍按 fail closed 拒绝。
- worker 的纯逻辑部分已补定向用例:checkpoint 只在 provider task id 非空时才算存在、完成结果按端点严格区分且不含 provider 事实、预览图尺寸必须能真实解码;全量 `cargo test -p api-server` 1092 通过。
- `npm run check:spacetime-schema` 通过(144 张表,锚点 `6f161a6b3626588a197208ea6dd68316815c01b5`),`external_generation_job` 的 provider checkpoint 追加字段没有破坏 schema guard。
- TS 绑定仍是 `npm run contracts:model3d:generate` 目录化生成:重跑后 `packages/shared` 无 diff`packages/shared/src/contracts/model3d/``contracts/editor-canvas/` 与 Rust 契约一致,没有手写 TS。
@@ -93,7 +93,7 @@ git diff --check
## 风险与回退
- **真实扣费**定价数值未写入前 `model3d` 段缺失,提交 fail closed;接口开放前必须先完成定价配置
- **真实扣费**默认价已按 `ceil(0.8 × credit)` 写入并随代码发布,部署侧若用 override 文件覆盖定价,必须确保 override 里保留完整的 `model3d` 段,否则该段整体缺失会让 3D 提交 fail closed
- **provider 长任务**:单次 attempt 内轮询依赖 lease 续租与长任务超时;超时按现有语义收口为失败并退款。
- **共用 worker 分支**:新分支只消费自己的 job kind,不改既有分支的入队与写回路径。
- **worker 占用**3D 任务在单次 attempt 内阻塞轮询数分钟,会占住一个 worker 并发位;默认并发为 2,接入真实流量前需要确认并发与 `external_generation_worker_long_job_timeout` 是否够用。
@@ -33,4 +33,4 @@ Implementation Plan: `docs/project-memory/plans/【实施计划】Tripo生成Wor
## 依赖
- `docs/project-memory/plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md` 验收通过。
- 生产泥点定价数值已确认并写入默认配置。
- 生产泥点定价数值已确认并写入默认配置:换算口径为 `ceil(0.8 × Tripo 官方 credit)`,已落到 `editor-generation-pricing.default.json``model3d`