45 lines
5.9 KiB
Markdown
45 lines
5.9 KiB
Markdown
# Web desktop mixed batch checkpoint
|
|
|
|
Batch: `cc505e5b4bd8332d9f954a9d`, 2026-09-16.
|
|
|
|
Selected IDs: `Web:desktop:Std_MacroStartDebug`, `Web:desktop:Std_SaveCopy`, `Web:desktop:Std_SelectAll`, `Web:desktop:Std_ToggleFreeze`.
|
|
|
|
## Changes
|
|
|
|
- Added executable mounted-browser cases to `tools/web-business-cases.mjs`, using existing native PartBox WASM and the existing command UI. No acceptance contract, runner, verifier, passing evidence, or coverage tags were edited.
|
|
- Changed `web/src/web-desktop-adapter.ts` debugger endpoint selection to use `part.pythonFamilyBatch` for start, step, stop and breakpoint commands. The existing generated macro routes cannot be assumed to select this endpoint.
|
|
- Built frontend with `npm run build`. Geometry ownership audit, TypeScript and Vite passed; native WASM assets were reused. The standalone `npm run check:geometry-boundary` invocation resolved at workspace root and lacked that script; the build's actual web prebuild ran it successfully with zero findings.
|
|
- After the last run, adjusted the browser command helper to accept the native macro-family `exposed` success envelope for debugger commands only. `PartBoxProbe.cpp:4249` emits this status on successful native macro operations. Semantic debugger assertions remain required. This final case-helper change has not been rerun.
|
|
|
|
## Attributable evidence
|
|
|
|
1. `docs/current/business-evidence/c9dcc751d9233591eb309363-20260916T151311659457.json`: four selected cases executed in 15.661 seconds; SaveCopy passed, three failed.
|
|
2. `docs/current/business-evidence/57c4e2684247b9f88468c0a6-20260916T151521646792.json`: only the three failures executed after edits/build, in 13.808 seconds; SelectAll and ToggleFreeze passed, MacroStartDebug failed.
|
|
|
|
SaveCopy assertions cover cancellation, native-path and OPFS-name collision rejection, original filename/label/history/file-byte preservation, exact FCStd ZIP bytes in OPFS, and native reopening with edited solid volumes 60/120, expressions, groups and metadata preserved.
|
|
|
|
SelectAll assertions cover replacing stale foreign selection with every native document object including groups, displayed selection identities, repeat/no geometry mutation, missing-document rejection, and empty-document selection. A native console inspection refreshes scene selection; the case restores selection before testing a rejected command.
|
|
|
|
ToggleFreeze assertions cover initial and mixed frozen states, duplicate selection deduplication, invalid selection prevalidation, unchanged solid geometry and dependencies, frozen dependent volume remaining 48 while source changes to 60, unfreezing/recompute updating dependent volume to 120, and toggling objects across two documents. Opening native transactions did not add UndoCount entries for freeze state flags; the initial assumption of undoable freeze was removed, not represented as passing undo proof.
|
|
|
|
The passing reports are historical evidence at their recorded fingerprints. Later shared case/adapter/build changes may invalidate automatic reuse; do not manually change statuses or fingerprints. Finish the missing debugger behavior before a final selected-ID runner invocation.
|
|
|
|
## First remaining failure and continuation boundary
|
|
|
|
`Std_MacroStartDebug` returns facade error `unsupported_command`, message `Part native dispatch command is not registered`, diagnostic command `Std_MacroStartDebug`, request `module-part-12`. This occurs before the debugger's initial-pause assertion. It persisted after the explicit endpoint correction and frontend rebuild.
|
|
|
|
Known path:
|
|
|
|
- `DesktopCommandDispatcher.execute` invokes `executeWebDesktop` for Web commands before generic dispatch.
|
|
- `web-desktop-adapter.ts` forwards StartDebug through its macro branch with family `desktop-command-commandmacro` to `part.pythonFamilyBatch`.
|
|
- `web/src/part.worker.ts` imports `dispatchPartPythonFamily` from `./part-python-family-facade.js`; this family uses the live PartBox kernel.
|
|
- `freecad-source/src/WebAssembly/FreeCADCoreProbe/PartBoxProbe.cpp:4223` already handles start/step/stop/breakpoint in the macro family, calls `executeWebMacroCommand`, and maps native `success` to `exposed`.
|
|
- `WebMacroCommands.h:138` contains a real `bdb`/threading debugger, with pause, continue, breakpoint, locals and stop behavior. Do not replace it with synthetic debugger state.
|
|
- `NativeDocumentView.h:406` does not include debugger commands in its macro-command dispatch list. Moving debugger commands to the document-view route would require native and frontend registration work and a targeted rebuild; do not assume this is necessary before inspecting the existing family dispatch guard.
|
|
|
|
Required next source packet: add `web/src/part-python-family-facade.ts` and the native-dispatch registration source/manifest it imports. The attempted authorized source-reader call for that exact facade file returned `IMPLEMENTATION_SOURCE_WINDOW_REJECTED: Use an exact source/support/native-match file named by the current packet; no directory scans`. This is a packet scope boundary, not missing business source. Do not bypass it with direct reads or directory scans.
|
|
|
|
Next action: inspect and repair the missing debugger registration in the existing Part family facade/native dispatcher, with the smallest applicable generated registry fix. Then rebuild/sync only affected frontend/native targets and run `python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_MacroStartDebug --reuse`. The existing debugger case checks initial pause without mutations, breakpoint continuation and locals, completion with actual OCCT volumes 84/168, missing-source rejection and stop-before-edit. Continue from its first real failure. After it passes, use the runner for the four selected IDs, reusing unchanged proof where supported.
|
|
|
|
No IFC implementation or semantic contract changed. Preserve `docs/current/IFC_SEMANTIC_EXPORT_CONTRACT.md` and all original/supplemental requirements. No full-parity/API gate, deployment, push or external message was run. All acceptance and build processes started here have finished.
|