Files
FreeCADWasmDev/docs/current/web-commanddoc-041ba16da3c24298bf7655b9-checkpoint.md

6.9 KiB

CommandDoc continuation checkpoint

Batch 041ba16da3c24298bf7655b9, 2026-09-16. Selected: Recompute, Std_Alignment, Std_Cut, Std_DuplicateSelection. The batch is incomplete. One selected requirement received its first formal pass.

Completed and attributable evidence

Added executable browser/native cases for Web:desktop:Std_DuplicateSelection in tools/web-business-cases.mjs. Reused the existing mounted task, adapter, PartBox owner and native doc.copyObject(selected, recursive) implementation. No replacement duplicate implementation or shared dispatcher change was needed.

The cases exercise mounted Review Selection and Apply, stale/empty/subelement selection rejection, invalid recursion options, unchanged preview/source state, copied identities, recursive group membership remapping, native BREP/volume, independent editing, undo/redo, shallow duplication and cross-document copying. Cross-document duplication is allowed by desktop CommandDoc.cpp:1294: it takes the complete selection and imports into the active destination. The initial new test incorrectly expected rejection; corrected it to assert a real copy and source preservation. This was a case expectation correction, not an application behavior change or a weakened proof requirement.

Formal command:

python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_DuplicateSelection --reuse

Result: passed, 19 cases / 19 assertions, executedCount 1, reused false, 12.392 seconds. Evidence: business-evidence/8a6df807ab325659d1e136ba-20260916T114209788034.json. Do not rerun this accepted requirement merely to refresh its timestamp.

Export failure continuation

The previous continuation had already changed WebViewCommands.h:1150 to export deep obj.Shape.copy() copies in a temporary native document and restore the active document in finally. Source was newer than published PartBox WASM. This turn completed the affected incremental build:

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

Both targets linked successfully. Existing compiler warnings remain (long embedded script literal, copied QJsonArray loop value, pthread memory-growth warning, and invalid FS_readFile/FS_readdir runtime-method export warnings). Preview sync verified nine artifacts and copied four. Current published WASM:

  • PartBox: 2a46b243e1d53570de9ef3f105e6f0e9ddc350266514c3d7a9920f1666ddebf3.
  • DocumentProbe: 24148e453b9897d5db91c5dd70033b4eab5abf02beb5a0d65ff6fa1010f87bdc.

The first combined runner command executed Export and DuplicateSelection in 14.5 seconds. Evidence: business-evidence/9c0ac8f41fc6ef397f208439-20260916T114040225325.json. Export now passes the PartBox STEP byte comparison, native round trip (two solids, volume 84, bounds [4,11,13,33,44,55]) and exact source BREP/history preservation. The deep-copy fix is confirmed for that stage.

Current first export failure is IGES native round trip: valid shape, volume 83.99999999999997, expected bounds, but zero solids. The case expects two. BREP export and the DocumentProbe owner were not reached. Keep their assertions and this failure. Inspect the local Part IGES writer/importer and its solid vs surface settings before deciding the correct implementation or format-specific assertions; do not merely remove the solids check. Those source files are not in this packet and were not read. No IFC proxy export was substituted: the standard exporter still explicitly rejects .ifc.

Selected remaining boundaries

  • Recompute: historical first failure remains pending source geometry at length 5. Source volume is already 60 while dependent volume is still 48. getPropertyByName('Shape') inside the edit submission itself already sees volume 60, before the subsequent UI refresh. Source/native semantics still need diagnosis before changing the pending-geometry assertion. No change or repeat execution was made this turn. Evidence: business-evidence/f789cb10d0133307f022823d-20260916T101657225295.json. Current case near tools/web-business-cases.mjs:398; source recompute helper WebViewCommands.h:375 and command branch :1053. Follow Part::Box property change/shape generation in supplied local sources in the next packet.
  • Std_Cut: native serialization/removal exists and browser cases exist. Undo restores volume 48 and expression text Source.Length * 2, but Dependent's OutList is empty. Historical diagnostics show recompute/resetting expression did not restore it. Preserve the dependency assertion and repair native transaction/expression restoration, not just a returned dependency list. Evidence: business-evidence/8cdd05fbdb4a27da732f36e5-20260916T102546358716.json. Current case near tools/web-business-cases.mjs:345; native headless Undo calls doc.undo() at WebViewCommands.h:1071. No unchanged retry this turn.
  • Std_Alignment: adapter validates two distinct selected identities and no active task, but native WebViewCommands.h:2044 explicitly rejects execution. Generic Review/apply controls are not a manual alignment task. Desktop CommandDoc.cpp:1841 fixes first GeoFeature, moves second, configures ManualAlignment with at least one point correspondence, clears selection, and preserves camera/navigation setup. Need supplied ManualAlignment solver source in the next packet, actual point selection/task/apply/cancel, native placement transaction and browser/native cases. Do not replace the solver with a fixed placement or claim metadata as alignment.

Scope and diagnostics

All original 1507 requirements and the supplemental semantic IFC requirement remain in scope. Preserve IFC_SEMANTIC_EXPORT_CONTRACT.md, its independent verifier and all proof areas. IFC_MEMBERSHIP_PROGRESS.md records prior IFC4 acceptance across 13 proof areas and its explicit unsupported edits/classes; this turn did not repeat or broaden that acceptance. Proxy geometry remains insufficient evidence for semantic IFC.

No contract, verifier, proof-area requirements, acceptance wrapper/runner, coverage tags or passing statuses were manually changed. Only the executable business case file and this checkpoint were manually edited this turn; builds and sync updated generated artifacts. No API/full-parity gate, deployment, push or external message. All command sessions have completed.

Initial unscoped git status and directory search were rejected by scheduler scope guards. Scoped status succeeded. One fast_source_search invocation used unsupported --max-matches and returned usage. Tool discovery with --help was not supported by the two sync scripts: sync-assets actually performed a sync; sync_preview_modules rejected module '--help' before mutation. Correct sync commands completed after the build. These are command diagnostics, not CAD failures. git diff --check returned zero, but the implementation/case files are already untracked, so that is not substantive patch validation.