diff --git a/tools/coherence/run-coherence.py b/tools/coherence/run-coherence.py new file mode 100644 index 0000000..b9c1499 --- /dev/null +++ b/tools/coherence/run-coherence.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +""" +run-coherence.py - Run all coherence checks + +One thing: Run all checks and output unified report. +""" + +import subprocess +import sys +from datetime import datetime +import json + +TOOLS = [ + ("check-frontmatter", "Checking for frontmatter..."), + ("check-metadata", "Checking metadata quality..."), + ("check-links", "Checking for broken links..."), +] + +def run_check(tool_name): + """Run a coherence check tool.""" + try: + result = subprocess.run( + ["python3", f"tools/coherence/{tool_name}.py", "public/fieldnotes/"], + capture_output=True, + text=True, + timeout=30 + ) + return { + "tool": tool_name, + "passed": result.returncode == 0, + "output": result.stdout, + "error": result.stderr + } + except Exception as e: + return { + "tool": tool_name, + "passed": False, + "output": "", + "error": str(e) + } + +def main(): + """Run all coherence checks.""" + print("=" * 50) + print("COHERENCE CHECK") + print(f"Started: {datetime.now().isoformat()}") + print("=" * 50) + print() + + results = [] + all_passed = True + + for tool_name, description in TOOLS: + print(f"Running: {description}") + result = run_check(tool_name) + results.append(result) + + if result["passed"]: + print(f" OK") + else: + print(f" ISSUES FOUND") + all_passed = False + print() + + # Summary + print("=" * 50) + print("SUMMARY") + print("=" * 50) + + passed = sum(1 for r in results if r["passed"]) + total = len(results) + + print(f"Checks passed: {passed}/{total}") + print(f"Status: {'ALL OK' if all_passed else 'ISSUES FOUND'}") + print() + + if not all_passed: + print("Details:") + for r in results: + if not r["passed"]: + print(f" {r['tool']}:") + if r["output"]: + for line in r["output"].split("\n")[:5]: + print(f" {line}") + sys.exit(1) + else: + print("All coherence checks passed!") + sys.exit(0) + +if __name__ == "__main__": + main()