Three shopping assistants receive the same limited drop: one high-performance product, one balanced product and one basic product. Each assistant can pay. Each carries a valid instruction from its user. Every assistant ranks the products in the same order.

The merchant still has a problem. Payment proves that an order can settle. It does not decide who should receive which scarce item.

A September 2026 market-microstructure survey makes this gap concrete. In its three-agent worked example, all six deterministic assignments leave at least one shopper worse off than a uniform random allocation. The assignment with the highest total utility gives the weakest product to the third shopper and leaves that shopper 12.54 utility points below the random baseline.

That is the useful result near the beginning: there is no clever sort that makes this particular round fair to everyone. A system should detect the impossible round before checkout, disclose the rule it will use and choose an explicit fallback.

The new bottleneck sits before payment

Agent-commerce standards have solved important pieces of the transaction path. OpenAI's Agentic Commerce Protocol carries catalog, inventory and checkout state between a merchant and ChatGPT. Its checkout specification leaves acceptance, payment processing and order confirmation with the merchant. Google's Universal Commerce Protocol defines discovery and checkout capabilities across APIs, A2A and MCP. Google's Agent Payments Protocol records authorization through checkout and payment mandates.

These protocols answer whether an assistant can find an item, present an authorized cart and pay on the user's behalf. They do not prescribe a universal allocation rule for a concert ticket, limited product drop, cloud accelerator slot or other resource that several authorized agents request at once.

Irene Aldridge's survey, Evolution of Market Microstructure in the Age of AI, calls allocation the missing layer of the agent-commerce stack. Market microstructure is the study of the rules that turn orders into prices and assignments. In ordinary language, it asks who gets what, in what order and at what cost.

This issue asks a bounded research question: What does the survey's three-product example establish about scarce allocation, and what should a merchant check before autonomous agents compete for limited inventory?

One input, six possible outcomes

The paper's example describes products with two features, performance and design:

Product Performance Design
P1 7.65 1.82
P2 5.45 3.62
P3 3.42 1.93

Three agents report feature weights of (8, 3), (6, 7) and (5, 4). A product's utility for an agent is the dot product of the two vectors. For example, A1 values P1 at 8 x 7.65 + 3 x 1.82 = 66.66.

The comparison point is not zero. It is each agent's average utility across all three products, the expected value of a uniform random assignment. Those baselines are 51.42, 50.24 and 37.36.

Assigning P1 to A1, P2 to A2 and P3 to A3 maximizes total utility at 149.52. Its gains over the random baselines are +15.24, +7.80 and -12.54. The round creates more aggregate value, yet one participant is worse off than under a lottery.

The other five assignments merely move the loss. The paper enumerates all six and reports that none leaves every agent above the random baseline. This is a mathematical observation about the supplied preferences, not a customer study, production sale or trading result.

Why faster checkout can make the rule more important

First-come-first-served feels neutral because the rule is easy to state. With automated buyers, it can convert access to faster infrastructure into access to the scarce good. The survey traces the same pattern in electronic markets: once participants automate, tiny timing advantages become worth buying.

A batch process removes that particular speed race by collecting requests for a short interval and clearing them together. It still needs a rule inside the batch. A lottery is symmetric but may ignore strong differences in fit. Highest-price-wins is simple when price allocation is acceptable, but it favors willingness and ability to pay. A feature-based match can use the user's needs, yet it can invite strategic reports and may fail when everyone agrees on the ranking.

There is no neutral choice hiding in the software. The merchant or venue is choosing which cost to accept.

For a single item and a handful of human buyers, a published lottery may be sufficient. A feature-based mechanism becomes relevant when several different items have limited capacities and users care about different attributes. The simpler workflow should remain the default when extra preference collection would add complexity without changing the decision.

A practical pre-check for a limited drop

Before connecting an autonomous buying flow, a merchant can make the allocation decision reviewable:

  1. Name the scarce unit. Record whether capacity is one ticket, one product variant, one delivery window or one compute slot. Inventory across loosely related variants should not be treated as interchangeable without saying why.
  2. Publish the rule before requests arrive. State whether requests are ordered by arrival, randomized within a batch, ranked by price or matched on disclosed features. A rule chosen after seeing the participants is not the same experiment.
  3. Separate authorization from allocation. A signed mandate can establish that an agent may spend up to a limit. It does not establish that the agent deserves priority over another authorized buyer.
  4. Choose the comparison point. This example asks whether every participant beats a uniform lottery. A venue might instead prioritize total utility, minimum utility, equal opportunity or a regulated entitlement. Each objective changes the acceptable outcome.
  5. Run the round diagnostic. Enumerate all assignments when the round is small. If none meets the chosen floor for every participant, stop claiming that the allocation makes everyone better off.
  6. Use a declared fallback. Options include a transparent lottery, a new batch, a waitlist, divisible shares, added supply or a human review for high-stakes cases. Record which fallback ran and why.
  7. Keep an allocation receipt. Save the inventory snapshot, request window, rule version, sanitized inputs, result and any rejected or timed-out requests. Keep payment credentials and private user data out of the public receipt.

The completion check is plain: a reviewer can reconstruct the eligible set, the rule and the reason for the fallback without reading an agent's private reasoning.

Optional reproduction in a clean folder

The main lesson does not require code. This small script independently enumerates the six assignments from the paper's worked example and includes the negative case: zero assignments put all three agents at or above their random baseline.

Prerequisites: Python 3.10 or later and an empty folder. Save this as check_allocation.py.

from itertools import permutations

products = {"P1": (7.65, 1.82), "P2": (5.45, 3.62), "P3": (3.42, 1.93)}
agents = {"A1": (8, 3), "A2": (6, 7), "A3": (5, 4)}

def utility(weights, features):
    return sum(w * f for w, f in zip(weights, features))

names = list(products)
baselines = {
    agent: sum(utility(weights, products[p]) for p in names) / len(names)
    for agent, weights in agents.items()
}

print("BASELINES " + " ".join(f"{a}={baselines[a]:.2f}" for a in agents))
best_total = None
best_assignment = None
all_pass = 0

for assignment in permutations(names):
    gains, total = [], 0
    for (agent, weights), product in zip(agents.items(), assignment):
        value = utility(weights, products[product])
        total += value
        gains.append(value - baselines[agent])
    passes = all(gain >= 0 for gain in gains)
    all_pass += int(passes)
    label = ",".join(f"{a}->{p}" for a, p in zip(agents, assignment))
    gain_text = ",".join(f"{g:+.2f}" for g in gains)
    print(f"{label} gains={gain_text} total={total:.2f} all_above_random={str(passes).lower()}")
    if best_total is None or total > best_total:
        best_total, best_assignment = total, label

print(f"BEST_TOTAL {best_assignment} total={best_total:.2f}")
print(f"FEASIBLE_ALL_ABOVE_RANDOM {all_pass} of 6")
print("DECISION deterministic assignment cannot make all three agents beat random allocation")

Run python -I check_allocation.py. The complete verified output is:

BASELINES A1=51.42 A2=50.24 A3=37.36
A1->P1,A2->P2,A3->P3 gains=+15.24,+7.80,-12.54 total=149.52 all_above_random=false
A1->P1,A2->P3,A3->P2 gains=+15.24,-16.21,+4.37 total=142.42 all_above_random=false
A1->P2,A2->P1,A3->P3 gains=+3.04,+8.40,-12.54 total=137.92 all_above_random=false
A1->P2,A2->P3,A3->P1 gains=+3.04,-16.21,+8.17 total=134.02 all_above_random=false
A1->P3,A2->P1,A3->P2 gains=-18.27,+8.40,+4.37 total=133.52 all_above_random=false
A1->P3,A2->P2,A3->P1 gains=-18.27,+7.80,+8.17 total=136.72 all_above_random=false
BEST_TOTAL A1->P1,A2->P2,A3->P3 total=149.52
FEASIBLE_ALL_ABOVE_RANDOM 0 of 6
DECISION deterministic assignment cannot make all three agents beat random allocation

If your numbers differ, preserve the decimal product features and calculate the random baseline before rounding. Python dictionary order is stable in supported versions, so changing the insertion order changes the printed labels but not the six underlying assignments.

To adapt the check, replace the products and feature weights, then state why each feature is relevant and who supplied the weight. Do not treat an assistant-generated weight as a verified user preference without confirmation.

What the evidence does and does not show

The survey was inspected as a paper observation. Its three-product example was recomputed locally with Python 3.12. The larger headphone study it summarizes is explicitly simulated: in one ten-agent scenario the proposed mechanism returned Fail, while a scenario with four contrarian shoppers passed its feasibility test but failed a separate margin guarantee. Those are research results, not verified funded purchases or live merchant outcomes.

The OpenAI and Google specifications were inspected as documentation of discovery, checkout, authorization and payment responsibilities. They were not connected or executed for this edition. No agent bought an item, no payment credential was used and no production allocation system was changed.

The example also assumes additive feature weights. It cannot represent complements such as “I only value battery life if the device is light.” Feature reports can be incomplete or strategic. A mechanism that performs well on stated weights can still disappoint the person behind the agent.

The next experiment should compare three declared fallbacks on the same limited drop: random allocation, highest total utility and a max-min rule that improves the worst outcome. Measure aggregate utility, the worst gain against the random baseline and how often a user could benefit by changing a reported weight. That would expose the tradeoff before a merchant lets checkout speed choose by accident.