331 lines
13 KiB
JSON
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."
|
|
]
|
|
}
|