129 lines
7.0 KiB
Markdown
129 lines
7.0 KiB
Markdown
# CommandDoc continuation checkpoint
|
|
|
|
Batch `00ef5bef1e68ef4dd83c012d`, 2026-09-16.
|
|
Selected: Recompute, Std_Alignment, Std_Cut, Std_Edit.
|
|
Batch remains incomplete. This turn changed executable business cases only;
|
|
the existing application, native implementation and published WASM were reused.
|
|
|
|
## Recompute: first attributable pass
|
|
|
|
The previous failure occurred before Recompute was invoked. A direct edit of
|
|
Part::Box.Length immediately updated the source shape, while its dependent
|
|
remained stale. The case had assumed both shapes would remain pending.
|
|
|
|
Changed the fixture in `tools/web-business-cases.mjs` to add a native
|
|
App::FeaturePython object named Dimensions with an App::PropertyLength Length.
|
|
Source.Length is driven by `Dimensions.Length`; Dependent.Length remains
|
|
driven by `Source.Length * 2`. Editing Dimensions.Length now leaves both
|
|
expression-driven shapes pending. No callback, replacement geometry or
|
|
frontend recompute was introduced. The original pending-source-geometry check
|
|
is retained and strengthened with pending dependent geometry, source dimension
|
|
and native dependency assertions. After the mounted Recompute button, both
|
|
native volumes, evaluated source dimension, object identities, selection and
|
|
separate-document geometry are checked for lengths 5 and 7. Missing-document
|
|
rejection and mounted viewport rendering remain covered.
|
|
|
|
Desktop source CommandDoc.cpp:1665 calls recompute(None,True,True); existing
|
|
WebViewCommands.h:375 uses the same native forced recompute path. No application
|
|
patch or WASM rebuild was needed for this case correction.
|
|
|
|
Command:
|
|
`python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Recompute --reuse`
|
|
|
|
Result: passed, 15 cases / 15 assertions, 7.317 seconds, executedCount 1,
|
|
reused false. Evidence:
|
|
`business-evidence/f789cb10d0133307f022823d-20260916T114720186275.json`.
|
|
|
|
Subsequent Cut/Edit case additions changed the shared case file. A final
|
|
combined --reuse command was refused with exit 78,
|
|
`previous_validation_deferred`, deferredIds `[Web:desktop:Recompute]`,
|
|
executedCount 0: "User paused repeat validation; select only newly completed
|
|
gaps. Historical proof is not promoted to current acceptance." Do not bypass
|
|
that policy, edit acceptance state, or represent the historical pass as fresh
|
|
proof for the final case-file fingerprint. Preserve the successful execution
|
|
and let the normal scheduler/runner handle its eligibility.
|
|
|
|
## Cut: narrowed failure to undo restoration
|
|
|
|
Added a semantic assertion before the Cut operation: copy the same selected
|
|
Dependent object, then inspect the original object's OutList, expression,
|
|
volume and undo count. This passes. Original OutList contains Source (twice),
|
|
expression is `Source.Length * 2`, volume is 48 and undo count remains zero.
|
|
Thus temporary clipboard snapshot creation/closure does not erase the link.
|
|
|
|
Cut removes only Dependent and preserves Source. Undo restores Dependent's
|
|
volume 48 and expression text, but OutList is empty; state is Touched, undo
|
|
count 0 and redo count 1. The original strict dependency assertion is retained.
|
|
Do not fix this by synthesizing returned dependencies or weakening that check.
|
|
|
|
Command:
|
|
`python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Cut --reuse`
|
|
|
|
Result: acceptance_incomplete, 6.836 seconds. Evidence:
|
|
`business-evidence/8cdd05fbdb4a27da732f36e5-20260916T114827012153.json`.
|
|
|
|
Next patch investigation: native transaction deletion/undo restoration and
|
|
PropertyExpressionEngine dependency registration. Current packet provides
|
|
the wrapper at WebViewCommands.h:1071 (`doc.undo()`), not the needed App
|
|
implementation anchors. Earlier evidence already showed recompute and resetting
|
|
expression text did not repair the link. Source is supplied locally; obtain
|
|
the appropriate bounded App source anchors in the next packet, rather than
|
|
repeating the unchanged failure or treating the source as absent.
|
|
|
|
## Edit: executable case reveals missing GUI owner
|
|
|
|
Added a focused Std_Edit browser/native case using the existing mounted Edit
|
|
Selection button and a real native Part::Box. It requires the response to
|
|
identify the native editing object, checks FreeCADGui.getDocument().getInEdit(),
|
|
unchanged native geometry in two documents, finish/toggle lifecycle, and invalid
|
|
selection rejection. Only the first assertion executed this turn: it failed
|
|
with `native_command_failed: No module named 'FreeCADGui'`.
|
|
|
|
The remaining assertions are executable but unexecuted and are not evidence
|
|
of working editing. No coverage tag or successful status was added to mask it.
|
|
|
|
Command:
|
|
`python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Edit --reuse`
|
|
|
|
Result: acceptance_incomplete, 3.973 seconds. Evidence:
|
|
`business-evidence/6097a992e376ebeaa624bd90-20260916T114955341216.json`.
|
|
|
|
Relevant anchors: desktop CommandDoc.cpp:1915 toggles the active native
|
|
ViewProvider. WebViewCommands.h:1177 imports FreeCADGui and calls setEdit/resetEdit.
|
|
web-desktop-adapter.ts:762 sends Edit through the PartBox document-view endpoint;
|
|
web-commanddoc-task.tsx:135 mounts begin/finish controls. The next implementation
|
|
must connect real provider editing to the owning native document and mounted
|
|
task. A synthetic editing flag or generic property panel is insufficient.
|
|
Inspect supplied GUI/ViewProvider ownership and existing compiled capabilities
|
|
before selecting an incremental target. Do not move the document to an unrelated
|
|
runtime merely to make FreeCADGui importable.
|
|
|
|
## Alignment and retained boundaries
|
|
|
|
Std_Alignment remains unresolved and was not rerun. The existing adapter checks
|
|
two distinct selections and no active task; native execution is rejected at
|
|
WebViewCommands.h around 2044. Desktop CommandDoc.cpp:1841 uses ManualAlignment,
|
|
fixes the first GeoFeature, moves the second, and requires point correspondences.
|
|
The next packet needs the supplied ManualAlignment solver/task source anchors,
|
|
actual correspondence selection, apply/cancel, placement transaction and native
|
|
geometry assertions. Generic review controls are not that workflow.
|
|
|
|
Retain the previous checkpoint's Export boundary: STEP preserves source BREP
|
|
and native geometry; IGES round trip has expected volume/bounds but zero solids
|
|
where the existing case expects two. No export assertions were changed here.
|
|
Duplicate Selection's prior 19-assertion pass was not rerun.
|
|
|
|
All original and supplemental requirements remain in scope, including semantic
|
|
IFC. IFC_SEMANTIC_EXPORT_CONTRACT.md, independent verifier, proof areas, acceptance
|
|
contracts, runner, wrapper, and passing statuses were not edited. No proxy IFC
|
|
claim, full-parity/API gate, deployment, push or external message occurred.
|
|
|
|
## Command diagnostics and final state
|
|
|
|
Initial unscoped `git status --short` was rejected with exit 64 by scheduler scope
|
|
guards; later scoped status succeeded. Relevant existing source/case files are
|
|
untracked, so ordinary git diff does not establish their edit history.
|
|
The final combined acceptance request was deferred as recorded above; no retry
|
|
override was used. All started command sessions completed. No build, asset sync
|
|
or persistent dev server was needed because application sources were unchanged.
|