#!/usr/bin/env python3
"""Actual StaffPower persistence, area reads, and repaired order contract."""
from pathlib import Path
import subprocess
import sys
import integrate_20261010 as tool

POWER = tool.AI + 'parallel-ai-staff-power-db-20261010/'
AREA = tool.STORE + 'parallel-store-area-readonly-20261010/'
ORDER = tool.STORE + 'parallel-store-order-bank-field-retest-20261010/'

def verify():
    for path in [POWER + 'compare.py', POWER + 'test_compare.py', AREA + 'compare.py', ORDER + 'compare.py']:
        subprocess.run([sys.executable, str(tool.ROOT / path)], check=True, capture_output=True)
    for lane in ['B', 'C']:
        reference = tool.load(POWER + 'reference-' + lane + '.json')
        assert reference['read_only'] and reference['business_dml'] == 0
        assert reference['reference_columns_checked'] > 80 and reference['all_self_references_zero']
    for lane in tool.load(AREA + 'cleanup.json')['lanes']:
        assert lane['worker_stopped'] and lane['port_not_listening']
        assert lane['private_cache_files_remaining'] == 0 and lane['natural_source_unchanged']
    clean = tool.load(ORDER + 'cleanup.json')
    assert clean['database_writes'] == clean['actor_writes'] == 0
    for lane in ['B', 'C']:
        assert clean[lane]['worker_stopped'] and clean[lane]['port_not_listening']
        assert clean[lane]['private_cache_files_remaining'] == clean[lane]['runtime_files_remaining'] == 0
        assert clean[lane]['selected_source_unchanged']
    ddl = tool.load(tool.STORE + 'bank-name-schema-align-20261010/DDL_RESULT.json')
    assert ddl['SQL_EXECUTED'] and ddl['SQL_VERIFIED'] and ddl['backup_restore_waived_by_user']
    assert ddl['columns_before'] == 111 and ddl['columns_after'] == 112
    assert ddl['original_projection_before'] == ddl['original_projection_after']
    assert ddl['original_metadata_unchanged'] and ddl['original_objects_unchanged']

def targets():
    out = []
    for action in ['countListsValue', 'countNutrition']:
        out.append(dict(repo='ai_api', method='POST', path='/store/meal.Meals/' + action,
            module='普通人群能量目标推荐', terminal='PC端', role='isolated-own-positive-user-staff-tenant',
            risk='nutrition-write', scope='ai-primary-own-seven-tables-real-StaffPower-and-Job-db-no-real-queue',
            evidence=POWER + 'REPORT.md', request_type='application/json-numeric-staff-empty-dishes',
            parity='partial-evidence-12-full-wire-pairs-9-actual-Job-and-21-independent-output-readbacks',
            duplicate_retry='partial-evidence-same-date-HTTP-no-extra-history-new-date-and-real-Job-recompute',
            boundary_empty_min_max='partial-evidence-seven-weight-states-1200-energy-clamp-and-explicit-target-rounding'))
    for action in ['areaList', 'areaOptions']:
        out.append(dict(repo='store', method='POST', path='/api/dining_config/' + action,
            module='区域列表与树选项', terminal='PC端', role='private-natural-admin-readonly', risk='read',
            scope='store-primary-natural-area-shop-department-source-readonly-generic-business',
            evidence=AREA + 'REPORT.md', from_repo='unreviewed', from_source='apifox-2026-05-08',
            request_type='application/x-www-form-urlencoded',
            parity='partial-evidence-six-scenes-17-fields-or-options-full-source-values-order-wire-types',
            boundary_empty_min_max='partial-evidence-page1-page2-lower-clamp-natural-name-and-empty-filter'))
    for action in ['list', 'detail']:
        out.append(dict(repo='store', method='GET', path='/api/order/' + action,
            module='移动订单读取', terminal='移动端', role='private-natural-order-owner-readonly', risk='read',
            scope='store-primary-order-original-109-fields-and-goods-bank-column-aligned',
            evidence=ORDER + 'REPORT.md', request_type='GET-query',
            parity='partial-evidence-bank-field-and-109-source-fields-complete-wire-types-equal-B-three-raw-bodies-unchanged',
            boundary_empty_min_max='partial-evidence-absent-detail-error-full-wire-type-equal-wide-precision-still-open'))
    return out

if __name__ == '__main__':
    tool.main(targets(), Path(__file__).with_name('integration-20261010-batch7.json'), verify)
