Files
FreeCADWasmDev/docs/current/Web-desktop-mixed-checkpoint.md

5.9 KiB

Web desktop mixed batch checkpoint

Batch: cc505e5b4bd8332d9f954a9d, 2026-09-16.

Selected IDs: Web:desktop:Std_MacroStartDebug, Web:desktop:Std_SaveCopy, Web:desktop:Std_SelectAll, Web:desktop:Std_ToggleFreeze.

Changes

  • Added executable mounted-browser cases to tools/web-business-cases.mjs, using existing native PartBox WASM and the existing command UI. No acceptance contract, runner, verifier, passing evidence, or coverage tags were edited.
  • Changed web/src/web-desktop-adapter.ts debugger endpoint selection to use part.pythonFamilyBatch for start, step, stop and breakpoint commands. The existing generated macro routes cannot be assumed to select this endpoint.
  • Built frontend with npm run build. Geometry ownership audit, TypeScript and Vite passed; native WASM assets were reused. The standalone npm run check:geometry-boundary invocation resolved at workspace root and lacked that script; the build's actual web prebuild ran it successfully with zero findings.
  • After the last run, adjusted the browser command helper to accept the native macro-family exposed success envelope for debugger commands only. PartBoxProbe.cpp:4249 emits this status on successful native macro operations. Semantic debugger assertions remain required. This final case-helper change has not been rerun.

Attributable evidence

  1. docs/current/business-evidence/c9dcc751d9233591eb309363-20260916T151311659457.json: four selected cases executed in 15.661 seconds; SaveCopy passed, three failed.
  2. docs/current/business-evidence/57c4e2684247b9f88468c0a6-20260916T151521646792.json: only the three failures executed after edits/build, in 13.808 seconds; SelectAll and ToggleFreeze passed, MacroStartDebug failed.

SaveCopy assertions cover cancellation, native-path and OPFS-name collision rejection, original filename/label/history/file-byte preservation, exact FCStd ZIP bytes in OPFS, and native reopening with edited solid volumes 60/120, expressions, groups and metadata preserved.

SelectAll assertions cover replacing stale foreign selection with every native document object including groups, displayed selection identities, repeat/no geometry mutation, missing-document rejection, and empty-document selection. A native console inspection refreshes scene selection; the case restores selection before testing a rejected command.

ToggleFreeze assertions cover initial and mixed frozen states, duplicate selection deduplication, invalid selection prevalidation, unchanged solid geometry and dependencies, frozen dependent volume remaining 48 while source changes to 60, unfreezing/recompute updating dependent volume to 120, and toggling objects across two documents. Opening native transactions did not add UndoCount entries for freeze state flags; the initial assumption of undoable freeze was removed, not represented as passing undo proof.

The passing reports are historical evidence at their recorded fingerprints. Later shared case/adapter/build changes may invalidate automatic reuse; do not manually change statuses or fingerprints. Finish the missing debugger behavior before a final selected-ID runner invocation.

First remaining failure and continuation boundary

Std_MacroStartDebug returns facade error unsupported_command, message Part native dispatch command is not registered, diagnostic command Std_MacroStartDebug, request module-part-12. This occurs before the debugger's initial-pause assertion. It persisted after the explicit endpoint correction and frontend rebuild.

Known path:

  • DesktopCommandDispatcher.execute invokes executeWebDesktop for Web commands before generic dispatch.
  • web-desktop-adapter.ts forwards StartDebug through its macro branch with family desktop-command-commandmacro to part.pythonFamilyBatch.
  • web/src/part.worker.ts imports dispatchPartPythonFamily from ./part-python-family-facade.js; this family uses the live PartBox kernel.
  • freecad-source/src/WebAssembly/FreeCADCoreProbe/PartBoxProbe.cpp:4223 already handles start/step/stop/breakpoint in the macro family, calls executeWebMacroCommand, and maps native success to exposed.
  • WebMacroCommands.h:138 contains a real bdb/threading debugger, with pause, continue, breakpoint, locals and stop behavior. Do not replace it with synthetic debugger state.
  • NativeDocumentView.h:406 does not include debugger commands in its macro-command dispatch list. Moving debugger commands to the document-view route would require native and frontend registration work and a targeted rebuild; do not assume this is necessary before inspecting the existing family dispatch guard.

Required next source packet: add web/src/part-python-family-facade.ts and the native-dispatch registration source/manifest it imports. The attempted authorized source-reader call for that exact facade file returned IMPLEMENTATION_SOURCE_WINDOW_REJECTED: Use an exact source/support/native-match file named by the current packet; no directory scans. This is a packet scope boundary, not missing business source. Do not bypass it with direct reads or directory scans.

Next action: inspect and repair the missing debugger registration in the existing Part family facade/native dispatcher, with the smallest applicable generated registry fix. Then rebuild/sync only affected frontend/native targets and run python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_MacroStartDebug --reuse. The existing debugger case checks initial pause without mutations, breakpoint continuation and locals, completion with actual OCCT volumes 84/168, missing-source rejection and stop-before-edit. Continue from its first real failure. After it passes, use the runner for the four selected IDs, reusing unchanged proof where supported.

No IFC implementation or semantic contract changed. Preserve docs/current/IFC_SEMANTIC_EXPORT_CONTRACT.md and all original/supplemental requirements. No full-parity/API gate, deployment, push or external message was run. All acceptance and build processes started here have finished.