Files
FreeCADWasmDev/docs/current/PART_DIRECT_COMPOUND_JOIN_PROGRESS.md

78 lines
4.4 KiB
Markdown

# 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`.