Files
FreeCADWasmDev/docs/current/PART_SECTION_CUT_PROGRESS.md

10 KiB

Section Cut continuation checkpoint

Current continuation entry: part-section-cut-recovery-checkpoint.md. Its 2026-09-17 13:08 UTC implementation/evidence supersedes the historical stack-overflow, source-deletion and missing-fragments notes in this file. Read that checkpoint first. Preserve this file as historical requirements, not as the current first error.

Current continuation, 2026-09-17 09:44 UTC

Batch fe60ca67e100f30913333f7f, selected Part:desktop:Part_SectionCut. This section supersedes stale implementation/registration statements below; older notes remain for their original requirements and history.

  • Existing cases ARE registered in tools/part-business-cases.mjs. Prior result part-section-cut-business/2026-09-17T09-37-00-052Z/result.json completed native, FCStd and browser assertions, including desktop/mobile canvas checks. Its status remains not_implemented, with no coverage tags.
  • Added a native refresh operation to PartSectionCutDocument.h. It uses persisted planes, retains linked original sources, appends newly visible shapes, excludes the session itself and its owned helpers/results, persists Sources, and rebuilds in the existing owner transaction. Existing OCCT/Part geometry is reused. Parent/child filtering and transformed-link equivalence remain open.
  • Admitted refresh in part-desktop-adapter.ts and mounted a Refresh cut sources button in part-section-cut-task.tsx. Existing snapshot refresh remains available for reloading committed settings after invalid edits.
  • Added native assertions for plane/source preservation, helper exclusion, volume, object count, and exact undo/redo snapshots; browser assertions exercise the mounted refresh action and restored plane controls/table. Newly introduced visible sources and deletion still need explicit cases.
  • TypeScript check passed. Geometry-boundary check FAILED on existing web/src/partdesign-face-color-task.tsx lines 2 and 3 (three_outside_display). No verifier or allowlist was modified to suppress those findings.
  • Focused FreeCADWebDocumentProbe rebuild was started through tools/web_build_lock.py; its final result, sync and acceptance follow below.
  • Existing local server: http://127.0.0.1:5180/workbench.html (HTTP 200, COOP/COEP present). No server, deployment or external message was created.

The source reader reached its 16-window/48000-byte limit. Exact supplemental requests for SectionCutting.cpp:2384 (desktop refresh handler) and DocumentProbe.cpp:1321 (fixture payload) were rejected at that limit. This is a source-budget boundary, not absent source. Do not repeat broad exploration or replay unchanged acceptance. Next read those two anchors and the desktop collectObjects implementation at SectionCutting.cpp:344.

Retained completion requirements: intersecting-object BooleanFragments mode; automatic/manual cut-face and fragment colors; cut/fragment transparency; desktop refresh/filtering/visibility rules; source deletion and transformed links; singleton/document lifecycle; OPFS persistence and remaining proof areas. IFC semantic export contract and all original/supplemental requirements remain unchanged. No contract, verifier, proof requirement, acceptance machinery, manual passing status or coverage-tag changes were made.

Current first error and repair

The first focused rebuild passed and JS/WASM/worker artifacts were synced. Acceptance evidence business-evidence/f1d7d44e1f891399048bb542-20260917T094412332275.json reported a native stack overflow. Added durable per-request timestamps in the case script (no verifier changes). Diagnostic acceptance evidence business-evidence/f1d7d44e1f891399048bb542-20260917T094500763555.json isolated it to request 11, sectionCut/refresh; source edit request 10 completed, native load took about 0.4 seconds, and browser execution was not entered. The source scan excluded owned children but omitted the session group itself, allowing the group to become its own source. The exclusion now includes the session name. A second focused rebuild is running to verify this repair. Keep both failure records; no success is inferred from the diagnosis.

Earlier checkpoint

Updated 2026-09-17 for batch fe60ca67e100f30913333f7f. Selected requirement: Part:desktop:Part_SectionCut. This is an implementation checkpoint, not acceptance evidence. The command is still incomplete and unaccepted. Preserve every original and supplemental requirement, including the unchanged IFC semantic export contract.

Changes in this continuation

  • Added PartSectionCutDocument.h and a sectionCut action in the existing DocumentProbe.cpp owner. The helper uses the existing embedded FreeCAD/Part Python bindings, App links, Part Compound, Part Box and Part Cut. Geometry remains in the supplied FreeCAD/OCCT WASM. It creates a persistent group with source links and plane settings, supports sequential X/Y/Z cuts, rebuilds owned objects on Apply, and restores sources on Close unless Keep only cut is requested. The existing document owner holds the transaction.
  • Added module adapter validation and routing for Part_SectionCut, admitted the document action in the facade, and mounted PartSectionCutTask in the shell. The panel supplies axis enable/position/flip controls, Apply, Close, refresh, undo/redo, a native object table and the existing geometry renderer. The panel remains mounted when another command is selected until closed.
  • Added exported assertion functions in tools/part-section-cut-business-cases.mjs. Native assertions cover a box cut, links, volume, history, failed-operation rollback, source edits, document isolation, disabling axes and closing. Browser assertions exercise mounted controls and request desktop/mobile canvas proof. These functions are NOT registered in the existing Part entrypoint and have NOT executed. Their fixture adapters, payload schema and browser locator assumptions still need confirmation against the existing acceptance case infrastructure. No covers tags or passing statuses were added.

Checks and artifact state

  • cmake --build freecad-source/build-web/configure --target FreeCADWebDocumentProbe -j2 completed successfully, including compilation and linking. Existing warnings concerned pthread/memory growth, a copied range variable in WebMacroRecording, and the long string in WebViewCommands.
  • Copied only the resulting DocumentProbe JS/WASM/worker files from the build tree's bin directory into web/public/kernel after the successful build.
  • npm --prefix web exec -- tsc --noEmit -p web/tsconfig.json passed after fixing the renderer props. The later change adds sectionCut to the action type union and removes its temporary cast; it has not had a separate TypeScript rerun.
  • npm --prefix web run check:geometry-boundary passed with no static findings. This does not establish runtime geometry correctness.
  • node --check tools/part-section-cut-business-cases.mjs passed syntax checking.
  • Existing server http://127.0.0.1:5180/workbench.html returned HTTP 200. No new server was started. No browser behavior or screenshots were verified.

First attributable acceptance result

python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_SectionCut --reuse returned acceptance_incomplete, passed 0, executedCount 1, and business route not implemented. Evidence: docs/current/business-evidence/f1d7d44e1f891399048bb542-20260917T031444589559.json. This run occurred before the new assertion module and artifact sync. Do not repeat that unchanged missing-case attempt; wire actual cases first.

Next work and retained boundaries

  1. Read the existing Part case entrypoint and one document/browser case using the bounded reader. Register a run function that uses the existing native owner, fixtures, report writer and browser setup. Confirm request schema, setBox payload fields and renderer locator against those existing APIs. Do not edit acceptance contracts, machinery, proof requirements or statuses.
  2. Inspect native visibility serialization before running the case. The helper currently writes WebVisibility and the object's native Visibility property; mapping to snapshot displayVisibility is not established. Correct this against the existing owner instead of weakening visibility assertions.
  3. Confirm the desktop plane direction, boundary handling and source filtering against SectionCutting.cpp. Current boxes cut the positive side by default, and use the opposite side when flipped. Current source collection includes visible objects exposing Shape; parent/child filtering and transformed links still require desktop-equivalent behavior and executable proof.
  4. Implement native session state serialization and restore panel values on reopen/undo/document switch/FCStd reopen. React currently initializes plane controls to zero. Reopening the same command after closing needs an explicit activation event; the shell effect currently responds to command changes.
  5. Preserve full dock semantics: intersecting-object BooleanFragments mode, automatic/manual colors and transparency, custom plane support if required by the source, refresh rules, delete/close/keep-only-cut behavior, singleton lifecycle across documents and source/document deletion. The current core is an incomplete axis-cut implementation, not the finished desktop workflow.
  6. Add FCStd/OPFS persistence cases, invalid requests, transformed/multiple sources and the remaining proof areas. Execute through the acceptance runner, fix its first native/browser failure, then inspect desktop/mobile screenshots and canvas checks. No acceptance claims precede those results.

Source recovery anchors: Command.cpp:2490 opens the singleton dock; SectionCutting.cpp:1277 chains axis cuts; :1335 creates source links and chooses Compound/BooleanFragments; :1455 creates the dock; destructor :1472 restores source visibility unless keep-only-cut. Other available anchors are createLinks around :1019, startObjectCutting :1115, createBooleanFragments :2555 and createCompound :2588. SectionCut.cpp does not exist; use SectionCutting.cpp. The reader rejected further windows at its 16-window/48000-byte supplemental budget, including an exact payload-anchor request. This is a source-budget boundary, not missing source. Do not bypass the reader or alter its limits.

No full-parity/API gates, deployment, pushes, external messages, IFC reruns, contract/verifier changes or manual acceptance status changes were performed. All build/typecheck sessions started in this continuation have completed.