k88936
|
ed2eb43fe6
|
补 3D 生成选项校验的表驱动单测
- 覆盖最简选项全模型放行、fast 必须配 v3.5 贴图版本
- 覆盖 generate_parts 的 texture/pbr/quad/smart_low_poly 互斥组合
- 覆盖 quad 家族限制与各模式 face_limit 的 min-1/min/max/max+1 边界
- 覆盖空白 task id 按 OutputSchema 失败与 trim 行为
|
2026-09-22 16:50:06 +08:00 |
|
k88936
|
62bf602fb1
|
多视图请求 DTO 补齐字段级说明并重生成绑定
- Model3dMultiviewToModelRequest 每个字段补一行中文语义说明与取值范围
- 结构体补严格反序列化与组合校验归属的说明
- 重新生成 ts-rs TS 绑定,注释同步进 Model3dMultiviewToModelRequest.ts
|
2026-09-22 16:48:57 +08:00 |
|
k88936
|
2348315dba
|
3D 结果打标契约测试补齐 preview 与 imageToModel 分支
- textToModel 用例补 preview 产物的相等断言
- 新增对称的 imageToModel 用例,守住 tag 路由与分支字段
- 裸字符串 source 的负例改为点名 Model3dGenerationSource 并单独反序列化 source 值
|
2026-09-22 16:46:19 +08:00 |
|
k88936
|
bba96e18a1
|
队列状态映射改为借用记录避免提交路径整行克隆
- editor_generation_queue_state 收 &ExternalGenerationJobRecord,只克隆输出需要的三个字段
- Model3dSubmissionResponse::from_job 不再克隆整行 job,status_url 提前算好避免额外克隆
- 其余调用点改为传引用,行为不变
|
2026-09-22 16:44:47 +08:00 |
|
k88936
|
433ffb4a15
|
落库的模型版本改用严格 wire 取值
- Model3dJobRequest::model_version 改为返回 Result 并使用 wire_str
- worker 落库前取不到契约取值即按服务端问题失败,不再写 Debug 兜底名
- 新增用例断言落库取值为契约线上值 v3.1-20260211
|
2026-09-22 16:40:48 +08:00 |
|
k88936
|
4e5ff179b2
|
3D 查价拒绝 texture=false 与贴图加价项的矛盾组合
- Model3dPricingError 新增 InconsistentTextureAddOn 变体与对应文案
- price() 在命中的 add-on 含贴图类而 texture=false 时失败关闭,不再照价收费
- 补齐矛盾组合报错与 texture=true 合法组合的价格用例
|
2026-09-22 16:38:24 +08:00 |
|
k88936
|
87ca86ae6a
|
图片输入解析抽出可注入查询的解析规则并补齐行为用例
- resolve_source_object_key 拆出 resolve_source_object_key_with 与 ResolvedReference 窄结果
- 新增按 ID 定点查询、类型不符、缺对象键、4xx 收敛与基础设施错误保留状态码的用例
- 源码文本断言不再按函数签名切片,只检查本模块不出现列工程 / 列素材库
|
2026-09-22 16:36:16 +08:00 |
|
k88936
|
48cde9624c
|
operation_kind 白名单改为两 crate 共用的共享常量
- 白名单常量迁到 shared-contracts 并从 crate 根导出
- spacetime-module 的原子落库事务改为引用该常量,删除本地重复定义
- api-server 的登记测试不再解析对方源码文本,改为直接断言常量内容
- 后端架构文档补上白名单常量的位置与共用口径
|
2026-09-22 16:30:28 +08:00 |
|
k88936
|
e359158ecf
|
校验文案的版本标签改为从契约枚举推导
- validate_generation_options 的错误文案改用 wire_str_lossy 取 serde 线上值
- v3.x 家族的模型标签收敛到 v3_model_labels 助手
- 契约改名后诊断文案随之更新,不再手写重复的版本字符串
|
2026-09-22 16:19:09 +08:00 |
|
k88936
|
bcac5a7c12
|
三个提交入口的生成选项映射收敛为单一字段清单
- common::validation 用 tripo_generation_options_from! 由一份字段清单派生三个 From 实现
- multiview 手写的 TripoGenerationOptions 映射改为复用该 From 实现
- 新增共享字段时三条路径一起跟上,缺字段会在编译期报错
|
2026-09-22 16:15:38 +08:00 |
|
k88936
|
c8b4160fcd
|
3D 查价错误并入统一的定价错误枚举
- EditorGenerationPricingError 新增 Model3d 变体并实现 From<Model3dPricingError>
- model3d_price 改为返回 EditorGenerationPricingError,内层文案直通保持响应不变
- 提交路由对 3D 定价错误与定价快照错误分别映射,未配置用例改断言 Model3d(NotConfigured)
|
2026-09-22 16:11:17 +08:00 |
|
k88936
|
9800477c7c
|
模型版本清单从声明表派生避免漏加新版本
- Model3dModelVersion 的变体、线上值与 ALL 改为由 model3d_model_versions! 单一声明表生成
- ALL 类型改为 &'static [Self],新增版本只需在声明表加一行
- 定价校验与测试的遍历改用 iter().copied()
|
2026-09-22 16:03:55 +08:00 |
|
k88936
|
2e9aed3750
|
三个提交入口统一校验 provider 返回的 task id
- 新增 submitted_task_handle:空白 id 在提交调用附近以 OutputSchema 失败
- text / image / multiview 提交路径共用它,任务不再以孤儿状态等到下游查询才报错
|
2026-09-22 15:53:37 +08:00 |
|
k88936
|
09f0c51b81
|
空白视图规则收敛到单一助手
- 新增 view_input 同时服务提交前计数校验与 SDK 参数转换
- 空白 / 纯空白视图的判定不再有两份实现,避免校验与转换漂移
|
2026-09-22 15:49:34 +08:00 |
|
k88936
|
be07eb79c6
|
未知任务状态错误带上 task id
- map_status 接收 task_id,Unknown 分支改用与其它映射失败一致的 OutputSchema
- provider 异常可与具体任务对上,不再是一条无主错误
|
2026-09-22 15:47:01 +08:00 |
|
k88936
|
1749f427c1
|
任务快照只在失败终态保留 failure
- failure 改由终态判定驱动,不再只看 provider 是否留下错误字段
- 已完成的任务即使带过期错误字段也不再挂 failure,保持快照内部自洽
|
2026-09-22 15:45:45 +08:00 |
|
k88936
|
d9aa686e9a
|
Merge remote-tracking branch 'origin/master' into feat/tribo3d-integeration
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 1m36s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m11s
Project CI / Frontend tests (pull_request) Successful in 4m15s
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m36s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m33s
Project CI / Native shell tests (pull_request) Successful in 9m19s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m29s
# Conflicts:
# docs/project-memory/shared-memory/pitfalls.md
|
2026-09-22 15:35:47 +08:00 |
|
k88936
|
050909a0b7
|
后台定价保存不再清空 3D 段
- payload 的 model3d 缺席或为 null 统一表示沿用当前 3D 定价,显式给出时才覆盖
- 保存路径先取当前快照合并,避免改图 / 视频价格让 3D 提交一直失败关闭
- 补用例覆盖「省略保持」与「显式覆盖」两种语义
|
2026-09-22 15:27:19 +08:00 |
|
k88936
|
ee2d505eb3
|
3D 提交在扣费前预检落点归属
- 新增 target 预检模块:画布项目按 (project_id, owner) 定点确认,素材库文件夹按 owner 的库匹配
- 两个提交路由都在查价与入队之前调用;跨 owner / 不存在的落点回 400 model3d-target-unavailable
- 只剩基础设施故障保留原状态码,并补了收敛口径的单测
|
2026-09-22 15:21:25 +08:00 |
|
k88936
|
8473877bc3
|
5xx 错误响应不再回带 provider task id
- TaskFailure / OutputSchema / 上游兜底分支只回固定文案,完整错误写入服务端日志
- 补一条断言 502 details 不含 task id 与 provider 原文的用例
|
2026-09-22 15:17:50 +08:00 |
|
k88936
|
cda7724cae
|
上游瞬时状态不再回落成 400
- 408 / 425 / 429 与 platform-tripo 的 is_retryable 口径对齐,分别回 504 / 502 / 429
- 补上这三档与客户端 4xx 的分支测试
|
2026-09-22 15:15:27 +08:00 |
|
k88936
|
e18c6ee502
|
产物下载客户端不再跟随跳转
- 产物地址来自 provider 响应,禁止 reqwest 自动跳转以防 SSRF
- 需要跳转的地址会以非成功状态显式暴露,不再由服务端静默代发
|
2026-09-22 15:12:06 +08:00 |
|
lhk229
|
292e42cf5e
|
为全部 Rust 测试组启用隔离编译缓存
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Successful in 1m22s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m51s
Project CI / Backend tests (push) Successful in 5m35s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 7m8s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 8m11s
Project CI / Native shell tests (push) Successful in 7m6s
Project CI / Frontend tests (push) Successful in 3m30s
Project CI / Repository checks (push) Successful in 3m28s
Project CI / AI game creator shell web tests (push) Successful in 3m7s
扩展缓存消费到 AGC 双 lane、crates、smoke、后端及桌面壳测试
补齐各组实际编译目标和工作目录的可信快照预热
保留 SpacetimeDB 独立编译边界并排除发布构建缓存
根据完整快照体积将对象缓存上限调整为 4 GiB
更新工作流契约测试、运维文档及项目共享记忆
|
2026-09-22 05:52:16 +00:00 |
|
k88936
|
669a08c7c2
|
产物下载失败信息补上可诊断上下文
- 传输失败带上脱敏 URL 与底层错误 source 链
- 非成功状态补上状态码文案与脱敏 URL
|
2026-09-22 13:51:29 +08:00 |
|
k88936
|
01a9941cbc
|
任务快照映射不再多余克隆字符串
- task_id 与 error_message 直接移交所有权,只保留错误路径上的必要克隆
|
2026-09-22 13:51:23 +08:00 |
|
k88936
|
fd0a37969e
|
3D 产物落盘文件名补上安全处理
- URL 无可用扩展名时按 content type 兜底,预览图不再写成 .glb
- 文件名主干中性化路径分隔符与遍历片段,避免逃出目标目录
|
2026-09-22 13:50:29 +08:00 |
|
k88936
|
7dd7bdd3c7
|
provider checkpoint 存在性校验补上 provider_kind
- at-most-once submit 的两字段不变量在数据层一起判定
|
2026-09-22 13:50:24 +08:00 |
|
k88936
|
5049c27f3d
|
3D 定价表加载时拦截加总溢出
- 底价与加价项累加改用 checked_add 校验,配置阶段即失败
- 避免结算路径 saturating_add 在异常配置下静默少收
|
2026-09-22 13:49:01 +08:00 |
|
k88936
|
129e2234f3
|
删掉 3D 引用解析里两个无人调用的宽查函数
- 两个 pub(crate) resolver 全仓无调用方,且会整表列举项目与素材
- 定点解析仍走既有按 ID 的窄查函数
|
2026-09-22 13:48:53 +08:00 |
|
k88936
|
2916e112df
|
3D provider 重试次数按上限 10 封顶
- TRIPO_RETRIES 配置异常时不再让产物下载近乎无限重试
|
2026-09-22 13:48:13 +08:00 |
|
k88936
|
c5e0c6a14d
|
去掉被丢弃的 remove 返回值告警
- 幂等指纹字段摘除改为显式丢弃返回值,表明这是 best-effort 行为
|
2026-09-22 13:48:10 +08:00 |
|
k88936
|
e2809b83c0
|
3D 冒烟示例单端点失败不再中断其余端点
- wait_for_task / get_task / download_model 失败时记录该端点错误并继续
- 保留 throw_on_failure: false 的原有语义,仅补齐传输与超时类错误
|
2026-09-22 13:45:50 +08:00 |
|
k88936
|
058d851a69
|
去掉 model3d_price 上已过期的 dead_code 豁免
- server-rs/crates/api-server/src/editor_generation_config.rs:model3d_price 现在由 tripo3d 提交路由真实消费,删掉「里程碑二的路由接上之前只有测试消费」这句已过期注释与配套的 #[allow(dead_code)]
验证:cargo check -p api-server(--locked)无该函数相关告警
|
2026-09-22 13:43:45 +08:00 |
|
k88936
|
444520b464
|
修正 storage.rs 注释错别字
- server-rs/crates/api-server/src/tripo3d/storage.rs:sniff_model_content_type 文档注释「说慌」改为「说谎」
验证:npm run check:encoding、git diff --check
|
2026-09-22 13:42:37 +08:00 |
|
k88936
|
326729a5ac
|
Idempotency-Key 校验错误保留请求上下文
- server-rs/crates/api-server/src/tripo3d/routes.rs:require_idempotency_key 增加 request_context 参数,缺失 / 格式非法的两个 400 改用 into_response_with_context(Some(..)),与同处理器其它校验、定价错误一致;此前传 None,客户端拿不到请求 ID / 关联标识
验证:cargo test -p api-server --locked idempotency_key(相关 6 个用例全绿)
|
2026-09-22 13:42:34 +08:00 |
|
k88936
|
14740e0ef6
|
3D 任务参数用例改为断言真实主张
- server-rs/crates/api-server/src/tripo3d/job.rs:把 job_request_rejects_payload_without_fingerprint_stripping_support 改名为 job_request_stays_strict_after_stripping_platform_fingerprint 并补断言——带指纹 + 其它未知字段的合法 payload 仍必须被拒(摘下平台字段不等于放宽严格解析);原用例名声称验证指纹摘除,实际只断言了「缺字段的 payload 被拒」和「未知 job kind 被拒」
验证:cargo test -p api-server --locked job_request(2 个用例全绿)、npm run check:rustfmt
|
2026-09-22 13:40:13 +08:00 |
|
k88936
|
48a5bf06d0
|
3D 产物读取不再克隆 content type
- server-rs/crates/api-server/src/tripo3d/artifacts.rs:content_type 只在本函数取一次、之后不再读句柄字段,改用 take() 转移所有权而不是 clone()
验证:cargo check -p api-server(--locked)
|
2026-09-22 13:36:28 +08:00 |
|
k88936
|
9263d79d42
|
3D 产物读取按声明长度预分配缓冲
- server-rs/crates/api-server/src/tripo3d/artifacts.rs:read_artifact 用 Vec::with_capacity 按 provider 声明的 content_length 预分配(并封顶到 512 MiB 上限,防止谎报长度撑爆内存),避免几百 MB 产物逐块 extend 反复搬移
验证:cargo check -p api-server(--locked)
|
2026-09-22 13:36:25 +08:00 |
|
k88936
|
6d8164d37a
|
OSS 不可用错误补上机器可读的 reason
- server-rs/crates/api-server/src/tripo3d/errors.rs:oss_unavailable 增加 reason=oss-unavailable,与同文件其它 5xx 映射及 editor_agent 的 OSS 错误口径一致,客户端可按 reason 分类这个 503
验证:cargo check -p api-server(--locked)
|
2026-09-22 13:35:23 +08:00 |
|
k88936
|
66b8c2bed0
|
3D 定价快照读取失败补上机器可读的 reason
- server-rs/crates/api-server/src/tripo3d/errors.rs:map_pricing_store_error 增加 reason=model3d-pricing-store-error,与同文件其它映射一致,客户端可按 reason 分类这个 500;provider 保持 editor-generation-pricing(全仓库定价错误都是这个口径),不改写为 TRIPO_PROVIDER
验证:cargo check -p api-server(--locked)
|
2026-09-22 13:35:20 +08:00 |
|
k88936
|
cb136fb445
|
画布图层的媒体渲染分派抽成独立函数
- src/components/image-editor/ImageCanvasWorldView.tsx:音频 / 视频 / 序列帧 / model3d / 默认图片这条五层三元链提成 renderCanvasLayerMedia(早返回写成一列判断),渲染分支与传参不变,新增媒体类型不再加深三元
验证:npx vitest run src/components/image-editor/ImageCanvasWorldView.test.tsx(57 用例全绿)、npm run typecheck
|
2026-09-22 13:33:14 +08:00 |
|
k88936
|
d1478e3859
|
文生 / 图生 3D 面板入口合并到同一个 opener
- src/components/image-editor/useImageCanvasGenerationWorkflow.ts:新增 openModel3dGenerationDialog(mode),openModel3dTextToModelDialog / openModel3dImageToModelDialog 退化成两个只传 mode 的薄包装;两条入口此前是除 mode 外逐字相同的复制,改逻辑时容易只改一处
验证:npm run typecheck
|
2026-09-22 13:31:48 +08:00 |
|
k88936
|
b41d156edd
|
底部工具栏的子选项锚点 ref 改用查表
- src/components/image-editor/ImageCanvasBottomToolbarView.tsx:把 spec / music / model3d / publication 的三层三元 ref 选择链提成 toolWrapRefs 映射表,新增子选项时不再延长三元链
验证:npx vitest run src/components/image-editor/ImageCanvasBottomToolbarView.test.tsx(3 用例全绿)、npm run typecheck
|
2026-09-22 13:31:46 +08:00 |
|
k88936
|
4363a6219a
|
修正查看器失败文案穷尽检查的写法(上一提交未通过类型检查)
- src/components/image-editor/model3d-preview/Model3dViewerModel.ts:上一提交把 never 断言写在 switch (detail?.reason) 上,default 分支里可选链未被收窄,npm run typecheck 报 TS2322(undefined 不能赋给 never)。改为先取局部常量并早返回「原因缺失 / load-failed」,switch 只处理其余三种原因,default 保留 never 断言
- 文案与判定结果不变
验证:npm run typecheck(tsconfig.typecheck-guardrails,exit 0);临时给 Model3dViewerFailureReason 增加一个成员,确认该 default 分支会编译报错(TS2322),随后已还原;npx vitest run src/components/image-editor/model3d-preview(18 用例全绿)
|
2026-09-22 13:31:24 +08:00 |
|
k88936
|
0ec0a13cbc
|
关闭 3D 预览面板时清掉查看器状态
- src/components/image-editor/model3d-preview/Model3dViewerModal.tsx:layer 变 null(面板关闭)时把 viewerStatus 复位,下一次打开从禁用的「重置视角」开始,不再继承上一轮实例的 ready;只处理关闭不处理换模型,避免 effect 晚于查看器上报而盖掉 loading
- src/components/image-editor/model3d-preview/Model3dViewerModal.test.tsx:新增「关闭后重开不沿用 ready」的回归用例
验证:npx vitest run src/components/image-editor/model3d-preview(18 用例全绿)
|
2026-09-22 13:29:10 +08:00 |
|
k88936
|
c96d7fe847
|
查看器失败文案改用穷尽 switch
- src/components/image-editor/model3d-preview/Model3dViewerModel.ts:resolveModel3dViewerFailureText 从早返回改成 switch,并给 default 加 never 穷尽检查;查看器今后新增失败原因会在此处编译报错,而不是静默落到通用兜底文案。文案与判定结果不变
验证:npx vitest run src/components/image-editor/model3d-preview、npx tsc -p tsconfig.typecheck-guardrails.json --noEmit
|
2026-09-22 13:28:14 +08:00 |
|
k88936
|
8131a70a2f
|
失败态的重试按钮也按 canSubmit 门禁渲染
- src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx:重试按钮改为 dialog.status === 'failed' && canSubmit 才渲染;此前定价失效或参考图未上传完时它仍可点,提交管线再挡回来,交互上表现为「点了没反应」
验证:npx vitest run src/components/image-editor/model3d-generation/Model3dGenerationModal.test.tsx(8 用例全绿)
|
2026-09-22 13:27:39 +08:00 |
|
k88936
|
73f34ecbc9
|
前端补上「分件 + 方形布线 / 智能低多边形」的互斥校验
- src/components/image-editor/model3d-generation/Model3dGenerationFormModel.ts:resolveModel3dGenerationParams 增加 generateParts 与 quad / smartLowPoly 的互斥判定,与 provider 的 validate_generation_options 对齐;此前纯几何档位下这两个开关仍可同开,前端能出价、提交后才被后端拒
- src/components/image-editor/model3d-generation/Model3dGenerationFormModel.test.ts:新增该组合被拒的用例
验证:npx vitest run src/components/image-editor/model3d-generation(40 用例全绿)
|
2026-09-22 13:26:49 +08:00 |
|
k88936
|
25fe98836f
|
幂等键指纹的键排序改成具名比较函数
- src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts:canonicalizeModel3dRequestValue 里的嵌套三元比较器提成模块级 compareModel3dRequestEntryKeys,排序结果不变,只是不再嵌三元且不必每次递归重建比较器
验证:npx vitest run src/components/image-editor/model3d-generation(39 用例全绿)
|
2026-09-22 13:26:28 +08:00 |
|
k88936
|
b48c34d6b4
|
删掉重复且无人使用的 3D 提交超时常量
- src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts:删除 MODEL3D_SUBMISSION_TIMEOUT_MS;实际生效的是 editorProjectClient 的 EDITOR_MODEL3D_SUBMISSION_TIMEOUT_MS(submitModel3dGenerationRequest 用它),保留两份 60_000 只会各自漂移
验证:全仓库检索该常量只剩定义处(已删);npx tsc -p tsconfig.typecheck-guardrails.json --noEmit
|
2026-09-22 13:26:00 +08:00 |
|