Files
Web_FreeCAD_Bitbybit/config/compatibility-matrix.json

141 lines
17 KiB
JSON

{
"schemaVersion": 1,
"freecadBaseline": "freecad-1.1.1",
"workbenches": {
"Part Design": { "status": "facade-partial", "level": "experimental", "commands": ["create-body", "create-sketch", "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."
]
}