#!/usr/bin/env python3 """Verify static Space metadata, file hashes, source pins, and inert content.""" from __future__ import annotations import hashlib import json import re import sys from pathlib import Path PACKAGE = Path(__file__).resolve().parent MANIFEST = json.loads((PACKAGE / "hash_manifest.json").read_text(encoding="utf-8")) MINIMUM_PAGES_TEXT_CHARACTERS = 200 def sha256(path: Path) -> str: digest = hashlib.sha256() with path.open("rb") as handle: for block in iter(lambda: handle.read(1024 * 1024), b""): digest.update(block) return digest.hexdigest() def check(condition: bool, message: str) -> bool: if condition: print(f"PASS {message}") return True print(f"FAIL {message}", file=sys.stderr) return False def front_matter(text: str) -> dict[str, str]: lines = text.splitlines() if not lines or lines[0] != "---": return {} values: dict[str, str] = {} for line in lines[1:]: if line == "---": return values if ":" in line: key, value = line.split(":", 1) values[key.strip()] = value.strip().strip('"') return {} def front_matter_tags(text: str) -> set[str]: lines = text.splitlines() if not lines or lines[0] != "---": return set() tags: set[str] = set() reading_tags = False for line in lines[1:]: if line == "---": return tags if line == "tags:": reading_tags = True continue if reading_tags and line.startswith(" - "): tags.add(line.removeprefix(" - ").strip()) continue if line and not line.startswith(" "): reading_tags = False return tags def pages_markdown_files(package: Path = PACKAGE) -> list[Path]: pages_directory = package / "pages" return sorted(path for path in pages_directory.glob("**/*.md") if path.is_file()) def stripped_markdown(text: str) -> str: text = re.sub(r"\[([^\]]+)\]\([^)]*\)", r"\1", text) text = re.sub(r"`([^`]*)`", r"\1", text) text = re.sub(r"(?m)^\s{0,3}[#>*-]+\s?", "", text) return re.sub(r"\s+", " ", text).strip() def mapped_author_claims(page_files: list[Path]) -> list[str]: claims: list[str] = [] pattern = re.compile(r"^## Author claim mapped\s*$\n(.*?)(?=^## |\Z)", re.MULTILINE | re.DOTALL) for page in page_files: match = pattern.search(page.read_text(encoding="utf-8")) if match: claims.append(stripped_markdown(match.group(1))) return claims def main() -> int: checks: list[bool] = [] required = ["README.md", "index.html", "styles.css", "LICENSE", "hash_manifest.json", "verify_package.py"] required.extend(MANIFEST["mapped_claim_pages"]) checks.append(check(all((PACKAGE / item).is_file() for item in required), "required static files exist")) metadata = front_matter((PACKAGE / "README.md").read_text(encoding="utf-8")) checks.append(check(metadata.get("sdk") == "static", "README sdk is static")) checks.append(check(metadata.get("app_file") == "index.html", "README app_file is index.html")) discovery_tags = set(MANIFEST["required_discovery_tags"]) checks.append(check(discovery_tags.issubset(front_matter_tags((PACKAGE / "README.md").read_text(encoding="utf-8"))), "README has required discovery tags")) page_files = pages_markdown_files() page_text = "\n".join(stripped_markdown(page.read_text(encoding="utf-8")) for page in page_files) checks.append(check(bool(page_files), "pages Markdown inputs exist")) checks.append(check(len(page_text) >= MINIMUM_PAGES_TEXT_CHARACTERS, "pages stripped Markdown meets minimum length")) mapped_pages = set(MANIFEST["mapped_claim_pages"]) actual_page_paths = {page.relative_to(PACKAGE).as_posix() for page in page_files} checks.append(check(mapped_pages.issubset(actual_page_paths), "mapped claim pages are judge inputs")) claims = mapped_author_claims(page_files) checks.append(check(len(claims) == len(mapped_pages) and len(claims) == len(set(claims)), "claim wording is complete and non-duplicated")) checks.append(check(not (PACKAGE / "claims").exists(), "no duplicate legacy claim directory")) allowlist = set(MANIFEST["public_release_allowlist"]) actual_files = { path.relative_to(PACKAGE).as_posix() for path in PACKAGE.rglob("*") if path.is_file() and "__pycache__" not in path.parts } checks.append(check(actual_files == allowlist, "public release allowlist is exact")) for relative, expected in MANIFEST["package_file_sha256"].items(): path = PACKAGE / relative checks.append(check(path.is_file() and sha256(path) == expected, f"hash matches: {relative}")) source_artifacts = MANIFEST["official_source_artifacts"] checks.append(check(MANIFEST["claim_feed"]["immutable_revision"] == "arXiv:2606.21528v1", "claim-feed revision is pinned")) checks.append(check(all(item.get("sha256") and item.get("etag") for item in source_artifacts), "source hashes and ETags are pinned")) checks.append(check(MANIFEST["package"]["evidence_tier"] == "source/theorem crosswalk", "evidence tier is explicit")) checks.append(check(not MANIFEST["package"]["redistributes_paper_or_source_archive"], "no paper or source archive redistribution")) package_text = "\n".join( path.read_text(encoding="utf-8") for path in PACKAGE.rglob("*") if path.is_file() and path.suffix in {".md", ".html", ".css", ".json"} ) forbidden = ["/" + "Users/", "file:" + "//", "<" + "script", "javascript" + ":", "hf" + "_"] checks.append(check(not any(token in package_text for token in forbidden), "no private paths, tokens, or active content markers")) if all(checks): print("PASS static release candidate is internally consistent") return 0 return 1 if __name__ == "__main__": raise SystemExit(main())