#!/usr/bin/env python3
"""Preserve a real side-effect mismatch despite identical successful HTTP bodies."""
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'
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-weight-rpe-parity-20261013/'


def verify():
    for name, digest in [
        ('batch187-weight-full/REPORT_RED.md', '411f120977c56d75aa4ca2cccf3f7c4c5a99797f949407d4e123ae5bab90d094'),
        ('batch187-weight-full/verify_red_offline.php', '0391065c23beed5081206b6d8c66934e02aba9bb9bd87c013234a83c6cb93e8e'),
        ('batch188-rpe-native-diag/C-rpe188-native-diagnostic.json', '0bc02467c4608c0c993b0c75f312014696580b40fd62c275611d02ee2b240ecd'),
    ]:
        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 / 'batch187-weight-full/verify_red_offline.php')]))
    assert r['status'] == 'verified-red' and r['formal_HTTP_total'] == 2
    assert r['original_wire_same'] and r['source_rows_diverge_on_RPE']
    assert r['native_diagnostic_error_code'] == -6169 and r['native_rollback_clean']


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch187.json'
    assert not audit.exists(), 'Preserve original failure transition'
    specs = [item('store', 'POST', '/p/weight/add', BASE,
        risk='partial-commit-chain-RPE-creator-length-error-hidden-by-success-response',
        mysql_state='tested-pass',
        dm_state='tested-fail-HTTP-success-but-required-own-RPE-rows-absent',
        readback='tested-fail-C-weight-status-menu-written-RPE0-info0-vs-B1-and2',
        mysql_readback='tested-pass-own-weight-status-RPE1-info2-menu1-and-private-Redis',
        dm_readback='tested-fail-create-by-length-native-minus6169-confirmed-in-separate-rolled-back-diagnostic',
        parity='tested-fail-identical-HTTP-body-with-different-business-side-effects',
        success_case='tested-fail-C-incomplete-write-chain-candidate-fix-awaits-new-189-fixture',
        cleanup='old-own-rows-retained-no-successful-write-replay-native-diagnostic-rollback-zero')]
    tool.main(specs, audit, verify)
