"""Offline replay of v3 primary-name captures; v2 remains a separate contract.""" import argparse import json from pathlib import Path import re from . import audit_arr_day as day_audit, collect_arr_named_day as named, collect_arr_source as source class VerifiedArchive(day_audit.VerifiedArchive): version = named.VERSION file_pattern = re.compile(r"(?:capture\.json|rate-assessments\.json|(?:request|rate|profile)-[0-9]{6}\.(?:json|meta\.json|response\.bin))") operations = named.OPERATIONS options_type = named.Options max_inventory_files = 272000 def replay(archive): source.require(archive.version == named.VERSION, "unsupported_named_day_archive_version") return day_audit._replay(archive, named=True) def main(argv=None): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--capture-dir", type=Path, required=True) parser.add_argument("--manifest-sha256", required=True) args = parser.parse_args(argv) try: archive = VerifiedArchive(args.capture_dir, args.manifest_sha256) rows, _, _ = replay(archive) result = {"integrity_verified": True, "protocol_replayed": True, "source_records": len(rows), "unique_profiles": archive.result["unique_profiles"], "valid_name_candidates": archive.result["valid_name_candidates"], "profile_issues": archive.result["profile_issues"], "network_calls": 0, "finance_ready": False, "report_equivalence_verified": False} except source.CollectionError as error: result = {"integrity_verified": False, "error": str(error), "finance_ready": False} except Exception: result = {"integrity_verified": False, "error": "named_archive_invalid", "finance_ready": False} print(json.dumps(result, ensure_ascii=False)) return 0 if result["integrity_verified"] else 1 if __name__ == "__main__": raise SystemExit(main())