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.Vertex1with nativeVertexmode.Translateexists in the shared enumeration but is not implemented byAttacher::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.