Files
FreeCADWasmDev/docs/current/PART_DIRECT_COMPOUND_JOIN_PROGRESS.md

4.4 KiB

Direct Compound and Join Checkpoint

Batch: cf5ac949ddca3a37f225bb64, 2026-09-17.

Selected requirements: Part:desktop:Part_ExplodeCompound, Part:desktop:Part_JoinConnect, Part:desktop:Part_JoinCutout, Part:desktop:Part_JoinEmbed.

Implementation

  • Reused the existing DocumentProbe WASM, document facade, compound/join task panels, native linked features, and native/browser business cases.
  • Added Part_JoinEmbed to the direct mode mapping in web/src/part-desktop-adapter.ts. It invokes the existing createJoin document action with joinMode: embed, preserving validation and transaction ownership.
  • Mounted the existing Join task for Embed in web/src/workbench-shell.tsx, with its operation fixed to Embed. Extended the task's fixedMode type in web/src/part-join-task.tsx accordingly.
  • Extended directCompoundJoinModes in tools/part-business-cases.mjs so Embed executes the existing native and browser assertions. Its browser fixture must produce one linked valid 1800 mm3 FeaturePython object; Cutout remains 800 mm3.
  • Desktop source BOPTools/JoinFeatures.py confirms Embed requires two selected objects and retains Base/Tool links through FeatureEmbed and embed_legacy.
  • No native geometry implementation, WASM artifact, acceptance contract, verifier, proof requirements, or passing status was manually changed. No full build, deployment, push, or IFC validation was performed.

Execution Evidence

All commands used python3 tools/run_business_acceptance.py --module Part --ids <ID> --reuse. Each isolated run returned passed: 1, no remaining IDs, and no pending issues:

Command Seconds Evidence under docs/current/business-evidence
Part_JoinConnect 15.405 610ee890ca92a1ee2d52e186-20260917T065813277264.json
Part_JoinEmbed 13.492 d346ba07173471fc8b0a0065-20260917T065849868416.json
Part_ExplodeCompound 13.653 34e5d87706318b2119fb9bce-20260917T065926900214.json
Part_JoinCutout 12.890 4cb847385529414fa973687b-20260917T070006735322.json

Assertions exercise measured geometry, valid topology, actual document links, source visibility, one transaction, source-edit recomputation, invalid input and cancellation preservation, undo/redo, FCStd reopen, mounted command controls, OPFS FCStd bytes, and desktop/mobile canvas pixels. Screenshots are under docs/current/business-artifacts/<command>/. Embed desktop and Explode mobile panel screenshots were visually inspected and showed the expected geometry.

web/node_modules/.bin/tsc --noEmit -p web/tsconfig.json passed after extending the fixedMode type. Scoped git diff --check passed.

Recovery and Remaining Boundaries

  • The initial three-ID run hit the unchanged 180-second runner limit after all three native cases and the Explode browser case completed, during Connect's browser stage. No acceptance pass was attributed to that timed-out run. The isolated runs above succeeded without increasing limits or changing assertions.
  • Connect and Embed passed before the final TypeScript-only fixedMode union edit; Explode and Cutout passed after it. A final four-ID --reuse request returned previous_validation_deferred, exit 78, executedCount 0, for all four IDs. Policy reason: repeat validation is paused and historical proof is not promoted to current acceptance. Preserve this distinction; do not bypass the policy or manually refresh statuses/fingerprints.
  • The unchanged Part contract's coveredIds and remainingBoundaries still carry older coverage metadata for these commands. This turn did not modify that contract to force the scheduler preflight to pass. Use the runner evidence and its policy result when continuing; do not equate metadata with missing code.
  • These fixtures use native solid boxes and compound children. They do not establish every shell/wire join behavior or complete Part parity. All original and supplemental requirements remain in scope, including the unchanged IFC semantic export contract; proxy geometry is not IFC semantic completion.
  • Continue with the next permitted missing business behavior. Reuse the above source anchors and evidence; do not replay this unchanged passing batch merely to refresh timestamps. If the scheduler selects it again, retain the explicit previous-validation deferral and metadata boundary.

The existing browser server at http://127.0.0.1:5180 was reused. Embed is mounted at /workbench.html?module=Part&command=Part_JoinEmbed.