test(fifa17): add Python-oracle economy differential coverage
economy_differential.rs boots the REAL Python oracle (fifa17-recon/tools/ utas_server.py) as an isolated subprocess (env FUT_PROFILE/FUT_ACCOUNT_PATH/ FUT_PORT into a temp dir + loopback port; no production container/port/save; killed on Drop) AND the real Rust stack (seeded in-process Core + a real Server with EconomyServices), seeds a semantically-aligned fixture on both, and drives 16 ops through the REAL surfaces (oracle over HTTP; Rust via Server::try_handle_economy on the off-runtime thread). Result: 15 PARITY, 1 DIFFERENT-BY-DESIGN. - PARITY: credits, userMassInfo economy, purchasegroup (pack70/sentinel/clean-v1 incl. the real SessionStore capability handshake), Store BUY, POST /purchased open, GET /purchased reveal (VERIFIED: durable single-profile purchased pile on BOTH — the hypothesised per-SID cache does NOT exist, so PARITY not DIFFERENT-BY-DESIGN), quick-sell (both forms), move, match WIN (+400 byte shape), market list/query/cancel. - DIFFERENT-BY-DESIGN: market second-buy. First buy debits buyNowPrice + closes on both. Rust's MarketStore is a crash-consistent single-debit ledger (second buy of a sold listing = no-op, pinned by assertion); the oracle's buyable market is a stateless PACK_POOL sample that re-debits on repeat. Compat impact NONE (buy-now is one-shot); Rust is a strict correctness improvement. No Python source changes; no classifier changes. Deterministic (3 runs).
This commit is contained in: