#!/usr/bin/env python3
"""Record the three real procurement reads without claiming DM nonempty coverage."""
import hashlib
import json
from pathlib import Path
import subprocess
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

HERE = Path(__file__).resolve().parent
PRIVATE = Path('/Users/wiscourper/Documents/workspace/local/dm8-store-purchase-read3-20261012.L5dTYR')
REPORT = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-store-purchase-read3-20261012/ROOT_REVIEW_STAGE1.md'

def verify():
    expected = {'REPORT_STAGE1.md':'324cf9427ca82fcccfe316a88025d9ba08710b91afb348f7b041e452765c9a71',
        'manifest-stage1.json':'a7893dcbaaf5eedfe465f46f73738c05c63fd4d586c54ffedab80411db98f93a'}
    for name, digest in expected.items():
        assert hashlib.sha256((PRIVATE/name).read_bytes()).hexdigest() == digest
    result = json.loads(subprocess.run(['node',str(PRIVATE/'verify-stage1.js'),'--readonly'],
        check=True,capture_output=True,text=True).stdout)
    assert result['checks'] == 2469 and result['assets'] == 1083
    for lane, reads in [('B',56),('C',81)]:
        side=result['sides'][lane]
        assert side['new_reads']==reads and side['protected_same'] and side['resources_clean']
        assert side['DML_DDL_txn_AI_external']==0
        assert len(side['methods'])==3
        assert all(x['status']==200 and x['code']==0 and x['RAM_full_DTO_match'] for x in side['methods'].values())

def targets():
    out=[]
    for path,request in [('/p/Supplier/all','empty-form-body'),('/p/Material/lists','JSON-keyword-empty-page1-type1'),('/p/Material/all','form-type1')]:
        out.append(item('store','POST',path,REPORT.rsplit('/',1)[0]+'/',evidence=REPORT,
            from_repo='unreviewed',from_source='apifox-2026-05-08',
            terminal='PC-purchasing-current-client',risk='readonly-catalog',
            request_type=request,mysql_state='tested-pass',dm_state='partial-evidence-empty-material-or-supplier-only',
            readback='partial-evidence-real-SELECT-fetch-full-typed-RAM-response-equal-own-source',
            success_case='partial-evidence-B-nonempty-C-empty-business-catalog',
            parity='partial-evidence-own-source-value-type-order-matches;cross-snapshot-business-values-not-compared',
            boundary_empty_min_max='partial-evidence-DM-empty-catalog-only',
            duplicate_retry='not-applicable-read-only',performance='not-tested'))
    return out

if __name__=='__main__':
    audit=HERE/'integration-20261012-batch107.json'
    assert not audit.exists(),'Preserve original matrix transition'
    tool.main(targets(),audit,verify)
