Files
FreeCADWasmDev/docs/current/web-commandfeat-remaining-boundaries.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

54 lines
3.2 KiB
Markdown

# Web CommandFeat remaining implementation boundaries
Batch: `d937ec7eef2892d2286973f5`
Implementation remains incomplete for all three selected records. No executable
registration was added. No builds, tests, browser validation, acceptance runs,
benchmarks, or historical reconciliation were performed.
## Retained desktop source decisions
- `Web:desktop:Std_Recompute`: the complete activation body at
`freecad-source/src/Gui/CommandFeat.cpp:62` only calls `Q_UNUSED(iMsg)`.
Preserve that exact desktop behavior; do not substitute document recomputation.
Its constructor and activation prerequisites still need a bounded source anchor.
- `Web:desktop:Std_RandomColor`: at `CommandFeat.cpp:84`, each selected object's
view provider receives an independently sampled color from `CET::R1`.
Links enable `OverrideMaterial` and update `ShapeMaterial` diffuse color.
Other providers update a material or material-list `ShapeAppearance` property
when present. Selected parts and document object groups also color their
immediate group children. The operation opens and commits a command transaction.
Activation requires a nonempty selection. Preserve these material, group,
palette, and transaction semantics in the document/view owner.
- `Web:desktop:Std_SendToPythonConsole`: at `CommandFeat.cpp:224`, selection uses
all documents and old-style element resolution. Empty selection or a missing
first object returns without action. The command executes the desktop cleanup
statement for `doc,lnk,obj,shp,sub,subs`, binds the first object's document,
resolves links through `lnk.getLinkedObject()`, and binds `obj`. For a geometric
object with a geometry property, it binds that actual property as `shp`, the
first selected subobject as `sub`, and multiple subobjects as `subs`.
It then activates and focuses the Python console. These must be live native
bindings in the console interpreter, not serialized object names or markers.
## Remaining patch anchors
The four permitted supplemental windows were consumed by the bounded packet
summary, `CommandFeat.cpp:62` (100 lines), `CommandFeat.cpp:224` (100 lines), and
`WebRuntimeProbe.cpp:45` (100 lines). This is a source-window limit, not evidence
that the business implementation is absent.
The inspected Web dispatcher parses record names, delegates document commands to
`executeDocumentCommand`, and ends with that same delegation. Adding names to its
desktop list alone would instead direct them to `executeWebMacroCommand` and
does not establish the required selected-command behavior.
Next packet should supply exact anchors for the existing document command owner,
native view-material storage and display propagation, console interpreter and
mounted focus handling, and selected-command entries in the actual JSON catalogs
used by `tools/generate_feature_capability_registry.py`. Include the generator's
invocation contract. Reuse the desktop decisions above without rereading their
unchanged windows. Implement in those owners, connect the Web adapter and mounted
console where needed, and register only the resulting executable behavior.
The outer pipeline retains ownership of incremental build, sync, and route
receipts; those receipts do not constitute business acceptance.