import sys from pathlib import Path SRC_PATH = Path(__file__).resolve().parent.parent / "src" if str(SRC_PATH) not in sys.path: sys.path.insert(0, str(SRC_PATH)) from rex_repro.evidence import CLAIM_BINDINGS, run_pipeline PROJECT_ROOT = Path(__file__).resolve().parent.parent def test_manifest_binds_attempt_and_challenge_claims(): result = run_pipeline(PROJECT_ROOT) manifest = result["manifest"] assert manifest["attempt_id"] == "11b90d4c-61f2-4d93-949e-8d4618aca972" assert manifest["paper_id"] == "7pQIzVNctu" assert manifest["upstream_revision"] == ( "arxiv:2502.08834+github:zblasingame/Rex-solver@" "e39b57415d5608b18d7c5631595f1d38f06813b8" ) assert manifest["claim_bindings"] == CLAIM_BINDINGS assert [claim["status"] for claim in result["claims"]] == [ "verified", "verified", "verified", "verified", ] def test_evidence_outputs_are_deterministic_and_machine_readable(): first = run_pipeline(PROJECT_ROOT) second = run_pipeline(PROJECT_ROOT) assert first["results"] == second["results"] assert first["manifest"] == second["manifest"] assert (PROJECT_ROOT / "evidence" / "results.json").exists() assert (PROJECT_ROOT / "evidence" / "manifest.json").exists() assert len(first["results"]["claims"]) == 4 def test_root_evidence_entrypoint_exists_for_controller_validation(): entrypoint = PROJECT_ROOT / "evidence.py" source = entrypoint.read_text(encoding="utf-8") assert entrypoint.exists() assert "PROJECT_ROOT / \"src\"" in source assert "run_pipeline" in source def test_space_metadata_and_requirements_are_publishable(): run_pipeline(PROJECT_ROOT) readme = (PROJECT_ROOT / "README.md").read_text(encoding="utf-8") requirements = (PROJECT_ROOT / "requirements.txt").read_text(encoding="utf-8") assert readme.startswith("---\n") assert "sdk: gradio" in readme assert "app_file: app.py" in readme assert "emoji: 🧪" in readme assert "icml2026-repro" in readme assert "paper-7pQIzVNctu" in readme assert "gradio" in requirements assert "numpy" in requirements assert "audioop-lts" in requirements assert "huggingface_hub<1.0" in requirements def test_space_page_is_offline_and_links_evidence(): result = run_pipeline(PROJECT_ROOT) html = result["space_html"] assert "https://" not in html assert "http://" not in html assert "evidence/results.json" in html assert "evidence/manifest.json" in html for binding in CLAIM_BINDINGS: assert binding["challenge_claim_sha256"] in html def test_judge_scoring_pages_are_substantive(): run_pipeline(PROJECT_ROOT) pages = sorted((PROJECT_ROOT / "pages").glob("*.md")) assert pages assert sum(len(path.read_text(encoding="utf-8").strip()) for path in pages) >= 200 joined = "\n".join(path.read_text(encoding="utf-8") for path in pages) assert "Rex converts explicit Runge-Kutta" in joined assert "9be040e7" not in joined def test_space_app_serves_static_evidence_without_gradio_runtime(): app_source = (PROJECT_ROOT / "app.py").read_text(encoding="utf-8") assert "import gradio" not in app_source assert "ThreadingHTTPServer" in app_source assert "SimpleHTTPRequestHandler" in app_source assert '"0.0.0.0"' in app_source assert "7860" in app_source assert "serve_forever()" in app_source