# Assembly joint selection batch Batch: `8d028b2604665ddf9b329d91` Scope: Assembly_CreateJointAngle, Assembly_CreateJointBall, Assembly_CreateJointBelt, Assembly_CreateJointCylindrical. The existing AssemblyRuntimeProbe.cpp handler maps these commands to desktop JointObject indices 8, 4, 12, and 2. It resolves component references, creates native JointObject features, sets supported properties, solves, recomputes, and commits or aborts the document transaction. This implementation is reused. The workbench shell already passes document selection to the dispatcher. Assembly selection preparation now lives in assembly-desktop-adapter.ts, wired into that dispatcher. Empty selection subelement arrays now produce a whole-component reference instead of dropping the selected component. Explicit references retain precedence. The four selected commands validate reference shape, document ownership, assembly name, and commit-only action before dispatch. Component resolution and distinct-part checks remain native. The family record type now declares the existing args transport. Follow-up: the four selected commands now normalize omitted or empty subelements in explicit references as well as tree selections. The native handler applies the same normalization for direct family requests, validates object names, and still resolves both references through getComponentReference before creating the real joint. Null, non-list, multiple-path and non-string subelement values remain invalid. Other joint types retain their reference contract. No geometry or solver implementation is replaced. The selected native joint results now include all applicable properties present on the created joint, including defaults, and the two components' placements read from the document after solve/recompute. Position and quaternion values are serialized from FreeCAD objects; the Web layer does not calculate them. The wired Assembly response adapter requires native object identity, properties, references and finite component placements before reporting a complete result. These fields travel through the existing family Worker/Facade response to the mounted workbench result view. Build/sync must deploy the updated native module with the adapter; older module results without placements are rejected. This follow-up ran no build, gate, verification, hash or Git checks, as requested. Verification boundary: the project TypeScript check could not start because web/node_modules/.bin/tsc is absent. No build, sync, or business acceptance was run; these belong to the outer pipeline. Runtime verification must cover empty and omitted subelements, two subelements selected through an assembly root, explicit references, cross-document rejection, and real native joint results for all four types. This note is not business acceptance. Remaining workflow boundary: the native route accepts completed joint inputs; interactive connector preview and task cancellation remain unavailable and are rejected. An existing Assembly runtime document and assembly name are required. Full desktop task-dialog parity is not claimed.