docs(re): consumable quick-sell is PUT item/resource, live-captured
This commit is contained in:
@@ -361,3 +361,46 @@ it becomes an explicit design decision. Status: **EFFECT_UNKNOWN**.
|
|||||||
| batching | UNPROVEN — refused, never guessed |
|
| batching | UNPROVEN — refused, never guessed |
|
||||||
| contract effect / grant size | UNKNOWN (placeholder source refuted) |
|
| contract effect / grant size | UNKNOWN (placeholder source refuted) |
|
||||||
| source instance selection with multiple copies | UNDETERMINED (only 1 copy owned) |
|
| source instance selection with multiple copies | UNDETERMINED (only 1 copy owned) |
|
||||||
|
|
||||||
|
## Consumable QUICK-SELL is PUT item/resource — LIVE_PROVEN (2026-08-22)
|
||||||
|
|
||||||
|
Captured on staging when the operator quick-sold a Position Modifier from the
|
||||||
|
consumables screen:
|
||||||
|
|
||||||
|
```
|
||||||
|
PUT /ut/game/fifa17/item/resource/5003068 body_len=0
|
||||||
|
```
|
||||||
|
|
||||||
|
So `ut/<sku>/item/resource/<resourceId>` carries THREE verbs, and this is the
|
||||||
|
third:
|
||||||
|
|
||||||
|
| verb | meaning |
|
||||||
|
|---|---|
|
||||||
|
| `GET` | item-definition lookup (`defs_route` parity) |
|
||||||
|
| `POST` | apply the consumable (`ApplyCardByRes`, body `{"apply":[{"id":N}]}`) |
|
||||||
|
| `PUT` | **quick-sell the consumable**, EMPTY body |
|
||||||
|
|
||||||
|
Note it is keyed by **resourceId**, i.e. the STACK, not by an owned instance
|
||||||
|
id — unlike the player quick-sell, which is `DELETE ut/<sku>/item/<instanceId>`
|
||||||
|
and is retail-proven in production. That asymmetry follows the consumables
|
||||||
|
screen's own model: the UI entity there is a stack, not a card.
|
||||||
|
|
||||||
|
Neither stack has ever served this route. The Python oracle maps
|
||||||
|
`item/resource` method-agnostically to `defs_route`, so a PUT would get a
|
||||||
|
definition list and HTTP 200 while nothing was sold — the client would believe
|
||||||
|
the sale succeeded. On staging the oracle is deliberately dead, so it 502'd and
|
||||||
|
Core was left untouched (coins 29843976, owned 1993, consumables 17).
|
||||||
|
|
||||||
|
### Consequence for production
|
||||||
|
|
||||||
|
Production's oracle IS alive, so today a consumable quick-sell there would reach
|
||||||
|
Python, return 200 from `defs_route`, and mutate nothing — the client would show
|
||||||
|
a successful sale that never happened. That is a second, independent reason not
|
||||||
|
to quick-sell consumables in production until this route is implemented in Rust.
|
||||||
|
|
||||||
|
### UNKNOWN, not to be guessed
|
||||||
|
|
||||||
|
* Does an empty-body PUT sell ONE copy or the WHOLE stack? The request carries no
|
||||||
|
quantity, and both readings fit. A stack of 2 at 38 is either +38 or +76.
|
||||||
|
* Which owned instance is consumed when several share the resourceId.
|
||||||
|
* What response the client requires (the player path's ack shape may not apply).
|
||||||
|
|||||||
Reference in New Issue
Block a user