6.7 KiB
CommandDoc continuation checkpoint
Batch 88ff649b4de528ed0c83aa2b, 2026-09-16.
Selected: Std_Alignment, Std_Edit, Std_ProjectInfo, Std_Save.
Batch incomplete. Std_Save has new attributable acceptance evidence.
Changes and successful proof
Added the Std_Save executable branch and its supported-ID/workbench navigation
entries in tools/web-business-cases.mjs. Reused the mounted command controls
and existing native/browser implementation:
workbench-shell -> desktop-command-dispatcher -> web-desktop-adapter ->
PartBox document-view -> WebViewCommands.h::save_document_files -> native
saveAs/save -> exact returned FCStd bytes -> writeDocumentFile/OPFS.
No application/native source, shared dispatcher, binary or frontend artifact
was changed. Existing supplied WASM and built browser application were reused;
no build or sync was necessary for this case-only addition.
Fresh acceptance command:
python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Save --reuse
Final result: passed, 12 cases / 12 assertions, executedCount 1, reused false,
exit 0, 8.772 seconds. Evidence:
business-evidence/4584f3c4cc21df8711e8c518-20260916T143900683085.json.
Case file SHA256 after pass:
12b505104ee32cbc192052b7122df3b138df746a4d9a8c6cf9e8463c166908ad.
No source/case changes followed the successful acceptance execution.
Assertions exercise first-save cancellation without creating an OPFS file; native filename prompting and .FCStd extension; native object, comment and expression preservation; valid OCCT volumes 24/48; exact returned bytes in OPFS; unsaved geometry edits leaving the previous native file unchanged; repeat Save to the existing path without another prompt; replacement OPFS bytes; independent document geometry and file hash; wrong-runtime rejection without mutation; serialized document label in Document.xml; native reopening of bytes read back from OPFS with volumes 84/168; and further editing of the reopened expression dependency to volumes 60/120 without changing the original or the independent document. The mounted Save is executed through the ordinary command button, with browser prompts intercepted by the executable case. Reopening for native semantic inspection uses the existing native console; this case does not certify the separate Std_Open browser picker workflow.
Two initial fixture failures are preserved:
business-evidence/4584f3c4cc21df8711e8c518-20260916T143725069089.json
expected first saveAs to preserve the pre-save label, but native saveAs derives
the filename label. The assertion now explicitly requires save-business.
business-evidence/4584f3c4cc21df8711e8c518-20260916T143806998520.json
expected reopening under a different filename to retain the prior label, but
native open adopts save-opfs-reopened. The final case asserts that exact
native label and separately checks the saved label in the archive XML; all
comment, object, expression, geometry, persistence and isolation assertions
remain strict. No product change was inferred from these fixture failures.
Remaining selected boundaries
- Alignment: real ManualAlignment solver, point correspondences, fixed/moving objects, apply/cancel and placement undo remain required. Existing native boundary at WebViewCommands.h:2162 explicitly requires the manual alignment task and native placement application. Do not substitute a placement flag or a generic selection preview for alignment.
- Edit: existing native handler at WebViewCommands.h:1295 imports FreeCADGui, retrieves the owning GUI document, calls setEdit/resetEdit/getInEdit and supports begin/finish/toggle. Prior retained first failure is missing FreeCADGui in PartBox. Mounted Edit Selection / Finish Editing buttons exist in web-commanddoc-task.tsx:257. Actual ViewProvider support in this same document owner, provider mutation/commit/cancel, invalid selections and isolation remain necessary. Do not fake edit state or change document owners.
- ProjectInfo: desktop CommandDoc.cpp:909 opens DlgProjectInformationImp for the active native document. web-desktop-adapter.ts:800 sends this command through the document-view route, but no dedicated ProjectInfo handler/form was found in the inspected commanddoc implementation. The generic task tail is a selection review/apply UI, not document information. Next source packet should include the supplied DlgProjectInformationImp implementation/header and UI plus the native document metadata property definitions so editable fields, read-only information and accept/cancel semantics are implemented faithfully. These dialog sources are not included in the current packet's support paths; their business source is not claimed absent. No ProjectInfo acceptance or implementation was added this turn.
- Save: the bounded workflow above passes. No broader claim is made for I/O failure recovery, linked-document save choices, Save All, or Save Copy. Retain these supplemental boundaries and existing predecessor requirements.
Retained pending work and operational constraints
The incoming continuation mentioned a corrected Revert label expectation with scene refresh/edit/undo checks still pending. Attempted only its isolated runner:
python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Revert --reuse
Runner returned exit 78, previous_validation_deferred, executedCount 0:
"User paused repeat validation; select only newly completed gaps. Historical
proof is not promoted to current acceptance." No retry or bypass was attempted.
Revert remains unverified by this turn; its earlier fixture correction is
preserved. All prior original/supplemental requirements remain, including
web-commanddoc-1b2b9c895291363d97faeba7-checkpoint.md,
web-commanddoc-eba17362c96c85c7ece4a508-checkpoint.md and their predecessors.
IFC_SEMANTIC_EXPORT_CONTRACT.md remains mandatory and unchanged; proxy geometry is insufficient. Historical IFC semantic evidence and its limits are retained, not recertified or counted as new delivery. No acceptance contract, verifier, proof-area requirements, acceptance machinery, covers tags or passing statuses were manually changed. Only the normal runner produced acceptance evidence. No full-parity/API gate, deployment, push or external message ran.
All acceptance sessions completed. No new persistent server remains from this turn. Scoped git diff --check returned zero, but the case file is untracked, so this is not an independent patch-history check. Initial unscoped git status and rg file discovery were rejected by the scheduler; scoped commands and bounded source-reader windows were used afterward. Source-reader windows were accepted within the ordinary available budget, with 35 remaining at the final read; no exhausted-budget bypass was used.