{ "schemaVersion": 1, "freecadBaseline": "freecad-1.1.1", "workbenches": { "Part Design": { "status": "facade-partial", "level": "experimental", "commands": ["create-body", "create-sketch", "shape-binder", "datum", "pad", "pocket", "revolution", "fillet", "chamfer", "mirrored", "multi-transform", "linear-pattern", "polar-pattern"] }, "Part": { "status": "facade-partial", "level": "experimental", "commands": ["primitive", "union", "cut", "intersection", "check-shape"] }, "Sketcher": { "status": "facade-model", "level": "experimental", "commands": ["new-sketch", "line", "arc", "circle", "rectangle", "constrain-horizontal", "constrain-vertical", "solve-sketch"] }, "Draft": { "status": "domain-contract", "level": "experimental", "commands": ["working-plane", "snap-settings", "draft-line", "draft-wire", "draft-circle", "move", "rotate", "scale", "offset", "array", "clone", "layer"] }, "TechDraw": { "status": "domain-contract", "level": "experimental", "commands": ["new-page", "view-part", "section-view", "dimension", "annotation", "svg-export"] }, "Spreadsheet": { "status": "domain-contract", "level": "experimental", "commands": ["new-sheet", "set-alias", "expression", "bind-property", "csv-export"] }, "Assembly": { "status": "domain-contract", "level": "experimental", "commands": ["insert-component", "ground-component", "connector", "coincident", "concentric", "distance", "angle", "solve-assembly", "bom", "collision-check", "explode-view", "variant"] }, "BIM": { "status": "domain-contract", "level": "experimental", "commands": ["wall", "structure", "window", "level", "space", "material", "quantity-schedule", "ifc-export"] }, "CAM": { "status": "domain-contract", "level": "experimental", "commands": ["new-job", "stock", "tool", "profile-path", "simulate", "gcode-export"] }, "FEM": { "status": "domain-contract", "level": "experimental", "commands": ["new-analysis", "material", "mesh", "fix-node", "load", "solve-reference-bar", "results-csv"] }, "Mesh": { "status": "domain-contract", "level": "experimental", "commands": ["mesh-import", "weld-vertices", "analyze-mesh", "remove-degenerate", "repair-triangle", "mesh-transform", "obj-export"] }, "Surface": { "status": "domain-contract", "level": "experimental", "commands": ["bspline", "bezier", "fill-surface", "loft-surface", "trim-surface", "sew-surface", "surface-continuity"] }, "Inspection": { "status": "domain-contract", "level": "experimental", "commands": ["measure-distance", "measure-angle", "measure-area", "measure-volume", "check-dependencies", "csv-report"] }, "AddonManager": { "status": "domain-contract", "level": "experimental", "commands": ["addon-list", "addon-install", "addon-update", "addon-remove", "addon-rollback", "addon-permissions"] }, "Cloud": { "status": "scope-only", "level": "unsupported", "commands": ["cloud-login", "cloud-open", "cloud-save", "cloud-share"] }, "Fem": { "status": "scope-only", "level": "unsupported", "commands": ["new-analysis", "material", "mesh", "solve", "results"] }, "Help": { "status": "scope-only", "level": "unsupported", "commands": ["help-contents", "help-search", "help-about"] }, "Idf": { "status": "data-adapter-registry", "level": "read-only", "commands": ["idf-import", "idf-export"] }, "Import": { "status": "domain-contract", "level": "experimental", "commands": ["import-model", "import-batch", "import-options"] }, "JtReader": { "status": "data-adapter-registry", "level": "read-only", "commands": ["jt-import", "jt-assembly", "jt-export"] }, "Material": { "status": "domain-contract", "level": "experimental", "commands": ["material-card", "material-library", "material-assign"] }, "Measure": { "status": "scope-only", "level": "unsupported", "commands": ["measure-distance", "measure-angle", "measure-area", "measure-volume"] }, "MeshPart": { "status": "scope-only", "level": "unsupported", "commands": ["mesh-to-shape", "shape-to-mesh", "mesh-section"] }, "OpenSCAD": { "status": "data-adapter-registry", "level": "read-only", "commands": ["openscad-import", "openscad-export", "openscad-preview"] }, "Plot": { "status": "domain-contract", "level": "experimental", "commands": ["plot-create", "plot-style", "plot-bind", "plot-svg-export", "plot-csv-export"] }, "Points": { "status": "data-adapter-registry", "level": "read-only", "commands": ["points-import", "points-filter", "points-export"] }, "ReverseEngineering": { "status": "data-adapter-registry", "level": "read-only", "commands": ["fit-curve", "fit-surface", "reverse-engineer"] }, "Robot": { "status": "domain-contract", "level": "experimental", "commands": ["robot-model", "joint-limits", "waypoint", "robot-trajectory", "robot-export"] }, "Show": { "status": "scope-only", "level": "unsupported", "commands": ["show-object", "show-share", "show-presentation"] }, "Start": { "status": "scope-only", "level": "unsupported", "commands": ["start-page", "recent-projects", "templates"] }, "Web": { "status": "scope-only", "level": "unsupported", "commands": ["web-export", "web-view", "web-share"] }, "Sandbox": { "status": "scope-only", "level": "unsupported", "commands": [] }, "TemplatePyMod": { "status": "domain-contract", "level": "experimental", "commands": ["macro-record", "macro-replay", "facade-command"] }, "Test": { "status": "scope-only", "level": "unsupported", "commands": [] }, "Tux": { "status": "scope-only", "level": "unsupported", "commands": [] } }, "sourceScope": { "baseline": "FreeCAD 1.1.1 src/Mod", "moduleCount": 34, "modules": ["AddonManager", "Assembly", "BIM", "CAM", "Cloud", "Draft", "Fem", "Help", "Idf", "Import", "Inspection", "JtReader", "Material", "Measure", "Mesh", "MeshPart", "OpenSCAD", "Part", "PartDesign", "Plot", "Points", "ReverseEngineering", "Robot", "Sandbox", "Show", "Sketcher", "Spreadsheet", "Start", "Surface", "TechDraw", "TemplatePyMod", "Test", "Tux", "Web"], "coreDirectories": ["App", "Base", "Gui", "Main"], "coverageRule": "Every module, command, TypeId, Property, file format, script/addon entry and browser limitation must have a task ID and a compatibility level before G9. Scope-only means registered but not implemented." }, "sourceModuleAliases": { "Fem": "FEM", "PartDesign": "Part Design", "TechDraw": "TechDraw", "MeshPart": "Mesh" }, "geometryBuildStrategy": { "primary": "reuse-bitbybit", "fallback": ["extend-bitbybit-binding", "custom-occt-binding"], "sourceTasks": ["BYB-01", "BYB-02", "BYB-03", "BYB-04", "BYB-05", "BYB-06", "BYB-07", "BYB-08"], "constraints": ["Facade-only React boundary", "Emscripten reproducible build", "ABI and protocol versioning", "SBOM/license/hash evidence", "Bitbybit-FreeCAD golden differential"] }, "bitbybitSource": { "repository": "https://github.com/bitbybit-dev/bitbybit", "localSnapshot": ".cache/bitbybit/bitbybit", "commit": "d3f52bd1fcf78148b60800d69ed6b42e53f4ad06", "version": "1.1.1", "occtPackage": "packages/dev/occt", "workerPackage": "packages/dev/occt-worker", "sourceForm": "generated-wasm-and-typescript-only", "wasmArtifact": { "path": "node_modules/@bitbybit-dev/occt/bitbybit-dev-occt/bitbybit-dev-occt.a4a6ec2a.wasm", "sha256": "1b6a8fc7b83d222854f73b66af8d0e45ad4fdee025904b447e885d4e18ae8656", "status": "compiled-artifact-verified" }, "missingBuildInputs": ["OCCT C++ source checkout", "Embind generation rules", "Emscripten link/export manifest"], "evidence": "./npmw run check:bitbybit-history" }, "nativeOcctHistory": { "status": "built-provider-browser-verified-default-worker", "sourceCheckout": "OCCT_SOURCE_DIR", "sourceCommit": "bb75017e915f6509a4bfa8b551f853352754c2da", "occtVersion": "8.0.0", "toolchain": "Emscripten 3.1.69 + CMake 3.31.6 + Ninja 1.12.1", "library": ["TKBO", "TKBool", "TKFillet", "TKOffset", "TKDESTEP", "TKXSBase", "TKDE"], "bindings": ["BRepPrimAPI_MakeBox", "BRepPrimAPI_MakeCylinder", "BRepPrimAPI_MakeSphere", "BRepPrimAPI_MakeCone", "BRepPrimAPI_MakePrism", "BRepPrimAPI_MakeRevol", "BRepBuilderAPI_Transform", "BRepFilletAPI_MakeFillet", "BRepFilletAPI_MakeChamfer", "BRepOffsetAPI_DraftAngle", "BRepOffsetAPI_MakePipe", "BRepOffsetAPI_MakeThickSolid", "BRepAlgoAPI_Fuse", "BRepAlgoAPI_Cut", "BRepAlgoAPI_Common", "Generated", "Modified", "IsDeleted", "BRepCheck_Analyzer", "BRepGProp", "BRepBndLib", "TopExp_Explorer", "STEPControl_Reader", "STEPControl_Writer", "shapeToStep", "shapeSummary", "booleanProbe", "booleanResult", "booleanHistoryFromStep", "prismHistoryFromStep", "pocketHistoryFromStep", "loftHistoryFromStep", "pipeHistoryFromStep", "revolutionHistoryFromStep", "grooveHistoryFromStep", "filletHistoryFromStep", "chamferHistoryFromStep", "holeHistoryFromStep", "draftHistoryFromStep", "thicknessHistoryFromStep", "linearPatternHistoryFromStep", "polarPatternHistoryFromStep", "mirroredHistoryFromStep", "multiTransformHistoryFromStep", "makeRectangleFace", "makeRectangleFacePlaced", "makeLineWire"], "buildOptimization": "OCCT dependencies -O0 with Emscripten -fexceptions; Embind wrapper -O2 with -fexceptions", "artifact": { "javascript": "native/occt-history/dist/bitbybit-occt-history.js", "wasm": "native/occt-history/dist/bitbybit-occt-history.wasm", "javascriptSha256": "78f1cdd17a6a7b61ff8435c0ff8c912a43c4517e6ef49f3f741521662a903557", "wasmSha256": "b6cb6307399b188cdf1377e9294b4af8e36b21783693101db8f985e41cff5fbe" }, "protocol": "native result and history records stay inside the provider; cross-WASM handles are forbidden; STEP text is the explicit transport boundary", "historyProtocol": { "version": 1, "request": "NativeOcctHistoryRequest", "response": "NativeOcctHistoryProtocolResponse", "transport": "step-text", "cancellation": "AbortSignal", "timeout": "coordinator-configured", "staleGuard": "documentId + documentVersion + operationId", "namingEvidence": { "status": "explicit-runtime-contract", "mappedNameRef": "optional provider evidence; final-shape-only stages are marked and cannot mint FreeCAD tokens", "stringHasher": "optional opaque native table; validated and preserved losslessly", "exactBlockers": ["browser FreeCAD private token callback ABI", "browser builder naming evidence transport", "non-unique isomorphic source"] } }, "browserWorker": { "entry": "src/facade/nativeHistoryWorkerEntry.ts", "client": "src/facade/nativeHistoryWorkerClient.ts", "moduleUrl": "/native/occt-history/bitbybit-occt-history.js", "runtimeConfiguration": "BitbybitGeometryRuntime.configureNativeHistory(provider, timeoutMs)", "artifactPublishCommand": "./npmw run build:occt-history", "status": "default-application-worker-with-fallback", "browserVerification": "config/occt-browser-verification.json", "threeWayVerification": "config/freecad-bitbybit-native-threeway.json", "operations": ["worker-initialize", "worker-cancel", "worker-stale-isolation", "worker-crash-recovery-contract", "ownership-ledger-metrics", "browser-memory-budget-gate", "upstream-abi-golden-drift-gate", "artifact-dist-public-hash"] }, "buildCommand": "./npmw run build:occt-history", "testCommand": "./npmw run test:occt-history" }, "facadeCapabilities": { "geometry": { "level": "experimental", "provider": "BitBybit OCCT 1.1.1", "operations": ["box", "cylinder", "sphere", "cone", "placement", "object-placement-recompute", "placement-validation", "mirror-plane", "mirrored-whole-shape", "multi-transform-whole-shape", "union", "cut", "intersection", "part-primitive-recompute", "part-boolean-recompute", "shape-check", "pad", "pocket", "pocket-through-all", "revolution", "loft", "pipe", "fillet", "chamfer", "linear-pattern-whole-shape", "polar-pattern-whole-shape", "hole-basic-origin-normal", "feature-shape-cache", "face-edge-vertex-topology", "native-cross-feature-history-routing", "step-export", "stl-export"], "featureLevels": { "pad": { "level": "compatible", "exactBlockedBy": ["native MappedNameRef/StringHasher evidence when provider omits it"] }, "pocket": { "level": "compatible", "exactBlockedBy": ["native MappedNameRef/StringHasher evidence when provider omits it"] }, "revolution": { "level": "compatible", "exactBlockedBy": ["native MappedNameRef/StringHasher evidence when provider omits it"] }, "groove": { "level": "compatible", "exactBlockedBy": ["native MappedNameRef/StringHasher evidence when provider omits it", "OCCT/FreeCAD private token generation"] }, "boolean": { "level": "compatible", "exactBlockedBy": ["native MappedNameRef/StringHasher evidence when provider omits it", "isomorphic source ambiguity"] }, "fillet": { "level": "experimental", "exactBlockedBy": ["complete cross-feature native stage history"] }, "chamfer": { "level": "experimental", "exactBlockedBy": ["complete cross-feature native stage history"] }, "multi-transform": { "level": "experimental", "exactBlockedBy": ["feature-list native history", "private naming tokens"] } } }, "document": { "level": "experimental", "operations": ["typed-properties", "property-vector", "property-placement", "property-multi-transform", "property-link-list", "property-string-list", "property-link-sub", "expressions", "units", "dependency-dag", "parallel-level-recompute", "sync-recompute", "async-generation-recompute", "root-cause-diagnostics", "repair-branch-recompute", "versioned-toporef", "toporef-migration", "generation-topology-snapshot", "linksub-external-geometry-migration", "ambiguous-deleted-topology-diagnostics", "adjacency-fingerprint-disambiguation", "toporef-candidate-replacement-transaction", "signature-topology-history-fallback", "native-topology-history-adapter", "native-cross-feature-history-routing", "runtime-mapped-name-ref-evidence", "string-hasher-evidence-validation", "element-map2-multi-stage-name-mapping", "isomorphic-candidate-persistence", "element-map-name-contract", "undo-redo"] }, "persistence": { "level": "experimental", "provider": "SQLite WASM + OPFS with transient fallback", "operations": ["schema-v6", "object-topology-snapshots", "transactional-migrations", "migration-rollback", "serialized-write-queue", "five-version-checkpoints", "checkpoint-load", "recovery-report", "content-addressed-resources", "quota-preflight", "resource-sweep-plan", "opfs-orphan-sweep", "cross-tab-lock-notice"] }, "sketcher": { "level": "experimental", "provider": "typescript-basic; FreeCAD 1.1.1 planegcs WASM core installed", "operations": ["point-line-circle-arc-model", "ellipse-bspline-periodic-model", "construction-geometry", "geometry-validation", "stable-geometry-signature", "stable-external-geometry-model", "basic-constraints", "advanced-constraint-proxy", "diameter-symmetric-tangent", "basic-solver", "versioned-solver-protocol", "solver-capability-probe", "cancel-stale-isolation", "replay-contract", "planegcs-native-system-solve", "planegcs-horizontal-distance", "planegcs-vertical-distance", "planegcs-distance-x", "planegcs-distance-y", "planegcs-angle", "planegcs-circle-radius", "planegcs-circle-diameter", "planegcs-equal-lines", "planegcs-equal-circles", "planegcs-tangent-circles", "planegcs-point-symmetry", "planegcs-point-on-object", "planegcs-point-on-arc", "planegcs-point-on-ellipse", "planegcs-point-on-cubic-bspline", "planegcs-block-freeze", "planegcs-parallel-lines", "planegcs-perpendicular-lines", "planegcs-coincident-lines", "planegcs-snells-law-lines", "planegcs-ellipse-internal-alignment", "planegcs-cubic-bspline-weight", "planegcs-dedicated-worker-smoke", "persistence"] }, "fcstd": { "level": "read-only", "operations": ["zip-preflight", "document-xml-metadata", "document-property-projection", "live-topology-element-map", "proxy-report", "script-isolation"] }, "viewport": { "level": "experimental", "provider": "Three.js WebGL2", "operations": ["mesh-rendering", "multi-object-mesh-registry", "view-orientation", "fit-and-zoom", "subshape-triangle-mapping", "subshape-click-selection", "subshape-hover-preselection", "subshape-hover-highlight", "occt-analytic-picking-topology", "brep-edge-polyline-picking", "edge-pixel-tolerance-picking", "vertex-pixel-tolerance-picking", "diagnostic-selection-flash", "multi-object-selection-set", "modifier-box-selection-gesture", "window-contained-box-selection", "crossing-intersection-box-selection", "multi-object-selection-highlight", "object-visibility-projection", "selection-resource-release"] }, "verification": { "level": "experimental", "provider": "FreeCADCmd 1.1.1 native headless Part oracle", "operations": ["locked-source-commit", "reproducible-native-build", "declarative-golden-contract", "part-geometry-replay", "numeric-tolerance-comparison", "execution-plan-validation", "source-inventory-validation", "type-property-inventory-validation"] } }, "systemExactEvaluation": { "evaluatedAt": "2026-08-10", "exact": false, "featureExactCount": 0, "plan": "config/freecad-web-exact-parity-plan.json", "promotionTask": "EX-REL-01", "taskStatus": { "completed": 2, "inProgress": 36, "pending": 14, "blocked": 0 }, "blockers": ["browser FreeCAD private token callback ABI", "browser builder naming evidence transport", "non-unique isomorphic source"] }, "rules": [ "UI status does not imply geometry or file compatibility.", "Every implementation must update this matrix before claiming support.", "Unsupported commands remain visible only when the workbench manifest exposes an explicit reason." ] }