{ "schema": "freecad-web-module-batch-pipeline/v1", "generatedAt": "2026-09-12T00:04:08.792327+00:00", "status": "implementation_ready", "implementationMode": "feature-first-deferred-validation", "validationDeferred": true, "implementationReceipt": { "batchId": "web-overlap-selection-implementation-20260912", "module": "Web", "tier": "feature-workflow", "family": "desktop-command-commandview", "recordIds": [ "Web:desktop:Std_ClarifySelection" ], "recordCount": 1, "selectedRecordCount": 1, "remainingRecordCount": 0, "status": "implementation_ready", "validation": "user_during_use", "target": "FreeCADWebReactProduct", "buildTree": "web", "artifacts": [ "web/dist/index.html" ], "source": "outer-build", "scope": "feature-capability", "updatedAt": "2026-09-12T00:04:07.874427+00:00" }, "implementationReceipts": [ { "batchId": "web-overlap-selection-implementation-20260912", "module": "Web", "tier": "feature-workflow", "family": "desktop-command-commandview", "recordIds": [ "Web:desktop:Std_ClarifySelection" ], "recordCount": 1, "selectedRecordCount": 1, "remainingRecordCount": 0, "status": "implementation_ready", "validation": "user_during_use", "target": "FreeCADWebReactProduct", "buildTree": "web", "artifacts": [ "web/dist/index.html" ], "source": "outer-build", "scope": "feature-capability", "updatedAt": "2026-09-12T00:04:07.874427+00:00" } ], "coalescedBatchCount": 1, "staticReadiness": { "selected": 1, "ready": 1, "missing": 0, "missingIds": [], "rejectedMarkers": [], "blockingGaps": [], "uiContainers": 0, "uiOnly": false }, "batchId": "web-overlap-selection-implementation-20260912", "module": "Web", "target": "FreeCADWebReactProduct", "buildKind": "frontend", "buildTree": "web", "buildRequired": true, "buildReuse": { "reason": "rebuilt", "cacheHit": false, "inputDigest": "ab68bced0139bb38cb8e83f09c466f6a9769968ab4d9bac2f5ac63d48d1056af", "inputHashCacheHits": 0, "inputFiles": 18, "artifactHashCacheHits": 0, "artifacts": 1, "directLinkDependencies": 0, "dependencyDirty": false }, "totalSeconds": 5.169, "steps": [ { "name": "module-registry", "command": [ "/usr/bin/python3", "tools/generate_web_module_registry.py" ], "seconds": 0.102, "exitCode": 0, "stdout": "{\"output\": \"web/src/module-registry.generated.ts\", \"modules\": 32, \"bytes\": 34296, \"changed\": false}", "stderr": "" }, { "name": "capability-registry", "command": [ "/usr/bin/python3", "tools/generate_feature_capability_registry.py" ], "seconds": 0.084, "exitCode": 0, "stdout": "{\"status\": \"reused\", \"modules\": 32, \"commands\": 1449, \"routed\": 1051, \"implementationRequired\": 398, \"interactive\": 94, \"genericApiEntry\": 25, \"genericCommandEntry\": 847, \"reactNavigation\": 85, \"needsParameterUi\": 0, \"needsReactWorkflow\": 398, \"artifactModules\": 32, \"validationDeferred\": 1449}", "stderr": "" }, { "name": "build", "command": [ "/home/mes123456/FreeCADWasmDev/working/FreeCAD/web/node_modules/.bin/vite", "build" ], "seconds": 4.079, "exitCode": 0, "stdout": "vite v8.2.1 building client environment for production...\nPublic assets synchronized incrementally in 2.518s\n\u001b[2K\ntransforming...✓ 2219 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/assets/dynamic-worker-bootstrap-CX1JKGrb.js 0.73 kB\ndist/part-inspect.html 0.90 kB │ gzip: 0.45 kB\ndist/partdesign-save.html 0.91 kB │ gzip: 0.41 kB\ndist/sketcher-inspect.html 0.92 kB │ gzip: 0.46 kB\ndist/part.html 0.97 kB │ gzip: 0.46 kB\ndist/partdesign-inspect.html 0.97 kB │ gzip: 0.47 kB\ndist/part-io.html 0.98 kB │ gzip: 0.46 kB\ndist/points.html 0.98 kB │ gzip: 0.46 kB\ndist/sandbox.html 0.98 kB │ gzip: 0.46 kB\ndist/surface.html 0.98 kB │ gzip: 0.46 kB\ndist/start.html 0.98 kB │ gzip: 0.46 kB\ndist/part-save.html 0.98 kB │ gzip: 0.46 kB\ndist/sketcher.html 0.98 kB │ gzip: 0.46 kB\ndist/robot-save.html 0.99 kB │ gzip: 0.46 kB\ndist/meshpart.html 0.99 kB │ gzip: 0.47 kB\ndist/robot-create.html 0.99 kB │ gzip: 0.46 kB\ndist/robot-python.html 0.99 kB │ gzip: 0.47 kB\ndist/show-inspect.html 0.99 kB │ gzip: 0.47 kB\ndist/spreadsheet.html 0.99 kB │ gzip: 0.46 kB\ndist/part-python.html 0.99 kB │ gzip: 0.47 kB\ndist/show-python.html 0.99 kB │ gzip: 0.47 kB\ndist/sandbox-save.html 1.00 kB │ gzip: 0.47 kB\ndist/plot-python.html 1.00 kB │ gzip: 0.47 kB\ndist/robot-inspect.html 1.00 kB │ gzip: 0.47 kB\ndist/templatepymod.html 1.00 kB │ gzip: 0.47 kB\ndist/start-python.html 1.00 kB │ gzip: 0.47 kB\ndist/sandbox-python.html 1.00 kB │ gzip: 0.47 kB\ndist/surface-save.html 1.00 kB │ gzip: 0.47 kB\ndist/points-save.html 1.00 kB │ gzip: 0.48 kB\ndist/sketcher-python.html 1.00 kB │ gzip: 0.47 kB\ndist/surface-python.html 1.01 kB │ gzip: 0.47 kB\ndist/sandbox-inspect.html 1.01 kB │ gzip: 0.47 kB\ndist/surface-inspect.html 1.01 kB │ gzip: 0.47 kB\ndist/start-inspect.html 1.01 kB │ gzip: 0.48 kB\ndist/partdesign-python.html 1.01 kB │ gzip: 0.47 kB\ndist/spreadsheet-save.html 1.01 kB │ gzip: 0.47 kB\ndist/spreadsheet-python.html 1.02 kB │ gzip: 0.47 kB\ndist/sketcher-persistence.html 1.02 kB │ gzip: 0.48 kB\ndist/templatepymod-python.html 1.02 kB │ gzip: 0.48 kB\ndist/spreadsheet-inspect.html 1.03 kB │ gzip: 0.48 kB\ndist/reverseengineering-save.html 1.03 kB │ gzip: 0.48 kB\ndist/reverseengineering-create.html 1.03 kB │ gzip: 0.48 kB\ndist/reverseengineering-python.html 1.04 kB │ gzip: 0.48 kB\ndist/reverseengineering-inspect.html 1.04 kB │ gzi...", "stderr": "\u001b[33m[INEFFECTIVE_DYNAMIC_IMPORT] \u001b[0msrc/techdraw-desktop-adapter.ts is dynamically imported by src/workbench-shell.tsx but also statically imported by src/desktop-command-dispatcher.ts, src/techdraw-dimension-task.tsx, dynamic import will not move module into another chunk.\n\n[plugin builtin:vite-reporter] \n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\n\u001b[33m[INEFFECTIVE_DYNAMIC_IMPORT] \u001b[0msrc/bim-desktop-adapter.ts is dynamically imported by src/workbench-shell.tsx but also statically imported by src/bim-frame-task.tsx, src/desktop-command-dispatcher.ts, src/workbench-shell.tsx, dynamic import will not move module into another chunk.\n\n\u001b[33m[INEFFECTIVE_DYNAMIC_IMPORT] \u001b[0msrc/openscad-desktop-adapter.ts is dynamically imported by src/workbench-shell.tsx but also statically imported by src/desktop-command-dispatcher.ts, src/workbench-shell.tsx, dynamic import will not move module into another chunk.\n\n\u001b[33m[INEFFECTIVE_DYNAMIC_IMPORT] \u001b[0msrc/test-desktop-output.tsx is dynamically imported by src/workbench-shell.tsx but also statically imported by src/workbench-shell.tsx, dynamic import will not move module into another chunk.\n\n\u001b[33m[PLUGIN_TIMINGS] \u001b[0mYour build spent 95% of 3.8s inside plugin hooks (3.6s).\nMeasured inside the callback, so queue time is excluded and time the callback itself awaited is not:\n - freecad-fast-public-assets buildStart (66%, 2.5s, 1 call)\nThose rows are 66% of the build; the rest of the 95% is below.\nNot measurable — 4 hooks whose calls overlap, so elapsed time covers work other calls were doing. Profile with `node --cpu-prof`:\n - vite:build-html transform (77 calls)\n - vite:worker-import-meta-url transform (73 calls)\n - vite:worker load (65 calls)\n … and 1 more\nSee https://rolldown.rs/reference/InputOptions.checks#plugintimings for more details." }, { "name": "business-audit", "command": [ "/usr/bin/python3", "tools/generate_web_business_completion_audit.py" ], "seconds": 0.904, "exitCode": 0, "stdout": "{\"status\": \"generated\", \"verdict\": \"incomplete\", \"featureReceiptBacklog\": 15, \"workbenchCommands\": 388, \"formatWorkflows\": 0, \"productWorkflows\": 0}", "stderr": "" } ], "supportHashes": { "web/src/dock-overlay-commands.json": "a8492cc4bb0d41708ad5d481103535b70263ef77f305e22e046905218466e2eb", "web/src/dock-overlay-adapter.ts": "9747d185e07e7d3f1a89dc70dee575bb1730408fd08789f9a663c445816db50e", "web/src/dock-overlay-host.tsx": "19e88ed3af82884ad80137aec1a74a22683c3b580cd11f6a85904d9ecc484c87", "web/src/dock-overlay.css": "2eca079c1296a8ca2587d7934a6acc0fe5252bb1f97ad7df65c80f9d78db9e5c", "web/src/scene-display-commands.json": "ac8e6227800dd169a32e69b3f21de979a511a71f411adb421804ca7d552782f9", "web/src/scene-command-adapter.ts": "dfa26a5b495c98a70df1fecfa2169ab9a2c3974da224e899adc632531b8144d3", "web/src/scene-command-host.ts": "36a16a0d2d06c484a469369b111a7504138281dd31e79326ae69599d621d0082", "web/src/scene-command-host.css": "51c3ab3acb1e6637856a662f4ed9944a31e1161719f85131bc3f3a4dd04765c3", "web/src/scene-overlap-picker.ts": "1568993d85e3a8f0b1fd358e3b0edb5bade07d205162e8a62f9258f54593b359", "web/src/import-render-bridge.ts": "aa044848b0d172e7ad772a027ad29c9005e9bcf3d34cd7ca56345cc67c3b20ff", "web/src/openscad-desktop-view.tsx": "083087e52c95d17791b01b75644c33684aa48e42fe6c4c621481c1db52485dea", "web/src/desktop-command-dispatcher.ts": "41c0d8a9c17d0f832f02cc564ea556434f6ffe47051764dd250e88503420c57a", "web/src/workbench-shell.tsx": "9eecb2e5ef9fe642d820777e3cd799d11a74377ddda34428932ecd818882cf9c", "web/src/facade-envelope.ts": "b61a6eb35a5a80b7fbef0c4e93772b48c2ece1f5af17fe015789b47fce6e8a46", "web/workbench.html": "cb816d9e15e2eeec51802c4d5920ffabbba909eebda6a8d53ad46dd97cffec1c" } }