7f37b37be3
Q2 measured, not guessed. The operator moved a card Club -> Transfer List without listing it (PUT /item, no POST /auctionhouse) and the state was captured read-only. Finding: we do not represent the unlisted state on the wire AT ALL. Such an item is byte-identical to a club item -- itemState `free`, no `pile` field emitted, still returned in /club and counted in clubPlayers -- while an actively-listed item is correctly excluded from /club and present in tradePile. Only the host's own pile store knows the difference. Trade pile held 6 items: 1 listed, 5 unlisted. The FIFA 17 ENCODING of that state stays UNKNOWN on purpose: returned itemData.pile is numeric with an unrecovered mapping, and tradeState is a closed table walk where an unrecognised bidState is silently swallowed as `none`, so a wrong enum produces a plausible-looking but wrong UI. The corpus warns `inactive` decodes but no client path treats it specially. One client-only discriminator is recorded instead. Also models the domain boundary both limbo bugs came from: pile membership and auction lifecycle are separate facts requiring coordinated transitions. States the testable invariant -- an item must never be simultaneously excluded from /club and absent from /tradePile -- with the two ways it was reachable and the commits that closed each.
69 lines
1.4 KiB
JSON
69 lines
1.4 KiB
JSON
{
|
|
"auctionInfo": [
|
|
{
|
|
"bidState": "none",
|
|
"buyNowPrice": 15000,
|
|
"coinsProcessed": 0,
|
|
"currentBid": 0,
|
|
"expires": 1199,
|
|
"itemData": {
|
|
"assetId": 20801,
|
|
"attributeList": [
|
|
{
|
|
"index": 0,
|
|
"value": 92
|
|
},
|
|
{
|
|
"index": 1,
|
|
"value": 92
|
|
},
|
|
{
|
|
"index": 2,
|
|
"value": 81
|
|
},
|
|
{
|
|
"index": 3,
|
|
"value": 91
|
|
},
|
|
{
|
|
"index": 4,
|
|
"value": 33
|
|
},
|
|
{
|
|
"index": 5,
|
|
"value": 80
|
|
}
|
|
],
|
|
"cardassetid": 20801,
|
|
"cardsubtypeid": 0,
|
|
"contract": 7,
|
|
"definitionId": 20801,
|
|
"discardValue": 1500,
|
|
"fitness": 99,
|
|
"id": 100000097,
|
|
"itemState": "listFS",
|
|
"itemType": "player",
|
|
"leagueId": 53,
|
|
"nation": 38,
|
|
"owners": 1,
|
|
"playStyle": 250,
|
|
"preferredPosition": "LW",
|
|
"rareflag": 1,
|
|
"rating": 94,
|
|
"resourceId": 20801,
|
|
"teamid": 243,
|
|
"untradeable": false
|
|
},
|
|
"sellerEstablished": 1,
|
|
"sellerName": "CAGE",
|
|
"startingBid": 150,
|
|
"tradeId": 1000000097,
|
|
"tradeState": "active",
|
|
"watched": false
|
|
}
|
|
],
|
|
"credits": 29843976,
|
|
"duplicateItemIdList": [],
|
|
"total": 1
|
|
}
|