2.6 KiB
Assembly 关节路由解阻记录
日期:2026-09-11(Asia/Shanghai)。
问题
AssemblyRuntimeProbe.cpp 已包含真实 JointObject Python/C++ 执行链:当前文档与 AssemblyObject 校验、两个组件引用解析、JointGroup 持久化、参数属性设置、Assembly solver 重算、事务提交/回滚、组件 Placement 和 selection 返回。但能力注册器只按短命令比较,无法识别该文件使用的全限定表达式 apiId == "Assembly:desktop:<命令>",导致 14 个关节命令反复被排为 implementation_required。
修复
tools/generate_feature_capability_registry.py的命令分支识别现在支持apiId/apiIdValue与全限定module:desktop:command比较。AssemblyRuntimeProbe.cpp为 14 个已有 native joint 分支增加明确实现标记,保留原生status=exposed、JointObject、solver 和事务语义;没有删除任何输入保护。- Registry 重新生成后:
routed从 843 增加到 857,implementationRequired从 606 降到 592;Assembly 四个代表命令均为implementationStatus=routed,并指向现有assembly.worker.ts和assembly.pythonFamily。
验证
cmake --build freecad-source/build-web/assembly-configure --target FreeCADWebAssemblyProbe -j2在项目指定的EM_CONFIG=tools/emscripten-writable-config.py和可写缓存下通过;未重编译 OCCT。node tools/sync-assets.mjs命中缓存:0 copied、98 skipped、0.015 秒。python3 -m unittest tools.test_delivery_planning tools.test_acceptance_priority tools.test_scheduler_performance tools.test_codex_http_transport:74 项通过。git diff --check通过。
边界与下一步
路由修复不是业务验收。真实关节用例必须创建当前 Assembly 文档、两个可移动组件,提交合法 Reference1/Reference2 和对应关节参数,再验证 JointObject、solver 状态、组件 Placement、selection、撤销/回滚和资源释放。禁止用空文档、参数回显或只检查 status=exposed 代替关节业务结果。现有 Assembly 创建/保存合同继续复用,下一批由无人值守调度器承接具体 joint business cases。
同一识别问题还影响 Assembly_LinkSelectLinked、Assembly_SelectComponentsWithDoFs、Assembly_SelectConflictingConstraints 和 Assembly_SelectJointsOfComponent。它们已有当前文档对象解析和选择返回分支,现已增加显式标记并由全限定 apiId 识别;4 个命令均已生成 routed 路由。选择结果的真实跨文档 Link、DoF、Joint 和冲突约束用例仍需带实际 Assembly 对象执行,路由状态不替代业务证据。