101 lines
6.2 KiB
Markdown
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.
|