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 resultpart-section-cut-business/2026-09-17T09-37-00-052Z/result.jsoncompleted native, FCStd and browser assertions, including desktop/mobile canvas checks. Its status remainsnot_implemented, with no coverage tags. - Added a native
refreshoperation toPartSectionCutDocument.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.tsand mounted aRefresh cut sourcesbutton inpart-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.tsxlines 2 and 3 (three_outside_display). No verifier or allowlist was modified to suppress those findings. - Focused
FreeCADWebDocumentProberebuild was started throughtools/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.hand asectionCutaction in the existingDocumentProbe.cppowner. 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
PartSectionCutTaskin 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 -j2completed 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
bindirectory intoweb/public/kernelafter the successful build. npm --prefix web exec -- tsc --noEmit -p web/tsconfig.jsonpassed 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-boundarypassed with no static findings. This does not establish runtime geometry correctness.node --check tools/part-section-cut-business-cases.mjspassed syntax checking.- Existing server
http://127.0.0.1:5180/workbench.htmlreturned 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
- 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.
- Inspect native visibility serialization before running the case. The helper
currently writes WebVisibility and the object's native Visibility property;
mapping to snapshot
displayVisibilityis not established. Correct this against the existing owner instead of weakening visibility assertions. - 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.
- 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.
- 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.
- 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.