feat: complete supported Sketcher and PartDesign ABI contract
This commit is contained in:
@@ -97,7 +97,7 @@
|
||||
"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"]
|
||||
"exactBlockers": ["shipped Worker lacks the FreeCAD-linked private naming ABI implementation", "browser builder naming evidence transport", "non-unique isomorphic source"]
|
||||
}
|
||||
},
|
||||
"browserWorker": {
|
||||
@@ -124,13 +124,13 @@
|
||||
"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",
|
||||
"evaluatedAt": "2026-08-11",
|
||||
"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"]
|
||||
"taskStatus": { "completed": 2, "inProgress": 37, "pending": 13, "blocked": 0 },
|
||||
"blockers": ["shipped Worker lacks the FreeCAD-linked private naming ABI implementation", "browser builder naming evidence transport", "non-unique isomorphic source"]
|
||||
},
|
||||
"rules": [
|
||||
"UI status does not imply geometry or file compatibility.",
|
||||
|
||||
99
config/freecad-sketcher-partdesign-abi-contract.json
Normal file
99
config/freecad-sketcher-partdesign-abi-contract.json
Normal file
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"baseline": {
|
||||
"version": "1.1.1",
|
||||
"sourceCommit": "0108fd4b4850cc46e625b60e53cea7a7bbe69f8d"
|
||||
},
|
||||
"claim": {
|
||||
"scope": "supported-web-facade",
|
||||
"exactFreeCadParity": false,
|
||||
"reason": "The contract exhausts the Sketcher serialization surface and supported PartDesign facade families; the shipped OCCT-only Worker is not linked with FreeCAD private naming code."
|
||||
},
|
||||
"sketcher": {
|
||||
"geometryTypes": [
|
||||
"point",
|
||||
"line",
|
||||
"arc",
|
||||
"circle",
|
||||
"ellipse",
|
||||
"arcEllipse",
|
||||
"arcHyperbola",
|
||||
"arcParabola",
|
||||
"bspline"
|
||||
],
|
||||
"constraintTypes": [
|
||||
"coincident",
|
||||
"horizontal",
|
||||
"vertical",
|
||||
"parallel",
|
||||
"tangent",
|
||||
"distance",
|
||||
"distanceX",
|
||||
"distanceY",
|
||||
"angle",
|
||||
"perpendicular",
|
||||
"radius",
|
||||
"equal",
|
||||
"pointOnObject",
|
||||
"symmetric",
|
||||
"internalAlignment",
|
||||
"snellsLaw",
|
||||
"block",
|
||||
"diameter",
|
||||
"weight"
|
||||
],
|
||||
"internalAlignmentTypes": [
|
||||
"ellipse-major",
|
||||
"ellipse-minor",
|
||||
"ellipse-focus",
|
||||
"hyperbola-major",
|
||||
"hyperbola-minor",
|
||||
"hyperbola-focus",
|
||||
"parabola-focus",
|
||||
"parabola-focal-axis",
|
||||
"bspline-control-point",
|
||||
"bspline-knot"
|
||||
]
|
||||
},
|
||||
"partDesign": {
|
||||
"families": 21,
|
||||
"propertySlots": 202,
|
||||
"semanticPartitions": 72,
|
||||
"typeIds": [
|
||||
"PartDesign::Plane",
|
||||
"PartDesign::Line",
|
||||
"PartDesign::Point",
|
||||
"PartDesign::ShapeBinder",
|
||||
"PartDesign::Pad",
|
||||
"PartDesign::Pocket",
|
||||
"PartDesign::Revolution",
|
||||
"PartDesign::Groove",
|
||||
"PartDesign::AdditiveLoft",
|
||||
"PartDesign::SubtractiveLoft",
|
||||
"PartDesign::AdditivePipe",
|
||||
"PartDesign::SubtractivePipe",
|
||||
"PartDesign::Fillet",
|
||||
"PartDesign::Chamfer",
|
||||
"PartDesign::Draft",
|
||||
"PartDesign::Thickness",
|
||||
"PartDesign::Mirrored",
|
||||
"PartDesign::MultiTransform",
|
||||
"PartDesign::LinearPattern",
|
||||
"PartDesign::PolarPattern",
|
||||
"PartDesign::Hole"
|
||||
]
|
||||
},
|
||||
"privateNamingAbi": {
|
||||
"abiVersion": 1,
|
||||
"transport": "versioned-json-over-embind",
|
||||
"requiredEvidence": [
|
||||
"MappedNameRef",
|
||||
"StringHasher",
|
||||
"ElementMap2"
|
||||
],
|
||||
"runtimeProfile": "freecad-private-v1-optional-worker",
|
||||
"shippedWorkerImplementation": "not-linked",
|
||||
"fallback": "final-shape-only",
|
||||
"syntheticTokenGeneration": "forbidden"
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,7 @@
|
||||
{ "id": "EX-KER-01", "title": "Match OCCT construction, validation, tolerances and failure diagnostics", "priority": "P0", "status": "in_progress", "dependencies": ["EX-ORA-02"], "deliverables": ["Per-operation native differential", "Tolerance and placement contract", "Failure-code map"], "acceptance": ["Shape validity, topology, mass properties and diagnostics match locked FreeCAD fixtures", "Worker ownership returns to zero after every case"], "evidence": ["check:browser-occt", "check:chrome-geometry-features"], "exactBlockedBy": ["Not all FreeCAD builder flags and failure branches are represented"] },
|
||||
{ "id": "EX-TSN-00", "title": "Fail closed when native naming or builder evidence is absent", "priority": "P0", "status": "completed", "dependencies": [], "deliverables": ["Runtime naming evidence contract", "final-shape-only and ambiguous persistence", "ElementMap2 writer evidence guard"], "acceptance": ["Final geometry cannot mint a private FreeCAD token", "Unproven stage relations and isomorphic sources cannot become stable"], "evidence": ["check:freecad-native-naming-evidence", "check:freecad-exact-history-elementmap-gate"], "exactBlockedBy": [] },
|
||||
{ "id": "EX-TSN-01", "title": "Capture native stage Shape and Generated/Modified/Deleted for every builder", "priority": "P0", "status": "completed", "dependencies": ["EX-KER-01", "EX-TSN-00"], "deliverables": ["All builder-stage captures", "Multi-input and one-to-many lineage", "Local feature recompute history"], "acceptance": ["Every feature result relation has a producing native stage", "No final-result index is applied to an intermediate Shape"], "evidence": ["check:freecad-composite-history-elementmap", "check:freecad-tsn-stage-evidence"], "exactBlockedBy": [] },
|
||||
{ "id": "EX-TSN-02", "title": "Expose native MappedNameRef and StringHasher decisions for every feature", "priority": "P0", "status": "pending", "dependencies": ["EX-TSN-01"], "deliverables": ["Native naming callback ABI", "Per-stage StringHasher evidence", "Lossless ElementMap2 token generation"], "acceptance": ["All new tokens originate in native evidence", "FreeCAD round-trip names remain byte and semantic stable"], "evidence": ["check:freecad-native-naming-evidence"], "exactBlockedBy": ["FreeCAD private naming callbacks are not exposed for every builder"] },
|
||||
{ "id": "EX-TSN-02", "title": "Expose native MappedNameRef and StringHasher decisions for every feature", "priority": "P0", "status": "in_progress", "dependencies": ["EX-TSN-01"], "deliverables": ["Native naming callback ABI", "Per-stage StringHasher evidence", "Lossless ElementMap2 token generation"], "acceptance": ["All new tokens originate in native evidence", "FreeCAD round-trip names remain byte and semantic stable"], "evidence": ["check:freecad-native-naming-evidence", "check:freecad-sketcher-partdesign-abi"], "exactBlockedBy": ["The shipped Worker does not link the FreeCAD private naming implementation for every builder"] },
|
||||
{ "id": "EX-TSN-03", "title": "Resolve isomorphic topology only from unique native provenance", "priority": "P0", "status": "in_progress", "dependencies": ["EX-TSN-01", "EX-TSN-02"], "deliverables": ["Symmetric Boolean corpus", "Candidate provenance graph", "Ambiguity repair lifecycle"], "acceptance": ["Unique native sources resolve deterministically", "Non-unique sources remain ambiguous across save, undo and recompute"], "evidence": ["test:topology-replay", "check:freecad-exact-history-elementmap-gate"], "exactBlockedBy": ["Symmetric cases without unique native provenance remain intentionally ambiguous"] },
|
||||
{ "id": "EX-TSN-04", "title": "Close topology naming across all feature edits and FCStd round-trips", "priority": "P0", "status": "pending", "dependencies": ["EX-TSN-02", "EX-TSN-03"], "deliverables": ["Cross-feature mutation matrix", "ElementMap2 history migration", "Long-chain LinkSub stability report"], "acceptance": ["Wrong bindings, unexplained relations and name drift are zero for the exhaustive corpus"], "evidence": ["check:freecad-fcstd-roundtrip", "check:freecad-exact-history-elementmap-gate"], "exactBlockedBy": ["Exhaustive cross-feature naming corpus is incomplete"] }
|
||||
]
|
||||
@@ -52,10 +52,10 @@
|
||||
"id": "EX04",
|
||||
"title": "Sketcher, Part and PartDesign feature exactness",
|
||||
"tasks": [
|
||||
{ "id": "EX-SK-01", "title": "Cover every Sketcher geometry, constraint overload and solver classification", "priority": "P0", "status": "in_progress", "dependencies": ["EX-KER-01", "EX-DOC-02"], "deliverables": ["Complete geometry and constraint matrix", "Planegcs result parity", "Reference, redundant and conflict oracle"], "acceptance": ["Geometry, DOF, diagnostics and solver results match every fixture"], "evidence": ["check:freecad-sketcher-constraints", "check:chrome-sketcher-diagnostics"], "exactBlockedBy": ["Arbitrary overload combinations and all failure messages are not exhaustive"] },
|
||||
{ "id": "EX-SK-01", "title": "Cover every Sketcher geometry, constraint overload and solver classification", "priority": "P0", "status": "in_progress", "dependencies": ["EX-KER-01", "EX-DOC-02"], "deliverables": ["Complete geometry and constraint matrix", "Planegcs result parity", "Reference, redundant and conflict oracle"], "acceptance": ["Geometry, DOF, diagnostics and solver results match every fixture"], "evidence": ["check:freecad-sketcher-constraints", "check:freecad-sketcher-partdesign-abi", "check:chrome-sketcher-diagnostics"], "exactBlockedBy": ["Arbitrary overload combinations and all failure messages are not exhaustive"] },
|
||||
{ "id": "EX-SK-02", "title": "Match Sketcher editing tools, autoconstraints, virtual space and UI lifecycle", "priority": "P0", "status": "in_progress", "dependencies": ["EX-SK-01", "EX-UI-03"], "deliverables": ["Pointer and keyboard editor oracle", "All editing tools", "Task and focus lifecycle"], "acceptance": ["Every tool supports success, failure, cancel, undo and redo with matching selection"], "evidence": ["check:freecad-sketcher-editor", "check:chrome-sketcher-bspline"], "exactBlockedBy": ["The full GUI tool and focus matrix is incomplete"] },
|
||||
{ "id": "EX-PART-01", "title": "Complete all Part primitives, builders, booleans, healing and inspection", "priority": "P0", "status": "in_progress", "dependencies": ["EX-KER-01", "EX-TSN-04"], "deliverables": ["All Part commands and parameters", "Healing and tolerance tools", "Native history for local operations"], "acceptance": ["Success and failure outputs match native Shape, history and diagnostics"], "evidence": ["check:chrome-part-primitives", "check:freecad-golden-fixtures"], "exactBlockedBy": ["Current golden corpus does not enumerate every Part command and option"] },
|
||||
{ "id": "EX-PD-01", "title": "Complete all PartDesign features, parameters and additive/subtractive combinations", "priority": "P0", "status": "in_progress", "dependencies": ["EX-PART-01", "EX-TSN-04"], "deliverables": ["Complete PartDesign feature matrix", "Body Tip and feature-list semantics", "Per-feature native history and naming"], "acceptance": ["Every feature edit, failure recovery and save-reopen matches FreeCAD"], "evidence": ["check:partdesign-closure", "check:chrome-partdesign-lifecycle"], "exactBlockedBy": ["Feature coverage is broad but private naming and all parameter combinations are not exhaustive"] },
|
||||
{ "id": "EX-PD-01", "title": "Complete all PartDesign features, parameters and additive/subtractive combinations", "priority": "P0", "status": "in_progress", "dependencies": ["EX-PART-01", "EX-TSN-04"], "deliverables": ["Complete PartDesign feature matrix", "Body Tip and feature-list semantics", "Per-feature native history and naming"], "acceptance": ["Every feature edit, failure recovery and save-reopen matches FreeCAD"], "evidence": ["check:partdesign-closure", "check:freecad-sketcher-partdesign-abi", "check:chrome-partdesign-lifecycle"], "exactBlockedBy": ["The parameter contract covers the supported Facade subset, not every registered PartDesign TypeId or cross-product"] },
|
||||
{ "id": "EX-PD-02", "title": "Complete attachment, datum, ShapeBinder, SubShapeBinder and body workflows", "priority": "P0", "status": "pending", "dependencies": ["EX-PD-01", "EX-DOC-04"], "deliverables": ["All map modes and support rules", "Datum and binder lifecycle", "Multi-body and cross-document corpus"], "acceptance": ["Support migration, visibility, Tip and references remain exact through mutation"], "evidence": ["check:chrome-partdesign-lifecycle", "check:freecad-fcstd-roundtrip"], "exactBlockedBy": ["Complete datum/binder and multi-body oracle is absent"] }
|
||||
]
|
||||
},
|
||||
|
||||
@@ -22,20 +22,20 @@
|
||||
"bytes": 556597,
|
||||
"sha256": "1679307fb0f01e9d7b9f37a081458bf44583e4d1899edf9224b49a1435ce7105"
|
||||
},
|
||||
{
|
||||
"path": "assets/index-BcH6J3tB.js",
|
||||
"bytes": 1103011,
|
||||
"sha256": "870d33fae0ceabaf31a8100e65ad7f1afb3f4f869bfc225bb8c722d7771ca917"
|
||||
},
|
||||
{
|
||||
"path": "assets/index-BnRqhr3m.css",
|
||||
"bytes": 65976,
|
||||
"sha256": "b8eacf86224d2705e3c27367b3a0b166f4d662a5b8142d34a8abcdeef58753ec"
|
||||
},
|
||||
{
|
||||
"path": "assets/nativeHistoryWorkerEntry-D9i46nqJ.js",
|
||||
"bytes": 4664,
|
||||
"sha256": "488e45728dd4ccfd65acb82c61266332171129a52e916ecbb7cc2a8ab61d4ed6"
|
||||
"path": "assets/index-ChdGmY7w.js",
|
||||
"bytes": 1130165,
|
||||
"sha256": "c508b701c47d2dea412c96f3a529f99b42bd7b137e647d958b993c3268dfc3e6"
|
||||
},
|
||||
{
|
||||
"path": "assets/nativeHistoryWorkerEntry-gNsJxM2G.js",
|
||||
"bytes": 20437,
|
||||
"sha256": "39c26691ba3275ce5fbb3a43239d5511430bc0222259f0c76e3aa9314f2e87cf"
|
||||
},
|
||||
{
|
||||
"path": "assets/persistenceWorker-CyD5EUVX.js",
|
||||
@@ -43,9 +43,9 @@
|
||||
"sha256": "65a24ca0125444e3047f409d3b1c3667321e392a0ca9ddf64df6b728a1544c66"
|
||||
},
|
||||
{
|
||||
"path": "assets/planegcsWorkerEntry-BEpPJPEo.js",
|
||||
"bytes": 26112,
|
||||
"sha256": "2b5b0a9604aa8181f38b803753ad42e33e6c426a9fd8c1df013ae8762c6bb5c0"
|
||||
"path": "assets/planegcsWorkerEntry-BeAnOOBp.js",
|
||||
"bytes": 26910,
|
||||
"sha256": "c2253b714352c02e543fa97dff1c1e7c64ae3983469d4e5a6b9bf75b78ba3483"
|
||||
},
|
||||
{
|
||||
"path": "assets/sqlite3-BVKGSWc-.wasm",
|
||||
@@ -330,7 +330,7 @@
|
||||
{
|
||||
"path": "index.html",
|
||||
"bytes": 678,
|
||||
"sha256": "07fab5a0e83597c5ca0a0cd2d57625f0134b56c02f2349a35be4e6de23540d33"
|
||||
"sha256": "ce1c0c151dfb290cff01268efaec2efd0cdc354548ffccb5cb1030b02249870f"
|
||||
},
|
||||
{
|
||||
"path": "manifest.webmanifest",
|
||||
@@ -380,7 +380,7 @@
|
||||
{
|
||||
"path": "sw.js",
|
||||
"bytes": 1390,
|
||||
"sha256": "01593ec533053a9ccdf341ef276ee5c0e1752e6dc30951acdc042c33d60f206c"
|
||||
"sha256": "a8d35592358f8580b3be765a36897969c63ebfb7c777a71296481e0d8118fad7"
|
||||
},
|
||||
{
|
||||
"path": "vendor/camotics/camotics-sweep.wasm",
|
||||
@@ -402,7 +402,7 @@
|
||||
"status": "signed",
|
||||
"algorithm": "Ed25519",
|
||||
"keyId": "bitbybit-local-release-2026",
|
||||
"payloadSha256": "f1fe903dc9879b0f02d1a4becbd5daf7fb9d7b96ef304f2cc04fc5058d80256e",
|
||||
"signature": "RY1mpA6T/zWYx1/Z/9Z7A2kpkBbbCbP8TQIIykaFbY2E8qzmlAw0qotNYq3yOP5OfbJqas+BjAXWJeEY7WA4DQ=="
|
||||
"payloadSha256": "be48e099205c1a86339eb4560e62ed88e12ffd0e2e45e036f3a723abd3bb078a",
|
||||
"signature": "AAyAo8hzt1I48LaHUArN7lEg11zWrl3EkNKF6zr92x2SZHFhXq/5m8KZ0hqJxNU4INM6bC/laqanCJ9GhRbkCQ=="
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user