Files
FreeCADWasmDev/docs/current/PART_DATUM_POINT_PROGRESS_20260917.md

5.5 KiB

Part batch continuation: datum point

Batch: 2b4d5cb30c81854a74891a50. Local date: 2026-09-17 (UTC evidence dates below are 2026-09-16).

Delivered and measured

Part:desktop:Part_DatumPoint now uses the existing datum task, Part adapter, document facade, part-save Worker and FreeCADWebDocumentProbe. The native handler creates the real Part::DatumPoint, preserves native attachment support and placement, and serializes datum properties with the document snapshot. A small three-axis cross is display-only marker data; it does not replace native geometry.

Existing source reused: freecad-source/src/Mod/Part/Gui/Command.cpp:2649 (Add datum point, unique name and native type), PartDatumDocument.h, DocumentProbe.cpp, web/src/part-datum-task.tsx, part-desktop-adapter.ts, part-document-facade.ts, and tools/part-datum-business-cases.mjs. The shared desktop dispatcher was not changed.

Changes this turn:

  • Added DatumPoint to the native datum type table and snapshot serialization.
  • Added the display marker and point attachment choices in the existing task.
  • Corrected the existing point case to attach to Box.Vertex1 with native Vertex mode. Translate exists in the shared enumeration but is not implemented by Attacher::AttachEnginePoint.
  • Declared the actual point case, its DocumentProbe build override and its source dependencies in docs/business-acceptance/Part.json.

Focused incremental build completed: python3 tools/web_build_lock.py -- cmake --build freecad-source/build-web/configure --target FreeCADWebDocumentProbe -j8. node web/tools/sync-assets.mjs completed: 6 copied, 98 skipped, 14.092 seconds. No full build, parity/API gate, deployment, push or external message was run.

Acceptance command: python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_DatumPoint --reuse.

The first execution failed at the unsupported Translate attachment mode: docs/current/business-evidence/f7c49a8b52bd8204fd67f977-20260916T175517812011.json. After the case and UI mode correction, the runner reported passed=1, remaining=[], 17 cases, 9.632 seconds: docs/current/business-evidence/f7c49a8b52bd8204fd67f977-20260916T175645910800.json. This is runner-written evidence; no passing status was manually edited.

Assertions exercise native type, placement, unique names, selection, one transaction, undo/redo, vertex attachment following support movement, malformed and cyclic references, unchanged documents/history on errors, cancellation, document isolation, FCStd reopen and dependency editing after restore. Browser cases exercise the mounted task through creation, attachment editing, undo/redo, OPFS save, reload and FCStd open. Desktop/mobile geometry screenshots and pixel checks passed; rotation changed the rendered image. The screenshots were also visually inspected and show a nonblank, framed point marker: docs/current/part-datum-business/2026-09-16T17-56-36-530Z/. The existing development server is at http://127.0.0.1:5180.

Remaining selected requirements

These three IDs are not declared complete and were not rerun in this turn:

  • Part:desktop:Part_CompCompoundTools: compound mode already delegates to the persistent Compound workflow; explode/filter still delegate to shape results. Preserve desktop direct-child/nesting/filter semantics and native dependencies.
  • Part:desktop:Part_CompJoinFeatures: Connect/Embed/Cutout need persistent document features and editable source links. Geometry-only results are not sufficient. Reuse the supplied BOPTools implementations and current WASM.
  • Part:desktop:Part_CompOffset: 3D/2D offset need persistent document features, linked source and parameters, task accept/cancel/edit, history and restoration.

The existing tools/part-business-cases.mjs:195 function runDropdownDocumentCases already checks all selected child modes for document creation, retained dependencies, valid topology, one transaction, undo/redo and FCStd restoration. It deliberately requires the live document owner through part.document; do not weaken this assertion or accept transient BREP output. Its compound cases additionally assert volumes 1008, [8,1000], and 8 for compound, explode and filter respectively. Existing geometry/browser cases also remain in that file. Preserve all of them and expand actual semantic assertions as implementation requires, rather than adding unsupported coverage labels.

Next implementation location: web/src/part-desktop-adapter.ts:28 routes the dropdowns to executePartNativeShapeDesktop; add persistent document handling there using the existing document owner. Native mutation integration is in DocumentProbe.cpp near the existing createDatum/createSlice/createCompound branches. Reuse the current Python feature modules and helper conventions; rebuild only the affected target after native changes.

Normal source reads reached the scheduler source budget during this turn. Two supplemental windows were used: AttachExtension.cpp:40 (100 lines) and tools/part-compound-business-cases.mjs:1 (100 lines). A budget refusal is not evidence of missing source. Refresh the next packet with the exact native dropdown helper/source anchors needed for the remaining implementations.

The original packet preflight listed all four IDs missing before this change; its DatumPoint portion is now superseded by the runner evidence above. Preserve the other three boundaries, all original/supplemental requirements, and all historical failures. IFC semantic export is outside this edit: its contract, verifier, proof requirements and acceptance machinery were not modified.