feat: align FreeCAD property status semantics
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"generatedAt": "2026-08-11T04:50:53.969Z",
|
||||
"generatedAt": "2026-08-14T14:24:04.328Z",
|
||||
"status": "pass",
|
||||
"browsers": [
|
||||
{
|
||||
@@ -38,7 +38,7 @@
|
||||
"height": 579,
|
||||
"geometrySource": "bitbybit-occt"
|
||||
},
|
||||
"screenshotBytes": 128023,
|
||||
"screenshotBytes": 121616,
|
||||
"pageErrors": []
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"generatedAt": "2026-08-11T02:37:40.468Z",
|
||||
"generatedAt": "2026-08-14T14:26:21.996Z",
|
||||
"browserId": "chrome",
|
||||
"status": "pass",
|
||||
"browser": {
|
||||
@@ -423,18 +423,18 @@
|
||||
"screenshots": {
|
||||
"desktop": {
|
||||
"path": "fixtures/chrome-app-e2e/desktop-workspace.png",
|
||||
"byteLength": 108743,
|
||||
"sha256": "dd67ab23283ffd55dc0509174f8636eac5344de581d4cacfff13cc1828617399"
|
||||
"byteLength": 109165,
|
||||
"sha256": "f5030d4e3ae88107e06a5e8147a196b5f0eb7748c7c306b4118f97a98dd9bee4"
|
||||
},
|
||||
"cam": {
|
||||
"path": "fixtures/chrome-app-e2e/cam-workbench.png",
|
||||
"byteLength": 118389,
|
||||
"sha256": "c339e4b998b8ce7b3290c32efeffebed85dbd1d56d8ae9f764196c7b52e80a8f"
|
||||
"byteLength": 118390,
|
||||
"sha256": "5349262af666380bbc96f2932eed2613547ae60870a1d8b9fe44d8ed4831b4ab"
|
||||
},
|
||||
"mobile": {
|
||||
"path": "fixtures/chrome-app-e2e/mobile-start.png",
|
||||
"byteLength": 130371,
|
||||
"sha256": "9d69c9e9ced4b45bbd083a37a94b5df074e8d60540c0857e79b9df08a8648d81"
|
||||
"byteLength": 130361,
|
||||
"sha256": "c65c8644728cb488b22d683a3b68b770dccdfe2107dc9ab5413bfdda72ff9ab1"
|
||||
}
|
||||
},
|
||||
"pageErrors": []
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"scale": {
|
||||
"components": 1000,
|
||||
"bomRows": 10,
|
||||
"durationMs": 6.685000061988831,
|
||||
"durationMs": 11.384999990463257,
|
||||
"budgetMs": 1000
|
||||
},
|
||||
"fcstd": {
|
||||
@@ -44,7 +44,7 @@
|
||||
"persistence": {
|
||||
"mode": "sqlite-opfs",
|
||||
"byteLength": 980,
|
||||
"hash": "93bbadc1517ccf2443c74578e92bea6d13c01b02976a53630707f5e7002a6066",
|
||||
"hash": "5482e205a876ef4516106d3819ee59a6873ada3f6e48d85df78ed123c073fd3b",
|
||||
"roundTrip": true,
|
||||
"released": true
|
||||
},
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"persistence": {
|
||||
"mode": "sqlite-opfs",
|
||||
"byteLength": 848,
|
||||
"hash": "7a55c8b5c5f1f5354c2819c6289c9ae60351f7c0d6d1844e51eea2785ce7fad8",
|
||||
"hash": "ec7b7361b0ea5caad7776e5cf851909745150e0de004840187ce000d268794e0",
|
||||
"roundTrip": true,
|
||||
"released": true
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"status": "pass",
|
||||
"status": "failed",
|
||||
"stages": [
|
||||
"CAD",
|
||||
"OCL",
|
||||
@@ -29,15 +29,7 @@
|
||||
"hasC359": true,
|
||||
"hasC361": true
|
||||
},
|
||||
"machine": {
|
||||
"backend": "linuxcnc-wasm",
|
||||
"status": "accepted",
|
||||
"dryRunStatus": "dry-run",
|
||||
"parserAuthority": "linuxcnc-wasm",
|
||||
"lines": 65,
|
||||
"blocks": 138,
|
||||
"trajectorySegments": 48
|
||||
},
|
||||
"error": "Error: LinuxCNC WASM bridge timed out waiting for parser/controller acceptance.\n at http://127.0.0.1:5201/src/facade/camPipeline.ts:103:18",
|
||||
"browserId": "chrome",
|
||||
"browser": {
|
||||
"product": "150.0.7871.128",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"multiAxis": true
|
||||
},
|
||||
"geometry": {
|
||||
"sourceShape": "shape-msjl38sz-1",
|
||||
"sourceShape": "shape-mst1ison-1",
|
||||
"valid": true,
|
||||
"volume": 30
|
||||
},
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
},
|
||||
"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"] },
|
||||
"document": { "level": "experimental", "operations": ["typed-properties", "property-vector", "property-placement", "property-multi-transform", "property-link-list", "property-string-list", "property-link-sub", "freecad-property-status-bitmask", "property-status-native-oracle", "property-status-output-touch-suppression", "property-status-dependent-only-recompute", "property-status-transient-fcstd", "property-status-no-persist-fcstd", "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-v7", "stable-native-object-tags", "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"] },
|
||||
|
||||
@@ -862,9 +862,6 @@
|
||||
],
|
||||
"facadeNative": [
|
||||
"Hidden",
|
||||
"ReadOnly"
|
||||
],
|
||||
"proxyOnly": [
|
||||
"Immutable",
|
||||
"LockDynamic",
|
||||
"NoModify",
|
||||
@@ -877,17 +874,39 @@
|
||||
"PropOutput",
|
||||
"PropReadOnly",
|
||||
"PropTransient",
|
||||
"ReadOnly",
|
||||
"Transient"
|
||||
],
|
||||
"proxyOnlyRecordCount": 2639,
|
||||
"behaviorNative": [
|
||||
"Hidden",
|
||||
"Immutable",
|
||||
"NoModify",
|
||||
"Ordered",
|
||||
"Output",
|
||||
"PropHidden",
|
||||
"PropNoPersist",
|
||||
"PropNoRecompute",
|
||||
"PropOutput",
|
||||
"PropReadOnly",
|
||||
"PropTransient",
|
||||
"ReadOnly",
|
||||
"Transient"
|
||||
],
|
||||
"preservedOnly": [
|
||||
"LockDynamic",
|
||||
"PartialTrigger"
|
||||
],
|
||||
"preservedOnlyRecordCount": 70,
|
||||
"proxyOnly": [],
|
||||
"proxyOnlyRecordCount": 0,
|
||||
"unknownNumericBits": []
|
||||
},
|
||||
"harness": {
|
||||
"path": "scripts/run-freecad-native-property-semantics.mjs",
|
||||
"bytes": 5658,
|
||||
"sha256": "35eb62dc7988ac5f373fb25d1558ab830ecb42b261009fbd79638ee428800331"
|
||||
"bytes": 5949,
|
||||
"sha256": "fb7fb74e4979b284e7a0f637d820bd183cea8e5cfb1348fd1730a891ac1306a2"
|
||||
},
|
||||
"exactPromotionReady": false,
|
||||
"exactBlocker": "complete native document and property semantics",
|
||||
"generatedAt": "2026-08-14T12:20:59.613Z"
|
||||
"generatedAt": "2026-08-14T15:36:12.139Z"
|
||||
}
|
||||
|
||||
223
config/freecad-property-status-oracle.json
Normal file
223
config/freecad-property-status-oracle.json
Normal file
@@ -0,0 +1,223 @@
|
||||
{
|
||||
"baselineId": "freecad-1.1.1-property-status-oracle",
|
||||
"cases": [
|
||||
{
|
||||
"afterRecompute": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"attr": 0,
|
||||
"before": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"changed": {
|
||||
"documentTouched": true,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Touched"
|
||||
]
|
||||
},
|
||||
"id": "ordinary",
|
||||
"recomputeCount": 1,
|
||||
"reportedStatus": [
|
||||
"21"
|
||||
],
|
||||
"reportedType": [],
|
||||
"runtimeStatus": null
|
||||
},
|
||||
{
|
||||
"afterRecompute": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"attr": 0,
|
||||
"before": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"changed": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"id": "runtime-output",
|
||||
"recomputeCount": 0,
|
||||
"reportedStatus": [
|
||||
"Output",
|
||||
"21"
|
||||
],
|
||||
"reportedType": [],
|
||||
"runtimeStatus": "Output"
|
||||
},
|
||||
{
|
||||
"afterRecompute": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"attr": 8,
|
||||
"before": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"changed": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"id": "type-output",
|
||||
"recomputeCount": 0,
|
||||
"reportedStatus": [
|
||||
"21",
|
||||
"27"
|
||||
],
|
||||
"reportedType": [
|
||||
"Output"
|
||||
],
|
||||
"runtimeStatus": null
|
||||
},
|
||||
{
|
||||
"afterRecompute": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"attr": 0,
|
||||
"before": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"changed": {
|
||||
"documentTouched": true,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Touched"
|
||||
]
|
||||
},
|
||||
"id": "runtime-no-recompute",
|
||||
"recomputeCount": 1,
|
||||
"reportedStatus": [
|
||||
"NoRecompute",
|
||||
"21"
|
||||
],
|
||||
"reportedType": [],
|
||||
"runtimeStatus": "NoRecompute"
|
||||
},
|
||||
{
|
||||
"afterRecompute": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"attr": 16,
|
||||
"before": {
|
||||
"documentTouched": false,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Up-to-date"
|
||||
]
|
||||
},
|
||||
"changed": {
|
||||
"documentTouched": true,
|
||||
"mustExecute": false,
|
||||
"state": [
|
||||
"Touched"
|
||||
]
|
||||
},
|
||||
"id": "type-no-recompute",
|
||||
"recomputeCount": 0,
|
||||
"reportedStatus": [
|
||||
"21",
|
||||
"23"
|
||||
],
|
||||
"reportedType": [
|
||||
"NoRecompute"
|
||||
],
|
||||
"runtimeStatus": null
|
||||
}
|
||||
],
|
||||
"fcstd": {
|
||||
"reopened": {
|
||||
"properties": [
|
||||
"Persisted",
|
||||
"RuntimeTransient",
|
||||
"TypeTransient"
|
||||
],
|
||||
"statuses": {
|
||||
"Persisted": [
|
||||
"Output",
|
||||
"21"
|
||||
],
|
||||
"RuntimeTransient": [
|
||||
"Transient",
|
||||
"21"
|
||||
],
|
||||
"TypeTransient": [
|
||||
"21",
|
||||
"25"
|
||||
]
|
||||
},
|
||||
"values": {
|
||||
"Persisted": 11,
|
||||
"RuntimeTransient": 0,
|
||||
"TypeTransient": 0
|
||||
}
|
||||
},
|
||||
"xml": {
|
||||
"noPersistProperty": false,
|
||||
"persistedProperty": true,
|
||||
"runtimeTransientHasValue": false,
|
||||
"runtimeTransientProperty": true,
|
||||
"typeTransientHasValue": false,
|
||||
"typeTransientProperty": true
|
||||
}
|
||||
},
|
||||
"freecadVersion": "1.1.1",
|
||||
"gitCommit": "0108fd4b4850cc46e625b60e53cea7a7bbe69f8d",
|
||||
"lockDynamic": {
|
||||
"failures": {
|
||||
"remove": null,
|
||||
"rename": {
|
||||
"message": "Property LockedValue is locked",
|
||||
"type": "RuntimeError"
|
||||
}
|
||||
},
|
||||
"propertyStillPresent": true,
|
||||
"renamedPropertyPresent": false,
|
||||
"reportedStatus": [
|
||||
"LockDynamic",
|
||||
"21"
|
||||
]
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"status": "pass"
|
||||
}
|
||||
@@ -41,7 +41,7 @@
|
||||
"id": "EX03",
|
||||
"title": "Application document, property and recompute semantics",
|
||||
"tasks": [
|
||||
{ "id": "EX-DOC-01", "title": "Implement every native property type, flag, editor and serialization rule", "priority": "P0", "status": "in_progress", "dependencies": ["EX-ORA-01"], "deliverables": ["Complete Property schema", "Status and editor metadata", "Binary and XML codecs"], "acceptance": ["Every runtime property fixture round-trips without type coercion or unknown loss"], "evidence": ["check:freecad-type-properties", "check:freecad-native-property-semantics", "check:freecad-fcstd-roundtrip"], "exactBlockedBy": ["Of 85 runtime property types and 5510 records, 62 types/692 records remain opaque-only and 2639 records use status semantics not represented natively by the Facade"] },
|
||||
{ "id": "EX-DOC-01", "title": "Implement every native property type, flag, editor and serialization rule", "priority": "P0", "status": "in_progress", "dependencies": ["EX-ORA-01"], "deliverables": ["Complete Property schema", "Status and editor metadata", "Binary and XML codecs"], "acceptance": ["Every runtime property fixture round-trips without type coercion or unknown loss"], "evidence": ["check:freecad-type-properties", "check:freecad-native-property-semantics", "check:freecad-property-status", "check:freecad-fcstd-roundtrip"], "exactBlockedBy": ["Of 85 runtime property types and 5510 records, 62 types/692 records remain opaque-only; all 15 observed status classes are represented, 13 have native behavior evidence, and LockDynamic/PartialTrigger still lack dynamic mutation and partial-document observer implementation"] },
|
||||
{ "id": "EX-DOC-02", "title": "Match transactions, DAG recompute, partial failure and document observers", "priority": "P0", "status": "in_progress", "dependencies": ["EX-DOC-01", "EX-TSN-04"], "deliverables": ["Transaction and observer event oracle", "Partial recompute scheduler", "Failure recovery contract"], "acceptance": ["Undo, redo, abort, stale and cyclic dependency behavior matches FreeCAD"], "evidence": ["check:document-closure", "test:facade"], "exactBlockedBy": ["Observer ordering and every partial-recompute branch are not yet oracle-backed"] },
|
||||
{ "id": "EX-DOC-03", "title": "Complete expressions, links, extensions, groups and App object lifecycle", "priority": "P0", "status": "in_progress", "dependencies": ["EX-DOC-01"], "deliverables": ["Expression dependency grammar", "Link and extension lifecycle", "Group and clone semantics"], "acceptance": ["Copy, clone, delete, relink and expression edits survive native round-trip"], "evidence": ["check:fcstd-closure", "check:chrome-production-document"], "exactBlockedBy": ["FeaturePython-backed extensions remain non-executable"] },
|
||||
{ "id": "EX-DOC-04", "title": "Complete multi-document, external link, merge and recovery workflows", "priority": "P1", "status": "pending", "dependencies": ["EX-DOC-02", "EX-DOC-03"], "deliverables": ["Cross-document Link corpus", "Merge and conflict semantics", "Crash and autosave recovery"], "acceptance": ["Open, close, relink, merge and recovery match the native document graph"], "evidence": ["check:chrome-persistence", "check:project-migration"], "exactBlockedBy": ["Current application is project-first and does not implement every desktop multi-document workflow"] },
|
||||
|
||||
Reference in New Issue
Block a user