feat: complete production naming and reference lifecycle gates
Some checks failed
real-verification / chrome (push) Has been cancelled
real-verification / freecad-oracle (push) Has been cancelled
real-verification / wasm (push) Has been cancelled

This commit is contained in:
2026-08-14 10:10:30 -04:00
parent f97eae4153
commit f64b78865c
75 changed files with 57290 additions and 15675 deletions

View File

@@ -277,8 +277,16 @@ def collect_case(case_id, factory, index, directory):
after_stages = [entry for obj in reopened.Objects if (entry := stage_report(obj)) is not None]
after_names = {(stage["name"], entry["name"]): entry.get("mappedName") for stage in after_stages for entry in stage["names"]}
roundtrip_drift = sum(1 for key, value in before_names.items() if after_names.get(key) != value)
resaved_path = os.path.join(directory, "%s-resaved.FCStd" % case_id)
reopened.saveAs(resaved_path)
App.closeDocument(reopened.Name)
return {"id": case_id, "finalObject": final_name, "stages": stages, "elementMapResources": resources, "stringHasherResource": string_hasher_resource, "roundtripNameDrift": roundtrip_drift, "status": "pass"}
resaved = App.openDocument(resaved_path)
resaved.recompute()
resaved_stages = [entry for obj in resaved.Objects if (entry := stage_report(obj)) is not None]
resaved_names = {(stage["name"], entry["name"]): entry.get("mappedName") for stage in resaved_stages for entry in stage["names"]}
resave_name_drift = sum(1 for key, value in before_names.items() if resaved_names.get(key) != value)
App.closeDocument(resaved.Name)
return {"id": case_id, "finalObject": final_name, "stages": stages, "elementMapResources": resources, "stringHasherResource": string_hasher_resource, "roundtripNameDrift": roundtrip_drift, "resaveNameDrift": resave_name_drift, "nativeDesktopResaveCovered": True, "status": "pass"}
except Exception as error:
return {"id": case_id, "finalObject": "", "stages": [], "elementMapResources": {}, "status": "failed", "error": str(error)}
finally:
@@ -309,6 +317,6 @@ report = {
"gitCommit": FREECAD_COMMIT,
"status": "pass" if len(cases) == 30 and all(case["status"] == "pass" for case in cases) else "failed",
"cases": cases,
"summary": {"cases": len(cases), "passed": sum(1 for case in cases if case["status"] == "pass"), "failed": sum(1 for case in cases if case["status"] != "pass")},
"summary": {"cases": len(cases), "passed": sum(1 for case in cases if case["status"] == "pass"), "failed": sum(1 for case in cases if case["status"] != "pass"), "roundtripNameDrift": sum(case.get("roundtripNameDrift", 0) for case in cases), "resaveNameDrift": sum(case.get("resaveNameDrift", 0) for case in cases), "nativeDesktopResaveCases": sum(1 for case in cases if case.get("nativeDesktopResaveCovered") is True)},
}
print("FREECAD_COMPOSITE_HISTORY_ELEMENTMAP_RESULT=" + json.dumps(report, sort_keys=True, separators=(",", ":")))