Files
FreeCADWasmDev/docs/current/PART_TOLERANCE_PROGRESS.md

53 lines
4.6 KiB
Markdown

# Part tolerance functional gap progress
Date: 2026-09-17 (Asia/Shanghai)
Requirement: `Part:desktop:Part_ToleranceSet`
## Implemented Workflow
The current-document command now creates and edits the supplied `BOPTools.ToleranceFeatures.FeatureToleranceSet` proxy. It preserves native `Objects`, `minTolerance`, `maxTolerance` and `Refine` properties, rather than returning a detached BREP that cannot recompute.
- Executes the original shape-copy and `limitTolerance` sequence, including the desktop `fix/removeSplitter/fix` sequence when Refine is enabled.
- Supports multiple sources, replacement of source links, native naming, one-step history, source visibility and shape recomputation after source edits.
- Preserves OCCT sentinel behavior: maximum 0 is unbounded; maximum below minimum also means a lower limit; equal minimum/maximum forces the value; minimum 0 applies an upper cap.
- Rejects missing/nonshape/empty/foreign sources, dependency cycles and malformed settings before committing a feature. Failed changes roll back through the document owner.
- Reports measured vertex, edge and face minimum/maximum tolerances from the actual native shape.
- Mounted controls provide source selection, editing, limits, Refine, measured tolerances, undo/redo, read/cancel, FCStd save/open, OPFS persistence and geometry.
- Read/cancel preserve pending edits. FCStd restores the original Python proxy and source links, which remain functional after reopening.
Files: `PartToleranceDocument.h`, integration in `DocumentProbe.cpp`, `part-document-facade.ts`, `part-desktop-adapter.ts`, `part-tolerance-task.tsx`, and `workbench-shell.tsx`.
## First Acceptance
Command: `python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_ToleranceSet --reuse`
Result: **1 requirement passed, 31 scenarios, 45.196 seconds**.
[Formal evidence](business-evidence/35e68159ada4cabaec5adc9d-20260917T033034505335.json)
Cases verify lower/upper/interval/fixed and reversed-limit semantics against native OCCT measurements, unchanged source tolerances, analytic volumes, real proxy dependencies, native refinement from split faces to 6 faces, multiple-solid output, source edits, history, cyclic links, error rollback, isolated documents, pending read/cancel, native persistence and mounted browser workflows.
The initial attempt exposed a mismatch between local Python type hints and the actual native `getTolerance` API. Native code requires type objects such as `Part.Vertex`, not strings such as `"Vertex"`. Both the production query and reference assertions now use those type objects. The failed attempt remains recorded.
The suite shares one native document kernel and one browser workflow. Installed libraries were reused; only DocumentProbe was rebuilt. TypeScript checking, production Vite build and native-source whitespace checking passed. Previously verified requirements were not rerun.
## Visual Inspection
Playwright covered desktop 1440x900 and mobile 390x844 viewports, visible model pixels, camera rotation and task overflow. Screenshots were visually inspected and showed readable measured tolerances and unobstructed geometry.
- [Desktop geometry](part-tolerance-business/2026-09-17T03-29-49-595Z/desktop-geometry.png)
- [Mobile task](part-tolerance-business/2026-09-17T03-29-49-595Z/mobile-task.png)
- [Case details](part-tolerance-business/2026-09-17T03-29-49-595Z/result.json)
## Boundaries
The implemented command uses abort/rollback on computation errors. The desktop option to retain a failed feature through Continue, and view-provider drag/drop/delete interactions, are not certified by these cases. No claim of every desktop interaction is made. These remaining behaviors must not be replaced by fabricated success results.
Coverage snapshot: **209/1508 requirements declare executable coverage; 1299 remain uncovered**. This is case coverage, not a count of currently fresh full-project acceptance. The requirement universe remains unchanged and the overall migration is unfinished.
## Unattended Continuation
The existing `freecad-web-acceptance.service` remained running during implementation and native compilation. It was frozen only for the formal evidence windows (the failed attempt and the final approximately 45-second run), then immediately thawed. The background advanced from Section Cut to Sweep while this work proceeded. No second scheduler was created.
The service runs `watch_freecad_web_scheduler.py --interval 15 --timeout 3600 --idle-delay 45` under systemd with `Restart=on-failure`. The active/unfrozen state was verified. Further work remains authorized without repeated user confirmation; keep missing functionality first and historical validation deferred.