docs(utas-host): update economy cutover progress (readers + match writer landed)
Core API + purchase_items + entitlement import + host reader handlers (credits/purchasegroup/userMassInfo) + match reward writer landed and tested; classifier still unflipped (barrier pending BUY/pack-open/quick-sell item shaping, market listing state, differential/concurrency/restart).
This commit is contained in:
@@ -80,19 +80,30 @@ audit source; the host `classify()` is the enforcement point (NEVER BOTH).
|
|||||||
|
|
||||||
## Cutover progress (2026-08-13)
|
## Cutover progress (2026-08-13)
|
||||||
|
|
||||||
Landed (Core authority + transport + first reader; classifier NOT yet flipped):
|
Landed (Core authority + transport + several handlers; classifier NOT yet flipped):
|
||||||
|
|
||||||
- **Core economy HTTP API** (`d32dc6e`): generic `/economy/{balance,entitlements,
|
- **Core economy HTTP API** (`d32dc6e`, `bcc4f51`): generic `/economy/{balance,
|
||||||
purchase-entitlement,redeem-entitlement,sell-item,grant-reward,purchase-item}`,
|
entitlements,purchase-entitlement,redeem-entitlement,sell-item,grant-reward,
|
||||||
server-side club resolution, atomic transactions. Core matrix green.
|
purchase-item,purchase-items}`, server-side club resolution, atomic. Import now
|
||||||
- **Host `CoreEconomy` client** (`d240a61`): typed reqwest transport, **fail-closed,
|
seeds `unopenedPackIds`→entitlements. Core 178 tests green.
|
||||||
no Python fallback** by contract.
|
- **Host `CoreEconomy` client** (`d240a61`): typed reqwest, **fail-closed, no
|
||||||
- **`/user/credits` handler** (`handle_credits`): Core-backed, oracle-shape body,
|
Python fallback** by contract.
|
||||||
503 fail-closed. Tested via `FakeEconomy`.
|
- **Reader handlers**: `/user/credits` (`handle_credits`), `/store/purchasegroup`
|
||||||
|
full-gen (`handle_purchasegroup`, no Python body dependency), `userMassInfo`
|
||||||
|
economy overlay (`overlay_massinfo_economy`). Invariant test: all three read one
|
||||||
|
Core state.
|
||||||
|
- **Writer handler**: `/match` reward (`handle_match_end` → Core `grant_reward`,
|
||||||
|
oracle `destroy_match_body` shape).
|
||||||
|
- **Adapter policy mappers** (`181bd94`): match reward, pack price.
|
||||||
|
- All Core-backed, fail-closed (503, never Python), `FakeEconomy`-tested.
|
||||||
|
|
||||||
**Not flipped:** `classify()` still routes every economy route to Python. Per the
|
**Not flipped:** `classify()` still routes every economy route to Python. Per the
|
||||||
single-writer rule the flip is one coherent barrier once ALL writers+readers are
|
single-writer rule the flip is one coherent barrier once ALL writers+readers are
|
||||||
implemented and Core is seeded — a partial flip would desync coins. Remaining
|
implemented and Core is seeded — a partial flip would desync coins.
|
||||||
handlers: purchasegroup full-gen, userMassInfo economy, Store BUY, pack-open,
|
|
||||||
quick-sell, market buy/list/cancel, match reward; then the barrier flip +
|
**Remaining before barrier:** Store BUY, pack-open, quick-sell (need item-wire
|
||||||
differential/concurrency/restart + no-fallback classifier tests.
|
shaping via `club_response` shapers + `openfut-identity` numeric ids + pack-content
|
||||||
|
policy); market listing durable state + list/cancel/buy; move-items metadata;
|
||||||
|
Core-backed adapter live wiring (retire in-memory `ProfileEconomy` from prod path);
|
||||||
|
`openfut-economy-import` CLI; differential harness + concurrency + restart; then the
|
||||||
|
classifier barrier + no-Python-fallback classifier tests.
|
||||||
|
|||||||
Reference in New Issue
Block a user