docs(utas-host): record economy cutover progress in route-authority gate

Core economy HTTP API + host CoreEconomy client (fail-closed) + credits reader
landed; classifier not yet flipped (coherent barrier pending full cluster + Core
seed).
This commit is contained in:
OpenFUT Agent
2026-08-13 19:14:39 +00:00
parent d240a61157
commit 3021a4e761
+19
View File
@@ -77,3 +77,22 @@ After cutover, every remaining `Python (proxied)` route MUST have
`economy state touched = NONE`. Routes with `economy state touched != NONE` are `economy state touched = NONE`. Routes with `economy state touched != NONE` are
part of the migration cluster and MUST be Rust before R1. This table is the part of the migration cluster and MUST be Rust before R1. This table is the
audit source; the host `classify()` is the enforcement point (NEVER BOTH). audit source; the host `classify()` is the enforcement point (NEVER BOTH).
## Cutover progress (2026-08-13)
Landed (Core authority + transport + first reader; classifier NOT yet flipped):
- **Core economy HTTP API** (`d32dc6e`): generic `/economy/{balance,entitlements,
purchase-entitlement,redeem-entitlement,sell-item,grant-reward,purchase-item}`,
server-side club resolution, atomic transactions. Core matrix green.
- **Host `CoreEconomy` client** (`d240a61`): typed reqwest transport, **fail-closed,
no Python fallback** by contract.
- **`/user/credits` handler** (`handle_credits`): Core-backed, oracle-shape body,
503 fail-closed. Tested via `FakeEconomy`.
**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
implemented and Core is seeded — a partial flip would desync coins. Remaining
handlers: purchasegroup full-gen, userMassInfo economy, Store BUY, pack-open,
quick-sell, market buy/list/cancel, match reward; then the barrier flip +
differential/concurrency/restart + no-fallback classifier tests.