Wiki/Market Trading/Channel Exclusivity: A Device Is on Market, at Auction, or Sold Direct — Never Two at Once
10Market Trading3 min read

Channel Exclusivity: A Device Is on Market, at Auction, or Sold Direct — Never Two at Once

The atomic guard that prevents double-publishing, and why it lives on the device rather than the batch.

If the same device could be published on Market and listed in an auction at once, the platform would be lying to two different buyer groups about availability. The buyer who wins the auction expects to get the lot. The buyer who hits “Buy now” on the market expects the same. One of them is going to be disappointed, and disputes follow.

The guard

The guard sits on each sellable device, not on the batch. Every row in the shared sellable pool carries a current channel — none, market, auction, or direct sale for stock committed to a direct sale from Core — together with a reference to the publication that holds it, and a check constraint that refuses a channel without a publication. The Market publish, the Auction publish and the direct-sale flow all do the same thing: an update that sets the channel only where it is currently none. If the row is already taken, the update touches nothing, the publish fails, and the transaction rolls back. The channel history on the row records every flip.

Why atomic

Without atomicity, two simultaneous “publish” requests could both read the channel as none and both write their own. The conditional update guarantees exactly one wins; when two transactions genuinely collide, one of them loses with a serialization error and its publication is rolled back. Atomic at the database level, not at the application level — because the application can be racing against itself across two server processes, and the only safe single point of truth is the database row.

A batch never changes channel

Preparation is channel-aware too. A Market batch is a Market preparation and can only publish to Market; an auction lot draft is a separate preparation with its own target channel and can only publish to Auction. While a device sits in either kind of draft, it is reserved for that channel and disappears from the other channel’s normal selection — “show all” reveals it as a blocked row with a link to the record that explains why. Want the same devices under the hammer instead? Start a lot draft from Auction inventory; the platform will not silently repoint a batch. Availability is a third, separate lock: a device on hold (unavailable) or recorded as destroyed cannot be flipped onto any channel at all, and the wizards do not offer it.

Channel switch

Sequential switching is allowed. Unpublish the Market listing, or let an auction end without a winner, and the channel returns to none; the next publish on the other channel proceeds normally. The no-sale relist after an auction uses this exact path: when a lot settles as reserve not met or no bids, settlement flips the devices back to none and publishes a Market listing in the same run, titled after the batch with “— relisted from auction” appended. The relist remembers which lot it came from, so a settlement that runs twice creates one listing, not two.