# 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, native `Part::Scale` implementation, and supplied OCCT WASM. - Added `runScaleCases` to `tools/part-business-cases.mjs` and 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 `createScale` with `document_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 -j2` completed successfully. Copied only `FreeCADWebDocumentProbe.js`, `.wasm`, and `.worker.js` from that tree's `bin` to `web/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 under `docs/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_Primitives` case was added or claimed passed. `DlgPrimitives.cpp` has 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: `executePartPrimitivesDesktop` in `web/src/part-desktop-adapter.ts`, `web/src/part-primitives-task.tsx`, and the `PartPrimitivesTask` mount in `web/src/workbench-shell.tsx`. - ProjectionOnSurface: `Command.cpp:2450` opens the newer `TaskProjectOnSurface`, not the older `TaskProjectionOnSurface` implementation in the same file. `DlgProjectionOnSurface.cpp:1242` initializes a persistent `Part::ProjectOnSurface` feature; 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:2490` opens a persistent singleton SectionCut dock. It is distinct from `Part_Section` and `Part_CrossSections`. The actual business source is `freecad-source/src/Mod/Part/Gui/SectionCutting.cpp`: visible source collection and cuts around 1141, links around 1019, `createAllObjects` at 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.