Files
FreeCADWasmDev/docs/current/web-commanddoc-2e9813adcba58626f828290e-checkpoint.md

6.0 KiB

CommandDoc continuation checkpoint

Batch: 2e9813adcba58626f828290e, 2026-09-16. Selected IDs: Web:desktop:Std_Delete, Web:desktop:Std_DependencyGraph, Web:desktop:Std_DuplicateSelection, Web:desktop:Std_Edit.

Actual result

No application implementation changed and no ID newly accepted in this turn. The authorized acceptance runner completed:

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

It executed all four IDs (reused: false), with zero passed, in 0.812 seconds. All four report business route not implemented from the executable case router. Evidence: docs/current/business-evidence/fb253b7acd070613e94b8b8a-20260916T093027066064.json. This is a missing-case result, not proof that the application routes are absent. Do not repeat this unchanged batch before implementing the cases or repairing a relevant input. No build or sync was needed because implementation files were unchanged. No other test or browser session was started.

Retained source decisions

  • web/src/web-desktop-adapter.ts:758: all four selected commands already enter isCommandDoc(command) && !statefulCommandDoc.includes(command). They call Part's viewEndpoint(owner) for PartBox or DocumentProbe, preserving the supplied operation. Responses pass validCommandDoc; changed results update selection and refresh the scene via Std_SceneInspector. Do not reroute these commands based on the later fallback around line 980: that fallback is not the selected commands' active branch.
  • WebViewCommands.h:1008: dependency graph uses native doc.DependencyGraph, doc.Objects and each object's OutList to return nodes and directed edges.
  • WebViewCommands.h:1014: selection resolves actual native document objects, rejects stale identities and subelements, and removes duplicates.
  • WebViewCommands.h:1025: Edit imports FreeCADGui and requires Gui.getDocument(document_id). It calls getInEdit, setEdit(name, 0) and resetEdit for begin/toggle/finish. A browser edit host with actual property mutation, commit and cancellation has not been established. Do not replace this with editing metadata or claim a successful native edit from it.
  • WebViewCommands.h:1051: Delete previews native incoming references, requires confirmation for affected objects, rejects active tasks and foreign-document selection, and restricts deletion to known types without custom Proxy cleanup. Apply removes objects inside a transaction and recomputes, aborting on errors. Preserve custom ViewProvider veto/cleanup boundaries.
  • WebViewCommands.h:1083 onward: Duplicate traverses native OutList dependencies. Preview returns identities; apply validates the recursion boolean, requires saved external-reference documents/destination, calls doc.copyObject(selected, recursive), recomputes and commits or aborts.
  • web-commanddoc-task.tsx: graph rendering and node selection are mounted task controls. Delete/Duplicate review sends operation: preview; apply sends operation: apply, preview object identities, includeDependencies and confirmDependencies. Edit sends begin/finish. Graph refresh sends empty args. These controls and contracts are existing work, not newly verified behavior.

Source boundary and next continuation

The actual executable extension point is tools/web-business-cases.mjs, invoked by tools/web-acceptance-cases.mjs:16 for IDs absent from the manual mapping. The bounded reader rejected an exact read of this file with: Use an exact source/support/native-match file named by the current packet. The next packet needs this delegated case file and any helpers it imports. Do not modify the acceptance wrapper, manual mapping or verifier to bypass the missing case extension point. Add actual semantic assertions before covers declarations; retain the existing acceptance runner for attributable evidence.

The source reader then reached 16 windows / 48000 bytes and rejected the desktop duplicate anchor and both explicitly supplemental requests. The source exists; this is a read budget boundary. Reuse the decisions above next turn. Prioritize these missing anchors after the case extension point is available:

  1. freecad-source/src/Gui/CommandDoc.cpp:1915, 60 lines: native Edit semantics.
  2. freecad-source/src/Gui/CommandDoc.cpp:1294, 60 lines: native Duplicate selection/dependency semantics, including remaining continuation if needed.
  3. freecad-source/src/Gui/CommandDoc.cpp:1453, 60 lines: native Delete semantics.
  4. freecad-source/src/Gui/CommandDoc.cpp:638, 60 lines: native graph semantics.
  5. web/src/workbench-shell.tsx:580, 60 lines: determine whether task apply's explicit preview selection survives preparedDesktopArgs selection forwarding. The supplied excerpt is insufficient to call this a bug.

Implement native/browser cases against the existing persistent runtime first, then isolate the first actual behavior failure. Assert real object removal, dependency effects, duplicate identities and native properties/links, graph edges, document isolation and relevant undo/redo. Edit requires actual editable object behavior and finish/cancel semantics before claiming completion. Build/sync only affected changed targets and run the isolated affected ID before the broader selected batch. Reuse supplied WASM and completed workflows.

All original and supplemental requirements remain open where not proven, including docs/current/IFC_SEMANTIC_EXPORT_CONTRACT.md; proxy geometry does not satisfy semantic IFC export. No contract, verifier, proof-area requirement, acceptance machinery, covers tag or passing status was edited. No full-parity or API gate, deployment, push or external message was performed. An initial unscoped git status --short was rejected by the scheduler (exit 64); the subsequent scoped status succeeded. This is a command-scope diagnostic, not a CAD behavior failure. All invoked command sessions have completed.