"""Independent public-CSV arithmetic audit; no access to the private source database.""" import csv import json import sys from collections import Counter from pathlib import Path root = Path(sys.argv[1]) if len(sys.argv) > 1 else Path(__file__).resolve().parent summary = json.loads((root / "research.json").read_text()) with (root / "observations.csv").open(newline="") as f: observations = list(csv.DictReader(f)) with (root / "daily-account-categories.csv").open(newline="") as f: groups = list(csv.DictReader(f)) assert len(observations) == summary["recorded_decisions"] assert [int(row["observation_id"]) for row in observations] == list(range(1, len(observations)+1)) counts = Counter(row["category"] for row in observations) assert dict(sorted(counts.items())) == summary["categories"] daily = Counter((row["utc_date"], row["account"], row["category"]) for row in observations) assert len(daily) == len(groups) for row in groups: key = row["utc_date"], row["account"], row["category"] assert daily[key] == int(row["recorded_decisions"]), key for account in summary["accounts"]: actual = Counter(row["category"] for row in observations if row["account"] == account["account"]) assert account["recorded_decisions"] == sum(actual.values()) assert account["categories"] == dict(sorted(actual.items())) print(f"PASS: {len(observations)} public observations and {len(groups)} grouped rows reconcile exactly; private-source completeness remains unaudited")