Files
FreeCADWasmDev/docs/p6/full-parity-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

331 lines
13 KiB
JSON

{
"schema": "freecad-web-full-parity-gate/v1",
"taskId": "FW-P6-FPA-Y",
"generatedAt": "2026-09-03T01:05:45.245220+00:00",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"result": "pending",
"parityReady": false,
"rule": "Full Parity requires every inventory record to have an implemented native conclusion and zero unapproved boundaries; module completed flags are not sufficient.",
"baseline": {
"sourceModules": 32,
"appModules": 24,
"guiModules": 22,
"guiOnlyModules": 1,
"noAppNoGuiModules": 7,
"objectTypes": 403,
"objectModules": 18,
"formatRecords": 236,
"uniqueFormatExtensions": 21,
"pythonApiRecords": 13385,
"pythonApiModules": 29,
"web": {
"htmlEntrypoints": 77,
"workers": 71,
"facades": 140,
"nativeProbeSources": 54
},
"p6ModuleGatesCompleted": 32
},
"areas": [
{
"id": "core-shell",
"taskId": "FW-P6-FPA-B",
"gateResult": "pass",
"status": "pending",
"inventoryRecords": null,
"terminalRecords": null,
"allRecordsTerminal": true,
"counts": {},
"unresolvedRecords": 0,
"boundaries": [
"B closes the reusable React/Worker/Document actor substrate and one native multi-step contract only.",
"403 object types, 236 format records, full FCStd graph coverage, and the 13,385 Python API dispositions remain later cards.",
"The page does not claim desktop GUI or arbitrary Python execution."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"B closes the reusable React/Worker/Document actor substrate and one native multi-step contract only.",
"403 object types, 236 format records, full FCStd graph coverage, and the 13,385 Python API dispositions remain later cards.",
"The page does not claim desktop GUI or arbitrary Python execution."
],
"evidence": [
{
"path": "docs/p6/core-shell-gate.json",
"sha256": "1c20830e736c17f62a85dc61fab7d30064226b110b88d02c0cae4b8bd7cb3b49"
}
]
},
{
"id": "document-persistence",
"taskId": "FW-P6-FPA-C",
"gateResult": "pass",
"status": "pending",
"inventoryRecords": null,
"terminalRecords": null,
"allRecordsTerminal": true,
"counts": {},
"unresolvedRecords": 0,
"boundaries": [
"C proves one native Part::Box document semantic round-trip and transaction/recovery contract; it does not close the 403 object inventory.",
"FCStd acceptance compares semantic fields, not archive bytes.",
"Cross-module links and larger object graphs remain explicit D/C follow-up work."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"C proves one native Part::Box document semantic round-trip and transaction/recovery contract; it does not close the 403 object inventory.",
"FCStd acceptance compares semantic fields, not archive bytes.",
"Cross-module links and larger object graphs remain explicit D/C follow-up work."
],
"evidence": [
{
"path": "docs/p6/document-contract-gate.json",
"sha256": "818ca7ae76a207e283197aa0735cf6a7ee68290992788c3a31cb60081d1e804b"
}
]
},
{
"id": "object-coverage",
"taskId": "FW-P6-FPA-D",
"gateResult": "pass",
"status": "pending",
"inventoryRecords": 403,
"terminalRecords": 403,
"allRecordsTerminal": true,
"counts": {
"passed": 86,
"passed_boundary": 317,
"blocked": 0
},
"unresolvedRecords": 0,
"boundaries": [
"blocked records retain source evidence but have no native fixture claim",
"GUI-only view providers remain passed_boundary only when a family gate proves the boundary"
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"blocked records retain source evidence but have no native fixture claim",
"GUI-only view providers remain passed_boundary only when a family gate proves the boundary"
],
"evidence": [
{
"path": "docs/p6/object-contract-gate.json",
"sha256": "120ee171a0c58ee9e0fee88b5d73d29f683b1ff089b1f371b709f82343021948"
}
]
},
{
"id": "format-coverage",
"taskId": "FW-P6-FPA-E",
"gateResult": "pass_with_boundaries",
"status": "pending",
"inventoryRecords": 236,
"terminalRecords": 236,
"allRecordsTerminal": true,
"counts": {
"passed": 12,
"passed_boundary": 224,
"blocked": 0
},
"unresolvedRecords": 0,
"boundaries": [
"Every inventory row retains module, direction, source path/line and a terminal status.",
"Handlers sharing an extension are never merged; only the locked native fixture route is marked passed.",
"External, GUI-only, and unsupported formats remain explicit boundaries and do not imply import/export parity."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"Every inventory row retains module, direction, source path/line and a terminal status.",
"Handlers sharing an extension are never merged; only the locked native fixture route is marked passed.",
"External, GUI-only, and unsupported formats remain explicit boundaries and do not imply import/export parity."
],
"evidence": [
{
"path": "docs/p6/format-coverage-gate.json",
"sha256": "8264ba180a2be3e211abd725d75e9a7844339233784b17b6b224b4ef07835201"
}
]
},
{
"id": "python-api",
"taskId": "FW-P6-FPA-F",
"gateResult": "pass_with_boundaries",
"status": "pending",
"inventoryRecords": 13385,
"terminalRecords": 13386,
"allRecordsTerminal": false,
"counts": {
"exposed": 257,
"restricted": 1490,
"not_implemented": 11639
},
"unresolvedRecords": 13129,
"boundaries": [
"All 13386 source rows receive a terminal disposition without changing the planning manifest.",
"not_implemented records are honest capability denials, not successful Python execution.",
"PySide/Pivy/desktop and external modules remain restricted/nonportable; future family cards may upgrade only with native evidence."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"All 13386 source rows receive a terminal disposition without changing the planning manifest.",
"not_implemented records are honest capability denials, not successful Python execution.",
"PySide/Pivy/desktop and external modules remain restricted/nonportable; future family cards may upgrade only with native evidence."
],
"evidence": [
{
"path": "docs/p6/python-api-full-gate.json",
"sha256": "c971ae2afeddc9f89eafdf6b5269b5834a1b02d540bfc9e22dbe9751425f38e8"
}
]
},
{
"id": "workbench-gui",
"taskId": "FW-P6-FPA-G",
"gateResult": "pass",
"status": "pending",
"inventoryRecords": 778,
"terminalRecords": 778,
"allRecordsTerminal": true,
"counts": {
"native_handler": 138,
"restricted": 640,
"not_implemented": 0
},
"unresolvedRecords": 640,
"boundaries": [
"Desktop Gui/Qt commands are explicit restricted records until a portable Web workflow is backed by its own native route.",
"Web command records prove registry routing and dispatcher disposition; route-specific module gates remain authoritative for command behavior.",
"Task panels and resources are inventoried and surfaced as source entries; Qt-only interaction remains a declared boundary."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"Desktop Gui/Qt commands are explicit restricted records until a portable Web workflow is backed by its own native route.",
"Web command records prove registry routing and dispatcher disposition; route-specific module gates remain authoritative for command behavior.",
"Task panels and resources are inventoried and surfaced as source entries; Qt-only interaction remains a declared boundary."
],
"evidence": [
{
"path": "docs/p6/workbench-command-gate.json",
"sha256": "ceeb0d18716e8a98538e4ba3b19fdad08a16fd03f35236c7b0a7958b78efeebf"
}
]
},
{
"id": "rendering-interaction",
"taskId": "FW-P6-FPA-H",
"gateResult": "pass",
"status": "pending",
"inventoryRecords": null,
"terminalRecords": null,
"allRecordsTerminal": true,
"counts": {},
"unresolvedRecords": 0,
"boundaries": [
"View state changes only Three.js projection and persisted view-provider state; geometry remains a native FreeCAD Worker mesh payload.",
"The compact browser view uses one native STEP object as the representative Document actor; full multi-object projection remains governed by object/graph family cards.",
"Section is an X-mid-plane clipping projection and is intentionally reversible; it does not mutate the native document geometry."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"View state changes only Three.js projection and persisted view-provider state; geometry remains a native FreeCAD Worker mesh payload.",
"The compact browser view uses one native STEP object as the representative Document actor; full multi-object projection remains governed by object/graph family cards.",
"Section is an X-mid-plane clipping projection and is intentionally reversible; it does not mutate the native document geometry."
],
"evidence": [
{
"path": "docs/p6/view-interaction-gate.json",
"sha256": "f0ea2538c326f91b116deb66a0809e71402ee50f1eb63f021981c5ecf7b82c61"
}
]
},
{
"id": "quality-release",
"taskId": "FW-P6-FPA-I",
"gateResult": "pass",
"status": "pending",
"inventoryRecords": null,
"terminalRecords": null,
"allRecordsTerminal": true,
"counts": {},
"unresolvedRecords": 0,
"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."
],
"approvedBoundaries": [],
"unapprovedBoundaries": [
"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."
],
"evidence": [
{
"path": "docs/p6/quality-gate.json",
"sha256": "11f2488b67d2f7c36a8f5abd2dbd11d4b41bdc92f82b82ad0056bfa93892a839"
}
]
}
],
"summary": {
"areas": 8,
"areasPassingSourceGate": 8,
"areasPendingFullParity": 8,
"unresolvedRecords": 13769,
"unapprovedBoundaryCount": 23,
"allRecordsTerminal": false
},
"ledger": {
"activeTask": "FW-P6-FPA-Y",
"fpaTaskCounts": {
"completed": 1073,
"planned": 23,
"in_progress": 1
},
"blockedTasks": [],
"plannedRecoveryTasks": []
},
"evidence": [
{
"path": "docs/p6/full-parity-audit.json",
"sha256": "8331c3bd303f2582f1d2ace88dd2f4f50eed96c3048be05052ddc5992d969fca"
},
{
"path": "docs/p6/core-shell-gate.json",
"sha256": "1c20830e736c17f62a85dc61fab7d30064226b110b88d02c0cae4b8bd7cb3b49"
},
{
"path": "docs/p6/document-contract-gate.json",
"sha256": "818ca7ae76a207e283197aa0735cf6a7ee68290992788c3a31cb60081d1e804b"
},
{
"path": "docs/p6/object-contract-gate.json",
"sha256": "120ee171a0c58ee9e0fee88b5d73d29f683b1ff089b1f371b709f82343021948"
},
{
"path": "docs/p6/format-coverage-gate.json",
"sha256": "8264ba180a2be3e211abd725d75e9a7844339233784b17b6b224b4ef07835201"
},
{
"path": "docs/p6/python-api-full-gate.json",
"sha256": "c971ae2afeddc9f89eafdf6b5269b5834a1b02d540bfc9e22dbe9751425f38e8"
},
{
"path": "docs/p6/workbench-command-gate.json",
"sha256": "ceeb0d18716e8a98538e4ba3b19fdad08a16fd03f35236c7b0a7958b78efeebf"
},
{
"path": "docs/p6/view-interaction-gate.json",
"sha256": "f0ea2538c326f91b116deb66a0809e71402ee50f1eb63f021981c5ecf7b82c61"
},
{
"path": "docs/p6/quality-gate.json",
"sha256": "11f2488b67d2f7c36a8f5abd2dbd11d4b41bdc92f82b82ad0056bfa93892a839"
}
],
"boundaries": [
"This aggregate does not replace detailed per-record native evidence.",
"passed_boundary, restricted, not_implemented and blocked dispositions remain unresolved for Full Parity until an explicit approved boundary policy exists.",
"Fixed Google Chrome evidence is not extended to other browsers or desktop Qt behavior."
]
}