6.1 KiB
Cross-workbench continuation checkpoint
Request batch: 87d3691ca57ddbf994740d84.
Selected requirement: product:cross-workbench-document-editing.
Status: incomplete; no business behavior was completed in this turn.
Change and actual verification
Updated tools/web-cross-workbench-business-cases.mjs failure handling to retain
the primary page URL, active document tab, toolbar contents, native error
responses and a hashed full-page screenshot. Capture failure is reported
separately without masking the original failed assertion. No success status,
proof-area requirement, covers tag, verifier or acceptance contract was changed.
Ran once:
python3 tools/run_business_acceptance.py --module Web --ids product:cross-workbench-document-editing
Runner returned acceptance_incomplete, exit 1, passed 0, executedCount 1,
totalSeconds 2.551. Evidence:
docs/current/business-evidence/49541ff602063d0030bc9fd7-20260918T021045798054.json.
The runner recorded batch ID 49541ff602063d0030bc9fd7; preserve that attribution
as generated rather than replacing it with the request packet ID.
First actual browser failure remains primary-workbench-selector: expected one
combobox named Workbench, found zero. Browser/native evidence directory:
docs/current/web-cross-workbench-business/2026-09-18T02-10-43-967Z/.
Screenshot was opened and visually inspected: primary page has the Part toolbar,
two document tabs, empty tree, properties and task panels, and no workbench
selector. Active tab is project-document-1, revision 0, clean. Native request
and response arrays are empty. This is a UI integration failure before native
initialization, not evidence of a native timeout or missing geometry backend.
Preview startup completed at 162 ms; browser startup at 885 ms; cleanup took
100 ms; case elapsed time was 1284 ms. No frontend or WASM changes/builds occurred.
Retained implementation facts and exact next anchors
web/src/project-shell.tsx:41ownsApp, a sharedWebModuleRouter,ProjectSessionStore,activedocument ID, native document set, selected object map and the existingImportRenderBridge.web/src/project-shell.tsx:148projects native snapshot objects into project session state and already preserves semantic fields for Body/Tip, sketch constraints and feature profiles. Read approximately lines 125–185 next to obtain the exact projection/dispatch function signatures.web/src/project-shell.tsx:518still renders a fixedaria-label="Part workbench toolbar",<strong>Part</strong>and Part tasks. Read approximately lines 505–555 next to obtain a safe selector/mount patch.web/src/partdesign-workspace.tsximports and mounts the existingPartDesignWorkspacefrom./partdesign-workspace-component.js.web/src/partdesign-workspace-component.tsx:11exportsPartDesignWorkspace({ router: sharedRouter }: { router?: WebModuleRouter } = {}). Lines 14 and 104 reuse the supplied router and only dispose an independently created router. Existing component still has internal document state:const current = documents[active]at line 61. Sharing a router alone is not sufficient to share the primary current document.- The component's request function at lines 172–174 calls
router.request("PartDesign", PARTDESIGN_DOCUMENT_COMMAND, { schema: PARTDESIGN_DOCUMENT_SCHEMA, module: "PartDesign", document, action, includeMesh: true, ...details }, document). - Its
editSketchat lines 192–195 already usesexecutePartDesignDesktopwithSketcher_EditSketchand selection{ documentId: active, object: selected }. Reuse these actual controls and native owner; do not copy fixture dispatches. web/src/partdesign-document-facade.ts:1supplies the native action/payload contract including createBody, setSketch, setFeature, snapshot, save, open, undo and redo. No native pointers may cross independent WASM instances.
Next repair: make the existing component's active document, selection and snapshot publication controllable by the primary project session, then mount its relevant Sketcher/PartDesign tasks behind the primary Workbench selector. Keep the same native owner alive when switching Sketcher and PartDesign. Determine the existing Part-to-PartDesign ownership/handoff path before allowing an existing Part document to switch; preserve unrelated documents and native history rather than opening a fixture document. Synchronize returned native snapshots through the primary shell's existing projection and renderer.
The source reader rejected partdesign-workspace-component.tsx as outside the
packet dependencies, although the permitted scoped symbol search found the
above anchors. Include this exact existing component in the next packet's
source dependencies. Later reads of the necessary primary shell anchors were
rejected with Supplemental source budget reached (16 windows / 48000 bytes),
including the requested 60-line supplemental window. Do not bypass this limit
or describe the component/source as absent. Resume from these anchors without
rereading delivery plans, runner internals or already retained excerpts.
Remaining acceptance boundaries
All five proof areas remain unproven: active_document_identity, live_sketch_feature_recompute, cross_workbench_history, fcstd_opfs_roundtrip, rejection_isolation. The existing case additionally ends with an intentional incomplete-capability failure after its first constrained Sketch/Pad scenario; replace it only after implementing real remaining semantic cases. Need native independent evidence plus browser actions for dimension edits/recompute, undo/redo, accept/cancel, save actual FCStd to OPFS, reload/reopen/edit, foreign selection/document rejection and unrelated-document preservation. The existing first geometry scenario asserts constrained 12×8 Sketch, Pad length 5 and volume 480, profile link, Body Tip, DOF zero and nonempty mesh; none was reached in this run.
Do not rerun this unchanged missing-selector failure again. Batch the actual integration changes, build the affected frontend once, and then use the same focused acceptance runner. Preserve original/supplemental requirements and IFC semantic export contract; no full-parity/API gate, deployment or push.