feat: complete S-52 resource contract

This commit is contained in:
OpenAI Codex
2026-09-19 08:32:51 +08:00
parent b9ece0eaaa
commit 9dd6282817
11 changed files with 962 additions and 42 deletions

View File

@@ -496,7 +496,58 @@ def finalize_release(
else "FAIL"
)
s52_resource_contract = {
"status": "NOT_APPLICABLE",
"path": plan.get("s52_resource_contract_path"),
"sha256": None,
"expected_sha256": (plan.get("s52") or {}).get("resource_contract_sha256"),
"defined_resource_counts": None,
"active_resource_counts": None,
"failures": [],
}
expected_resource_sha = str(
(plan.get("s52") or {}).get("resource_contract_sha256") or ""
)
if expected_resource_sha:
resource_path_raw = plan.get("s52_resource_contract_path")
resource_failures: list[str] = []
resource_obj: dict[str, Any] = {}
if not resource_path_raw:
resource_failures.append("missing_resource_contract_path")
else:
resource_path = Path(resource_path_raw)
if not resource_path.exists():
resource_failures.append("resource_contract_file_missing")
else:
actual_sha = sha256_file(resource_path)
s52_resource_contract["sha256"] = actual_sha
if actual_sha != expected_resource_sha:
resource_failures.append("resource_contract_sha256_mismatch")
try:
resource_obj = json.loads(
resource_path.read_text(encoding="utf-8")
)
except Exception as exc:
resource_failures.append(
f"resource_contract_parse_error:{type(exc).__name__}"
)
else:
if resource_obj.get("status") != "PASS":
resource_failures.append("resource_contract_not_pass")
s52_resource_contract["defined_resource_counts"] = (
resource_obj.get("defined_resource_counts")
)
s52_resource_contract["active_resource_counts"] = (
resource_obj.get("active_resource_counts")
)
s52_resource_contract["failures"] = resource_failures
s52_resource_contract["status"] = (
"PASS" if not resource_failures else "FAIL"
)
failures = []
if expected_resource_sha and s52_resource_contract["status"] != "PASS":
failures.append("s52_resource_contract")
if tile_enumeration_mode == "aoi-complete":
if len(report_files) != int(plan["job_count"]):
failures.append("aoi_complete_report_count_mismatch")
@@ -537,6 +588,7 @@ def finalize_release(
"tile_footprint_contract": tile_footprint_contract,
"s52": plan.get("s52"),
"aoi": plan.get("aoi"),
"s52_resource_contract": s52_resource_contract,
"s52_runtime_contract": s52_runtime_contract,
"style_sha256": style_sha,
"sprite_json_sha256": sprite_sha,