Files
ARCADIA-Studio/harness/experiments/navigation-prerelease-20260911/verify_archive.py
T

48 lines
3.0 KiB
Python

"""Read-only producer archive verification; no package/application/compiler run."""
import hashlib
import json
from pathlib import Path
base = Path(__file__).resolve().parent
root = base.parents[2]
read = lambda path: json.loads(path.read_text(encoding="utf-8"))
sha = lambda path: hashlib.sha256(path.read_bytes()).hexdigest()
manifest = read(base / "manifest.json")
assert {p.relative_to(base).as_posix() for p in base.rglob("*") if p.is_file()} == {item["path"] for item in manifest["files"]} | {"manifest.json", "readback.json"}
for item in manifest["files"]:
path = base / item["path"]
assert path.stat().st_size == item["bytes"] and sha(path) == item["sha256"], item["path"]
assert sha(base / "manifest.json") == read(base / "readback.json")["manifestSha256"]
for item in read(base / "references.json"):
if "committedEquivalent" in item:
assert sha(root / item["committedEquivalent"]) == item["sha256"]
assert read(base / "initial-failed/prepare-result.json")["success"] is False
assert len(read(base / "producer/failure-audit.json")["missing"]) == 7
assert read(base / "producer/prepare-result.json")["success"] is True
prepared = read(base / "producer/preparation.json")
assert len(prepared["gui_inputs"]) == 500 and len(prepared["restorations"]) == 15
assert prepared["root_before"] == prepared["root_after"]
assert prepared["reconstruction_commit"] == "802855f7e6f2f00a107a12196b458b267f586b8d"
assert read(base / "producer/metadata2-result.json")["exitCode"] == 0
package = read(base / "producer/package2-result.json")
result = read(base / "producer/package-readback.json")
assert package["success"] and result["status"] == "PASS"
assert result["archive_sha256"] == package["archive_sha256"] == "d7228c542f162663933ea002739a78c722bcca41e437df63b7c868ea2af201f1"
assert result["file_count"] == len(result["files"]) == 559
assert result["gui_inputs_verified"] == 500 and result["historical_server_inputs_verified"] == 120
push = read(base / "producer/source-push-result.json")
assert push["success"] and push["before"] == ""
assert push["commit"] == prepared["reconstruction_commit"] == push["after"].split()[0]
for path in (base / "package-metadata").iterdir():
if path.name in result["files"]:
assert sha(path) == result["files"][path.name]["sha256"]
historical = read(base / "historical-server/git-inputs.json")
tar = read(base / "historical-server/tar-inventory.json")
assert len(historical["inputs"]) == 120 and len(tar["files"]) == 459
hashes = {item["path"]: item["sha256"] for item in tar["files"]}
assert all(hashes[item["path"]] == item["sha256"] for item in historical["inputs"])
for path in (base / "historical-server/original-workspace").rglob("*"):
if path.is_file():
assert sha(path) == hashes[path.relative_to(base / "historical-server/original-workspace").as_posix()]
print(json.dumps({"passed": True, "payloadFiles": len(manifest["files"]), "producerPackageFiles": 559, "guiInputs": 500, "historicalServerInputs": 120, "scope": "Producer receipts and archive integrity only"}))