#!/usr/bin/env python3
"""Retain real automatic timestamp mismatch, even though save returns success."""
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 = Path('/Users/wiscourper/Documents/workspace/local/dm8-store-purchase-read3-20261012.L5dTYR/stage3/meal-copy195-20261013')
BASE = 'work_store/apifox/2026-09-30-dm8-interface-acceptance/parallel-meal-copy-20261013/'


def verify():
    for name, digest in [
        ('SETUP_REPORT.md', '1e5644e8ea0f4f72995f4fd2fef2f14ea8b8e24face27d1df2ff3afa0398ef64'),
        ('manifest-setup.json', '3dd7dbcc39d53b8642178b2b1032b23617c5c769c0419b704b7d44ffa8a3bc86'),
        ('verify_setup.py', '748d9718fb619aca26ab5b789b39daacd4c0fdb54a00e9306200d5b3c629b9b9'),
    ]:
        assert hashlib.sha256((PRIVATE / name).read_bytes()).hexdigest() == digest
    r = json.loads(subprocess.check_output(['python3', str(PRIVATE / 'verify_setup.py')]))
    assert r['checks'] == 544 and r['assets'] == 99 and r['setup_HTTP'] == 2
    assert r['new_candidate_HTTP'] == 0 and r['C_auto_update_red_preserved']
    for lane in ('B', 'C'):
        wire = json.loads((PRIVATE / lane / 'wire-S1.json').read_text())
        old, new = wire['before']['dish'][0], wire['after_dish'][0]
        for key in set(old) - {'menu_quantity', 'attribute', 'update_time'}:
            assert type(old[key]) is type(new[key]) and old[key] == new[key]


if __name__ == '__main__':
    audit = HERE / 'integration-20261013-batch195.json'
    assert not audit.exists()
    specs = [item('store', 'POST', '/p/bill/add', BASE,
        risk='real-auto-update-timestamp-missing-despite-correct-menu-count-and-success-response',
        mysql_state='tested-pass',
        dm_state='tested-fail-own-counter-written-but-original-auto-update-time-missing',
        readback='tested-fail-C-update-time-unchanged-on-real-counter-change-B-advances',
        mysql_readback='tested-pass-original-recipe-count-log-and-automatic-update-time',
        dm_readback='tested-fail-correct-own-recipes-log-count-but-no-ON-UPDATE-trigger',
        parity='tested-fail-same-success-HTTP-but-persistent-update-time-behavior-differs',
        success_case='tested-fail-known-time-semantic-gap-awaits-root199-and-fresh-positive-save',
        cleanup='successful-own-setup-retained-no-replay-copy-and-week-commit-not-yet-called')]
    tool.main(specs, audit, verify)
