7.3 KiB
移植阻塞根因与整改
结论
这次定位的 OpenSCAD/CAM 命令都是桌面已有业务,不能以“业务不需要”删除。 阻塞主要来自实现、注册、工作包和发布回执之间的交接漏洞。其它未接通记录 不能据此全部归为注册错误:有的确实缺原生行为或运行依赖,仍须逐项补齐。
当前执行继续遵守用户要求:功能先打通,不运行自动测试或验收,用户使用时 验证。编译/链接、资源同步和静态路由生成是交付步骤,不作为运行验证通过。
必须区分的四类
| 分类 | 是否业务不需要 | 判定依据 | 处理 |
|---|---|---|---|
| 已实现但未登记 | 否 | 真实原生操作存在,注册器未识别 | 把实际执行入口接入可发现注册表,编译发布并登记实现回执 |
| 已登记但接口未贯通 | 否 | Worker、参数、文档标识或结果字段不一致 | 修双方协议与实际调用点,不修改静态状态冒充接通 |
| 运行依赖未闭合 | 否 | 源码存在,但所需模块/库/资源不在运行时 | 按本机源码和已编译库补链接、打包或原有平台适配 |
| 实际行为未移植 | 否 | 仅参数回显、空成功、描述,或明确 unsupported | 复用桌面实现补当前文档行为,再接界面和注册 |
“暂时没有选中对象/参数错误”属于请求前置条件,不是实现缺失。 菜单容器属于 UI 导航,不是独立几何算法。只有用户明确取消的业务才可移出 需求范围;本次没有取消任何业务,也没有缩小 1504 项完整范围。
已解决的方案漏洞
- 通用分派隐藏命令归属。 OpenSCAD 的 C++ 入口只判断 desktop-command, 真实命令分派在嵌入 Python 中。注册器无法从该入口确认命令名。 已将支持的命令名显式接到既有 executeDesktopCommand,四个指定命令 添加实现登记;仅实际操作成功才返回 exposed,错误路径保留。
- helper 实现与注册表脱节。 CAM 的真实业务放在 CAMDesktopCommands.h, Probe 的命令分支调用 helper,却没有登记。现新增 CAMDesktopCommands.cpp 可执行命令表,沿用项目 FC_WEB_DESKTOP_COMMAND 模式。运行时按该表调用 handler,生成器读取同一张表,不维护另一份仅供计数的成功清单。
- 工作包漏掉头文件中的实现。 原 probe_sources 只选固定后缀 cpp, 模型看不到实际 helper 而反复读取界面。现跟随所选源码中的 quoted local header include,把同一 Probe 目录中的 h/hpp 加入工作包及源指纹;不扫描 整库、不把任意头文件文字当成已实现证明。
- 零退出码隐藏阻塞诊断。 implementation_incomplete 是业务状态,命令 退出码为零。原模型工作包只提取非零首错,丢掉真正的注册阻塞。 v24 的原始与压缩工作包均携带 missingIds/rejectedMarkers 和具体交接动作。
- 口头完成不等于发布。 此前多轮回复 implementation_ready,但没有 构建回执,规划器只能重派。现在这两批均走正式 pipeline,由实际构建、 同步和路由生成产出回执;已发布 ID 由 implementation_ready_ids 排除。
注册器的原有识别规则没有放宽;未关闭 static_readiness/build gate,未伪造 业务通过记录。新 CAM 注册表的函数返回值只表示“命令已被分派”,执行成功 与失败仍由原 handler 的结构化状态表达。
本轮完成
| 模块 | 命令数 | 原生构建 | 正式流水线 | 结果 |
|---|---|---|---|---|
| OpenSCAD | 4 | 33.968 s | 1.371 s | 4 ready / 0 missing,已发布回执 |
| CAM | 9 | 45.571 s | 1.383 s | 9 ready / 0 missing,已发布回执 |
| Fem | 4 | 44.499 s | 见正式流水线报告 | 1D 单元与变形方程的原生登记已补齐 |
OpenSCAD:Edgestofaces、ExpandPlacements、ExplodeGroup、IncreaseToleranceFeature。 源码依据为本地 OpenSCADCommands.py、OpenSCAD2Dgeom、expandplacements、 OpenSCADFeatures 和既有 OpenSCADRuntimeProbe.cpp。
CAM:OpActiveToggle、OperationCopy、Pocket3D、Pocket_Shape、Post、PostSelected、 Probe、Profile、SelectLoop。复用本地 CAMDesktopCommands.h 中原生 Active 属性事务、Path.Op 创建、Job 操作复制、Path.Post 后处理和选中拓扑处理。 既有 cam-desktop-task.tsx 和 cam-desktop-adapter.ts 保持调用。
Fem:FEM_ElementFluid1D、FEM_ElementGeometry1D、FEM_ElementRotation1D、 FEM_EquationDeformation。真实工厂位于本地 ObjectsFem.py,三个单元以当前 analysis 为所有者,变形方程挂到当前 analysis 内的 Elmer solver。原生 executeAnalysisCommand 已处理属性、引用、read/apply/cancel、事务和文件。 现补齐已有精确命令分支的登记,不另造工厂;独立发布文件为 fem-registration-handoff-{batch,packet,pipeline}.json。
构建后正式流水线的 Ninja 步骤仅做依赖检查,没有再次编译链接。 报告为 openscad-registration-handoff-pipeline.json 和 cam-registration-handoff-pipeline.json,两个批次均独立于后台活动批次, 未覆盖其 manifest。所有接通状态均为待用户使用验证。
尚未解决与后续执行
一次登记快照仍有 497 个功能未注册:495 个标在 native 层、2 个 policy 层。 这只是层次分布,不是已经逐项确认全部根因。native 中同时存在未登记与真正 未实现,不能一键批量标为完成。后台同期有其它改动,总数随当前源码变化。
后续每个批次沿用固定顺序:
- 从现有原生分派、所属 helper、实际 Worker 和构建目标定位命令归属。
- 已有业务不重写;缺登记用可执行注册表;缺行为才补桌面业务。
- 把当前文档输入、结果和错误接入既有模块界面,不为单模块改共用协议。
- 同目标合并一次必要增量构建,同步发布,写实现回执;回执后不再重复领取。
- 若仍阻塞,报告具体缺失符号/文件/依赖/行为和下一修改位置,而不是只写 “blocked”、无限冷却,或声称业务不需要。用户使用反馈另行驱动运行修复。
不承诺仅靠注册修复就能消除全部移植缺口。本报告的“已解决”限于上述十三条 命令及后续四条 FEM 命令的注册/发布交接与工作包漏洞;其它功能继续按真实源码补齐。
不得回避的真实缺口示例
- PartDesign 的 Draft、LinearPattern、Mirrored 在现有桌面适配器中仍有 unsupported_command 保护。它们是需要继续移植的文档特征,不是业务不需要; 不能仅删保护或添加注册行,必须接实际原生特征、引用及任务参数。
- 部分几何/求解器入口受现有 native-source-policy 限制。解除前要按本机 库和构建目录确认实际依赖闭包并接通;“文件存在”不能代替完成链接与调用。
- 文档未打开、没有 analysis、缺少选中对象等请求条件应明确返回输入错误, 不应被重新归为“缺源码”并触发重复移植。
- 未完成源码审阅的其它 native 记录保持未归因,不宣称是无需求或全部 可由登记解决。当前静态计数是定位索引,不是逐项业务实现审计。
本次已做的是结构性交接修复与十七条具体命令发布;没有声称所有缺口已清零。