Files
FreeCADWasmDev/docs/p6/plot-tier1-readonly-family-runtime.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

344 lines
12 KiB
JSON

{
"schema": "freecad-web-p6-plot-tier1-readonly-family-runtime/v1",
"taskId": "FW-P6-FPA-F1-PLOT",
"module": "Plot",
"tier": "tier-1-readonly",
"status": "pass_with_restricted",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"route": {
"worker": "web/src/plot-python.worker.ts",
"facade": "web/src/plot-python-family-facade.ts",
"command": "plot.pythonFamilyBatch",
"native": "freecad-source/src/WebAssembly/FreeCADCoreProbe/PlotRuntimeProbe.cpp:fc_web_dispatch_json"
},
"input": {
"cmd": "plot.pythonFamilyBatch",
"args": {
"tier": "tier-1-readonly",
"records": [
{
"apiId": "py:Plot:class:Line",
"name": "Line",
"family": "generic-object",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
},
{
"apiId": "py:Plot:class:Plot",
"name": "Plot",
"family": "generic-object",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
},
{
"apiId": "py:Plot:function:addNavigationToolbar",
"name": "addNavigationToolbar",
"family": "view-resource",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
},
{
"apiId": "py:Plot:function:delNavigationToolbar",
"name": "delNavigationToolbar",
"family": "view-resource",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
},
{
"apiId": "py:Plot:method:Line.getp",
"name": "Line.getp",
"family": "generic-object",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
},
{
"apiId": "py:Plot:method:Plot.isGrid",
"name": "Plot.isGrid",
"family": "generic-object",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
},
{
"apiId": "py:Plot:method:Plot.isLegend",
"name": "Plot.isLegend",
"family": "generic-object",
"sourcePath": "src/Mod/Plot/Plot.py",
"disposition": "planned"
}
]
}
},
"inputSha256": "28b6430f872ff58311acb8585e916bf14a1f868b6cfdadce53b539a5c4f8f3b2",
"result": {
"cmd": "plot.pythonFamilyBatch",
"count": 7,
"module": "Plot",
"ok": true,
"records": [
{
"apiId": "py:Plot:class:Line",
"code": "native_python_method",
"family": "generic-object",
"message": "Plot Python symbol was resolved and replayed by FreeCAD",
"name": "Line",
"native": true,
"parameterSchema": "source-declared",
"replay": "native-python-reflection",
"resourcesReleased": true,
"returnSchema": "class",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "exposed"
},
{
"apiId": "py:Plot:class:Plot",
"code": "native_python_method",
"family": "generic-object",
"message": "Plot Python symbol was resolved and replayed by FreeCAD",
"name": "Plot",
"native": true,
"parameterSchema": "source-declared",
"replay": "native-python-reflection",
"resourcesReleased": true,
"returnSchema": "class",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "exposed"
},
{
"apiId": "py:Plot:function:addNavigationToolbar",
"code": "gui_dependency_unavailable",
"family": "view-resource",
"message": "Plot navigation/view API requires Qt GUI capabilities unavailable in the headless Web runtime",
"name": "addNavigationToolbar",
"native": true,
"parameterSchema": "source-declared",
"resourcesReleased": true,
"returnSchema": "gui-resource",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "restricted"
},
{
"apiId": "py:Plot:function:delNavigationToolbar",
"code": "gui_dependency_unavailable",
"family": "view-resource",
"message": "Plot navigation/view API requires Qt GUI capabilities unavailable in the headless Web runtime",
"name": "delNavigationToolbar",
"native": true,
"parameterSchema": "source-declared",
"resourcesReleased": true,
"returnSchema": "gui-resource",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "restricted"
},
{
"apiId": "py:Plot:method:Line.getp",
"code": "native_python_method",
"family": "generic-object",
"message": "Plot Python symbol was resolved and replayed by FreeCAD",
"name": "Line.getp",
"native": true,
"parameterSchema": "{prop:string}",
"replay": "native-python-reflection",
"resourcesReleased": true,
"returnSchema": "value|null",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "exposed"
},
{
"apiId": "py:Plot:method:Plot.isGrid",
"code": "native_python_method",
"family": "generic-object",
"message": "Plot Python symbol was resolved and replayed by FreeCAD",
"name": "Plot.isGrid",
"native": true,
"parameterSchema": "{}",
"replay": "native-python-reflection",
"resourcesReleased": true,
"returnSchema": "bool",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "exposed"
},
{
"apiId": "py:Plot:method:Plot.isLegend",
"code": "native_python_method",
"family": "generic-object",
"message": "Plot Python symbol was resolved and replayed by FreeCAD",
"name": "Plot.isLegend",
"native": true,
"parameterSchema": "{}",
"replay": "native-python-reflection",
"resourcesReleased": true,
"returnSchema": "bool",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "exposed"
}
],
"resourcesReleased": true,
"schema": "freecad-web-plot/python-family-batch/v1",
"source": "freecad-source",
"tier": "tier-1-readonly"
},
"resultSha256": "84acca22980caa3750fc8214087b9de09b9d6e2d63289548b35e289060a48d60",
"replay": {
"equal": true,
"resultSha256": "84acca22980caa3750fc8214087b9de09b9d6e2d63289548b35e289060a48d60"
},
"crossModuleBoundary": {
"result": {
"cmd": "plot.pythonFamilyBatch",
"count": 1,
"module": "Plot",
"ok": true,
"records": [
{
"apiId": "py:BIM:class:Binding",
"code": "unmatched_source_record",
"family": "generic-object",
"message": "Plot API record is not part of this module-scoped adapter",
"name": "Line",
"native": true,
"resourcesReleased": true,
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"status": "not_implemented"
}
],
"resourcesReleased": true,
"schema": "freecad-web-plot/python-family-batch/v1",
"source": "freecad-source",
"tier": "tier-1-readonly"
},
"resultSha256": "df2b7a37449188fbae5120e5f858491e3df403a44fa6e0fa667b218cf7313e58"
},
"malformedRequest": {
"result": {
"ok": false,
"code": "invalid_request",
"error": "plot.pythonFamilyBatch requires tier=tier-1-readonly and non-empty args.records"
},
"resultSha256": "6750852baa4d8370063b8792f5ca98a283ed5aecf95197c52276a6bb1241b3e5"
},
"dispositionCounts": {
"exposed": 5,
"restricted": 2,
"nonportable": 0,
"not_implemented": 0
},
"records": [
{
"apiId": "py:Plot:class:Line",
"name": "Line",
"family": "generic-object",
"status": "exposed",
"code": "native_python_method",
"parameterSchema": "source-declared",
"returnSchema": "class",
"replay": "native-python-reflection",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "00b2e7df0d20cdf60f4bb79e1f0ac6ab8f885fbb87770c95ba209f6430dc072c"
},
{
"apiId": "py:Plot:class:Plot",
"name": "Plot",
"family": "generic-object",
"status": "exposed",
"code": "native_python_method",
"parameterSchema": "source-declared",
"returnSchema": "class",
"replay": "native-python-reflection",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "59575acf5cfcc5d7143f3e23c41c6da280025e393389856599c819940d8177d5"
},
{
"apiId": "py:Plot:function:addNavigationToolbar",
"name": "addNavigationToolbar",
"family": "view-resource",
"status": "restricted",
"code": "gui_dependency_unavailable",
"parameterSchema": "source-declared",
"returnSchema": "gui-resource",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "b71445307ca404b3ce104b060889f835e7241284b96f6e34cc3893fc3edbe457"
},
{
"apiId": "py:Plot:function:delNavigationToolbar",
"name": "delNavigationToolbar",
"family": "view-resource",
"status": "restricted",
"code": "gui_dependency_unavailable",
"parameterSchema": "source-declared",
"returnSchema": "gui-resource",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "24b877ef5479d2852642f2a9796644eb3fa2c65e583602d9d1aa06fae857fcc6"
},
{
"apiId": "py:Plot:method:Line.getp",
"name": "Line.getp",
"family": "generic-object",
"status": "exposed",
"code": "native_python_method",
"parameterSchema": "{prop:string}",
"returnSchema": "value|null",
"replay": "native-python-reflection",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "991ac8b3c1403ad1142e51b0289993e1262136a78525f8c9c5a01585291d7a5c"
},
{
"apiId": "py:Plot:method:Plot.isGrid",
"name": "Plot.isGrid",
"family": "generic-object",
"status": "exposed",
"code": "native_python_method",
"parameterSchema": "{}",
"returnSchema": "bool",
"replay": "native-python-reflection",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "2b57fbdf783ae82ca6ab3d872bdc2db035e84b8ccc37174d9c5ecd18081e504f"
},
{
"apiId": "py:Plot:method:Plot.isLegend",
"name": "Plot.isLegend",
"family": "generic-object",
"status": "exposed",
"code": "native_python_method",
"parameterSchema": "{}",
"returnSchema": "bool",
"replay": "native-python-reflection",
"sourceEntry": "src/Mod/Plot/Plot.py",
"sourceRevision": "2778e3f9c215da48bf0cfd562478d45d624aaa47",
"evidenceSha256": "7604e72cf0849b7ef7314120fe0731b5012903354bed4fa08817c2c6ba31a9bb"
}
],
"resources": {
"resourcesReleased": true,
"documentMutation": false
},
"artifacts": {
"wasm": {
"path": "web/public/kernel/FreeCADWebPlotRuntimeProbe.wasm",
"sha256": "325ebf698dbcc5d2af44615cb987f5715148940b2de1af0ac7393f9fe71bfeee"
},
"loader": {
"path": "web/public/kernel/FreeCADWebPlotRuntimeProbe.js",
"sha256": "c13588127a6b60801c40c79ba927b9f8c844cf7ee846a37e0d06c10da9a4926f"
}
},
"boundaries": [
"Plot navigation toolbar records remain restricted because they require Qt GUI resources.",
"All other selected records were resolved/replayed against the embedded official Plot.py Web backend.",
"All statuses and hashes come from compiled FreeCAD source through fc_web_dispatch_json; no JavaScript API result is substituted."
]
}