#!/usr/bin/env python3
"""Verify real ORM red/green evidence; does not count HTTP acceptance."""
import argparse
from decimal import Decimal
import json
from pathlib import Path

p=argparse.ArgumentParser()
for name in ['b_old','c_old','b_green','c_green']:p.add_argument(name)
args=p.parse_args()
reports={name:json.loads(Path(getattr(args,name)).read_text()) for name in ['b_old','c_old','b_green','c_green']}
old='b8afe5f37fe7ee6307fcfc1e902bd0bcac246f7153c1dfb56fc5883c3e510f24'
green='c0d0b7a2668cded72b2c7a28fcbe3255e7cf1ff232b6c871f6bddc4259e699b0'
expected_models=reports['b_old']['model_sha256']
for name,report in reports.items():
    stage='old' if name.endswith('old') else 'green'
    if report['stage']!=stage or report['lane']!=name[0].upper():raise SystemExit('Stage/lane mismatch')
    sha=old if stage=='old' else green
    if report['builder_sha256']!=sha or report['actual_loaded_builder_sha256']!=sha:raise SystemExit('Actual Builder source drift')
    if report['model_sha256']!=expected_models:raise SystemExit('Business model drift')
    if report['failures'] or not report['natural_unchanged'] or report['independent_remaining'] or report['forbidden_storage_attempts']:
        raise SystemExit('Natural data, cleanup or storage boundary failed')
    if report['http_requests'] or report['actual_upload_files_created']:raise SystemExit('Scope expanded to HTTP/upload files')
    if {c['module'] for c in report['cases']}!={'store','terminal'}:raise SystemExit('Required model path absent')
    for case in report['cases']:
        red=name=='c_old'
        if red:
            if case['orm_return'] is not None or case['error']['native_code']!=-2007 or case['rows']!=0:
                raise SystemExit('Old C did not prove actual reserved-word ORM error')
            if report['cleanup'][case['module']]!=0:raise SystemExit('Old C unexpectedly wrote records')
        else:
            if case['orm_return'] is not True or case['error'] is not None or not case['source_equal'] or not case['source_id_owned'] or case['rows']!=1:
                raise SystemExit('Successful add lacks return/source/ID ownership proof')
            if report['cleanup'][case['module']]!=1:raise SystemExit('Own row not precisely cleaned')

def canonical(row,module,stage):
    # This is source ledger comparison, not API serialization; integer columns have
    # native PDO string/int differences. Only independently schema-confirmed integers
    # are compared by exact Decimal value. No unknown fields or URL formatter runs.
    marker='CDXUF10D28B34A19F6C'
    if row['file_name']!=f'{marker}_{stage}_{module}.jpg' or row['file_path']!=f'{marker}/{stage}_{module}-metadata-no-file.jpg':
        raise ValueError('Own marker/path not independently verified')
    result={k:row[k] for k in ['domain','storage','file_size','file_type','channel','store_id']}
    for key in ['file_size','file_type','channel','store_id']:result[key]=Decimal(str(result[key]))
    return result

for module in ['store','terminal']:
    baseline=canonical(reports['b_old']['source_fixture_rows'][module],module,'old')
    for name in ['b_green','c_green']:
        if canonical(reports[name]['source_fixture_rows'][module],module,'green')!=baseline:
            raise SystemExit('Unchanged metadata fields differ after repair')
result={'date':'2026-10-10','scope':'ORM DB paths only; no HTTP/upload/storage acceptance',
    'model_paths':2,'stage_attempts':8,'actual_successes':6,'expected_C_old_native_failures':2,'http_pass_increment':0,
    'model_source_sha256':expected_models,'builder_sha256':{'old':old,'green':green},
    'green_source_metadata_equal_both_engines':True,
    'stages':{name:{k:r[k] for k in ['lane','stage','cases','before','after','natural_unchanged','cleanup',
        'independent_remaining','forbidden_storage_attempts','http_requests','actual_upload_files_created','actual_loaded_builder_sha256']}
        for name,r in reports.items()}}
print(json.dumps(result,indent=2,ensure_ascii=False,default=str))
