Files
FreeCADWasmDev/docs/current/PART_SECTION_BATCH_PROGRESS.md

80 lines
4.7 KiB
Markdown

# Part Section Batch Checkpoint
Batch: `af93355ab923901e87e33808`. Selected requirements remain
`Part_Scale`, `Part_Section`, `Part_SectionCut`, and `Part_ShapeInfo`.
This note is not acceptance evidence. Do not modify contracts, proof-area
requirements, verifiers, or acceptance machinery to promote these commands.
## Implemented In This Turn
- `DocumentProbe.cpp` has a `createSection` action using the existing native
`Part::Section` feature and OCCT section operation. It groups selected
subelements by document object, retains Base/Tool links, creates a unique
native name, hides sources and copies stored display color in one transaction.
Native recompute, rollback, undo/redo, FCStd, and edge serialization use the
existing document owner. Geometry stays in the supplied OCCT/FreeCAD WASM.
- `part-desktop-adapter.ts` routes `Part_Section` through `part.document`, checks
document/selection ownership and the returned feature links, and preserves
desktop selection. `part-document-facade.ts` admits and validates this action.
- `PartMakeFaceTask` has a mounted Section mode in `workbench-shell.tsx` with
source selection, native edge display, result table, history, FCStd open, and
OPFS save. The existing renderer respects stored Section color and visibility.
- `tools/part-section-business-cases.mjs` is registered in the existing Part
case entrypoint. It asserts native intersection lengths/topology, linked
recomputation, empty intersections, invalid inputs, document isolation,
selection preservation, unique names, history, FCStd, and primary browser
controls with desktop/mobile canvas checks. It fingerprints its source and
artifacts and records durable stage timestamps. Assertions are executable;
this description does not establish that they passed.
## First Attributable Failure And Repair
Command:
`python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_Section --reuse`
The first run timed out after 180 seconds. Last completed stages were adapter
compilation and native WASM load/fixture initialization; last entered stage was
`native-section-enter`. No browser work was entered and no success was recorded.
Its case directory is `docs/current/part-section-business/2026-09-17T00-08-25-380Z`.
`FCBRepAlgoAPI_Section` enabled OCCT parallel execution in its constructors and
inherited `Build` without the synchronous WASM guard already present in
`FCBRepAlgoAPI_BooleanOperation`. A shared `Build` override now forces
`SetRunParallel(Standard_False)` under `__EMSCRIPTEN__` and delegates to OCCT.
Desktop builds preserve parallel execution. The affected target is
`FreeCADWebDocumentProbe`, not the packet's generic PartBox target.
## Verification At Checkpoint Creation
- Initial focused document build passed and its JS/WASM/worker were synced.
- `npm --prefix web run check:geometry-boundary` passed with no findings. This
is a static boundary check, not proof of all runtime paths.
- Focused TypeScript checking of `part-make-face-task.tsx` passed.
- The second document build, containing the Section threading repair, compiled
affected Part sources and is linking. Sync and rerun status is recorded below.
## Remaining Work
1. Finish/sync the repaired document artifact and rerun only Section's changed
acceptance case. Fix its next concrete failure. Inspect screenshots if the
browser cases complete. Retain any required proof areas still absent.
2. Complete Section coverage for transformed links, stored appearance, and
transaction failure after mutation. Current code copies stored WebDisplayColor;
full desktop ShapeAppearance-to-LineMaterial semantics are not yet established.
3. Implement Scale using `freecad-source/src/Mod/Part/Gui/DlgScale.cpp`, especially
its apply/accept/reject paths and `writeParametersToFeature` near line 340.
It writes Base, Uniform, UniformScale, XScale, YScale, ZScale to a native scale
feature. `TaskScale.cpp` does not exist; do not repeat that guessed path.
4. Implement Section Cut's dock workflow from
`freecad-source/src/Mod/Part/Gui/SectionCutting.cpp` (`makeDockWidget` near 1455).
`SectionCut.cpp` does not exist. Command activation only opens a singleton
dock; a generic section result is not sufficient for its workflow.
5. Shape Info's `CmdShapeInfo::activated` in `Command.cpp:2154` is empty.
Its enabled state requires a document containing Part features and a
non-editing 3D view. Preserve this distinction when implementing its cases.
The bounded source reader reached 48 windows / 144000 bytes. All source already
read is retained in the turn; this is a read-budget boundary, not absent source.
No full-parity/API gates, deployment, pushes, external messages, IFC reruns,
contract edits, or manual acceptance status edits were performed.