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 |
|
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
|
10e63ecb6b
|
合并 origin/master 到 feat/tribo3d-integeration:ts-rs 一律常开、Cargo 清单去重
- server-rs/Cargo.toml:删除与 workspace git 固定重复的 registry `ts-rs = "12.0.1"`,保留固定 commit 并写明「ts-rs 一律常开、绑定命令固定为 cargo test -p shared-contracts export_bindings」
- server-rs/crates/shared-contracts/Cargo.toml:删除 master 侧新增的 `ts-bindings` feature,`ts-rs` 保持常开依赖
- server-rs/crates/shared-contracts/src/game_creation_app/asset_kind.rs:去掉 `cfg_attr(feature = "ts-bindings", …)` 门控,derive 与字段级 `ts(...)` 无条件展开
- apps/ai-game-creator-shell/src-tauri/Cargo.toml:shared-contracts 依赖去掉 `features = ["ts-bindings"]`,继续保留本分支的 ts-rs git 固定
- apps/ai-game-creator-shell/src-tauri/Cargo.lock:按上述依赖变更同步(shared-contracts 指向 git 源 ts-rs)
- docs:同步 5 处绑定生成命令(去掉 `--features ts-bindings`),并在 decision-log 记本次合并的决策、代价与验证
- 其余暂存改动为 origin/master 带入的内容,冲突按两侧目的逐一合并
验证:cargo metadata --locked(server-rs 与 AGC 两个 workspace)、cargo test -p shared-contracts(119 + 5 + 5 + 2 + 2 全绿且无告警)、npm run contracts:model3d:generate 后 packages/shared 零 diff、cargo check -p spacetime-module --target wasm32-unknown-unknown、npm run check:encoding、npm run check:rustfmt、npm run check:spacetime-schema、git diff --check、暂存集 eslint / prettier 全过
|
2026-09-22 13:12:28 +08:00 |
|
k88936
|
61fe4c48af
|
图片画布接入 3D 资源:新增 model3d 类别、3D 预览与 3D 生成入口
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 16s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 18s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 16s
Project CI / Backend tests (pull_request) Failing after 16s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 16s
Project CI / Native shell tests (pull_request) Failing after 16s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / AI game creator shell web tests (pull_request) Failing after 12s
- 后端资源投影按 asset_kind 分叉,新增 project_editor_client_media_src 与 EDITOR_MODEL3D_ASSET_KIND:model3d 只投影预览图,模型本体只留 objectKey,预览缺失才回落历史口径
- tripo3d 存储新增按字节魔数识别模型 content_type 与扩展名映射,不采信 provider 声明与下载响应头
- editor_project_storage 把 model3d 加入 EDITOR_CANVAS_ASSET_KINDS 白名单
- 前端 CanvasAssetKind 与 image-canvas-core 类型新增 model3d:画布卡片渲染预览图或 3D 占位,类型角标新增「3D模型」,覆盖资格只在它与空类别之间成立
- 新增 model3d-preview 子目录(Model3dViewerModal / Model3dViewerModel),Tailwind 内联、不新增 CSS,失败原因分超限 / 格式不可识别 / 无 WebGL2 三类展示
- 选中工具条新增只读 preview-model3d 能力位,仅 objectKey 为空时置灰;打开预览同时选中图层并暂停画布快捷键与舞台交互
- 查看器包源对象 format 改为可选,新增「声明 Content-Type → 字节魔数 → 地址扩展名」三级格式判定并导出支持格式清单
- 导出工作流新增 3d_models/ 目录,模型下载按真实响应头 MIME 定扩展名、对象键扩展名兜底
- 新增 3D 生成入口:底部工具栏浮动子选项与文生 / 图生 3D 面板,落 projectResource + canvasCompletion,复用占位框与任务侧栏
- 3D 定价只读实时定价查询,段缺失即入口不可提交;幂等键由前端铸造,用户重试必须换键
- 新增 ADR 0003 / 0004 与实施计划、里程碑文档;更新 Tripo 技术方案、后端架构、CONTEXT 术语、decision-log 与 pitfalls
- .gitignore 忽略仓库根目录手工下载的 3D 样例模型
|
2026-09-22 10:10:00 +08:00 |
|
lhk229
|
4e41bd3e56
|
修复预览发布测试状态文件恢复竞态
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m54s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 3m49s
Project CI / Backend tests (pull_request) Successful in 5m7s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 9m49s
Project CI / Native shell tests (pull_request) Successful in 6m47s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 10m45s
Project CI / Frontend tests (pull_request) Successful in 5m10s
Project CI / Repository checks (pull_request) Successful in 3m57s
Project CI / AI game creator shell web tests (pull_request) Failing after 3m26s
Project CI / AI game creator shell Rust crates (push) Successful in 1m16s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m11s
Project CI / Backend tests (push) Successful in 4m55s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 9m50s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 8m2s
Project CI / Native shell tests (push) Successful in 7m2s
Project CI / Repository checks (push) Successful in 3m51s
Project CI / AI game creator shell web tests (push) Successful in 3m23s
Project CI / Frontend tests (push) Successful in 5m48s
deploy_and_uninstall 测试在断言状态文件恢复前,改为轮询等待持久化状态到达 Stopped
新增 wait_for_persisted_status 辅助函数,经 load_deployments 真实加载路径校验状态文件
|
2026-09-22 00:53:47 +08:00 |
|
k88936
|
9fc55a5cac
|
写入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 风险
|
2026-09-21 22:07:55 +08:00 |
|
k88936
|
2691ca8aca
|
补记图生输入的OSS直读待讨论项
- api-server 的 image_source 模块头与 platform-tripo 的 upload_image 各留一条 TODO(oss-direct-read):交签名 URL 或对端直读 OSS 能省掉字节中转,但把私有对象与带时效凭据交给第三方,安全口径与可行性待讨论
- 技术方案文档把图生输入口径更新为当前的 source 站内引用 tagged enum,并补同一条待讨论说明
- 讨论清楚之前保持「api-server 自己读、自己传」的现口径,不改行为
|
2026-09-21 20:02:18 +08:00 |
|
k88936
|
14066eea11
|
产物下载改为按「无数据推进」判超时
- artifact reqwest client 不再设包含响应体的总超时,改成 connect_timeout + read_timeout(reqwest 0.12 的「每次读操作」语义,读完自动重置)
- 响应头之前没有数据推进时用显式 tokio::time::timeout 兜住,避免连上却不返回响应头时无限挂住
- 新增 TripoProviderClient::artifact_stall_timeout 统一承载三处预算,取值沿用 TripoSettings::request_timeout
- 补 3 个 mock TCP 用例:响应头一直不来、传输中途断流按无数据推进失败,慢速但持续的下载必须完整收完(后者能拦住「改回总超时」的回归)
- 同步技术方案与后端架构文档里的下载超时口径
|
2026-09-21 19:54:57 +08:00 |
|
k88936
|
609b24c779
|
text-to-model入口的submit改名带端点
- TripoProviderClient::submit 改名为 submit_text_to_model,与 submit_image_to_model / submit_multiview_to_model 一致
- 同步 api-server tripo3d worker 与 tripo_generation_smoke example 的调用点
- 同步技术方案文档里写死的 submit 口径,方法名不再与另两个入口分叉
|
2026-09-21 19:49:31 +08:00 |
|
k88936
|
3af0d3d90b
|
契约枚举的线上取值只由serde定义
- shared-contracts 新增 wire_str 与 wire_str_lossy:线上取值只从 serde rename / rename_all 取,不再维护第二份字面量
- 删除模型版本、纹理质量、纹理版本、纹理对齐、几何质量、输入方向、导出方向、压缩共 8 个枚举上手工维护的 as_str
- platform-tripo 新增 common/wire.rs 负责契约枚举到 provider 请求字符串的转换,三个入口的 to_sdk_params 改走它并把失败归一成 provider 错误
- api-server 的定价文案与 job 模型版本取值改用 serde 取值,job 的 model_version 由 &'static str 改为 String
- 取值来源只剩 serde 一处,改 rename 不会再静默分叉
|
2026-09-21 19:46:43 +08:00 |
|
k88936
|
c0d6531e92
|
三个入口的seed参数在TS契约里改用bigint
- seed 是 i64,JS number 表示不了全部取值却又没有范围校验,客户端传 64 位值会被静默舍入
- text_to_model / image_to_model / multiview_to_model 的 image_seed、model_seed、texture_seed 由 number|null 改为 bigint|null
- 同步重新生成的 ts-rs 绑定,仅这三个字段变化
|
2026-09-21 19:38:47 +08:00 |
|
kdletters
|
4951b71d71
|
项目快照按渠道分区,后台项目工程支持渠道筛选与游标分页
Project CI / AI game creator shell Rust crates (push) Successful in 2m46s
Project CI / AI game creator shell Rust smoke (push) Successful in 3m37s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 6m5s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 6m40s
Project CI / Repository checks (push) Successful in 5m37s
Project CI / Frontend tests (push) Successful in 6m21s
Project CI / Backend tests (push) Successful in 9m56s
Project CI / Native shell tests (push) Successful in 10m57s
Project CI / AI game creator shell web tests (push) Successful in 5m29s
项目快照对象键升级为 agc/project-snapshots/v2/{channel}/{user}/{project}/,渠道取部署配置 GENARRATIVE_AGC_PROJECT_SNAPSHOT_CHANNEL(缺省沿用客户端下载渠道),非法渠道在写入处失败关闭
后台新增渠道列表接口,项目工程列表与下载接受 channel,游标绑定渠道并拒绝跨渠道复用
后台项目工程用户列改为素材查询口径:昵称 + 陶泥号 + 用户详情入口,由 api-server 解析作者信息
后台项目工程改为游标分页:每页 20/50/100、上一页/下一页与当前页提示,翻页失败保留当前页
部署环境示例补充快照渠道配置,并同步运维、技术方案、里程碑与决策记录文档
|
2026-09-21 16:57:16 +08:00 |
|
kdletters
|
c5afc02e94
|
模板正文目录门禁:CLI 打包与后台上传统一拒绝身份/版本库/依赖/构建目录
Project CI / Frontend tests (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust smoke (push) Has been cancelled
- scripts/agc-template-library-publish.mjs:readProjectFiles 增加正文门禁,任意层级拒绝 .agent/.git/.svn/node_modules,根目录拒绝 dist/build/library/temp/local/.idea/.vscode
- scripts/agc-template-library-publish.test.mjs:新增夹具源目录与门禁用例,覆盖 13 条拒绝路径及 game/dist/**、game/.gitignore 放行
- server-rs/crates/api-server/src/admin_templates.rs:上传归档校验与 CLI 用同一份段名单,新增 template_import_archive_rejects_identity_and_build_directories
- docs/【模板规范】AGC模板包组织指南-2026-09-21.md:已知边界改为「已有机器门禁」,并说明同名目录段只在根目录受限
- docs/technical/【技术方案】AGC模板库与模板建项-2026-09-17.md:CLI 与后台上传的校验口径补门禁,并追加 2026-09-21 证据(九个模板本地重打包摘要与线上清单逐条一致)
- docs/project-memory/plans/【里程碑】后台模板上传-2026-09-21.md:验收标准 2 补充门禁证据
- docs/project-memory/shared-memory/decision-log.md:新增 2026-09-21 正文目录门禁决策记录
|
2026-09-21 16:25:35 +08:00 |
|
kdletters
|
4863c8c066
|
后台模板上传(后端):新增批量导入接口与存储/领域支持
- shared-contracts 新增导入 manifest、逐条与结果 DTO(camelCase,拒绝未知字段)
- module-assets 新增 prepare_template_import:新 ID 默认上架,已存在条目就地更新并保留上架状态与未知扩展字段;同一 ID 同版本字节不同时按 CLI 同一句文案拒绝,字节一致时按内容复用既有对象
- platform-oss 为 application/zip 放宽单对象上限到 64 MiB(图片与元数据仍 5 MiB),测试替身同步该口径
- api-server 新增 POST /admin/api/agc-templates/import:multipart(manifest + zip_N/cover_N),逐项校验归档安全性、entry 存在性与封面(按字节嗅探格式,仅 PNG/JPEG/WebP)后才取发布锁
- 锁内流程:CAS 校验 revision → 内容寻址写入 zip/封面/元数据并回读 → 一次提交清单 → 释放锁;断连由独立任务持有,不确定结果保留锁并返回 503
- 路由挂 require_admin_auth 与 200 MiB body 上限,页签权限矩阵与路由契约测试同步
- 新增用例:清单与文件字段校验、归档越界与符号链接拒绝、内容寻址键与封面嗅探、zip 内容类型存储上限
- 新增「后台模板上传」里程碑与实施计划文档
- 验证:cargo test(module-assets 11 项、platform-oss 12 项、api-server 定向 4 项)、cargo fmt --check、check:doc-index、check:encoding、git diff --check
|
2026-09-21 16:06:23 +08:00 |
|
k88936
|
c0fcb8553d
|
补Tripo worker纯逻辑定向用例
- checkpoint 只在 provider task id 非空且去空白后有效时才算存在,空白等同未提交
- 完成结果按端点严格区分,且序列化后不含 provider、taskId 与带签名的临时地址
- 预览图尺寸必须能真实解码,损坏字节直接失败而不是写占位宽高
- 预检用例去掉多余的通配导入,实施计划进展同步当前通过数
|
2026-09-21 15:22:01 +08:00 |
|
k88936
|
aebbd3bb99
|
多视图输入变体字段统一按camelCase序列化
- Model3dMultiviewInputs 的 serde 属性补 rename_all_fields = camelCase,结构体变体字段不再逐字段手工 rename
- TaskId 变体去掉冗余的 taskId 显式 rename,序列化结果与生成绑定均无变化
|
2026-09-21 15:20:36 +08:00 |
|
k88936
|
f732555a44
|
为Tripo提交路由补应用级验收用例
- 走真实 build_router 断言两个端点未鉴权一律 401,路径写错或漏 merge 会退化成 404
- 断言缺 Idempotency-Key 在解析之后、组合校验与定价之前返回 400
- 断言贴图档位冲突与定价必填字段缺失都在定价与 provider 副作用之前返回 400 并定位字段
- 实施计划进展补记该组用例与当前全量测试通过数
|
2026-09-21 15:16:22 +08:00 |
|
k88936
|
d4af6802fb
|
补多视图请求契约的全字段往返用例
- 新增全字段往返:钉住 camelCase 字段名、各枚举线上取值与 Option 的可省略写法
- 新增显式 null 往返:确认可选字段回写时仍是 null 而不是整字段消失
- 补用例后字段改名或可空性漂移会被测试拦住,不再是只在 TS 绑定里可见
|
2026-09-21 15:16:06 +08:00 |
|
k88936
|
294b7461ff
|
去掉产物下载重试里的不可达panic分支
- download_artifact 原先用 for + last_error + expect 收尾,循环每轮都会 return,expect 实际不可达,却给库留下一条潜在 panic 路径
- 改为 loop 内递增 attempt,重试耗尽时直接返回最后一次错误,重试次数与退避行为不变
|
2026-09-21 15:15:07 +08:00 |
|
k88936
|
e9af6c0741
|
脱敏地址保留原始分隔符
- redacted 原先无条件用 ? 拼接脱敏标记,只有 fragment 的地址会被显示成带 query 的样子
- 改为按命中的分隔符原样拼接,日志里能区分 query 与 fragment
|
2026-09-21 15:14:51 +08:00 |
|
k88936
|
0f8ac57593
|
拒收带userinfo的产物地址
- TripoUrl::parse 原先只校验 scheme,带 user:password@ 的地址会被 Debug / redacted 原样打进日志
- 解析阶段直接拒绝 userinfo,产物地址不需要凭据
|
2026-09-21 15:14:07 +08:00 |
|
k88936
|
694a3c6f6c
|
产物下载前校验任务确实处于完成态
- download_model 与 download_rendered_image 原先只看 output 是否存在,快照字段全公开、status 与 output 可以被人为构造得不一致
- 两个入口统一走 completed_output:先校验 task_id,再要求 status=Completed 且有输出,否则按输出结构错误失败
|
2026-09-21 15:14:00 +08:00 |
|
k88936
|
6724f8b707
|
收紧产物文件名对远端扩展名的取值
- filename 直接取远端 URL 末段扩展名,path_segments 已百分号解码,%2F / %5C 会拼出跨目录路径
- 扩展名只接受长度不超过 10 的 ASCII 字母数字,其余一律退回 glb
|
2026-09-21 15:13:15 +08:00 |
|
k88936
|
33cd943ff9
|
长度与范围越界改用独立校验原因
- TripoValidationReason 新增 OutOfRange,与「参数组合互斥」不再共用 InvalidCombination
- prompt 超 1024 字符、negative_prompt 超 255 字符改报 OutOfRange
- face_limit 越界属同一类范围错误,一并改报 OutOfRange,调用方可按原因分流
|
2026-09-21 15:11:12 +08:00 |
|
k88936
|
7193bd28c2
|
多视图可选视图去掉首尾空白再提交provider
- optional_view 先用 trim 判空、再把未 trim 的原串交给 FileInput,两侧口径不一致
- 改为提交前 trim,空白视图仍按未提供处理
|
2026-09-21 15:10:49 +08:00 |
|
k88936
|
e8467c2870
|
多视图前视图去掉首尾空白再提交provider
- front 只按 trim 后判空,但先前把未 trim 的原串交给 FileInput,带空白的取值会被原样发出
- 改为提交前 trim,与 image_to_model 的输入口径一致
|
2026-09-21 15:10:24 +08:00 |
|
k88936
|
0982b952cb
|
收敛Tripo三入口重复的extra字段构造
- 新增 common/extra.rs 统一构造 texture_version 与 delight 的 SDK extra 字段,键名只留一份
- text_to_model 与 image_to_model 删除各自的 extra_fields 副本,改调公共实现
- multiview_to_model 的内联 extra.insert 也改为复用同一构造
- 未提供的参数仍不写入 extra,请求体行为与原先一致
|
2026-09-21 15:08:50 +08:00 |
|
k88936
|
eb4256f883
|
图生3D图片引用改为提交时定点预检
- image_source 拆成预检与执行两条路径,预检只做归属、记录类型与对象键校验,不读正文也不调用 provider
- 定点解析改用既有 resolve_editor_reference_record_by_id_for_owner,取代列工程与读素材库的宽查询
- image-to-model 路由在扣费与入队前调用预检,跨 owner、未登记、已删除与 kind 不符统一返回 400
- editor_project 把定点引用查询暴露为 crate 内可见,供生成入口复用
- 新增源码钉住用例,防止预检退回宽查询或提前读图片正文
|
2026-09-21 15:08:46 +08:00 |
|
k88936
|
02ef84d9b6
|
清理Tripo3D新代码的死代码与无意义断言
- 删除 job.rs 中无调用的 is_model3d_job_kind、source_entity_id 与本地 target_source_entity_id
- 删除 artifacts.rs 中未被引用的 map_artifact_error 及其 TripoError 导入
- 删除未被引用的 MODEL3D_JOB_MAX_ATTEMPTS 与只被同文件测试断言的 queue source module 常量
- 删除对常量自身取值的恒真断言测试
|
2026-09-21 14:45:04 +08:00 |
|
k88936
|
29e554a30c
|
新增api-server Tripo3D worker执行链路与结果落库
- 新增 artifacts/result/worker 三个文件:产物读取、严格结果构造与 at-most-once submit 执行链路
- 没有 checkpoint 才 submit;submit 成功后先落 checkpoint 再轮询,checkpoint 写入失败按终态失败,不退回可重试队列
- 模型与预览图分别写入 OSS 并按 operation 稳定 ID 登记 asset_object,预览对象单独登记以便按对象键解析归属
- 落点按 target 分支写入项目资源或账号素材,imageSrc 与 thumbnailSrc 指向预览图,模型本体留在 objectKey
- 画布回填只走 placement-only;新增只依赖资源身份与尺寸的占位条目构造函数供 3D 复用
- 标准消费者的队列结果透传调用方显式给出的 result,使 3D 完成结果可从既有任务查询返回
- external_generation_worker 增加两个 job kind 分支并纳入长任务超时,用户可见失败文案收敛为稳定文本
|
2026-09-21 14:36:59 +08:00 |
|