0c4aee6164
Operator drove the expired row 1000000155 (res 158023, 93 RW) in FIFA 17 with the candidate deployed: the row was still actionable, Return to Club was offered, and it worked — "the card is back in my club". Server-verified durable afterwards, which is what a fresh session reconstructs: /tradePile total 0 with zero rows, /tradePile/counts all zero, the card present in /club (1965 -> 1966 items, itemState "free"), zero duplicate ids, no stale active listing anywhere in the store (both rows cancelled), and the ended auction projecting as `closed` (4) on /trade/status. Fix A intact: zero `inactive` rows. So `listFS` -> `forSale` is protocol-correct AND behaviour-preserving on the path that matters, and `listFS` is gone from production serialization. Also worth recording what the result rules out: CARD_OFFERSTATE is NOT a gate term that requires -1. Every actionable row we had ever seen carried itemState -1, which looked like a possible client rule; it was a coincidence of our own invalid token. An expired row decoding CARD_OFFERSTATE = 5 stayed actionable. Deliberately NOT claimed: anything about the Flash action gate itself. STATE and the RESERVEDPRICE/MAX_CREDITS pair are untouched and still confounded, so the gate remains Category C / STRONGLY SUPPORTED / not proven, and AVM1 disassembly of tradepile.isInActiveAuction is still the separate next investigation. One gap left open honestly: no ACTIVE seller row existed during the session, so active-row rendering under `forSale` is unverified. /transfermarket has always emitted `forSale` on active rows, so it is expected-safe, but it has not been seen.
111 lines
4.3 KiB
JSON
111 lines
4.3 KiB
JSON
{
|
|
"date": "2026-08-17",
|
|
"change": "itemData.itemState on the seller's own auction rows: listFS -> forSale",
|
|
"sites": [
|
|
"openfut-utas-host/src/market.rs handle_market_query (GET /tradePile)",
|
|
"openfut-utas-host/src/market.rs handle_market_status (GET /trade/status)"
|
|
],
|
|
"why": {
|
|
"listFS": "not a FIFA 17 token: 0 occurrences in CardsDLL_Win64_retail.dll (md5 4de3493131d7d2ff7f8b360c5ac9b655), 0 in 4.26 GiB of live client memory, decodes to -1 via FUN_180166660",
|
|
"forSale": "FIFA 17 native, value 5, from the 12-row itemState table at 0x180229cc0",
|
|
"oracle": "the Python oracle emits listFS (utas_server.py:3921); the differential asserted PARITY and so passed while both sides were wrong"
|
|
},
|
|
"supporting_evidence_the_token_is_safe": "the market SEARCH route (/transfermarket) already emitted forSale before this change, so the client has been decoding forSale=5 on a live path all along",
|
|
"wire_ab": {
|
|
"baseline": {
|
|
"tradeId": 1000000155,
|
|
"tradeState": "expired",
|
|
"bidState": "none",
|
|
"expires": 0,
|
|
"startingBid": 150,
|
|
"buyNowPrice": 15000,
|
|
"currentBid": 0,
|
|
"sellerName": "CAGE",
|
|
"sellerEstablished": 1,
|
|
"watched": false,
|
|
"coinsProcessed": 0,
|
|
"atom_count": 12,
|
|
"itemState": "listFS",
|
|
"item_id": 100000155,
|
|
"resourceId": 158023,
|
|
"untradeable": false,
|
|
"rating": 93,
|
|
"preferredPosition": "RW"
|
|
},
|
|
"candidate": {
|
|
"tradeId": 1000000155,
|
|
"tradeState": "expired",
|
|
"bidState": "none",
|
|
"expires": 0,
|
|
"startingBid": 150,
|
|
"buyNowPrice": 15000,
|
|
"currentBid": 0,
|
|
"sellerName": "CAGE",
|
|
"sellerEstablished": 1,
|
|
"watched": false,
|
|
"coinsProcessed": 0,
|
|
"atom_count": 12,
|
|
"itemState": "forSale",
|
|
"item_id": 100000155,
|
|
"resourceId": 158023,
|
|
"untradeable": false,
|
|
"rating": 93,
|
|
"preferredPosition": "RW"
|
|
},
|
|
"fields_changed": [
|
|
"itemState"
|
|
],
|
|
"fields_identical": 17,
|
|
"credits_before": 29843976,
|
|
"credits_after": 29843976,
|
|
"fix_a_inactive_rows_before": 0,
|
|
"fix_a_inactive_rows_after": 0
|
|
},
|
|
"offline_gates": {
|
|
"host_tests": "126 pass",
|
|
"adapter_tests": "214 pass",
|
|
"fmt": "clean",
|
|
"clippy": "clean",
|
|
"differential": "relabelled market-query tradePile PARITY -> DIFFERENT-BY-DESIGN; now pins oracle=listFS and rust=forSale so the divergence stays visible"
|
|
},
|
|
"status": "PROMOTED \u2014 live-confirmed on the expired path",
|
|
"live_status": {
|
|
"session": "operator FIFA 17 session, 2026-08-17, against the already-expired row 1000000155 (res 158023, 93 RW)",
|
|
"expired_row_actionable": true,
|
|
"return_to_club_offered": true,
|
|
"return_to_club_succeeded": true,
|
|
"operator_report": "the card is back in my club",
|
|
"server_verified_after": {
|
|
"tradePile_total": 0,
|
|
"tradePile_rows": 0,
|
|
"tradePile_counts": {
|
|
"count": 0,
|
|
"maxAuctionsAllowed": 100,
|
|
"offered": 0,
|
|
"selling": 0,
|
|
"sold": 0
|
|
},
|
|
"trade_status_1000000155": "closed",
|
|
"market_store_state": "cancelled",
|
|
"club_items": 1966,
|
|
"club_items_before": 1965,
|
|
"card_in_club": {
|
|
"id": 100000155,
|
|
"resourceId": 158023,
|
|
"rating": 93,
|
|
"preferredPosition": "RW",
|
|
"itemState": "free",
|
|
"untradeable": false
|
|
},
|
|
"duplicate_ids_in_club": 0,
|
|
"stale_active_listings": 0,
|
|
"inactive_rows": 0
|
|
},
|
|
"active_row_render_with_forSale": "NOT OBSERVED \u2014 no active listing existed during the session",
|
|
"full_exit_reentry_ui": "NOT DIRECTLY OBSERVED \u2014 durability established from the server state a fresh session reads (empty tradePile + card in club)"
|
|
},
|
|
"revert": "single-line: set both auction_record_as(l, \"forSale\") calls in market.rs back to \"listFS\", rebuild, hub restart prod-host",
|
|
"claim_boundary": "This validates PROTOCOL CORRECTNESS of the token only. It does NOT prove the Flash action-gate term; STATE / CARD_OFFERSTATE / RESERVEDPRICE+MAX_CREDITS remain confounded and the gate stays Category C / STRONGLY SUPPORTED / not proven.",
|
|
"narrows": "CARD_OFFERSTATE is not a gate term requiring -1: an expired row decoding 5 stayed actionable. STATE and RESERVEDPRICE/MAX_CREDITS remain confounded; the Flash gate is still Category C / not proven."
|
|
}
|