4.9 KiB
Part Face Colors And Command Groups Checkpoint
Batch: cf3c8bc72d0d9a80082848a0.
Selected records: Part:desktop:Part_ColorPerFace, Part:desktop:Primitives,
Part:desktop:Solids, Part:desktop:Split.
Implemented
web/src/part-desktop-adapter.tsnow exposes Primitives (six children), Solids (the same six plus Part_Primitives and Part_Builder), and Split (BooleanFragments, SliceApart, Slice, XOR), in the exact order infreecad-source/src/Mod/Part/Gui/Workbench.cpp. The existing shell group navigation and dispatcher route each selected child to its task.- Part_ColorPerFace is routed through the Part adapter and part.document facade
to the existing DocumentProbe owner. The
setFaceColorsnative action requires one current-document Part::Feature, one RGBA entry per native face, finite components in 0..1, and no pending native transaction. It validates before mutation and stores WebFaceColors in one undoable transaction. Existing native mesh serialization and FCStd persistence consume this property. web/src/part-face-color-task.tsxis mounted inweb/src/workbench-shell.tsxfor Part's command. It supports selecting a shape, per-face color swatches, apply, canceling drafts, native undo/redo, FCStd file opening, OPFS saving, document reading, and interactive native colored geometry.tools/part-face-color-business-cases.mjssupplies executable native-WASM and mounted browser cases and is registered bytools/part-business-cases.mjs. The existing group cases now cover the three selected groups, all child choices, invalid selections, native representative child geometry, history, FCStd restore, and desktop/mobile navigation. Split asserts three solids and Part::FeaturePython.
Build And Evidence
Focused build completed:
cmake --build freecad-source/build-web/configure --target FreeCADWebDocumentProbe -j2.
The generated .js, .wasm, and .worker.js were copied from the build bin
directory to web/public/kernel/. No full build, parity gate or API gate ran.
Acceptance runner results (all are actual runner output, not manually assigned acceptance statuses):
- Primitives and Solids passed in
docs/current/business-evidence/14408f8dbed3328d96e0d3f7-20260917T102405557565.json. That run failed Split because its case initially expected PartDesign::FeaturePython instead of the actual Part::FeaturePython. The assertion was corrected. - Split then passed its focused run in
docs/current/business-evidence/4936d48d89d71a77b3958720-20260917T102548698728.json. - Part_ColorPerFace passed its focused run after the final native build/sync in
docs/current/business-evidence/e8d2c8340042d20ce3784eb5-20260917T103254789528.json. The case checks exact six-color values and mesh colors, native volume/topology, unchanged other objects/documents, invalid adapter and direct-native requests, no history mutation on errors/cancel, undo/redo, FCStd restore, mounted controls, OPFS/reload/file restore, canvas pixels, rotation, and mobile layout. Source/task TypeScript compilation is included in that executable case.
Screenshots and case result are in
docs/current/part-face-color-business/2026-09-17T10-32-41-899Z/.
Desktop and mobile-task screenshots were also visually inspected: native colored
faces are visible, the other object remains gray, and the mobile controls fit.
Scoped git diff --check passed (several workspace files were already untracked).
Remaining Boundary
A final combined runner invocation for all four selected IDs returned exit 78:
previous_validation_deferred, executedCount: 0, with the reason:
"User paused repeat validation; select only newly completed gaps. Historical proof
is not promoted to current acceptance."
Do not retry this unchanged combined invocation or bypass the pause. All four records passed their respective focused runs, but the group runs precede the final face-color/runtime changes and are not represented here as fresh final-build acceptance. The scheduler must honor the existing validation pause when choosing its next action. There is no currently observed implementation/test failure after the focused face-color pass.
No acceptance contract, verifier, proof-area requirement, acceptance runner, passing ledger status, IFC contract, or shared desktop dispatcher was edited. No covers tags were added. IFC semantic export requirements remain in force; this batch changed no IFC export code and supplies no new IFC evidence. No deployment, push, or external messages were performed.
Source boundary note: attempts to read the existing PartDesign face-color task and adapter were rejected as outside this packet. Their contents were not read through an alternate method, and they were not modified. The Part implementation uses the supplied Part document, color-persistence, native command and task patterns.
The existing browser server used by the runner remains at
http://127.0.0.1:5180/workbench.html?module=Part&command=Part_ColorPerFace.