Files
FreeCADWasmDev/docs/current/PART_SELECTED_BATCH_PROGRESS.md

101 lines
6.2 KiB
Markdown

# 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.