#!/usr/bin/env python3 """Audit a directory of real inputs without copying design files into source.""" import argparse import hashlib import json import sys from pathlib import Path sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'backend')) from app.parser.schdoc_parser import parse_schdoc from app.render import svg_document p=argparse.ArgumentParser();p.add_argument('directory',type=Path);p.add_argument('--output',type=Path,default=Path('validation-output/corpus.json'));a=p.parse_args() results=[] for path in sorted(a.directory.glob('*')): if path.suffix.lower()!='.schdoc': continue raw=path.read_bytes() result={'filename':path.name,'sha256':hashlib.sha256(raw).hexdigest()} try: doc=parse_schdoc(raw,path.name,'audit'); svg=svg_document(doc) result.update(status='parsed',record_count=doc.metadata['record_count'],primitive_count=len(doc.primitives),component_count=len(doc.components),svg_bytes=len(svg),diagnostics=[d.model_dump() for d in doc.diagnostics]) except Exception as e: result.update(status='failed',error=str(e)) results.append(result) a.output.parent.mkdir(parents=True,exist_ok=True);a.output.write_text(json.dumps(results,indent=2)) print(json.dumps({'files':len(results),'parsed':sum(r['status']=='parsed' for r in results),'failed':sum(r['status']=='failed' for r in results),'output':str(a.output)})) sys.exit(1 if not results or any(r['status']=='failed' for r in results) else 0)