#!/usr/bin/env python3
"""Register two real PSBC reads; retain the first detail trace-attribution limit."""
import hashlib
import json
import subprocess
from pathlib import Path
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE = Path(__file__).resolve().parent
PRIVATE = tool.ROOT.parent / 'worktrees/dm8-compat-20261012/private-prepay-harness/batch183-psbc-date-retest'
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-psbc-time-contract-20261013/'


def verify():
    for name, digest in [
        ('REPORT.md', '62f63d7049a3b1a73b8e9f68021f032cd77b2c6fdf698aed876c5ed0246eac13'),
        ('green-manifest.json', '022d0a02236db740b18b1d23acb65d4c78661a60daf039ff3c85f1c7c4a521c3'),
        ('verify_green_offline.php', '9148b2b419de317b7346cb12a84f85d6a59c69e6b38093d43c1c6e3a3cef9ce1'),
    ]:
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    r = json.loads(subprocess.check_output(['/opt/homebrew/opt/php@7.4/bin/php', str(PRIVATE / 'verify_green_offline.php')]))
    assert r['status'] == 'verified-green' and r['formal_HTTP_total'] == 4
    assert r['business_DML'] == r['DDL'] == 0 and r['source_full_rows_unchanged']
    assert r['results']['B']['detail']['guard_attribution'] == 'limited-nonce-logging-only'
    assert r['results']['B']['list']['changed_paths_excluding_trace_id'] == []
    assert hashlib.sha256((tool.source_root('store') / 'application/p/logic/PsbcAccount.php').read_bytes()).hexdigest() == 'a3c40aab8cb065921a19ca0ae799dd204133aaf62cbfb2e2e0dc14b21b47fe77'


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch183.json'
    assert not audit.exists(), 'Do not replay a completed matrix integration'
    specs = [item('store', 'POST', '/p/psbcaccount/' + route, BASE,
        risk='inactive-incomplete-owned-bank-config-real-read-no-bank-call',
        request_type='application/x-www-form-urlencoded',
        readback='tested-pass-own-full-config-and-actor-unchanged-no-lazy-import',
        parity='partial-evidence-B-unchanged-C-only-zero-fraction-datetimes-normalized',
        success_case='partial-evidence-positive-own-disabled-config-B-detail-SQL-trace-attribution-limited',
        cleanup='owned-inactive-fixture-retained-no-business-writes-no-real-bank') for route in ('list', 'detail')]
    tool.main(specs, audit, verify)
