53 lines
4.6 KiB
Markdown
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.
|