import hashlib,json,csv,re,os
from pathlib import Path
base=Path('/opt/struktur/obsidian-graphiti-reconciler-staging'); report=base/'AA-041.md'
files=[base/'AA-041.md',base/'obsidian-graphiti-reconciliation-AA041.csv',base/'obsidian-graphiti-reconciliation-AA041.json',base/'graphiti-writers-AA041.csv',base/'target-data-model-AA041.md',base/'migration-plan-AA041.md',base/'deployment-plan-AA041.md',base/'rollback-plan-AA041.md',base/'reconciler.py',base/'tests/test_reconciler.py',Path('/opt/struktur/knowledge-pipeline-aggregator-staging/AA-041.md'),Path('/opt/struktur/knowledge-pipeline-aggregator-staging/obsidian-graphiti-reconciliation-AA041.csv'),Path('/opt/struktur/knowledge-pipeline-aggregator-staging/obsidian-graphiti-reconciliation-AA041.json')]
for p in files:
b=p.read_bytes(); print(p, len(b), hashlib.sha256(b).hexdigest())
print('FINAL_LINE',repr(report.read_text().splitlines()[-1]))
data=json.loads((base/'obsidian-graphiti-reconciliation-AA041.json').read_text()); print('JSON_SUM_OK',data['integrity'])
with (base/'obsidian-graphiti-reconciliation-AA041.csv').open() as f: print('CSV_ROWS',sum(1 for _ in f)-1)
text='\n'.join(p.read_text(errors='ignore') for p in files if p.suffix in {'.md','.json','.csv','.py'})
markers=['OPENROUTER_API_KEY','Authorization: Bearer','api_key=','password=','client_secret','token.json']
print('SECRET_MARKERS',[(m,text.lower().count(m.lower())) for m in markers])
for p in ['/opt/struktur/youtube-research/knowledge.db','/opt/struktur/obsidian-graphiti-import/obsidian_graphiti_import.db','/opt/struktur/graphiti/request-data/requests.db']:
s=os.stat(p); print('PROD_STAT',p,s.st_size,s.st_mtime_ns)