Skip to content

Oversell & re-accommodation

Deliberate oversell is supported (default off). It is a quantitative phenomenon: selling beyond physical capacity, counting on no-shows. The model is the airline’s.

  • physical (C) — how many actually fit / can enter.
  • commercial = physical + overbook — how many you may sell. overbook defaults to 0 (sports tickets are always 0; other cases e.g. 10%). The number is product config, outside the protocol — the protocol only enforces the limits.
PointLimitEffect
Hold (sale)commercialanything past commercial → OVERSELL_PREVENTED
Assign (resolution)physicalonly C become CONCRETE; the excess stays ANONYMOUS = standby
Redeem (gate)physicalstandby enters only if there’s room (a no-show); else → BUMPED

Fulfill issues all sold (you hold the ticket); the physical cut happens at Redeem — like airline boarding (ticketed but bumpable), not at Fulfill.

Standby = an allocation in the overbook headroom (Allocation.standby = true). In a QUALITATIVE Bucket it is the ANONYMOUS allocation that couldn’t get a Unit — the resolution axis gives standby for free. In a QUANTITATIVE Bucket it is a quota beyond physical, bumped by order/policy at the gate.

The “trial by fire”: capacity shrinks after the sale — the organization blocks an already-sold block (last-minute guests, equipment swap, an inspection report). This is a retroactive oversell: physical dropped below what was sold. It is not a new machine — it is the resolution axis running involuntarily (system-initiated, not holder-initiated):

  • An affected ANONYMOUS allocation → just one slot vanishes from the pool; AutoAssign grabs another, or it becomes standby. No violation.
  • A CONCRETE allocation on a pulled Unit → a forced Unassign (reason="inventory_block", CONCRETE → ANONYMOUS) → AutoAssign to another free Unit; if none → standby / BUMPED (compensation is domain).

Every involuntary op carries a reason for audit (event log) and holder notification (“your seat changed”).