6.8 KiB
CommandDoc continuation checkpoint
Batch 9a1666895f9346688d82c7e0, 2026-09-16.
Selected: Std_Alignment, Std_Cut, Std_Edit, Std_Export.
Std_Cut now has a fresh attributable acceptance pass. The batch remains incomplete.
Preserve all original and supplemental requirements and the previous checkpoint:
docs/current/web-commanddoc-00ef5bef1e68ef4dd83c012d-checkpoint.md.
Cut: native transaction fix and browser/native acceptance
Root cause: PropertyXLinkContainer::breakLink in
freecad-source/src/App/PropertyLinks.cpp cleared its owner's dependency maps
without property-change notification when that owner was removed. The undo
transaction therefore had no expression-property snapshot to replay.
TransactionDocumentObject::applyNew reattached the object and consulted its
empty dependency cache; expression text and geometry survived, but links did not.
The owner-removal branch now calls aboutToSetValue() before clearing links and
qualified PropertyLinkBase::hasSetValue() afterward. The first call records the
property for native transaction replay; the second invalidates the object's
out-list cache and emits the normal change notification without invoking the
derived expression engine while its owner is being removed. Undo's existing
property Paste path restores real dependencies and backlinks after all deleted
objects have been reattached. No synthetic dependency response, replacement
geometry, frontend undo implementation, or expression-text repair was added.
The existing mounted command chain remains in use:
workbench-shell.tsx -> desktop-command-dispatcher.ts ->
web-desktop-adapter.ts -> PartBox document-view owner ->
WebViewCommands.h -> native document transactions.
No application wiring changes were required.
Extended tools/web-business-cases.mjs with assertions for:
- Repeated Cut undo/redo followed by a source length edit: dependent length 6, volume 72, actual dependency and backlink, unrelated document volume 1000.
- Native deletion and undo of both source and dependent in both deletion orders, retaining names, volume, dependencies and backlinks.
All prior strict assertions remain, including selected-only removal, expression restoration, clipboard snapshot independence after source edits and closure, name collisions, repeated paste identities, undo of the whole pasted set, temporary-document cleanup, and mounted viewport rendering.
Build and sync commands completed successfully:
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_Cut --reuse
The focused build compiled PropertyLinks.cpp, relinked FreeCADApp and the two requested targets. Existing Emscripten pthread/memory-growth and invalid FS_readFile/FS_readdir export warnings remain. Asset sync copied six files; preview sync verified nine artifacts and copied two. No frontend source changed.
Acceptance: passed, 21 cases / 21 assertions, 12.811 seconds, executedCount 1,
reused false, exit code 0. Evidence:
docs/current/business-evidence/8cdd05fbdb4a27da732f36e5-20260916T115853618800.json.
Browser screenshot: docs/current/web-Std_Cut-1789559933020.png.
No later case-file changes invalidate this execution within this turn.
Current SHA256 values:
- PropertyLinks.cpp:
d615d19c28db529f10b5e647db7f9c69be99fa7c008c2fabfba9c36e8d10bbce. - Published PartBox WASM:
ddeea6f4c06e073980b7e4ac0d28b90dd10f776fb460dff51811401fe227126a. - Published DocumentProbe WASM:
4a245303505e6721801c1b26c9a6e9467cf0b9dd13af8c856a38d64fbdde978e.
Remaining selected work
Std_Edit: prior first error remains No module named 'FreeCADGui' from the
owning PartBox runtime. Existing executable cases and mounted Edit Selection
controls remain. Connect actual native ViewProvider editing to the owning
document, including finish/toggle, selection validation and geometry isolation.
Do not substitute an editing flag or move the document to an unrelated worker.
Next source investigation needs GUI/ViewProvider build and ownership anchors.
Std_Alignment: remains unimplemented at the native command boundary. Desktop CommandDoc.cpp:1841 uses ManualAlignment, fixing the first GeoFeature and moving the second through point correspondences. Continue with supplied ManualAlignment solver/task sources, correspondence selection, apply/cancel and placement undo. No Alignment acceptance was claimed or rerun.
Std_Export: preserve the prior STEP/source-BREP success and the unresolved IGES round-trip result (volume/bounds correct, zero solids where two are required). Next investigate the supplied Part/OCCT IGES writer and its BREP export settings. The initial exact-file search of ImportIges.cpp, TopoShape.cpp and AppPartPy.cpp was refused by the source-budget guard before execution; no conclusion about those files' content or availability was drawn. Do not weaken the solids check. Existing mounted export, filename/selection rejection, isolated documents and source-history invariants remain required. Export was not rerun unchanged.
Retained scope and operational state
IFC semantic export remains mandatory and unaccepted under the unchanged
docs/current/IFC_SEMANTIC_EXPORT_CONTRACT.md. Preserve independent imported IFC
and authored BIM cases, native class/GlobalId identity, hierarchy and placements,
units, typed properties/quantities, materials/classifications, edits/additions/
deletions, failure atomicity and all required proof areas. The contract records
identity progress but remaining property/hierarchy failures. Proxy geometry is
not semantic acceptance. No IFC contract, verifier, proof tags or machinery changed.
Historical Recompute (15 assertions) and Duplicate Selection (19 assertions) results remain historical. They were not rerun or promoted to current proof after this native/case-file change; normal runner fingerprint policy applies. The previous Recompute repeat-validation deferral is retained.
Initial unscoped git status was rejected (exit 64); scoped status succeeded.
One guessed App source filename, TransactionObjects.cpp, did not exist; the
actual implementation was found in Transactions.cpp. Later ordinary source
reads reached the scheduler source budget and were stopped. No reader or
validation guard was bypassed, and no supplemental source windows were consumed.
git diff --check returned zero, but relevant source files are untracked, so
this is not an independent patch-history check.
All started build, sync and acceptance sessions completed. No persistent server was started. No full-parity/API gate, deployment, push, external message, manual passing-status edit, or acceptance machinery modification occurred. Next turn should reuse Cut's evidence when eligible and advance an unresolved selected behavior using the supplied local implementation anchors.