12 KiB
Web CommandDoc batch checkpoint
Batch: 52d993b1d7b5b6f34864ee56, 2026-09-16.
Selected IDs: Web:desktop:Recompute, Web:desktop:Std_Alignment,
Web:desktop:Std_Copy, Web:desktop:Std_Cut.
Continuation update, 2026-09-16 08:14 UTC
No implementation change or newly accepted ID in this continuation. Read this section first next turn; reuse the source decisions below instead of spending the renewed source budget on already-read adapters and task controls.
- The authorized runner was invoked with all four selected IDs and
--reuse. It executed four cases (reused: false), took 3.919 seconds, and reported zero passed. Recompute still failsDimension edit leaves geometry pending recompute; Alignment, Copy and Cut still reportbusiness route not implemented. Attributable evidence:docs/current/business-evidence/2b3179eb653c20fce21bb04b-20260916T081404558096.json. Do not replay these unchanged failures next turn before a relevant repair. - The FIRST source read next turn must be:
python3 tools/read_implementation_source.py freecad-source/src/WebAssembly/FreeCADCoreProbe/WebViewCommands.h --start 1835 --lines 60 --reason 'Missing shape acquisition patch anchor for premature Recompute geometry update'. This turn's normal and explicitly supplemental requests were rejected withSupplemental source budget reached (16 windows / 48000 bytes). The native source exists; the early-recompute root cause is still unproven. - The actual delegated executable case file remains
tools/web-business-cases.mjs:102. The bounded reader rejects this exact file as outside the packet.tools/web-acceptance-cases.mjs:16delegates unmapped IDs to it. Include that case extension point in the next packet before inspecting or extending the selected native/browser cases. Do not modify the acceptance wrapper or verifier to evade this boundary. - Retained UI detail:
WebCommandDocTaskhas direct Recompute/Copy/Cut buttons; Alignment still falls through to the generic Review Selection/apply UI. Real point selection, native alignment solve, apply and cancel are missing. Desktop Alignment fixes the first GeoFeature, moves the second, requires at least one correspondence, and clears selection when starting its task. - Retained adapter detail: early guards validate document, PartBox ownership
and selected identities; Alignment checks two distinct identities and active
task state. Its final
DOCUMENT_COMMANDSbranch callsexecute("PartBox")for Alignment/Copy/Cut. Native rejection must remain explicit until the actual clipboard and manual-alignment implementations exist.
No build was needed because implementation files were not changed. No tests were added, no coverage tags or statuses were edited, and no contract, verifier, proof requirements or acceptance machinery was changed. Preserve all original and supplemental requirements, including the IFC semantic export contract, dependency-preserving clipboard/paste/cut/undo behavior and actual native/browser assertions. No parity/API gates, deployment, pushes or external messages were performed. The runner session completed before this checkpoint.
Continuation update, 2026-09-16 08:01 UTC
The earlier sections below remain historical context. No selected ID is accepted.
- Updated
web/src/web-desktop-adapter.tsinside theDOCUMENT_COMMANDSbranch (around line 980): Alignment, Copy, and Cut now call the existingexecute("PartBox")document-view owner. This prevents the genericpart.pythonFamilyBatchfallback from returning command metadata as success. Existing validation, native failure translation, and selection handling are reused. This correction is not an implementation of clipboard or alignment. - Confirmed
PartBoxProbe.cpp:4370is a metadata-only fallback. The operation, native flag, and recomputed flag there do not establish document mutations. - Confirmed the actual owner chain:
part.viewCommand->NativeDocumentView.h:241->executeDocumentCommandinWebViewCommands.h. That header has the existing commanddoc/recompute logic. Its lines 1886-1891 explicitly reject Copy/Cut without a clipboard handler preserving native data and Alignment without manual alignment/placement. - Recompute's native implementation is
core_recompute_commandatWebViewCommands.h:375; the commanddoc branch invokes it at 944-949. It callsdoc.recompute(None, True, not proceed)and handles transactions, dependency errors and failed recomputes. Recompute itself was not changed. - Console submission refreshes
Std_SceneInspectorinweb-desktop-adapter.ts:389-407(also a lower command wrapper near 950). Native scene shapes are collected atWebViewCommands.h:1854and tessellated at 2036-2048. The read-only inspector returns at 2049-2053 before the view transaction. Shape acquisition before tessellation is still unread and is the next anchor for investigating the early source-only geometry update.
Checks completed: project TypeScript check, static geometry-boundary check, and normal Vite build with incremental public-asset synchronization all passed. Existing WASM was reused; native files and shared dispatcher were not edited. The build still reports the existing dynamic-import/chunk-size warnings.
Attributable runner command:
python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Alignment Web:desktop:Std_Copy Web:desktop:Std_Cut --reuse
Result: 0 passed, 3 remaining, business route not implemented, 1.013 seconds.
Evidence: docs/current/business-evidence/2d502bc51d07e0ba9dbe3bf1-20260916T080135399133.json.
These cases do not reach the corrected route, so this is not browser proof of
the correction. The unchanged Recompute failure was not replayed.
Next continuation:
- First read
WebViewCommands.h:1835for 60 lines to inspect shape acquisition. Both the normal and explicitly supplemental request were rejected by the bounded reader withSupplemental source budget reached (16 windows / 48000 bytes). Do not reinterpret this as missing native source or bypass the source limit. - The executable Recompute case is
tools/web-business-cases.mjs:102, as retained previously. This turn's reader rejected that exact file because it is not in the current packet, despite it being the delegated case file named bytools/web-acceptance-cases.mjs:16. The next packet needs this actual case extension point to implement/inspect browser cases within scope. - After identifying and fixing the premature recompute cause, run the isolated Recompute acceptance ID. Preserve the existing pending-geometry assertion.
- Implement real clipboard snapshot/dependency/paste/cut/undo behavior and manual point alignment/apply/cancel in the native owner and mounted UI; add executable native/browser assertions before declaring coverage.
No contract, verifier, acceptance machinery, coverage tag, or passing status was manually edited. IFC requirements and all original/supplemental scope remain intact. No full parity/API gate, deployment, push, or external message.
Changes completed this turn
web/src/web-desktop-adapter.ts: Alignment, Copy, and Cut now reject empty or mismatched document IDs, a runtime owner other than PartBox, empty selection, and malformed document/object identities before dispatch. Alignment also requires two distinct selected identities and rejects an active task.web/src/web-commanddoc-task.tsx: added mounted Copy and Cut execution buttons using the existing execute callback and selection flow; added human-readable Copy, Cut, and Alignment titles. Alignment interaction is still incomplete.- The shared dispatcher, native sources, acceptance machinery, contracts, coverage declarations, and passing statuses were not edited.
- Existing WASM was reused. Frontend output was rebuilt with the normal Vite configuration and incremental asset synchronization.
Verification and exact first failure
Ran the authorized acceptance runner before edits:
python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Recompute Web:desktop:Std_Alignment Web:desktop:Std_Copy Web:desktop:Std_Cut --reuse
It executed four IDs in 3.918 seconds: zero passed. Evidence:
docs/current/business-evidence/2b3179eb653c20fce21bb04b-20260916T074309092482.json.
Recompute failed at Dimension edit leaves geometry pending recompute, before
the mounted Recompute button could establish its behavior. The recorded input
was document RecomputeBusiness, length 5; actual values were objects
[Source, Dependent], source volume 60, dependent volume
47.99999999999999, length 5, and other-document volume 60.
The assertion requires length 5 and source volume different from 5 * 12.
The source is already recomputed while its dependent remains at the previous
volume. This is an observation, not an established root cause. Inspect console
execution, shape access, and display refresh for an early partial recompute.
Preserve this assertion until desktop/native semantics establish the correct fix.
Alignment, Copy, and Cut were not_implemented in the executable business case
router, with no cases. This does not establish that native implementations are
absent. No new acceptance coverage is claimed for the UI/guard changes.
After edits, these checks passed:
npm --prefix web run check:geometry-boundary(static ownership only).node web/node_modules/typescript/bin/tsc --noEmit -p web/tsconfig.json.node web/node_modules/vite/bin/vite.js build web(existing chunk size and mixed static/dynamic import warnings).git diff --check -- web/src/web-desktop-adapter.ts web/src/web-commanddoc-task.tsx(these paths were untracked already, so this is not a full patch validation).
The unchanged failing browser workflow was not replayed after edits that do not address its failure. The new guards/buttons still need executable browser proof.
Continuation anchors and boundaries
- Read the missing selected native implementation at
freecad-source/src/WebAssembly/FreeCADCoreProbe/PartBoxProbe.cpp:4340(handlers begin around 4371). Read adapter fallback aroundweb/src/web-desktop-adapter.ts:938in the original packet; the added guard shifts that anchor by 21 lines. Preserve dependency and clipboard semantics. - The existing Recompute browser case is
tools/web-business-cases.mjs:102, failing at line 135. The case is reached throughtools/web-acceptance-cases.mjsfor unmapped IDs. Recompute routes through PartBox document view; the other three currently reach the generic commanddoc family. Trace native ownership before changing routing. - Desktop semantics read from
freecad-source/src/Gui/CommandDoc.cpp: Cut delegates to the active view; Copy uses the focused view or selection MIME data; Alignment requires exactly two GeoFeatures, fixes the first and moves the second, starts manual alignment with at least one point, and clears selection. Do not substitute placement-copying for point alignment. - Complete native clipboard snapshot/dependency/paste/cut/undo semantics and point alignment apply/cancel behavior as necessary after reading those owners. Add actual native/browser assertions for all selected commands using existing acceptance case extension points; do not modify the runner/verifier to pass.
- This turn's bounded reader reached its source budget and rejected both the
adapter window at 938 and the native window at 4340, including an explicitly
requested supplemental window:
Supplemental source budget reached (16 windows / 48000 bytes). The files and native anchors exist. Resume with those windows when the scheduler replenishes the budget; do not bypass it. - Keep the IFC semantic export contract and every original/supplemental requirement intact. No IFC work, parity/API gates, deployment, pushes, or external messages were performed. The four selected records remain pending.