#!/usr/bin/env python3
"""Recompute approved precision probe from actual SQL ledger and stored rows."""
import hashlib
import json
from pathlib import Path

root = Path(__file__).parent
plan_bytes = (root / 'precision-proposal.json').read_bytes()
assert hashlib.sha256(plan_bytes).hexdigest() == 'd1b5bfd58086c6408196363964bc62a17d8f9f6932a3ea27536ae9d789d3b60c'
plan = json.loads(plan_bytes)
summary = {'passed': True, 'HTTP': 0, 'business_writes': 0, 'lanes': {}}
finals = {}
for lane in ('B', 'C'):
    path = root / 'private-evidence' / (lane + '-precision.jsonl')
    records = [json.loads(line) for line in path.read_text().splitlines()]
    assert all(record['kind'] != 'stopped' for record in records)
    def one(kind):
        matches = [r['data'] for r in records if r['kind'] == kind]
        assert len(matches) == 1
        return matches[0]
    spec = plan[lane]
    expected = [spec['create']] + spec['before_alter'] + ([spec['alter']] if spec['alter'] else []) + spec['after_alter'] + [spec['cleanup']]
    starts = [r['data'] for r in records if r['kind'] == 'execute-start']
    successes = [r['data'] for r in records if r['kind'] == 'execute-success']
    assert [r['SQL'] for r in starts] == [r['SQL'] for r in successes] == expected
    for entry in starts:
        assert entry['SQL_sha256'] == hashlib.sha256(entry['SQL'].encode()).hexdigest()
    assert one('collision-before') == one('collision-after') == []
    assert one('business-before') == one('business-after')
    baseline_name = 'B-fresh-v2.json' if lane == 'B' else 'C-fresh-v3.json'
    assert one('business-before')['material_category'] == json.loads((root / 'private-evidence' / baseline_name).read_text())['rows']
    final = one('rows-final')
    rows = final['rows']
    assert len(rows) == 6 and [str(r['id']) for r in rows] == ['1', '2', '3', '4', '5', '6']
    assert [r['name'] for r in rows] == ['CDXMATUT261011-' + s for s in ['P1', 'P2', 'L', 'DEFAULT', 'LOW', 'HIGH']]
    assert [rows[i]['update_time'] for i in [0, 1, 2, 4, 5]] == ['2026-10-11 02:21:27', '2026-10-11 02:21:28', '2026-10-11 02:21:28', '2001-01-01 01:01:01', '2001-01-01 01:01:02']
    assert final['clock_before'] <= rows[3]['update_time'] <= final['clock_after']
    assert all('.' not in row['update_time'] for row in rows)
    if lane == 'C':
        seed = one('seed-before-alter')
        altered = one('seed-after-alter')
        for before, after in zip(seed, altered):
            assert {k: v for k, v in before.items() if k != 'update_time'} == {k: v for k, v in after.items() if k != 'update_time'}
        assert [r['update_time'] for r in altered] == [r['update_time'] for r in rows[:3]]
    result = one('summary')
    assert result == {'lane': lane, 'passed': True, 'HTTP': 0, 'DML': 6, 'DDL': 2 if lane == 'B' else 3, 'SELECT': 26 if lane == 'B' else 28, 'objects_remaining': 0, 'business_source_exact': True}
    summary['lanes'][lane] = result | {'evidence_sha256': hashlib.sha256(path.read_bytes()).hexdigest(), 'default_in_clock_range': True, 'explicit_fraction_matches_source': True}
    finals[lane] = rows
assert [{k: str(v) for k, v in row.items()} for i, row in enumerate(finals['B']) if i != 3] == [{k: str(v) for k, v in row.items()} for i, row in enumerate(finals['C']) if i != 3]
capacity = json.loads((root / 'private-evidence/C-hex-capacity.json').read_text())
assert capacity['passed'] and capacity['DML'] == capacity['DDL'] == 0
for name, maxbytes in [('NAME', 512), ('CATEGORY_PATH', 1020), ('CREATE_BY', 128)]:
    test = capacity['tests'][name]
    assert test['bytes'] == maxbytes and test['hex_characters'] == 2 * maxbytes and test['different'] == 1
summary['C_full_capacity_HEX'] = {'NAME_bytes': 512, 'CATEGORY_PATH_bytes': 1020, 'CREATE_BY_bytes': 128, 'SELECT': 3, 'passed': True}
print(json.dumps(summary, ensure_ascii=False, indent=2))
