Files
FreeCADWasmDev/docs/current/web-scene-display-implementation-pipeline.json
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

147 lines
12 KiB
JSON

{
"schema": "freecad-web-module-batch-pipeline/v1",
"generatedAt": "2026-09-11T23:40:20.633240+00:00",
"status": "implementation_ready",
"implementationMode": "feature-first-deferred-validation",
"validationDeferred": true,
"implementationReceipt": {
"batchId": "web-scene-display-implementation-20260912",
"module": "Web",
"tier": "feature-workflow",
"family": "desktop-command-commandview",
"recordIds": [
"Web:desktop:Std_AxisCross",
"Web:desktop:Std_DemoMode"
],
"recordCount": 2,
"selectedRecordCount": 2,
"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-11T23:40:19.741556+00:00"
},
"implementationReceipts": [
{
"batchId": "web-scene-display-implementation-20260912",
"module": "Web",
"tier": "feature-workflow",
"family": "desktop-command-commandview",
"recordIds": [
"Web:desktop:Std_AxisCross",
"Web:desktop:Std_DemoMode"
],
"recordCount": 2,
"selectedRecordCount": 2,
"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-11T23:40:19.741556+00:00"
}
],
"coalescedBatchCount": 1,
"staticReadiness": {
"selected": 2,
"ready": 2,
"missing": 0,
"missingIds": [],
"rejectedMarkers": [],
"blockingGaps": [],
"uiContainers": 0,
"uiOnly": false
},
"batchId": "web-scene-display-implementation-20260912",
"module": "Web",
"target": "FreeCADWebReactProduct",
"buildKind": "frontend",
"buildTree": "web",
"buildRequired": true,
"buildReuse": {
"reason": "rebuilt",
"cacheHit": false,
"inputDigest": "9560d396492a9215d3c8dac916b292007fe717037275da92d8fa4bbbe4116044",
"inputHashCacheHits": 0,
"inputFiles": 17,
"artifactHashCacheHits": 0,
"artifacts": 1,
"directLinkDependencies": 0,
"dependencyDirty": false
},
"totalSeconds": 16.485,
"steps": [
{
"name": "module-registry",
"command": [
"/usr/bin/python3",
"tools/generate_web_module_registry.py"
],
"seconds": 0.098,
"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": 5.206,
"exitCode": 0,
"stdout": "{\"status\": \"generated\", \"modules\": 32, \"commands\": 1449, \"routed\": 1014, \"implementationRequired\": 435, \"interactive\": 94, \"genericApiEntry\": 25, \"genericCommandEntry\": 810, \"reactNavigation\": 85, \"needsParameterUi\": 0, \"needsReactWorkflow\": 435, \"artifactModules\": 32, \"validationDeferred\": 1449}",
"stderr": ""
},
{
"name": "build",
"command": [
"/home/mes123456/FreeCADWasmDev/working/FreeCAD/web/node_modules/.bin/vite",
"build"
],
"seconds": 10.301,
"exitCode": 0,
"stdout": "vite v8.2.1 building client environment for production...\nPublic assets synchronized incrementally in 8.882s\n\u001b[2K\ntransforming...✓ 2217 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 98% of 10.1s inside plugin hooks (9.9s).\nMeasured inside the callback, so queue time is excluded and time the callback itself awaited is not:\n - freecad-fast-public-assets buildStart (88%, 8.9s, 1 call)\nThose rows are 88% of the build; the rest of the 98% is below.\nNot measurable — 3 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)\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.88,
"exitCode": 0,
"stdout": "{\"status\": \"generated\", \"verdict\": \"incomplete\", \"featureReceiptBacklog\": 15, \"workbenchCommands\": 425, \"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": "6088021bf53e5f3ab09fef782035d0d2281ea2a9fa75307a6fb00c2bc8ccc900",
"web/src/scene-command-adapter.ts": "4dbbdee5e9226f314804d4e96458e7c954c350ed9140eab7ef550b306d14414e",
"web/src/scene-command-host.ts": "7be6798300821996c51888b8343e4dbca3b1b2e0e0391981ae2fe2b1c1a3ddbc",
"web/src/scene-command-host.css": "dcfe6f27c2ebe66eeb1d0593e40c7cd253fb923e7f59b2f60f16c7097ebb704d",
"web/src/import-render-bridge.ts": "e604ebf477c6a62d53e012cd04d0c7e3dd787e5392ee858058f1e9729930f948",
"web/src/openscad-desktop-view.tsx": "b9cc308ad735c922dfac8f7871d229fbd409ca972f52f44cf914cebf5d8da2d9",
"web/src/desktop-command-dispatcher.ts": "7e5fd2fcd4fd4b1b8c6e3401e95395c623a47a74ab424deed525ef07eddef6d4",
"web/src/workbench-shell.tsx": "fa314025e3bd3f7cfde21a34bf70bdd3e89fab196c51a42db8de5f47ed3d300a",
"web/src/facade-envelope.ts": "b61a6eb35a5a80b7fbef0c4e93772b48c2ece1f5af17fe015789b47fce6e8a46",
"web/workbench.html": "cb816d9e15e2eeec51802c4d5920ffabbba909eebda6a8d53ad46dd97cffec1c"
}
}