7.0 KiB
CommandDoc continuation checkpoint
Batch eba17362c96c85c7ece4a508, 2026-09-16.
Selected: Std_Edit, Std_Export, Std_Expressions, Std_Import.
Std_Export now has a fresh attributable acceptance pass. The batch remains
incomplete. Preserve all original and supplemental requirements, including
the retained work in web-commanddoc-9a1666895f9346688d82c7e0-checkpoint.md
and its predecessor checkpoints.
Export fix and evidence
The previous IGES failure was native writer mode: Part.export builds a compound and calls TopoShape::write, whose IGES branch uses IGESControl_Writer's default mode. Surface mode preserved measured volume/bounds but reopened with zero solids. Local anchors: AppPartPy.cpp:969, TopoShape.cpp:869 and Interface.cpp:192. The existing OCCT writer supports write.iges.brep.mode.
Changed only the native command wrapper in
freecad-source/src/WebAssembly/FreeCADCoreProbe/WebViewCommands.h and executable
cases in tools/web-business-cases.mjs. A scoped native guard initializes the
existing IGES controller, saves the runtime's writer setting, enables BREP mode
for Std_Export .iges/.igs requests and restores the setting on every return.
The existing detached shape copies and temporary destination remain in use.
No Part/OCCT algorithm, public Part Python API, shared desktop dispatcher,
frontend component, acceptance contract or machinery was changed.
Existing mounted chain reused: workbench-shell.tsx -> desktop-command-dispatcher.ts -> web-desktop-adapter.ts -> PartBox/DocumentProbe document-view owner -> WebViewCommands.h -> Part.export -> TopoShape::write -> OCCT writer.
Added actual native comparisons of the ordinary IGES writer before and after successful/rejected Std_Export requests. The test explicitly starts in surface mode and exports detached copies, avoiding mutation of the source fixture. The ordinary writer returns zero solids before/after; Std_Export returns two. Existing strict assertions remain: selected-only objects, valid solids, native volume 84, rotated/translated bounds [4,11,13,33,44,55], exact download bytes, unchanged source BREP/labels/state/history, independent document volume, invalid selections/paths/formats/operations, mounted export form and cancellation.
Completed commands:
python3 tools/web_build_lock.py -- cmake --build freecad-source/build-web/configure --target FreeCADWebPartBoxProbe FreeCADWebDocumentProbe -j8
node tools/sync-assets.mjs
node tools/sync_preview_modules.mjs Part Web
python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Export --reuse
Both affected probe translation units compiled and linked. Existing warnings remain about long embedded scripts, macro loop copies, pthread memory growth and FS_readFile/FS_readdir runtime exports. Sync copied six artifacts; preview sync verified nine and copied two. No frontend rebuild was necessary.
Acceptance: passed, 60 cases / 60 assertions, 27.335 seconds, executedCount 1,
reused false, exit code 0. Evidence:
business-evidence/c6543452b88e7f248cb61361-20260916T120705775824.json.
Downloads and two browser screenshots:
web-shape-export-business/1789560399924/.
Both owners reopened STEP, IGES and BREP with two valid solids, volume within
floating-point tolerance of 84 and the exact expected bounds. No subsequent
source or case edits occurred after this acceptance run.
SHA256:
- WebViewCommands.h:
10418edbeb786b23cabfe9d77050c36657abac9ca1c68988a8c35ea822a517ad. - web-business-cases.mjs:
41920b01ec61561c0911809787d33989d79f5bc0655bfefc8eb37fe72f6773c8. - Published PartBox WASM:
480b388c707b28178a7c2fc05302bdaebd06d36f5bc0e50a3a0e7a51563a1015. - Published DocumentProbe WASM:
655e0c78f8fed9208d58331acd707af44f3072facff1b70f2977a2827dac97ca.
Remaining selected work
Std_Edit: retained first error is No module named 'FreeCADGui' in the owning PartBox runtime. Existing native/browser cases and mounted Edit Selection controls remain. Connect actual native ViewProvider editing to this document owner, including begin/finish/toggle, invalid selection and geometry isolation. Do not replace provider editing with a synthetic flag or unrelated runtime. Inspect supplied GUI/ViewProvider build and owner anchors before choosing a focused incremental target. No unchanged Edit failure was rerun.
Std_Expressions: no implementation or acceptance was added this turn. Read desktop CommandDoc.cpp:1982-2042: action 0 copies selected objects, 1 copies the active document, 2 copies all documents and 3 pastes expressions, using copyExpressions/pasteExpressions. Continue with those supplied helper anchors, actual expression dependencies, clipboard/application UI, native transactions, cross-document identity and undo/redo. Current route registration alone is not semantic implementation or acceptance.
Std_Import: no implementation or acceptance was added this turn. Continue from supplied CommandDoc.cpp:195 and existing import/open ownership workflows. Retain insertion into the intended native document, source file bytes, supported format dispatch, native geometry, cancellation, failed-import atomicity and independent-document checks. Do not treat Std_Open proof as Std_Import proof.
Retained prior work: Alignment still needs the real ManualAlignment solver and point correspondences, fixed/moving objects, apply/cancel and placement undo. Cut's prior 21-assertion pass and Recompute/Duplicate Selection historical passes are preserved; this turn did not rerun or promote them after shared wrapper/case/artifact changes. Use normal runner fingerprint/reuse policy.
IFC and operational state
The previous CommandDoc checkpoints carried stale IFC property/hierarchy
failure boundaries. This turn found the newer existing
IFC_MEMBERSHIP_PROGRESS.md, also referenced by the current migration rules.
It records IFC4 semantic evidence
business-evidence/266816da4ea763887c126a8a-20260916T023700353278.json:
46 scenarios, 66 assertions, all 13 declared proof areas and the unchanged
independent verifier. Preserve that historical evidence and its explicit
supported-class, hierarchy, property, membership and schema limits. It was
not rerun, re-certified or counted as new delivery here. The complete unchanged
IFC_SEMANTIC_EXPORT_CONTRACT.md remains mandatory; proxy geometry does not
satisfy it and unsupported semantics must not be silently dropped.
No contract, verifier, proof-area requirement, coverage tag or passing status was edited. No full-parity/API gate, deployment, push or external message ran. All build, sync and acceptance sessions completed. No persistent server was started; the existing acceptance harness managed its browser execution.
Diagnostics: unscoped git status was rejected (64), scoped status succeeded. Two guessed source paths (ImportExport.cpp and TopoShapePy.xml) did not exist; the actual export implementation was found in AppPartPy.cpp/TopoShape.cpp. The scheduler rg wrapper rejected --files; no bypass was attempted. Ordinary bounded reads succeeded and no supplemental source windows were needed. git diff --check returned zero, but the relevant files are untracked, so this does not constitute an independent patch-history check.