46e5f612c8
Adds openfut-adapter-fifa17 fut::economy — the single-writer FIFA 17 economy engine the eventual cluster cutover needs: coins + unopened-pack entitlements + owned inventory + stable item ids, with all-or-nothing transactional mutations faithfully ported from the Python oracle's fut_store.Store primitives. Atomic ops: debit (fail-closed), credit, grant_pack/consume_pack (consume-once), allocate_item_id (unique/monotonic), add_item, and composed transactions buy_pack, open_pack, quick_sell, market_buy_now, grant_reward. Fail-closed everywhere; the 65534 sentinel can never be bought/granted/opened (defense at the grant primitive, mirroring grant_unopened_pack rejecting non-catalogue ids). from_fut_profile importer round-trips coins/unopenedPackIds/items/nextItemId and floors nextItemId past the highest existing id so re-import cannot mint a duplicate. 10 unit tests (atomicity, sentinel safety, consume-once, quick-sell, item-id uniqueness, import round-trip). NOT wired (R3): the live coin balance is one indivisible writer set spanning Store BUY, pack-open, quick-sell, match rewards AND the transfer market, all in fut_profile.json; and the generic home (OpenFUT Core) is a preserved-dirty/frozen submodule. So a safe single-writer cutover cannot be wired yet — this engine + importer is the coherent prerequisite. No dual-write introduced. No deployment.