Files
FreeCADWasmDev/docs/current/part-slice-lifecycle-handoff-20260912.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

3.7 KiB

Slice Lifecycle and Cooldown Repair

No automated tests, browser checks or acceptance ran. This is implementation and build handoff; user validation remains deferred. Existing OCCT-backed slicing, FreeCAD document classes, compiled dependencies and OPFS output were reused.

Business Changes

  • Added native-document read/update/reopen actions to PartSliceDocument.h.
  • Updates Mode, Tolerance, Base, Tools and Label in a native transaction, rejects dependency cycles and returns current native geometry, links and an FCStd snapshot.
  • Uses desktop CompoundFilter creation to synchronize a simple exploded slice when its piece count changes. Removal with external dependencies, custom filter indexing or invalid recompute aborts instead of silently corrupting the graph.
  • Reopens actual FCStd bytes with App.openDocument and the supplied proxy classes, rejects open-document name collisions and cleans disposable input files. Native failures are not converted to exposed status. Restored slices are recomputed.
  • React supports reading an open document, editing properties, opening local FCStd and choosing stored FCStd from OPFS/Part. Each result can be saved/downloaded again.
  • Workbench-owned nativeDocuments retains PartBox object snapshots across module changes. Shared navigation shows actual native names/labels, ownership and links, updates selection and opens the Part task for that document. No handles are sent into another module's runtime as though they belonged there.

This is not a complete all-module global tree: project-shell's separate document store and other native owners are not unified. Editing is scoped to Slice properties, not every FreeCAD property type. Cross-worker transfer and arbitrary custom filter editing remain explicit work. Runtime reopen/update correctness is not yet verified.

Cooldown Root Cause

Repeated attempts without changed outcomes trigger record/module cooldown; the planner does search its other lanes before waiting. At this turn's start, cooldown had expired and BIM was executing, so the scheduler had not stopped. Later BIM, Web and Test cooled again after unsuccessful cycles.

A real defect kept recoveryLevel/cooldownRounds at their historic maximum even after substantive progress. A later short failure streak therefore immediately returned to the longest delay. scheduler_progress.py now resets those escalation levels only on substantive progress, not mere evidence refresh or provider failure. Existing failure history and current retry deadlines were not cleared.

The scheduler was gracefully reloaded while waiting with no child process. Its existing watchdog restarted it as PID 2572390 (restart count 170). It was still waiting for previously cooled records afterward. This is not proof of restored throughput or elimination of external model latency.

Timings

First native lifecycle build pipeline: 49.004 seconds, including 38.322 seconds build. A subsequent filter-count synchronization change required a second native build. Final receipt: part-slice-lifecycle-implementation-pipeline.json.

Final Native Step Seconds
Module registry 0.102
Capability registry 8.089
Preflight 0.044
Build 32.772
Artifact sync 2.264
Completion metadata, not acceptance 0.954
Final pipeline 44.225
Frontend build 5.642
Public sync within frontend build 3.655

Native dependencies were reused; no whole OCCT rebuild. After the final header-only change the two changed PartBox runtime artifacts were synchronized to dist/kernel; unchanged frontend bundles were not rebuilt. Timings are step wall times, not an end-to-end throughput claim. Source decisions were updated in place for continuation.