3D 定价后台可编辑补齐实现状态、验收证据与踩坑记录
- 主规范补公开读模型投影口径、覆盖文件缺段补齐、旧形状覆盖文件的发布前置门禁与加价项一致性约束 - 实施计划补实现状态表、逐条判据的验收证据与真实环境待验收项;里程碑标记已实现待验收 - 后端架构文档补 upsert input 的期望版本与事务内 CAS 语义 - pitfalls 补「省略即沿用会静默覆盖」与「公开读模型形状不能跟着存储形状走」两条 - decision-log 补实现期的四个口径:公开投影取文生加价项、CAS 复用 updated_at、覆盖文件缺段按默认补齐、旧形状不兼容改发布门禁
This commit is contained in:
@@ -54,6 +54,37 @@ Milestone Spec: `docs/project-memory/plans/【里程碑】3D生成定价后台
|
||||
- 同步主规范、表目录、`CONTEXT.md`、ADR 0005 的实现状态,必要时补 `pitfalls.md`(例如「不要把省略即沿用重新引入」)。
|
||||
- 手工验收:后台改 3D 价 → 不重启 → 画布 3D 面板价格随之变化;重启后仍是保存值。
|
||||
|
||||
## 实现状态(2026-09-23 完成)
|
||||
|
||||
| 步骤 | 状态 | 提交 / 落点 |
|
||||
| --- | --- | --- |
|
||||
| 1 schema 两列 | 完成 | `774b74d3d`;module 表尾部追加两列与展平行类型,绑定重新生成,`npm run check:spacetime-schema` 通过 |
|
||||
| 2 定价类型与默认文件 | 完成 | `9f4a71d2e`;`Model3dPricingConfig` 两段并列 + `Model3dEndpointPricing`,默认 JSON 同步 |
|
||||
| 3 记录转换与归一化 | 完成 | `5e47f0c41`、`952bc1cca`;新增 `editor_generation_model3d_records` 深模块,覆盖文件降级为种子与兜底 |
|
||||
| 4 后台契约 | 完成 | `ee4a9434f`;GET 带版本、POST 两段必填 + 事务内 CAS → 409,退役 `with_previous_model3d` |
|
||||
| 5 admin-web 3D 区块 | 完成 | `c901f6954`;`AdminEditorGenerationModel3dPricingSection` + `adminEditorGenerationPricing` 纯模块 |
|
||||
| 6 文档与验收 | 完成 | 本文件、主规范、ADR 0005、`pitfalls.md`、`decision-log.md` |
|
||||
|
||||
补充落点(不在原步骤内,但为达成验收标准所必需):
|
||||
|
||||
- `ebd904e19` 公开读模型投影:新增 `Model3dPricingPublicView`,`GET /api/editor/generation-pricing` 的 3D 段保持旧形状;加价项取文生段,两段不一致时告警。
|
||||
- 公开投影与前端零兜底口径一起构成「内部两段 / 公开单表」的短期不一致,前端升级前不要差异化加价项,见主规范「旧形状覆盖文件的处理」。
|
||||
|
||||
## 验收证据
|
||||
|
||||
| 判据 | 证据 |
|
||||
| --- | --- |
|
||||
| 1 后台 GET 带版本、公开 GET 形状不变 | `cargo test -p api-server app::tests::admin_editor_generation_pricing_route_saves_config_and_updates_public_route`、`app::tests::public_editor_generation_pricing_route_returns_default_config` |
|
||||
| 2 缺段 400 / 版本不匹配 409 且不落库 | `app::tests::admin_editor_generation_pricing_route_rejects_missing_model3d_section`、`..._rejects_stale_version`、`state::tests::saving_pricing_with_stale_version_is_rejected` |
|
||||
| 3 保存后公开路由立即返回新价 | 同上第一条用例在保存后重读公开路由断言新价 |
|
||||
| 4 缺键补齐、契约外键剔除告警 | `editor_generation_model3d_records::tests::{missing_keys_and_missing_sections_are_backfilled_from_local_config,out_of_contract_keys_are_dropped,missing_key_without_local_value_fails_closed,half_configured_sections_are_rejected,duplicate_keys_are_rejected,writing_requires_the_complete_contract_key_set}` |
|
||||
| 5 覆盖文件兜底与缺段补齐 | `editor_generation_config::tests::editor_generation_pricing_legacy_override_backfills_missing_model3d_section`、`..._default_path_falls_back_to_legacy_override_seed` |
|
||||
| 6 未配置仍 fail closed | `editor_generation_config::tests::editor_generation_pricing_fails_closed_when_model3d_section_is_absent` |
|
||||
| 7 admin-web 3D 区块渲染 / 校验 / 409 | `npx vitest run apps/admin-web`(210 passed):`AdminEditorGenerationPricingPage.test.tsx`、`adminEditorGenerationPricing.test.ts` |
|
||||
| 8 门禁 | `cargo test --locked -p api-server`(1183 passed,另有一条与本改动无关的时序敏感用例在整包并行下偶发失败、单跑通过)、`cargo test --locked -p spacetime-module editor_generation`、`npm run check:spacetime-schema`、`npm run check:encoding`、`node scripts/check-doc-index.mjs`、`git diff --check` |
|
||||
|
||||
尚未执行(需真实环境):手工验收「后台改 3D 价 → 不重启 → 画布 3D 面板价随之变化 → 重启后仍是保存值」;需要在发布 Stdb 模块与 API 后按开发运维文档执行。
|
||||
|
||||
## 验证命令
|
||||
|
||||
```bash
|
||||
@@ -73,5 +104,6 @@ git diff --check
|
||||
- **归一化补齐的数值来源**:缺键用默认 JSON / 覆盖文件同段值补齐,若现网运营价与默认值不同,升级瞬间会把表内缺失键补成默认价。上线前先核对现网两段价格;必要时把现网值写进覆盖文件作为种子来源,再执行升级。
|
||||
- **覆盖文件的旧形状 3D 段**:处理策略见主规范「未决问题」,确认前不进入实现。
|
||||
- **发布顺序**:必须先发 Stdb 模块再发 API;API 先发时会因记录形状不匹配而报错。Web 面板可以晚于 API 发布。
|
||||
- **旧形状覆盖文件是发布前置门禁**:覆盖文件里若还留着 `model3d.basePrices`,升级后的 API 会在启动读取阶段解析失败。升级前先确认该文件不含 `model3d.basePrices`(缺整段是安全的,会按受控默认价补齐),见主规范「旧形状覆盖文件的处理」。
|
||||
- **回滚点 1(未发布)**:仅回滚代码,两列是纯追加且带默认值,不影响旧行为。
|
||||
- **回滚点 2(已发布 API)**:必须同时回滚 Stdb 与 API(旧 API 会把 3D 权威退回文件),回滚窗口内不要在后台改 3D 价;回滚后重新保存一次定价以确认两段仍在。
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 3D 生成定价后台可编辑
|
||||
|
||||
Version: 1.0
|
||||
Status: active
|
||||
Status: 已实现,待真实环境手工验收与发布
|
||||
Date: 2026-09-23
|
||||
Parent Spec: `docs/【编辑器】模型定价配置管理方案-2026-06-22.md`
|
||||
Implementation Plan: `docs/project-memory/plans/【实施计划】3D生成定价后台可编辑-2026-09-23.md`
|
||||
@@ -38,6 +38,12 @@ Related: `docs/adr/【ADR】0005-3D生成定价迁入SpacetimeDB与后台编辑-
|
||||
7. admin-web 3D 区块渲染两个端点各 5 行 × 2 档价与 6 个加价项;存在 0 或空值时禁用保存并给出中文提示;收到 409 时提示重新读取。
|
||||
8. `npm run check:spacetime-schema`、`npm run check:encoding`、`cargo test --locked -p api-server` 定向用例、admin-web 定向 vitest、`node scripts/check-doc-index.mjs`、`git diff --check` 全部通过。
|
||||
|
||||
## 实现与验收记录(2026-09-23)
|
||||
|
||||
- 步骤与提交、逐条判据的证据表见 [`【实施计划】3D生成定价后台可编辑-2026-09-23.md`](./【实施计划】3D生成定价后台可编辑-2026-09-23.md)。
|
||||
- 验收标准 1–7 已有自动化用例覆盖;标准 8 的本地门禁全部通过。
|
||||
- 待办:真实环境手工验收(后台改 3D 价 → 不重启 → 画布 3D 面板价变化 → 重启后仍是保存值)与按 Stdb → API → Web 顺序发布。
|
||||
|
||||
## 依赖
|
||||
|
||||
- 画布 3D 入口已上线,价格只读公开定价查询(ADR 0004),本期不改其契约。
|
||||
|
||||
Reference in New Issue
Block a user