Repository navigation
Description
What kind of change?
Add a new field
Which section?
5.6 — Commercial terms
Current text
§ 5.6.2 hold_status: hold_available, hold_duration, hold_scope, state, hold_expires_at.
PR #143 restructures this into hold_terms { available, duration } and hold, where hold.held_availability is "what the seller reserves".
Neither ties a hold request to a buyer the seller could accept a commitment from, or lets a seller state how many holds one buyer may have at once.Proposed text
Add to hold_terms (PR #143), or to hold_status if #143 does not land:
max_concurrent (Integer, OPTIONAL): the most holds this seller grants one buyer at once, counted across the seller's line items in hold status held.
1. A seller MUST NOT grant a hold to a requester it would not admit to a commitment on that line item (§ 5.8, PR #139).
2. A request that would exceed max_concurrent is declined (PR #143) with a reason (§ 2.4, PR #138).
3. A seller that offers holds on a visibility: public line item SHOULD set max_concurrent.Why
Interest declaration: filing in an individual capacity; views are my own. I'm an enterprise architect with 27 years in software, the last four in advertising technology, working on the governance and security of AI agent systems.
Under #143, a held line item reserves inventory (held_availability) with no money changing hands. A human buyer asks for a few holds. A buying agent can ask for one on every line item it screens, at machine speed, and convert one of them. An agent stuck in a retry loop does the same thing by accident. Either way, other buyers lose access to the inventory.
Today a seller can only defend with transport rate limits that buying agents can't see. They'd learn the limit by failing, and nothing makes a hold requester as accountable as a committing buyer.
At least one sell-side agent in the IAB Tech Lab Agent Registry already places a 72-hour inventory hold when a proposal is finalised (registry snapshot, 5 Nov 2026).
Knock-on effects
- Buying agents read
max_concurrentbefore asking; sellers get a declared basis fordeclined. - No change to the hold state machine in § 5.6.2 — Holds: offered hold terms and the live hold (#66) #143. The key sits on each line item, so the no-inheritance rule holds, and § 3's round-trip guarantee is unaffected.
- No effect on downstream standards (OpenDirect, Deals API, OpenRTB).
- Related: [Change] New § 9 — Security considerations: typed fields govern free text, and free text never directs an agent #155 proposes a security considerations section; this is the resource-reservation side of the same concern.
Would this break an implementation already built to this draft?
No — additive or editorial
Alternatives you considered and rejected
- Transport rate limits only. They're invisible to buying agents and can't express a per-buyer inventory policy.
- Deposits for holds. That belongs in binding terms, not the object.
- Rely on buyer-side discipline. A seller can't verify it.
Glad to supply the PR diff on top of #143 once the direction is agreed.
You are commenting as
Individual, no organisational position
Before you submit
- I have read CONTRIBUTING.md and agree my contribution may be published under this repository's licence.
- This contains no confidential or commercially sensitive information.
Activity
KonstantinMirin commentedon Nov 6, 2026
Postindustria (IAB Tech Lab member). Thanks, @pkanna000. A declared cap fixes a real problem: an agent shouldn't learn a limit by failing.
ground.visibility: publicopens a line item to reading, not to holding. To hold it, a buyer needs its own issued proposal.We'd keep
max_concurrentout ofhold_terms, though. It counts holds across all of a seller's line items, so it's seller policy, not a term of one line item. The manifest (§ 2.3) is the draft's one seller-level document, and the natural home.Analyzed and generated with the help of Claude, fully reviewed by me.