Files
FreeCADWasmDev/docs/p6/quality-gate.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

405 lines
9.2 KiB
JSON

{
"schema": "freecad-web-p6-quality-gate/v1",
"taskId": "FW-P6-FPA-I",
"result": "pass",
"budgets": {
"javascriptBytes": 11771855,
"javascriptLimitBytes": 16777216,
"wasmCount": 41,
"wasmLimitBytes": 201326592,
"cspHtmlCount": 77,
"cspRequired": 77,
"workerRoundTripMs": {
"target": 5000,
"observed": null
},
"memory": {
"target": "no unreleased native resources",
"observed": "delegated to native resourcesReleased evidence"
}
},
"csp": {
"policy": "default-src 'self'; script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval' blob:; worker-src 'self' blob:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'self'; object-src 'none'; base-uri 'self'",
"pages": [
{
"path": "web/dist/assembly.html",
"present": true
},
{
"path": "web/dist/bim.html",
"present": true
},
{
"path": "web/dist/cam.html",
"present": true
},
{
"path": "web/dist/cloud.html",
"present": true
},
{
"path": "web/dist/core.html",
"present": true
},
{
"path": "web/dist/document.html",
"present": true
},
{
"path": "web/dist/draft.html",
"present": true
},
{
"path": "web/dist/fem.html",
"present": true
},
{
"path": "web/dist/full.html",
"present": true
},
{
"path": "web/dist/help.html",
"present": true
},
{
"path": "web/dist/import.html",
"present": true
},
{
"path": "web/dist/index.html",
"present": true
},
{
"path": "web/dist/inspection.html",
"present": true
},
{
"path": "web/dist/jtreader.html",
"present": true
},
{
"path": "web/dist/main-chain.html",
"present": true
},
{
"path": "web/dist/material.html",
"present": true
},
{
"path": "web/dist/measure.html",
"present": true
},
{
"path": "web/dist/mesh.html",
"present": true
},
{
"path": "web/dist/meshpart.html",
"present": true
},
{
"path": "web/dist/openscad.html",
"present": true
},
{
"path": "web/dist/part-inspect.html",
"present": true
},
{
"path": "web/dist/part-io.html",
"present": true
},
{
"path": "web/dist/part-python.html",
"present": true
},
{
"path": "web/dist/part-save.html",
"present": true
},
{
"path": "web/dist/part.html",
"present": true
},
{
"path": "web/dist/partdesign-inspect.html",
"present": true
},
{
"path": "web/dist/partdesign-python.html",
"present": true
},
{
"path": "web/dist/partdesign-save.html",
"present": true
},
{
"path": "web/dist/partdesign.html",
"present": true
},
{
"path": "web/dist/plot-python.html",
"present": true
},
{
"path": "web/dist/points-inspect.html",
"present": true
},
{
"path": "web/dist/points-python.html",
"present": true
},
{
"path": "web/dist/points-save.html",
"present": true
},
{
"path": "web/dist/points.html",
"present": true
},
{
"path": "web/dist/project.html",
"present": true
},
{
"path": "web/dist/python.html",
"present": true
},
{
"path": "web/dist/reverseengineering-create.html",
"present": true
},
{
"path": "web/dist/reverseengineering-inspect.html",
"present": true
},
{
"path": "web/dist/reverseengineering-python.html",
"present": true
},
{
"path": "web/dist/reverseengineering-save.html",
"present": true
},
{
"path": "web/dist/robot-create.html",
"present": true
},
{
"path": "web/dist/robot-inspect.html",
"present": true
},
{
"path": "web/dist/robot-python.html",
"present": true
},
{
"path": "web/dist/robot-save.html",
"present": true
},
{
"path": "web/dist/sandbox-inspect.html",
"present": true
},
{
"path": "web/dist/sandbox-python.html",
"present": true
},
{
"path": "web/dist/sandbox-save.html",
"present": true
},
{
"path": "web/dist/sandbox.html",
"present": true
},
{
"path": "web/dist/show-inspect.html",
"present": true
},
{
"path": "web/dist/show-python.html",
"present": true
},
{
"path": "web/dist/sketcher-inspect.html",
"present": true
},
{
"path": "web/dist/sketcher-persistence.html",
"present": true
},
{
"path": "web/dist/sketcher-python.html",
"present": true
},
{
"path": "web/dist/sketcher.html",
"present": true
},
{
"path": "web/dist/spreadsheet-inspect.html",
"present": true
},
{
"path": "web/dist/spreadsheet-python.html",
"present": true
},
{
"path": "web/dist/spreadsheet-save.html",
"present": true
},
{
"path": "web/dist/spreadsheet.html",
"present": true
},
{
"path": "web/dist/start-inspect.html",
"present": true
},
{
"path": "web/dist/start-python.html",
"present": true
},
{
"path": "web/dist/start.html",
"present": true
},
{
"path": "web/dist/surface-inspect.html",
"present": true
},
{
"path": "web/dist/surface-python.html",
"present": true
},
{
"path": "web/dist/surface-save.html",
"present": true
},
{
"path": "web/dist/surface.html",
"present": true
},
{
"path": "web/dist/techdraw-inspect.html",
"present": true
},
{
"path": "web/dist/techdraw-native.html",
"present": true
},
{
"path": "web/dist/techdraw-python.html",
"present": true
},
{
"path": "web/dist/techdraw-save.html",
"present": true
},
{
"path": "web/dist/techdraw.html",
"present": true
},
{
"path": "web/dist/templatepymod-python.html",
"present": true
},
{
"path": "web/dist/templatepymod.html",
"present": true
},
{
"path": "web/dist/test.html",
"present": true
},
{
"path": "web/dist/tux.html",
"present": true
},
{
"path": "web/dist/web-persistence.html",
"present": true
},
{
"path": "web/dist/web.html",
"present": true
},
{
"path": "web/dist/workbench.html",
"present": true
}
]
},
"performance": {
"workbenchRecords": 778,
"workbenchNative": 138,
"viewCanvasPixels": 1,
"chromeCases": 12
},
"accessibility": {
"viewControls": {
"stage": "view-provider",
"objectCount": 1,
"selected": true,
"preselected": false,
"visible": true,
"displayMode": "shaded",
"color": "#73c6d4",
"lineWidth": 1,
"section": true,
"camera": {
"position": [
269.93165341782895,
171.23248947870536,
157.68165341762895
],
"target": [
148.7500000002,
74.99999999999999,
36.5
]
}
},
"keyboard": [
"F",
"0",
"1",
"2",
"Escape",
"S"
],
"noOverlapEvidence": true
},
"security": {
"externalRequests": 0,
"exceptions": 0,
"pythonPolicy": "no arbitrary Python eval; generated API IDs remain disposition-gated",
"restrictedCapabilities": [
"Qt desktop commands",
"Clipboard outside secure context",
"OPFS when unavailable",
"SharedArrayBuffer-dependent pthread paths"
]
},
"artifacts": {
"workbenchGate": {
"path": "docs/p6/workbench-command-gate.json",
"sha256": "1082950b72fc7a675134ae2903764815e41bfdd8f5eb6ac1685af28762cdfcf0"
},
"viewGate": {
"path": "docs/p6/view-interaction-gate.json",
"sha256": "f0ea2538c326f91b116deb66a0809e71402ee50f1eb63f021981c5ecf7b82c61"
},
"workbenchWasm": {
"path": "web/public/kernel/FreeCADWebWorkbenchCommandProbe.wasm",
"sha256": "761882251cf05edf2a50c160abc95c1bf3f7dc42bc724ca1f1322ab7927fba64"
}
},
"boundaries": [
"Resource and memory release are accepted only when native evidence reports resourcesReleased=true.",
"CSP permits the existing blob Worker and WebAssembly loading model; deployment must preserve same-origin asset hosting.",
"No non-Chrome browser support is inferred from the fixed Chrome gate."
]
}