3D 落点与结果引用对齐其它生成工具的文档同步
- 技术方案:落点改为「至少一个、两个可同给」,补上归一在预检之前完成并写回请求(预检值 = 队列载荷 = 落库值);完成结果读取补上双落点与平坦引用的说明。 - 技术方案素材库一节改为「素材库行已接 model3d 分支(预览图渲染 + 拖入画布)」,后台 renderer / 精选 read model / 公开 grant 仍未接。 - 里程碑与实施计划(API 契约、前端入口、结果前端预览)同步新口径:两个落点同给合法、前端同时发 projectId + assetFolderId + assetLabel、素材库行已进入。 - 共享记忆 decision-log 追加本次决策(原因、代价、影响面、验证方式),并在旧的「二选一」条目上标注 2026-09-23 追加修正。 - 验证:node scripts/check-doc-index.mjs(221 份 Markdown 通过)、npm run check:encoding、git diff --check 通过。
This commit is contained in:
@@ -9393,6 +9393,7 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
|
||||
- 影响面:`server-rs/crates/shared-contracts/src/model3d/{text_to_model/request.rs,image_to_model/request.rs,common/mod.rs}`(删除 `common/generation_target.rs`)、`server-rs/crates/api-server/src/tripo3d/{job.rs,validation.rs,target.rs,routes.rs,worker.rs}`、`server-rs/crates/api-server/src/editor_project.rs`(删除 Standard 的 `result` 透传)、`packages/shared/src/contracts/model3d/`(删除 `common/Model3dGenerationTarget.ts` 与 barrel 导出)、`src/components/image-editor/model3d-generation/{Model3dGenerationSubmission.ts,useModel3dGenerationTask.test.tsx}`、`src/services/image-editor/editorProjectClient.ts`、技术方案 / 里程碑 / 实施计划与共享记忆。
|
||||
- 验证方式:`cargo test -p shared-contracts`、`cargo test -p api-server`(1193 passed)、`cargo test -p api-server tripo3d::`(55 passed,含 `target_requires_exactly_one_flat_locator`、`flat_locator_maps_to_point_lookup_without_rewriting_ids` 与 `flat_target_is_normalized_before_enqueue`)、`npx vitest run src/components/image-editor/model3d-generation src/components/image-editor/model3d-preview`(63 passed)、`npm run typecheck`、`npm run contracts:model3d:generate`、`npm run check:encoding`、`npm run check:rustfmt`、`git diff --check`。
|
||||
- 关联文档:[技术方案 Tripo 3D生成API集成](../../technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md)、[实施计划 Tripo生成API契约与数据模型](../plans/【实施计划】Tripo生成API契约与数据模型-2026-09-21.md)。
|
||||
- 2026-09-23 追加修正:本条里的「恰好一个落点」「二选一不变」已被同日后续决策推翻——服务端改为「至少一个落点、两个可同给」,结果引用也一并改平坦;见下文「3D 落点对齐其它生成工具」。
|
||||
|
||||
## 2026-09-23 图生 3D 的图片输入失败语义:只收敛「引用不可用」,缺对象键改判 502
|
||||
|
||||
@@ -9413,3 +9414,13 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
|
||||
- 影响面:`server-rs/crates/api-server/src/tripo3d/storage.rs`(新增 `sniff_preview_content_type`、`resolve_artifact_content_type` 改为按槽位判定、定向用例重写为「字节优先 / 未知回落」两组)、[技术方案 Tripo 3D生成API集成](../../technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md)。
|
||||
- 验证方式:`cargo test --locked -p api-server tripo3d::`(56 passed,含 `preview_content_type_follows_bytes_over_declaration` 与 `preview_content_type_keeps_declaration_when_bytes_are_unknown`)、`rustfmt --check`、`npm run check:encoding`、`node scripts/check-doc-index.mjs`。
|
||||
- 关联文档:[技术方案 Tripo 3D生成API集成](../../technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md)、[实施计划 Tripo生成API契约与数据模型](../plans/【实施计划】Tripo生成API契约与数据模型-2026-09-21.md)。
|
||||
|
||||
## 2026-09-23 3D 落点对齐其它生成工具:双落点同给、结果引用改平坦、素材库行接 3D 消费
|
||||
|
||||
- 背景:G5 复核(对照图片 / 图标 / 音效 / 角色动作等所有画布生成工具的前后端)发现 3D 仍有三处自成一派:① 服务端要求「`projectId` 与 `assetFolderId` 恰好一个」,而其它工具两个都能给,且前端画布链路**始终**同时发 `projectId` + `assetFolderId`(当前素材夹) + `assetLabel`,落库时项目资源行与素材行两条都写;② 3D 前端提交只发 `projectId`,于是 3D 结果永远不进素材库,同一张画布上的其它生成工具却都会进;③ 结果里的落点引用还是 tagged enum(`{ kind: "projectResource" | "assetLibrary" }`),与请求侧的平坦落点形状不一致;素材库行也没有 `model3d` 分支,一旦真落了素材行,缩略图会拿 `objectKey`(模型 `.glb`)去换签名地址。
|
||||
- 决策:① 服务端校验放宽为「至少一个落点」:两个都不给 400 点名 `projectId`,`canvasCompletion` 与「没有 `projectId`」同现 400 点名 `canvasCompletion`,两个都给合法;预检对给出的每个落点逐个定点查,出错时字段名只在「只给一个」时点名该字段,两个都给无法归因就回落到 `target`。② `Model3dGenerationTargetRef` 从 tagged enum 改成与请求落点同形的平坦可选字段 `resourceId?` / `assetId?`:哪个落点写了行就带哪个 ID,两个都写就都带。③ 前端 `buildModel3dSubmissionPlan` 接收当前素材夹与素材名,与其它工具一样同时发 `projectId` + `assetFolderId` + `assetLabel`(缺省名回落本次结果标题),`useModel3dGenerationTask` 从画布生成链路拿到 `assetFolderId`;结果消费沿用既有画布路径(`applyGeneratedProjectSnapshot` 顺带刷新素材库),不再需要 3D 专用刷新。④ 素材库行加 `model3d` 分支:缩略图按预览图(`asset.src`)渲染,`objectKey`(模型本体)不参与图片签名,与画布 3D 卡片的 `objectKey={null}` 口径一致。
|
||||
- 原因:**同一件事在各工具间必须同形**——落点是「结果放哪儿」的同一语义,3D 没有理由单独要求二选一;其它工具「画布 + 素材库同时落」既是现状也是用户预期(同一画布上的产出应当都能在素材库里找到)。结果引用跟着请求形状走,消费方不需要为同一个概念准备两套类型。素材库行的隐患属于「不接就永远发现不了」的类型:后端投影已经把 `imageSrc` 指向预览、`objectKey` 指向模型本体(`project_editor_client_media_src`),前端再拿 `objectKey` 签名就会去加载 `.glb`。
|
||||
- 代价与取舍:3D 现在会像其它画布工具一样,每次都往素材库写一条素材行(落点是当前素材夹,默认 `project` → owner 默认素材夹),素材库体积与写入量随 3D 使用增加,这是与其它工具一致的既有代价。素材库行只做预览图渲染与拖入画布,行内不开 3D 查看器,要看模型仍需拖到画布后点「3D 预览」。3D **仍要求 `projectId`**(画布链路必须已保存工程,否则提示「请先保存当前画布工程」),这一点与「`projectId` 可空、只落素材库」的其它工具仍有差异,属于有意保留:3D 入口只在有画布的编辑器里,没有画布就没有 3D 查看入口。本分支未合并,无外部调用方,结果引用形状变化不需要兼容层。
|
||||
- 影响面:`server-rs/crates/shared-contracts/src/model3d/common/generation_target_ref.rs`(tagged enum → 平坦结构,`packages/shared/src/contracts/model3d/common/Model3dGenerationTargetRef.ts` 随之变宽)、`server-rs/crates/api-server/src/tripo3d/{validation.rs,target.rs,job.rs,worker.rs}`、`server-rs/crates/shared-contracts/tests/model3d_api_request_contract.rs`、`src/components/image-editor/model3d-generation/{Model3dGenerationSubmission.ts,useModel3dGenerationTask.ts}`、`src/components/image-editor/useImageCanvasGenerationSubmissionWorkflow.ts`、`src/components/image-editor/ImageCanvasAssetRowView.tsx`、技术方案 / 里程碑 / 实施计划三份 3D 文档与共享记忆。
|
||||
- 验证方式:`cargo test -p api-server tripo3d::`(56 passed,含 `target_accepts_both_locators_but_requires_at_least_one`、`flat_locator_maps_to_point_lookup_without_rewriting_ids`、`unavailable_field_names_the_given_locators`、`completed_result_is_strict_per_endpoint_and_free_of_provider_facts`)、`cargo test -p shared-contracts`、`npm run contracts:model3d:generate`、`npx vitest run src/components/image-editor/model3d-generation src/components/image-editor/ImageCanvasAssetRowView.test.tsx`(67 passed)、`npm run typecheck`、`npm run check:encoding`、`npm run check:rustfmt`、`node scripts/check-doc-index.mjs`、`git diff --check`。
|
||||
- 关联文档:[技术方案 Tripo 3D生成API集成](../../technical/【技术方案】Tripo 3D生成API集成-2026-09-21.md)、[里程碑 Tripo生成API契约与数据模型](../plans/【里程碑】Tripo生成API契约与数据模型-2026-09-21.md)、[实施计划 Tripo生成前端入口](../plans/【实施计划】Tripo生成前端入口-2026-09-21.md)、[实施计划 Tripo生成结果前端预览接入](../plans/【实施计划】Tripo生成结果前端预览接入-2026-09-21.md)。
|
||||
|
||||
Reference in New Issue
Block a user