Skip to content

fix(converter): 修复批量导出、预览和挂孔故障 - #295

Merged
MOVIBALE merged 4 commits into
mainfrom
MOVIBALE/fix/converter-ticket-reliability
Nov 10, 2026
Merged

MOVIBALE merged 4 commits into
mainfrom
MOVIBALE/fix/converter-ticket-reliability

Conversation

@MOVIBALE

@MOVIBALE MOVIBALE commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

修复六张转换工单暴露的批量导出、网格内存、模板槽位、预览和挂孔交互问题。

  • 流式读取 3MF 的结构和占板尺寸,按单网格加载几何,保留组件顺序、变换和材料身份。
  • 原生写入采用同目录临时文件和原子发布,失败时清理半包。合并失败后保留已完成的单件下载。
  • 网格计数改为固定块,去掉重复坐标副本,按可用内存与实际表面复杂度控制并发。平滑图继续保持原有并发。
  • 自定义模板在建模前检查槽位容量,中英文提示所需与可用数量,同时保留完整来源色表及旧缓存兼容。
  • 显示预览使用统一分辨率预算,挂孔拖动每帧一次提交完整坐标,取消/失焦后恢复交互。

Validation

  • python scripts/run_smoke_tests.py 通过。
  • 36 个原生 3MF/切片软件相关测试文件,1557 passed、3 deselected。
  • python scripts/run_vitest.py run 全量前端,4050 passed、3 skipped。
  • pnpm build 通过。
  • 真实后台 log_quality_check.py --mode full 的启动、色表、预览、生成、批量合并工作流通过。
  • 用工单保留的三张原图和原 50mm 参数组成十二件,真实 API 12/12 成功,957MB 3MF 的下载、CRC、模型引用及材料身份通过核验。两张批量原图按原 152mm/RYBW 参数 2/2 成功,128.6MB 输出材料映射通过核验。
  • 原 U1 四槽模板的六材质预检返回 422(6 vs 4),四色控制组成功。晚期 worker/合并容量错误也统一返回带实际数量的 422,相关生成、拼图和批量回归 402 项通过。完整来源色表、材料重排、涂层、虚拟材料与旧拼图缓存均覆盖。
  • 原图网格在 14×20mm、原 10px/mm 密度下做旧新对照,顶点、三角形和颜色逐字节一致。四线程 warm S07 原图、平滑图、稀疏图对照均通过性能判定。
  • 原 PNG 在 120mm 宽做两路预览,显示图受预算约束;工单轮廓下 500 次挂孔移动验证参数同步与控制恢复。
  • 写入中断及合并失败有故障注入回归,覆盖半包清理、旧成品保留和关闭源会话后的单件下载。独立代码复核与块边界数值对照通过。

AI assistance

Models and tools

gpt-6.1-sol,通过 Codex,包含主任务和继承该模型的并行子任务。

What each model helped with

调查六张工单,实施内存、导出、预览、槽位校验与拖动修复,编写回归测试,执行素材重放与独立代码复核,整理提交说明。

How the output was checked

Codex 实际运行了 Validation 中列出的测试、构建、真实 API 重放与浏览器交互检查。私有工单素材与生成模型保存在本地/NAS 归档,源码和通用回归测试包含在本 PR。

Notes

批量响应在合并失败时返回 status="partial",已成功项增加可选 download_url,前端提供单件下载。成功合并继续通过 download_url 提供批量 3MF。

素材正常导出在 Mac 验证;Windows 写入中断通过故障注入验证。大图网格和 PNG 使用上述尺寸复核,原始大尺寸的资源耗尽依赖原始日志定位。挂孔原始崩溃调用栈用于定位,当前浏览器验证覆盖拖动反馈与控制恢复。

复核同时修正了相关测试中重复捕获同一日志记录的夹具,以及旧 worker 分析夹具缺少的 preview_colors 字段。

合并前复核补充(2026-11-11)

  • 已同步 main 的 feat(workshop): add managed Python backend runtime #285(295c5b3),并补充中英文用户公告;转换实现未再调整。最终待合并 head:22d34054e55a7f2a935e5c3e419a175c2c8c33f6。
  • 本轮独立后端 181 项、前端定向 177 项通过;同步主线后的组合回归另有后端 66 项、前端 144 项通过,TypeScript 检查及生产构建通过。上述集合部分重叠,不相加充作独立用例数。
  • 真实 Chrome 操作完整转换页面:120mm 预览保留 1200×1800 模型网格,显示图为 1067×1600;30mm 三件批量生成与真实下载通过,3MF 的 CRC、对象引用、几何索引和四槽材料对应正常。
  • 仅在隔离测试启动器中注入最终合并写入失败,真实 worker 仍生成三件;页面显示 partial 提示和三条独立下载链接,实际点击下载的单件 3MF 核验通过。自动回归另覆盖关闭来源会话后下载继续可用。
  • 真实 Scene3D/Slider/store 场景执行 200 次鼠标移动及 300 次突发指针事件,坐标同步、末次提交和旋转控制恢复通过,无 pageerror。原 Maximum update depth 异常本轮未重现,不把它描述为已复现的崩溃修复。

本补充与主线整合、公告、独立审核由 gpt-6.1-sol(通过 Codex)完成,验证方式如上;保留原作者 Validation,不将其大模型重放记作本轮重新执行。未发布安装包、未变更应用版本号。

Bound mesh and merged-3MF working memory while preserving geometry and
material identity. Retain completed single downloads after failed merges,
publish native writes atomically, and preflight imported template capacity.

Share bounded display sizing across core and API paths. Commit keychain
drag coordinates once per frame and preserve complete source palettes when
reading older partial preview caches.

@MOVIBALE MOVIBALE left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

结论:valid_fix,可合并;等待最终 head 的全部 CI 成功后执行。

复核 head:22d34054e55a7f2a935e5c3e419a175c2c8c33f6;当前 main:295c5b3cb2a17cc244020217d991e70cb80b8138。已检查六张转换工单的根因、原修复前证据、完整差异和本轮回归。同步主线无冲突,另补中英文公告。

人可复验:按仓库方式启动 python api_server.py 与前端 pnpm dev;导入带透明区域的 PNG,选经典 LUT 的 Aliz 四色 RYBW。宽度 120mm 点击预览;再以 30mm 加入三张图,点批量生成并下载 3MF。创意中心开启挂件环,拖动后核对 X/Y 参数和视角旋转。原工单模板六材质/四槽应在生成前返回带数量的 422。

Base 依据:原工单日志和已保留的旧新对照确认整卷数组副本、写入半包、槽位数丢失、显示图过大及坐标重复反馈;挂孔原崩溃栈未在等价场景重新抛出,但旧坐标反馈/通知放大和修复前红测有直接证据。本轮不重跑约 1GB 的原批量模型。

实际结果:

  • 真实 Chrome 完整转换界面:模型网格 1200×1800、显示图 1067×1600,物理尺寸/原始编辑图未被降采样。三件批量成功,真正点击下载的 3MF CRC、组件引用、三角形索引和四色材料身份通过。
  • 隔离启动器只注入最终合并写入失败,未伪造 API 响应:真实三件 worker 成功,API partial,界面显示明确警告和三条单件下载;实际下载单件 3MF 验证通过。源会话关闭后仍可下载另由真实路由自动回归覆盖。
  • 真实 Scene3D + Slider + store、工单轮廓等价场景:200 次鼠标移动及 300 次突发事件,最终坐标与参数框一致,controls/cursor 恢复,无 pageerror。未使用桌面系统交互,本流程 Chrome 可完成。
  • 独立后端 181 项通过:atomic/merge/S07/template/worker/error/logging;前端 run_vitest 的 KeychainRing/Loop/property/Scene3D/BatchResultSummary/client 177 项通过。
  • 最新主线组合内容:后端 66、前端 144 项通过(含工坊和公告),tsc --noEmit、pnpm build、git diff --check 通过。测试集合不加总冒充独立用例数。

实现质量通过:流式结构读取保留原对象/材料/变换;写入复用同目录临时文件原子发布;partial 单件复用既有下载登记与 TTL;拖动复用现有状态一次提交。没有新框架或拒绝生成的内存限额;S07 只调整并发且至少一条执行。未发现必须修改的 P1/P2。UI 实测基于 960b995,最终 head 仅同步已测试 #285 与公告;组合回归和构建基于最终内容。

AI 审核:gpt-6.1-sol,通过 Codex。上述测试、真实浏览器操作和归档证据均为本轮实际执行;原作者大尺寸重放仅核读,未冒充本轮执行。

@MOVIBALE
MOVIBALE merged commit 11ee4a0 into main Nov 10, 2026
7 checks passed
@MOVIBALE
MOVIBALE deleted the MOVIBALE/fix/converter-ticket-reliability branch November 10, 2026 18:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant