Files
FreeCADWasmDev/docs/p6/sandbox-source-boundary.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

243 lines
10 KiB
JSON

{
"schema": "freecad-web-p6-sandbox-source-boundary/v1",
"taskId": "FW-P6-SDB-A",
"module": "Sandbox",
"result": "pass_boundary",
"sourceRevision": "0644133717ebc04fae2194bb5ef9eec06880f909",
"sourceTree": {
"dirty": true,
"unrelatedModifiedPaths": [
"src/Mod/Part/App/TopoShapeCache.cpp",
"src/Mod/Part/App/TopoShapeExpansion.cpp",
"src/WebAssembly/FreeCADCoreProbe/CMakeLists.txt",
"src/WebAssembly/FreeCADCoreProbe/PartBoxProbe.cpp",
"src/WebAssembly/FreeCADCoreProbe/PartDesignRuntimeProbe.cpp",
"src/WebAssembly/FreeCADCoreProbe/PointsRuntimeProbe.cpp",
"src/WebAssembly/FreeCADCoreProbe/part-python-smoke-r1.js",
"src/WebAssembly/FreeCADCoreProbe/part-save-reopen-smoke.js",
"src/WebAssembly/FreeCADCoreProbe/partdesign-persistence-smoke.js",
"src/WebAssembly/FreeCADCoreProbe/partdesign-runtime-smoke.js",
"src/WebAssembly/FreeCADCoreProbe/points-kernel-smoke.js",
"src/WebAssembly/FreeCADCoreProbe/points-persistence-smoke.js",
"src/WebAssembly/FreeCADCoreProbe/points-recovery-smoke.js",
"src/WebAssembly/FreeCADCoreProbe/points-runtime-smoke.js"
]
},
"inputs": {
"workbenchInventory": {
"path": "docs/workbench-inventory.json",
"sha256": "06a0ff0d65e5b9d875b10ae5c88c064da5e2b166c131648e97d6c1f48e0ce263"
},
"objectInventory": {
"path": "docs/object-inventory.json",
"sha256": "020205e72184e2d92677c81cd183aabb2f9258204d11dc9f42fceddcc0a87c66"
}
},
"commands": [
"rg -n \"BUILD_|Init|addObject|registerType|PyInit\" src/Mod/Sandbox",
"git rev-parse HEAD",
"git status --short --branch",
"sha256sum docs/workbench-inventory.json docs/object-inventory.json"
],
"cmake": {
"module": {
"file": "src/Mod/Sandbox/CMakeLists.txt",
"appSubdirectory": { "lines": [3, 3], "condition": null },
"guiSubdirectory": { "lines": [4, 6], "condition": "BUILD_GUI" },
"scripts": { "lines": [8, 15], "base": ["Init.py", "exportDRAWEXE.py"], "gui": "InitGui.py when BUILD_GUI" }
},
"app": {
"file": "src/Mod/Sandbox/App/CMakeLists.txt",
"target": "Sandbox",
"targetLine": 45,
"sourcesLines": [29, 38],
"dependencies": ["Mesh"],
"linkLine": 46,
"pythonPackagingLines": [60, 61],
"qtIncludeConditionLines": [12, 22]
},
"gui": {
"file": "src/Mod/Sandbox/Gui/CMakeLists.txt",
"target": "SandboxGui",
"targetLine": 58,
"sourcesLines": [40, 52],
"dependencies": ["Sandbox", "Part", "FreeCADGui"],
"linkLine": 59,
"qtIncludeConditionLines": [9, 19],
"openGlAndCoinSources": ["GLGraphicsView.cpp", "Overlay.cpp"]
},
"moduleGate": {
"file": "src/Mod/CMakeLists.txt",
"lines": [93, 95],
"condition": "BUILD_SANDBOX"
}
},
"appBoundary": {
"moduleEntry": {
"file": "src/Mod/Sandbox/App/AppSandbox.cpp",
"line": 248,
"symbol": "PyMOD_INIT_FUNC(Sandbox)"
},
"nativeRegistration": {
"file": "src/Mod/Sandbox/App/AppSandbox.cpp",
"lines": [250, 255],
"symbols": ["DocumentProtector::init", "SandboxObject::init", "Sandbox::initModule"]
},
"pythonRegistration": {
"file": "src/Mod/Sandbox/App/AppSandbox.cpp",
"lines": [196, 215],
"types": ["PythonBaseClass", "DocumentProtectorPy", "DocumentObjectProtectorPy"],
"moduleFunctions": ["DocumentProtector", "DocumentObjectProtector"]
},
"documentObjectType": {
"file": "src/Mod/Sandbox/App/DocumentThread.cpp",
"propertySourceLine": 164,
"type": "Sandbox::SandboxObject",
"propertyLine": 168,
"executeLines": [175, 185]
},
"pythonProtectorMethods": {
"file": "src/Mod/Sandbox/App/DocumentProtectorPy.cpp",
"initTypeLines": [41, 52],
"actionLines": [124, 150],
"methods": ["addObject", "recompute"]
}
},
"guiBoundary": {
"moduleEntry": {
"file": "src/Mod/Sandbox/Gui/AppSandboxGui.cpp",
"line": 194,
"symbol": "PyMOD_INIT_FUNC(SandboxGui)"
},
"guiGuard": {
"file": "src/Mod/Sandbox/Gui/AppSandboxGui.cpp",
"lines": [196, 199],
"condition": "Gui::Application::Instance"
},
"appModuleImport": {
"file": "src/Mod/Sandbox/Gui/AppSandboxGui.cpp",
"lines": [201, 208],
"module": "Sandbox"
},
"registration": {
"file": "src/Mod/Sandbox/Gui/AppSandboxGui.cpp",
"lines": [210, 217],
"symbols": ["CreateSandboxCommands", "SandboxGui::Workbench::init", "SandboxGui::SoWidgetShape::initClass", "SandboxGui::initModule"]
},
"workbenchType": {
"file": "src/Mod/Sandbox/Gui/Workbench.cpp",
"line": 49,
"symbol": "TYPESYSTEM_SOURCE(SandboxGui::Workbench, Gui::StdWorkbench)"
},
"commands": {
"file": "src/Mod/Sandbox/Gui/Command.cpp",
"registrationLines": [1422, 1453],
"count": 29,
"guiOnlySymbols": ["Gui::CommandManager", "Gui::Application", "Gui::FileDialog", "Gui::View3DInventor", "QWidget", "QOpenGLFramebufferObject", "SIM::Coin3D::Quarter"]
}
},
"actionEntrypoints": [
{
"file": "src/Mod/Sandbox/App/DocumentProtector.cpp",
"lines": [270, 291],
"kind": "document-add-and-recompute",
"native": ["DocumentProtector::addObject", "DocumentProtector::recompute"]
},
{
"file": "src/Mod/Sandbox/App/DocumentThread.cpp",
"lines": [216, 232],
"kind": "threaded-document-action",
"native": ["DocumentTestThread::run", "SandboxObject::execute"]
},
{
"file": "src/Mod/Sandbox/Gui/Command.cpp",
"lines": [253, 266],
"kind": "gui-error-recovery-action",
"native": ["CmdSandboxDocumentNoThread::activated"],
"errorBoundary": "addObject after closeDocument reaches DocumentProtector validation"
},
{
"file": "src/Mod/Sandbox/Gui/Command.cpp",
"lines": [569, 597],
"kind": "mesh-import-action",
"native": ["CmdSandboxMeshLoader::activated"]
},
{
"file": "src/Mod/Sandbox/Gui/Command.cpp",
"lines": [1331, 1371],
"kind": "mesh-create-and-recompute-action",
"native": ["CmdMengerSponge::activated"]
}
],
"conditions": {
"desktop": "BUILD_SANDBOX gates the module; BUILD_GUI additionally gates SandboxGui and InitGui.py.",
"web": {
"file": "CMakeLists.txt",
"lines": [70, 75, 80, 99, 136, 143],
"finding": "FREECAD_WEB forces BUILD_GUI=OFF and BUILD_SANDBOX=OFF; there is no FREECAD_WEB_ENABLE_SANDBOX option.",
"runtimeStatus": "not_available_from_current_web_core_configuration"
},
"python": "AppSandbox.cpp includes Python.h and PyCXX; global SetupPython/SetupPyCXX is required, but this source probe does not verify a WASM Python runtime.",
"gui": "SandboxGui requires FreeCADGui, Qt, OpenGL/Coin3D symbols and is excluded when BUILD_GUI=OFF."
},
"directDependencies": {
"app": ["Mesh", "FreeCAD App/Python/PyCXX infrastructure"],
"gui": ["Sandbox", "Part", "FreeCADGui", "Qt", "OpenGL", "Coin3D"]
},
"missingOrUnverified": [
{
"dependency": "WASM Sandbox target",
"status": "missing",
"reason": "BUILD_SANDBOX is forcibly OFF in FREECAD_WEB and no opt-in Web closure exists."
},
{
"dependency": "SandboxGui runtime",
"status": "missing",
"reason": "BUILD_GUI is forcibly OFF in FREECAD_WEB; GUI-only link symbols are not part of the Web core."
},
{
"dependency": "Python/PyCXX Web execution",
"status": "unverified",
"reason": "The C++ source requires Python.h/PyCXX, but this A probe does not compile or execute the module."
}
],
"matches": {
"requestedRg": [
"src/Mod/Sandbox/CMakeLists.txt:4:if(BUILD_GUI)",
"src/Mod/Sandbox/App/CMakeLists.txt:45:add_library(Sandbox SHARED ...)",
"src/Mod/Sandbox/App/AppSandbox.cpp:248:PyMOD_INIT_FUNC(Sandbox)",
"src/Mod/Sandbox/App/DocumentThread.cpp:164:PROPERTY_SOURCE(Sandbox::SandboxObject, App::DocumentObject)",
"src/Mod/Sandbox/App/DocumentProtector.cpp:270:DocumentProtector::addObject",
"src/Mod/Sandbox/App/DocumentProtector.cpp:286:DocumentProtector::recompute",
"src/Mod/Sandbox/Gui/AppSandboxGui.cpp:194:PyMOD_INIT_FUNC(SandboxGui)",
"src/Mod/Sandbox/Gui/Command.cpp:1422:void CreateSandboxCommands()"
],
"webGate": [
"CMakeLists.txt:70:set(BUILD_GUI OFF ... FORCE)",
"CMakeLists.txt:99:BUILD_SANDBOX",
"CMakeLists.txt:137:set(... OFF ... FORCE)",
"src/Mod/CMakeLists.txt:93:if(BUILD_SANDBOX)"
]
},
"sourceSha256": {
"src/Mod/Sandbox/CMakeLists.txt": "320c7346a687a8a25b3d69ac2cc54524192eafe6d896257e7885b0114dd8b595",
"src/Mod/Sandbox/App/CMakeLists.txt": "a7a8ce9662c8b3ffc1937dde1c400be9ce09854120111ee6db20c085d0fd8181",
"src/Mod/Sandbox/Gui/CMakeLists.txt": "33147e6e20248d100ccdca65bef08c5d3202545dacb4fdf8928c15d06d139006",
"src/Mod/Sandbox/App/AppSandbox.cpp": "65adc40bfabcd46162cef9a271f1a33b7bfea161d368f72453c3238aa0283f26",
"src/Mod/Sandbox/App/DocumentProtector.cpp": "dcdad3b6691607bfc1949bc5b2a89af9c9ca6042ef2a1d42b8f5193e19d545f2",
"src/Mod/Sandbox/App/DocumentProtectorPy.cpp": "d7ab86bfef002344590feb15bdb4fc57e8fd36d9ec70e185e3d77106e0ebdec5",
"src/Mod/Sandbox/App/DocumentThread.cpp": "576a1e926c0c40315f4ca6bf43e03f14c48394a3a62abb8caf37a8bd7bbe70e2",
"src/Mod/Sandbox/Gui/AppSandboxGui.cpp": "dc204f0f752b623e5f7d86082b99d44c7975be85ac730d86ec7189245775abe6",
"src/Mod/Sandbox/Gui/Command.cpp": "856e3571c580a9d8779e697fb7fa2af755295ff7aed62080b9af8d1b42c8e7a7",
"src/Mod/Sandbox/Gui/Workbench.cpp": "f4d4c61702344ba6e4fa0e814d8e761177dd693c331d5a04bf4ac8088a75ff18",
"src/Mod/Sandbox/Init.py": "5a33311c42c395d328178c81b359fb5f7035001254cbe52894e8e5811f45e967",
"src/Mod/Sandbox/InitGui.py": "e999ee09d87e088489904837c1580dd28e411663c6bc3cb2738a9fb3ec6bd0b8"
},
"boundaries": [
"This is a source-boundary probe only; no CMake configure/build, WASM runtime, Python execution, browser test, or persistence result is claimed.",
"The existing dirty working-tree paths were observed and not modified.",
"GUI symbols and their dependencies are listed separately from the App target.",
"Source presence and registration entry points do not imply that Sandbox is enabled in the current Web build."
]
}