74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
"""
|
|
Provenance tests — verify the Nexus browser surface comes from
|
|
a clean Timmy_Foundation/the-nexus checkout, not stale sources.
|
|
|
|
Refs: #686
|
|
"""
|
|
import json
|
|
import hashlib
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
|
|
|
|
def test_provenance_manifest_exists() -> None:
|
|
"""provenance.json must exist and be valid JSON."""
|
|
p = REPO_ROOT / "provenance.json"
|
|
assert p.exists(), "provenance.json missing — run bin/generate_provenance.py"
|
|
data = json.loads(p.read_text())
|
|
assert "files" in data
|
|
assert "repo" in data
|
|
|
|
|
|
def test_provenance_repo_identity() -> None:
|
|
"""Manifest must claim Timmy_Foundation/the-nexus."""
|
|
data = json.loads((REPO_ROOT / "provenance.json").read_text())
|
|
assert data["repo"] == "Timmy_Foundation/the-nexus"
|
|
|
|
|
|
def test_provenance_all_contract_files_present() -> None:
|
|
"""Every file listed in the provenance manifest must exist on disk."""
|
|
data = json.loads((REPO_ROOT / "provenance.json").read_text())
|
|
missing = []
|
|
for rel in data["files"]:
|
|
if not (REPO_ROOT / rel).exists():
|
|
missing.append(rel)
|
|
assert not missing, f"Contract files missing: {missing}"
|
|
|
|
|
|
def test_provenance_hashes_match() -> None:
|
|
"""File hashes must match the stored manifest (no stale/modified files)."""
|
|
data = json.loads((REPO_ROOT / "provenance.json").read_text())
|
|
mismatches = []
|
|
for rel, meta in data["files"].items():
|
|
p = REPO_ROOT / rel
|
|
if not p.exists():
|
|
mismatches.append(f"MISSING: {rel}")
|
|
continue
|
|
actual = hashlib.sha256(p.read_bytes()).hexdigest()
|
|
if actual != meta["sha256"]:
|
|
mismatches.append(f"CHANGED: {rel}")
|
|
assert not mismatches, f"Provenance mismatch:\n" + "\n".join(mismatches)
|
|
|
|
|
|
def test_no_legacy_matrix_references_in_frontend() -> None:
|
|
"""Frontend files must not reference /Users/apayne/the-matrix as a source."""
|
|
forbidden_paths = ["/Users/apayne/the-matrix"]
|
|
offenders = []
|
|
for rel in ["index.html", "app.js", "style.css"]:
|
|
p = REPO_ROOT / rel
|
|
if p.exists():
|
|
content = p.read_text()
|
|
for bad in forbidden_paths:
|
|
if bad in content:
|
|
offenders.append(f"{rel} references {bad}")
|
|
assert not offenders, f"Legacy matrix references found: {offenders}"
|
|
|
|
|
|
def test_no_stale_perplexity_computer_references_in_critical_files() -> None:
|
|
"""Verify the provenance generator script itself is canonical."""
|
|
script = REPO_ROOT / "bin" / "generate_provenance.py"
|
|
assert script.exists(), "bin/generate_provenance.py must exist"
|
|
content = script.read_text()
|
|
assert "Timmy_Foundation/the-nexus" in content
|