6.2 KiB
Part selected batch checkpoint
Updated: 2026-09-17, batch a31535b769d261461291da35.
Selected requirements remain Part:desktop:Part_Primitives,
Part:desktop:Part_ProjectionOnSurface, Part:desktop:Part_Scale, and
Part:desktop:Part_SectionCut. This checkpoint is descriptive only. It does
not change requirement statuses, contracts, proof areas, or acceptance policy.
Work completed this continuation
- Reused the existing Scale desktop adapter, mounted
PartScaleTask, document facade, nativePart::Scaleimplementation, and supplied OCCT WASM. - Added
runScaleCasestotools/part-business-cases.mjsand wired the selected Scale ID into the existing case dispatcher. Unsupported-case fallback excludes Scale because it now has its own executable case function. - The first runner execution reached native load completion and failed at
createScalewithdocument_operation_failed: unsupported document action. Evidence:docs/current/business-evidence/788696be57f6b5b6ddfeb05e-20260917T003458126640.json. - Confirmed the build-tree document probe was newer than the public runtime.
cmake --build freecad-source/build-web/configure --target FreeCADWebDocumentProbe -j2completed successfully. Copied onlyFreeCADWebDocumentProbe.js,.wasm, and.worker.jsfrom that tree'sbintoweb/public/kernel. - Ran
python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_Scale --reuse. It passed one selected capability in 14.764 seconds. Evidence:docs/current/business-evidence/788696be57f6b5b6ddfeb05e-20260917T003549560323.json. Native and browser cleanup completed. Browser artifacts and the case result are underdocs/current/part-scale-business/2026-09-17T00-35-35-060Z/. The mobile geometry screenshot was also visually inspected.
Proven scope and current verification boundary
The passing version exercised uniform scaling (24 to 192 volume), axis scaling (24 to 576), parameter storage and source links, source visibility, document isolation, one-step undo/redo, rejected selections/zero factors/cyclic edits, cancellation, source recomputation before and after FCStd reopening, and unique names on repeated Apply. Browser cases exercised mounted Scale controls through the real dispatcher/Worker, editing, undo/redo, OPFS save and reopen after reload, and interactive nonblank geometry at 1440x900 and 390x844.
After that pass, the case was strengthened with native exact bounds, two-source
scaling in one transaction, and input fingerprints for PartScaleDocument.h,
FeatureScale.cpp, and DlgScale.cpp. A focused runner attempt returned exit 78,
previous_validation_deferred, executedCount: 0 for Scale. These added checks
have NOT executed. The older evidence must not be represented as a passing run
of the current case file. No policy files or acceptance machinery were changed
to bypass the deferral. Do not replay the unchanged deferred attempt.
The existing local browser server responded at
http://127.0.0.1:5180/workbench.html. No new server or lingering test session was
started. No full-parity/API gate, deployment, push, or external message occurred.
Remaining selected work
- Primitives: adapter and mounted task currently expose Cylinder, Cone, Sphere,
and Torus only. No selected
Part_Primitivescase was added or claimed passed.DlgPrimitives.cpphas desktop create implementations for Plane (284), Box (376), Cylinder (489), Cone (610), Sphere (724), Ellipsoid (854), Torus (990), Prism (1111), Wedge (1292), Helix (1450), Spiral (1563), Circle (1662), Ellipse (1769), Polygon (1861), Line (1961), and Vertex (2086). Preserve the location, placement and create/edit workflow; four primitive shortcuts are insufficient. Current integration anchors:executePartPrimitivesDesktopinweb/src/part-desktop-adapter.ts,web/src/part-primitives-task.tsx, and thePartPrimitivesTaskmount inweb/src/workbench-shell.tsx. - ProjectionOnSurface:
Command.cpp:2450opens the newerTaskProjectOnSurface, not the olderTaskProjectionOnSurfaceimplementation in the same file.DlgProjectionOnSurface.cpp:1242initializes a persistentPart::ProjectOnSurfacefeature; 1319 commits and recomputes, while reject aborts its transaction. Selection modes distinguish support face, source face, edge and wire; controls include direction, projection display mode, Height and Offset. Continue from that newer task and native feature source. No adapter, mounted task, or executable selected case was implemented in this turn. - SectionCut:
Command.cpp:2490opens a persistent singleton SectionCut dock. It is distinct fromPart_SectionandPart_CrossSections. The actual business source isfreecad-source/src/Mod/Part/Gui/SectionCutting.cpp: visible source collection and cuts around 1141, links around 1019,createAllObjectsat 1335, BooleanFragments at 2555, and Compound at 2588. Preserve axis-plane cutting, linked document objects, visibility and persistent dock behavior. No selected SectionCut case or integration was added in this turn. - Scale: retain all original requirements beyond the proven scope. The desktop
source (
DlgScale.cpp:201) creates one linked feature per selected object in one transaction and copies ShapeAppearance, LineColor and PointColor before hiding sources. The newer bounds/multi-selection assertions are pending the runner's deferral boundary; visual-property propagation and other source types must not be inferred from the existing box assertions.
Continuation constraints
Continue implementing one of the three uncompleted commands while preserving
the deferred Scale assertions and previous evidence. Reuse the document probe
and module-specific adapter; do not modify the shared dispatcher without an
actual shared-contract defect. Follow the current packet's bounded source
reader and command budgets. PartScaleDocument.h exists, but its read was
rejected by the current reader's source scope; that is not an absent-source
diagnosis. Do not bypass the reader with an unrestricted dump.
Keep docs/current/IFC_SEMANTIC_EXPORT_CONTRACT.md and every original and
supplemental requirement intact. No IFC behavior or proof was changed or rerun.
Only the acceptance runner may record acceptance; no coverage tags or passing
statuses were manually added.