#!/usr/bin/env python3
"""Preserve actual Plain FLOAT overflow failure before its separately tested fix."""
import hashlib
import json
from pathlib import Path
import stat
import subprocess
import integrate_20261010 as tool
from integrate_20261011_batches46_48 import item

BASE=tool.STORE+'parallel-store-nutrition-plain-scalar-20261011/'

def verify():
    root=tool.ROOT/BASE
    manifest=root/'manifest.json'
    assert hashlib.sha256(manifest.read_bytes()).hexdigest()=='438ce8a9af8b9ac88587987c49e2b23d3856830f0d44318bbd3799f014d56758'
    records=json.loads(manifest.read_text())['assets']
    assert len(records)==110
    for record in records:
        relative=Path(record['file'])
        assert not relative.is_absolute() and '..' not in relative.parts
        path=root/relative
        assert not path.is_symlink() and path.is_file()
        body=path.read_bytes()
        assert len(body)==record['bytes'] and hashlib.sha256(body).hexdigest()==record['sha256']
        assert format(stat.S_IMODE(path.stat().st_mode),'04o')==record['mode']
    for lane in ['B','C']:assert stat.S_IMODE((root/'private'/lane).stat().st_mode)==0o700
    php='/workspace/zhct/zhctprompt/'+BASE+'verify.php'
    for cmd,key,count in [(['docker','exec','zhctapp_v2_0','/usr/local/php7.3/bin/php',php],'assertions',1813),
                          (['node',str(root/'verify-dependencies.mjs')],'checks',3366)]:
        result=subprocess.run(cmd,capture_output=True,text=True)
        assert result.returncode==0,result.stderr
        report=json.loads(result.stdout)
        assert report[key]==count
        if key=='assertions':
            assert report['mutations_rejected']==12
            assert report['lanes']['B']['HTTP']==report['lanes']['C']['HTTP']==8
        else:assert report['actual_included_records']==1507

def targets():
    return [item('store','POST','/m/nutrition/update',BASE,
        risk='owned-plain-FLOAT-numeric-string-overflow-physical-and-original-HTTP-difference',
        dm_state='tested-fail-numeric-string-overflow-bypasses-plain-helper',
        dm_readback='tested-fail-1e999-source-clips-FLT_MAX-target-errors-6102-row-unchanged',
        parity='partial-prefix-finite-cap-positive-finish-whole-DTO-pass-overflow-original-difference-open',
        invalid_type='partial-prefix-number-validator-rejected-before-target-DML',
        boundary_empty_min_max='tested-fail-numeric-string-1e999-HTTP-and-storage-mismatch'),
        item('store','POST','/m/nutrition/info',BASE,evidence_only=True,
             risk='readonly-own-physical-FLOAT-whole-DTO-after-original-scalar-diagnosis')]

if __name__=='__main__':
    audit=Path(__file__).with_name('integration-20261011-batch80.json')
    assert not audit.exists(),'Preserve original transition audit'
    tool.main(targets(),audit,verify)
