Repository navigation
Description
Which section?
Whole document / more than one section
Field(s) involved
status, assent[], cancellation_policy, shortfall_remedy, external_references[], correlation_id, and a new change_requests[]
Your comment
The spec doesn't cover a line item after agreed. We propose ending the lifecycle there, with the agreed line item as the baseline for every downstream change.
§ 1 ends the scope at "binding agreement", and § 4.1 gives agreed no next state. Yet cancellation_policy (§ 5.6) and shortfall_remedy (§ 5.7) act after agreed. Nothing says what a change is against or where it goes, and nothing reads correlation_id (§ 5.10).
flowchart LR
R["agreed line item"] -->|"lands in"| D["downstream standard"]
C["change after agreed"] -.->|"new version? assent still names the old one"| R
C -.->|"downstream only? the record never learns"| D
Proposed:
flowchart LR
R["agreed line item, terminal"] -->|"external_references[]: order, line, deal"| D["downstream standard"]
C["change request"] -->|"applied against the baseline VersionRef"| D
C -->|"recorded outside record_digest"| H["change_requests[]"]
We propose:
- § 1.2, After
agreed. The downstream standard executes the agreed line item, named by aVersionRefat its agreedversion, and applies any later change on its side. - § 4.1.2.
agreedis terminal. The terms MUST stay as in the versionassent[]names. - § 4.4,
change_requests[]. Each entry takes the OpenDirect 2.1 ChangeRequest fields exceptwebhook, plusbaseline,actor,at, andcancellation. It changes no term and sits outsiderecord_digest. - § 5.10.
external_references[]replacescorrelation_idand holds the downstream ids. Entries aren't terms, so the seller can add the deal ID afteragreed. - § 1.1, a change-path column, as @dineshbhat (Hypermindz) suggested. A
direct_ioline item or aprogrammatic_guaranteedreservation changes by ChangeRequest on the booked OpenDirect 2.1 Line. A deal changes by bilateral agreement, since the Deal Sync API 1.0 "does not support deal revisions".
Our post-agreement PR carries § 1.2, § 4.4, and § 5.10, and closes this issue. Our lifecycle PR carries § 4.1.2, and our handoff PR carries § 1.1.
Open questions
- Answered by our post-agreement PR. Which OpenDirect 2.1 ChangeRequest field carries the baseline? None: the entry carries
baselineitself, replacing the field in our earlier reply. - How does an entry state a change other than a cancellation? The OpenDirect 2.1 ChangeRequest has only free-text
comments, and an entry doesn't carry ChangeRequestLine resources. Our post-agreement PR keeps this as a § 8 question. - Does an implementation need either rule in the rules issue: a deal change as a new deal on the same baseline, or the seller recording the
orderandlineids once booked?
Companions: our lifecycle change request (#65), the normative boundary (#59), and the binding record (#63).
Details: Agreed baseline: full rationale and examples
Concrete scenario
A buyer ends an agreed CTV deal early under its paid cancellation option. Today only the frozen record could take it. Proposed: the seller applies it to the deal, and a change_requests[] entry records the notice against the baseline.
You are commenting as
Other — IAB Tech Lab member (Postindustria).
Before you submit
- I have read CONTRIBUTING.md and agree my contribution may be published under this repository's licence.
- This comment contains no confidential or commercially sensitive information.
Revised 2026-11-03: Rewritten against our coming PRs; question 1 answered, 2 and 3 new.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity
dineshbhat commentedon Oct 24, 2026
We support this. One addition, so a buyer agent knows where a change goes for each
transaction_mechanism: name the downstream change path next to the § 1.1 table. ForDIRECT_IOandPROGRAMMATIC_GUARANTEED, OpenDirect 2.1 already has one. An agreed line is booked as an OpenDirect Line, and a later change moves it throughChangePending(withResetfor reserved or declined lines). So the "change request against baselineproposal_id,version,line_item_id" in this proposal can map onto an OpenDirect Line change carrying that baseline as a reference. For the Deals API mechanisms (PREFERRED_DEAL,PRIVATE_AUCTION, and the deal half of PG), we'd suggest naming whichever Deals API operation carries a revised deal, rather than leaving it implicit.From Hypermindz (buy-side agentic media planning platform).
KonstantinMirin commentedon Oct 25, 2026
Thank you, @dineshbhat. Agreed: the § 1.1 table should name the change path for each
transaction_mechanism. We'd add a change-path column to it, alongside our proposed § 1.1 paragraph:DIRECT_IOand the reservation half ofPROGRAMMATIC_GUARANTEED: an OpenDirect 2.1 ChangeRequest on the booked Line (lineid), carrying the baselineproposal_id,version, andline_item_id. As you note, the Line sits inChangePendinguntil the seller approves or rejects the request.Resetcovers only reserved, declined, or expired lines, which aren't booked.PREFERRED_DEAL,PRIVATE_AUCTION, and the deal half ofPROGRAMMATIC_GUARANTEED: a change applied to the deal against the same baseline. The Deals API that § 1.1 names, published as the Deal Sync API 1.0, "does not support deal revisions" and leaves which attributes may change after go-live to the implementers. It says 1.1 will add differential overrides, so there is no Deals API operation to name yet.Open questions
providerdata,ext, or a reference agreed with the OpenDirect maintainers? See our agreed-baseline comment (#68).Analyzed and generated with the help of Claude, fully reviewed by me.