121 lines
11 KiB
JSON
121 lines
11 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": "ui-prototype", "level": "read-only", "commands": ["working-plane", "snap-settings", "draft-line", "draft-wire", "move", "rotate"] },
|
|
"TechDraw": { "status": "ui-prototype", "level": "read-only", "commands": ["new-page", "view-part", "section-view", "dimension", "annotation"] },
|
|
"Spreadsheet": { "status": "ui-prototype", "level": "read-only", "commands": ["new-sheet", "set-alias", "expression", "bind-property"] },
|
|
"Assembly": { "status": "ui-prototype", "level": "read-only", "commands": ["insert-component", "coincident", "concentric", "distance", "interference"] },
|
|
"BIM": { "status": "ui-manifest", "level": "unsupported", "commands": ["wall", "structure", "window", "ifc-export"] },
|
|
"CAM": { "status": "ui-manifest", "level": "unsupported", "commands": ["new-job", "stock", "profile-path", "simulate", "post-process"] },
|
|
"FEM": { "status": "ui-manifest", "level": "unsupported", "commands": ["new-analysis", "material", "mesh", "solve", "results"] },
|
|
"Mesh": { "status": "ui-prototype", "level": "read-only", "commands": ["mesh-import", "analyze-mesh", "repair-mesh", "fill-holes", "mesh-export"] },
|
|
"Surface": { "status": "ui-manifest", "level": "unsupported", "commands": ["bspline", "bezier", "fill-surface", "loft-surface", "trim-surface"] },
|
|
"Inspection": { "status": "ui-manifest", "level": "unsupported", "commands": ["measure-distance", "measure-angle", "measure-area", "section", "check-dependencies"] },
|
|
"AddonManager": { "status": "scope-only", "level": "unsupported", "commands": ["addon-list", "addon-install", "addon-update", "addon-remove"] },
|
|
"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": "scope-only", "level": "unsupported", "commands": ["idf-import", "idf-export"] },
|
|
"Import": { "status": "scope-only", "level": "unsupported", "commands": ["import-model", "import-batch", "import-options"] },
|
|
"JtReader": { "status": "scope-only", "level": "unsupported", "commands": ["jt-import", "jt-assembly", "jt-export"] },
|
|
"Material": { "status": "scope-only", "level": "unsupported", "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": "scope-only", "level": "unsupported", "commands": ["openscad-import", "openscad-export", "openscad-preview"] },
|
|
"Plot": { "status": "scope-only", "level": "unsupported", "commands": ["plot-create", "plot-style", "plot-export"] },
|
|
"Points": { "status": "scope-only", "level": "unsupported", "commands": ["points-import", "points-filter", "points-export"] },
|
|
"ReverseEngineering": { "status": "scope-only", "level": "unsupported", "commands": ["fit-curve", "fit-surface", "reverse-engineer"] },
|
|
"Robot": { "status": "scope-only", "level": "unsupported", "commands": ["robot-model", "robot-trajectory", "robot-simulate", "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": "scope-only", "level": "unsupported", "commands": [] },
|
|
"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",
|
|
"missingBuildInputs": ["OCCT C++ source checkout", "Embind generation rules", "Emscripten link/export manifest"],
|
|
"evidence": "./npmw run check:bitbybit-history"
|
|
},
|
|
"nativeOcctHistory": {
|
|
"status": "built-provider-not-default-runtime",
|
|
"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", "TKDESTEP", "TKXSBase", "TKDE"],
|
|
"bindings": ["BRepAlgoAPI_Fuse", "BRepAlgoAPI_Cut", "BRepAlgoAPI_Common", "Generated", "Modified", "IsDeleted", "TopExp_Explorer", "STEPControl_Reader", "STEPControl_Writer", "shapeToStep", "booleanHistoryFromStep"],
|
|
"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": "e2feca5a8bab431e3351e6af3972beef4f9ce47fe02de2d0ac7ba9de91882311",
|
|
"wasmSha256": "6fac28102132ddeb8e7f1f254c76643d595cc60a26b2adf80fe3d6407b18b675"
|
|
},
|
|
"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"
|
|
},
|
|
"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": "worker-provider-configurable-not-default-runtime"
|
|
},
|
|
"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", "fillet", "chamfer", "linear-pattern-whole-shape", "polar-pattern-whole-shape", "hole-basic-origin-normal", "feature-shape-cache", "face-edge-vertex-topology", "step-export", "stl-export"] },
|
|
"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", "toporef-candidate-replacement-transaction", "signature-topology-history-fallback", "native-topology-history-adapter", "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; planegcs-wasm unavailable", "operations": ["point-line-circle-arc-model", "ellipse-bspline-model-only", "construction-geometry", "stable-external-geometry-model", "basic-constraints", "diameter-symmetric-tangent", "basic-solver", "versioned-solver-protocol", "solver-capability-probe", "cancel-stale-isolation", "replay-contract", "persistence"] },
|
|
"fcstd": { "level": "read-only", "operations": ["zip-preflight", "document-xml-metadata", "document-property-projection", "proxy-report", "script-isolation"] },
|
|
"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"] }
|
|
},
|
|
"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."
|
|
]
|
|
}
|