Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
273 commits
Select commit Hold shift + click to select a range
97a5b10
Add time_zone and the daypart window shape
KonstantinMirin Oct 25, 2026
9783ec8
Write the daypart day names as one value list
KonstantinMirin Oct 26, 2026
10a3780
Drop the empty any_of from the requires examples
Sirajmx Oct 28, 2026
e3cbe66
Use the ticket's wording and name the auction floor it means
Sirajmx Oct 28, 2026
63d86c0
Correct the developer domain and define platform as the issuing store
Sirajmx Oct 28, 2026
0b90fd4
Define the replay body and tighten the stale-version checks
Kishore-2572 Oct 28, 2026
c102a50
Merge #119, channel and environment definitions
KonstantinMirin Nov 3, 2026
ecc0ae5
Merge #118, creative inspection
KonstantinMirin Nov 3, 2026
48219db
Merge #70, linked line items
KonstantinMirin Nov 3, 2026
c04acd0
Merge #76, well-known manifest
KonstantinMirin Nov 3, 2026
e47cbf5
Add shared types, authoring rules, and an examples checker
KonstantinMirin Nov 3, 2026
c7a0eb7
Merge the shared types change
KonstantinMirin Nov 3, 2026
1705a49
Merge #71, buyer block lists
KonstantinMirin Nov 3, 2026
3eec0be
Merge #73, commitment version
KonstantinMirin Nov 3, 2026
a4b4584
Add errors, extensions, and forward compatibility
KonstantinMirin Nov 3, 2026
5da3831
Merge the errors and extensions change
KonstantinMirin Nov 3, 2026
a1e39eb
Merge #75, terms and agreement references
KonstantinMirin Nov 3, 2026
0b20404
Name the parties and what each identity layer proves
KonstantinMirin Nov 3, 2026
88de485
Merge the parties change
KonstantinMirin Nov 3, 2026
cef4519
Merge #74, proposal templates
KonstantinMirin Nov 3, 2026
ba259e8
Define who moves each status and when an offer goes stale
KonstantinMirin Nov 3, 2026
883d5d3
Merge the lifecycle change
KonstantinMirin Nov 3, 2026
601baa3
Merge #72, selectable geo
KonstantinMirin Nov 3, 2026
5acc1f6
Merge #123, daypart clock
KonstantinMirin Nov 3, 2026
92b081a
Merge the buyer writes change
KonstantinMirin Nov 4, 2026
fa03c04
Merge #18, offer floor
KonstantinMirin Nov 3, 2026
e3eb0ad
Define what is signed and how a seller checks it
KonstantinMirin Nov 4, 2026
f2591e1
Define what the buyer writes and how the rate is computed
KonstantinMirin Nov 4, 2026
35b2a1c
Define the baseline and change requests after agreed
KonstantinMirin Nov 4, 2026
8a418c7
Merge the post-agreement change
KonstantinMirin Nov 4, 2026
6769618
Define the downstream handoff for each mechanism
KonstantinMirin Nov 4, 2026
54719c2
Merge the handoff change
KonstantinMirin Nov 4, 2026
19f5948
Merge #117, pricing fixtures
KonstantinMirin Nov 4, 2026
3c5e5b4
Split holds into offered terms and live state
KonstantinMirin Nov 4, 2026
e484091
Define pricing alternatives, money, bounds, and cancellation
KonstantinMirin Nov 4, 2026
7c693ab
Merge the pricing change
KonstantinMirin Nov 4, 2026
a1d05d5
Define who measures, the metric terms, and settlement
KonstantinMirin Nov 4, 2026
f2ac4d6
Merge the settlement change
KonstantinMirin Nov 4, 2026
581d464
Define DOOH properties, plays, and what a commitment commits
KonstantinMirin Nov 4, 2026
0de1fed
Merge the DOOH change
KonstantinMirin Nov 4, 2026
d4d395d
Merge #17, app identity
KonstantinMirin Nov 4, 2026
e8458f9
Merge the property option change
KonstantinMirin Nov 4, 2026
112a560
Give the property option one key table and one app identity
KonstantinMirin Nov 4, 2026
e274a32
Define audience composition and one map of exclusions
KonstantinMirin Nov 4, 2026
acecc8e
Point the inspection entry at section 5.4.1
KonstantinMirin Nov 5, 2026
756ec7e
Require the advertiser, the decline ground, and a timely answer
KonstantinMirin Nov 5, 2026
b493533
Merge the post-agreement change
KonstantinMirin Nov 5, 2026
860cf0a
Merge the signing change
KonstantinMirin Nov 5, 2026
c635a16
Answer the open hold questions and offer a renewal right
KonstantinMirin Nov 5, 2026
a5d7590
Carry the agreed baseline on the deal push
KonstantinMirin Nov 5, 2026
2f8df54
Merge the holds change
KonstantinMirin Nov 5, 2026
0b237ef
Merge the handoff change
KonstantinMirin Nov 5, 2026
47bc8ce
Apply the review of the pricing text
KonstantinMirin Nov 5, 2026
9579ea3
Merge the pricing change
KonstantinMirin Nov 5, 2026
5d796bf
Merge the settlement change
KonstantinMirin Nov 5, 2026
4a160ff
Name the advertiser in the DOOH example
KonstantinMirin Nov 5, 2026
2ee1cb5
Merge the DOOH change
KonstantinMirin Nov 5, 2026
0af3864
Merge the property option change
KonstantinMirin Nov 5, 2026
3d6a224
Add paid_zone to separation, and let a line item state its preemption
KonstantinMirin Nov 6, 2026
699fa79
State how long a seller keeps an idempotency key
KonstantinMirin Nov 6, 2026
65afc37
Merge the signing change
KonstantinMirin Nov 6, 2026
5447448
Merge the post-agreement change
KonstantinMirin Nov 6, 2026
6d8c060
Merge the handoff change
KonstantinMirin Nov 6, 2026
b44c1ec
Merge the pricing change
KonstantinMirin Nov 6, 2026
3781035
Merge the settlement change
KonstantinMirin Nov 6, 2026
d35c889
Merge the DOOH change
KonstantinMirin Nov 6, 2026
1832eff
Merge the property option change
KonstantinMirin Nov 6, 2026
2cf7b87
Let a preemptible line item yield to a later exclusivity term
KonstantinMirin Nov 6, 2026
d655f66
Let a domination cover a station's paid zone
KonstantinMirin Nov 6, 2026
8b791e4
Make the rejection floor a requirement and cover a proposal with no end
KonstantinMirin Nov 6, 2026
e7015f2
Merge the signing change
KonstantinMirin Nov 6, 2026
1e13327
Merge the handoff change
KonstantinMirin Nov 6, 2026
be915bf
Merge the post-agreement change
KonstantinMirin Nov 6, 2026
4a8890e
Merge the pricing change
KonstantinMirin Nov 6, 2026
e7bf062
Merge the settlement change
KonstantinMirin Nov 6, 2026
18110df
Merge the DOOH change
KonstantinMirin Nov 6, 2026
a5ca5a6
Merge the property option change
KonstantinMirin Nov 6, 2026
1b65071
Hold the decline rule until preemption notice runs, and keep shortfal…
KonstantinMirin Nov 6, 2026
7bbc327
Merge the signing change
KonstantinMirin Nov 6, 2026
f196efa
Word the forgotten-replay rule without a second new commit
KonstantinMirin Nov 6, 2026
a8f2de4
Merge the handoff change
KonstantinMirin Nov 6, 2026
e7b9109
Merge the post-agreement change
KonstantinMirin Nov 6, 2026
1cfd71b
Merge the pricing change
KonstantinMirin Nov 6, 2026
9c5950e
Merge the settlement change
KonstantinMirin Nov 6, 2026
1be180e
Merge the DOOH change
KonstantinMirin Nov 6, 2026
8e3b4b5
Merge the property option change
KonstantinMirin Nov 6, 2026
16fa566
Say what the preemption carve-out covers with no notice period
KonstantinMirin Nov 6, 2026
351f9f4
Merge the pricing change
KonstantinMirin Nov 6, 2026
a6493aa
Merge the settlement change
KonstantinMirin Nov 6, 2026
ce15739
Merge the DOOH change
KonstantinMirin Nov 6, 2026
6f950bc
Merge the property option change
KonstantinMirin Nov 6, 2026
95a81aa
Name iab-agentic-primitives as the nearest artifact to the message co…
KonstantinMirin Nov 6, 2026
70d8fce
Merge the post-agreement change
KonstantinMirin Nov 6, 2026
c32ae70
Merge the handoff change
KonstantinMirin Nov 6, 2026
1fce5cb
Merge the pricing change
KonstantinMirin Nov 6, 2026
53bd459
Merge the settlement change
KonstantinMirin Nov 6, 2026
7cbf72e
Merge the DOOH change
KonstantinMirin Nov 6, 2026
3b1f83d
Merge the property option change
KonstantinMirin Nov 6, 2026
a8a7bb4
Say what the primitives cover, and that this document governs where t…
KonstantinMirin Nov 6, 2026
8c680e5
Merge the post-agreement change
KonstantinMirin Nov 6, 2026
173a99f
Merge the handoff change
KonstantinMirin Nov 6, 2026
93798fa
Merge the pricing change
KonstantinMirin Nov 6, 2026
d6eeafa
Merge the settlement change
KonstantinMirin Nov 6, 2026
17ffa8e
Merge the DOOH change
KonstantinMirin Nov 6, 2026
a68c027
Merge the property option change
KonstantinMirin Nov 6, 2026
ed74d0c
Let a seller declare hold limits in the manifest
KonstantinMirin Nov 7, 2026
e9ac2ce
State that typed fields govern free text
KonstantinMirin Nov 7, 2026
915f709
Merge the signing change
KonstantinMirin Nov 7, 2026
fc9afb6
Merge the post-agreement change
KonstantinMirin Nov 7, 2026
1a491a8
Merge the handoff change
KonstantinMirin Nov 7, 2026
c94e763
Merge the holds change
KonstantinMirin Nov 7, 2026
d3bd5a7
Let preemption state its remedy
KonstantinMirin Nov 7, 2026
db40dc0
Merge the pricing change
KonstantinMirin Nov 7, 2026
51348bf
Settle a preempted delivery under its preemption remedy
KonstantinMirin Nov 7, 2026
89f0c3d
Merge the settlement change
KonstantinMirin Nov 7, 2026
08ce130
Merge the DOOH change
KonstantinMirin Nov 7, 2026
436e0c8
Merge the property option change
KonstantinMirin Nov 7, 2026
df6249b
Say when a message is unsigned, whose origin a response names, and th…
KonstantinMirin Nov 8, 2026
053ca75
Merge the signing change
KonstantinMirin Nov 8, 2026
9ad8906
Merge the post-agreement change
KonstantinMirin Nov 8, 2026
92d4a87
Merge the handoff change
KonstantinMirin Nov 8, 2026
4c13256
Merge the pricing change
KonstantinMirin Nov 8, 2026
4592e36
Merge the settlement change
KonstantinMirin Nov 8, 2026
7b444d1
Merge the DOOH change
KonstantinMirin Nov 8, 2026
da1e1d1
Merge the property option change
KonstantinMirin Nov 8, 2026
10d5ae4
Define the target URI a signature covers
KonstantinMirin Nov 8, 2026
e47ff9d
Merge the signing change
KonstantinMirin Nov 8, 2026
480b68c
Merge the post-agreement change
KonstantinMirin Nov 8, 2026
645b3a6
Merge the handoff change
KonstantinMirin Nov 8, 2026
82d38f4
Merge the pricing change
KonstantinMirin Nov 8, 2026
13fbc38
Merge the settlement change
KonstantinMirin Nov 8, 2026
2d3d042
Merge the DOOH change
KonstantinMirin Nov 8, 2026
b9cd34b
Merge the property option change
KonstantinMirin Nov 8, 2026
71c8f08
Write the full Web Bot Auth profile into § 2.8
KonstantinMirin Nov 8, 2026
3fae340
Merge the signing change
KonstantinMirin Nov 8, 2026
1b3348e
Merge the post-agreement change
KonstantinMirin Nov 8, 2026
6e95098
Merge the handoff change
KonstantinMirin Nov 8, 2026
a953461
Merge the pricing change
KonstantinMirin Nov 8, 2026
15262c1
Merge the DOOH change
KonstantinMirin Nov 8, 2026
f527c48
Merge the settlement change
KonstantinMirin Nov 8, 2026
8e14eee
Merge the property option change
KonstantinMirin Nov 8, 2026
c95934c
State that a min_rate is as readable as its line item
KonstantinMirin Nov 8, 2026
2987218
Let a property name the TV channel and network it carries
KonstantinMirin Nov 8, 2026
0bbbe7c
Merge the buyer writes change
KonstantinMirin Nov 8, 2026
e9c837a
Merge the buyer writes change
KonstantinMirin Nov 8, 2026
84f4afc
Merge the signing change
KonstantinMirin Nov 8, 2026
33a3df9
Merge the handoff change
KonstantinMirin Nov 8, 2026
65c8172
Merge the holds change
KonstantinMirin Nov 8, 2026
13bc5b0
Merge the post-agreement change
KonstantinMirin Nov 8, 2026
962ad0a
Merge the pricing change
KonstantinMirin Nov 8, 2026
096316e
Merge the settlement change
KonstantinMirin Nov 8, 2026
d9c678f
Merge the DOOH change
KonstantinMirin Nov 8, 2026
28ca85d
Merge the property option change
KonstantinMirin Nov 8, 2026
e92f464
Round TIME units to the nearest whole unit
KonstantinMirin Nov 9, 2026
49c7026
Merge the pricing change
KonstantinMirin Nov 9, 2026
cecdf81
Merge the settlement change
KonstantinMirin Nov 9, 2026
57ac3d5
Say which instant places a play, and which demographic settles
KonstantinMirin Nov 9, 2026
1ab3c81
Merge the DOOH change
KonstantinMirin Nov 9, 2026
9c68dd9
Match TV channels and networks by domain
KonstantinMirin Nov 9, 2026
844b6da
Merge the property option change
KonstantinMirin Nov 9, 2026
aaa6108
Round a half unit up in TIME
KonstantinMirin Nov 10, 2026
c85b053
Cover previews through server-side ad insertion
KonstantinMirin Nov 10, 2026
7a3958f
Merge the shared types change
KonstantinMirin Nov 10, 2026
5317f7f
Merge the errors and extensions change
KonstantinMirin Nov 10, 2026
d2a16c4
Merge the lifecycle change
KonstantinMirin Nov 10, 2026
13cced5
Merge the parties change
KonstantinMirin Nov 10, 2026
de19531
Merge the buyer writes change
KonstantinMirin Nov 10, 2026
e5ec5a2
Merge the buyer writes change
KonstantinMirin Nov 10, 2026
e329670
Merge the signing change
KonstantinMirin Nov 10, 2026
47945c1
Merge the post-agreement change
KonstantinMirin Nov 10, 2026
e35f591
Merge the handoff change
KonstantinMirin Nov 10, 2026
de45d1b
Merge the holds change
KonstantinMirin Nov 10, 2026
e2bc658
Merge the pricing change
KonstantinMirin Nov 10, 2026
139c534
Merge the settlement change
KonstantinMirin Nov 10, 2026
771f348
Merge the DOOH change
KonstantinMirin Nov 10, 2026
fac0c2a
Merge the property option change
KonstantinMirin Nov 10, 2026
a6398b9
Take the core CPA action types from ECAPI 1.0
KonstantinMirin Nov 11, 2026
7918280
Let a day rate count calendar days in a named zone
KonstantinMirin Nov 11, 2026
7377535
Merge the pricing change
KonstantinMirin Nov 11, 2026
cbb20b0
Make the action source count a CPA line item
KonstantinMirin Nov 11, 2026
c69e0d1
Merge the settlement change
KonstantinMirin Nov 11, 2026
3dc67c3
Map a DOOH line item's owners and screens to the Deals API
KonstantinMirin Nov 11, 2026
35721b3
Count every item a DOOH loop plays in its length
KonstantinMirin Nov 11, 2026
86f5288
Let a CPP or CPA source settle a DOOH line item's count
KonstantinMirin Nov 11, 2026
4a23aa7
Merge the DOOH change
KonstantinMirin Nov 11, 2026
0064193
Merge the property option change
KonstantinMirin Nov 11, 2026
d5291da
Let a DOOH multiplier state its source's accreditation
KonstantinMirin Nov 11, 2026
b4e7a63
Merge the DOOH change
KonstantinMirin Nov 11, 2026
9ad8939
Merge the property option change
KonstantinMirin Nov 11, 2026
bac1fef
Record the shared types changes the changelog left out
KonstantinMirin Nov 11, 2026
d3e2552
Merge the shared types change
KonstantinMirin Nov 11, 2026
adb19b6
Merge the errors and extensions change
KonstantinMirin Nov 11, 2026
010844e
Merge the lifecycle change
KonstantinMirin Nov 11, 2026
160f145
Merge the parties change
KonstantinMirin Nov 11, 2026
c86ef5f
Record the buyer writes changes the changelog left out
KonstantinMirin Nov 11, 2026
34abcb7
Merge the buyer writes change
KonstantinMirin Nov 11, 2026
3d4dcf0
Merge the buyer writes change
KonstantinMirin Nov 11, 2026
222a506
Merge the signing change
KonstantinMirin Nov 11, 2026
385090f
Merge the post-agreement change
KonstantinMirin Nov 11, 2026
56200dc
Merge the handoff change
KonstantinMirin Nov 11, 2026
1f8ec68
Merge the holds change
KonstantinMirin Nov 11, 2026
1030138
Take CPA action types from both of ECAPI's event tables
KonstantinMirin Nov 11, 2026
9e1126f
Record the pricing changes the changelog left out
KonstantinMirin Nov 11, 2026
8685eb5
Merge the pricing change
KonstantinMirin Nov 11, 2026
2842e27
Record the settlement changes the changelog left out
KonstantinMirin Nov 11, 2026
107a79d
Merge the settlement change
KonstantinMirin Nov 11, 2026
974cf99
Record the DOOH changes the changelog left out
KonstantinMirin Nov 11, 2026
0e00a46
Merge the DOOH change
KonstantinMirin Nov 11, 2026
e4981c8
Record the property option changes the changelog left out
KonstantinMirin Nov 11, 2026
743659f
Merge the property option change
KonstantinMirin Nov 11, 2026
2d6aac7
Put the signing entry's Breaking marker at its end
KonstantinMirin Nov 11, 2026
6b4d6c6
Put the holds entry's Breaking marker at its end
KonstantinMirin Nov 11, 2026
24b8662
Merge the signing change
KonstantinMirin Nov 11, 2026
a9ff7be
Merge the post-agreement change
KonstantinMirin Nov 11, 2026
f134e4b
Put the handoff entry's Breaking marker at its end
KonstantinMirin Nov 11, 2026
de5160d
Merge the handoff change
KonstantinMirin Nov 11, 2026
d1887c6
Merge the holds change
KonstantinMirin Nov 11, 2026
6e41d8b
Merge the pricing change
KonstantinMirin Nov 11, 2026
60be0ba
Merge the settlement change
KonstantinMirin Nov 11, 2026
4a8f8d9
Merge the DOOH change
KonstantinMirin Nov 11, 2026
8b4176c
Write the movable condition on lat and lon as a value
KonstantinMirin Nov 11, 2026
f01a591
Merge the property option change
KonstantinMirin Nov 11, 2026
ae35db9
Let a CPA entry name the rules that make an action billable
KonstantinMirin Nov 12, 2026
77f3a11
Check calendar_zone and action_definition on every pricing entry
KonstantinMirin Nov 12, 2026
188478c
Merge the pricing change
KonstantinMirin Nov 12, 2026
39229c5
Merge the settlement change
KonstantinMirin Nov 12, 2026
4860950
Merge the DOOH change
KonstantinMirin Nov 12, 2026
e8f7e96
Reject coordinates on a movable screen
KonstantinMirin Nov 12, 2026
51aacdb
Merge the property option change
KonstantinMirin Nov 12, 2026
8400ce1
Report a calendar_zone with no rate_unit at its object
KonstantinMirin Nov 12, 2026
1c38f09
Keep checking a commitment whose cost_parameters isn't an object
KonstantinMirin Nov 12, 2026
99c9d2c
Merge the pricing change
KonstantinMirin Nov 12, 2026
a32de3e
Merge the settlement change
KonstantinMirin Nov 12, 2026
5487a4d
Merge the DOOH change
KonstantinMirin Nov 12, 2026
b6a2f23
Merge the property option change
KonstantinMirin Nov 12, 2026
c7192f7
Read an integral number as an Integer, as JSON does
KonstantinMirin Nov 12, 2026
a73d71e
Merge the shared types change
KonstantinMirin Nov 12, 2026
d1da1e0
Merge the errors and extensions change
KonstantinMirin Nov 12, 2026
44535cf
Merge the parties change
KonstantinMirin Nov 12, 2026
e15329e
Merge the lifecycle change
KonstantinMirin Nov 12, 2026
c679074
Merge the buyer writes change
KonstantinMirin Nov 12, 2026
9b9ca68
Merge the buyer writes change
KonstantinMirin Nov 12, 2026
9dad365
Merge the signing change
KonstantinMirin Nov 12, 2026
a3aa930
Merge the post-agreement change
KonstantinMirin Nov 12, 2026
e1fc72b
Merge the handoff change
KonstantinMirin Nov 12, 2026
4c74e38
Merge the holds change
KonstantinMirin Nov 12, 2026
861d269
Merge the pricing change
KonstantinMirin Nov 12, 2026
b8bd7b7
Merge the settlement change
KonstantinMirin Nov 12, 2026
7ce8914
Merge the DOOH change
KonstantinMirin Nov 12, 2026
759e8f4
Merge the property option change
KonstantinMirin Nov 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/change-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ body:
- "5.7 — Guarantees"
- "5.8 — Transaction eligibility"
- "5.9 — Execution"
- "5.10 — External references and settlement"
- "5.10 — External references, agreement, and billing"
- "6 — Examples"
- "Appendix A / B — Field index"
- "Whole document / more than one section"
Expand Down
9 changes: 4 additions & 5 deletions .github/ISSUE_TEMPLATE/comment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ body:
- "5.7 — Guarantees"
- "5.8 — Transaction eligibility"
- "5.9 — Execution"
- "5.10 — External references and settlement"
- "5.10 — External references, agreement, and billing"
- "6 — Examples"
- "7 — Why this split"
- "8 — Open questions"
Expand All @@ -47,7 +47,7 @@ body:
attributes:
label: Field(s) involved
description: Comma-separated, if your comment is about specific fields.
placeholder: "pricing[].floor, transaction_mechanism"
placeholder: "pricing[].min_rate, transaction_mechanism"
- type: textarea
id: comment
attributes:
Expand All @@ -63,9 +63,8 @@ body:
A specific case where the draft as written produces the wrong outcome or
cannot express what you need. This is what makes a comment actionable.
placeholder: >-
A seller offering the same inventory as both PG and PMP cannot express a
different floor per mechanism, because pricing[] sits above
transaction_mechanism.
A [seller, buyer, or agent] doing [a specific case] can't express [what it
needs], because [the field or rule in the draft].
- type: dropdown
id: perspective
attributes:
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ contact_links:
- name: Read the comment process first
url: https://github.com/IABTechLab/OpenProposal/blob/main/docs/comment-process.md
about: Timeline, dispositions, and what happens to your comment.
- name: The seven open questions
- name: The open questions
url: https://github.com/IABTechLab/OpenProposal/blob/main/docs/open-questions.md
about: Where the working group is genuinely undecided. Highest-value place to comment.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/editorial.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ body:
id: location
attributes:
label: Where
placeholder: "spec/openproposal-3.0.md § 5.6, Appendix A row for `hold_status`"
placeholder: "spec/openproposal-3.0.md § 5.6, Appendix A row for `hold_terms`"
validations:
required: true
- type: textarea
Expand Down
2 changes: 1 addition & 1 deletion .github/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
description: Proposes specific normative wording
- name: open-question
color: "d93f0b"
description: Relates to one of the 7 open questions in § 8
description: Relates to one of the open questions in § 8
- name: implementation-feedback
color: "0e8a16"
description: From someone who built against the draft
Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,24 @@ jobs:
python-version: "3.12"
- name: Check every field in the body appears in Appendix A
run: python3 scripts/check_appendix.py

examples-match-spec:
name: Examples match the tables
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install pyyaml
- run: python3 scripts/check_examples.py

pricing-fixtures:
name: Pricing arithmetic vectors
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python3 scripts/check_pricing_fixtures.py
10 changes: 4 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ GitHub account may file an issue or a pull request.
thread rather than opening a duplicate, so the disposition covers one
discussion, not five.
- Check [docs/open-questions.md](docs/open-questions.md). If your point lands on
one of the seven questions the draft explicitly asks, comment there.
one of the questions the draft explicitly asks, comment there.

## 2. Pick the right route

| Route | Use it for | Where it lands |
| :--- | :--- | :--- |
| **Comment** issue | Something is unclear, wrong, internally inconsistent, or missing. You are not proposing wording. | Triaged, dispositioned, logged |
| **Change request** issue | You are proposing specific normative wording, a new field, a changed marker, or a removal. | Triaged, dispositioned, logged |
| **Open question** comment | You are answering one of the 7 questions in § 8. | Feeds the resolution of that question |
| **Open question** comment | You are answering one of the questions in § 8. | Feeds the resolution of that question |
| **Implementation feedback** issue | You built against the draft and hit something. **This is the most valuable kind of comment we receive.** | Triaged with priority |
| **Pull request** | You want to supply the exact diff for a change already discussed. | Reviewed against its issue |
| **Discussion** | You have a question, or want to think out loud before filing. | No disposition; not part of the formal record |
Expand All @@ -40,10 +40,8 @@ them, but the short version:

- **Cite the section.** `§ 5.6.1 commitment`, not "the commitment bit".
- **Say what breaks.** A concrete scenario — a seller, a buyer, a field, and the
wrong outcome — beats a general objection. "A seller offering the same
inventory as both PG and PMP cannot express different floors per mechanism,
because `pricing[]` sits above `transaction_mechanism`" is actionable. "The
pricing model is too simple" is not.
wrong outcome — beats a general objection such as "the pricing model is too
simple".
- **Say what you'd do instead**, even roughly. A rejected alternative is more
useful to the working group than an unanswered complaint.
- **Declare your interest.** Tell us whether you are commenting as a buyer,
Expand Down
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ server.
| :--- | :--- |
| **Current draft** | [`spec/openproposal-3.0.md`](spec/openproposal-3.0.md) |
| **Comment period opens** | 2026-09-22 |
| **Comment period closes** | 2026-10-22 |
| **Comment period closes** | 2026-11-10 |
| **Announcement** | [IAB Tech Lab introduces AAMP 3.0 with OpenProposal](https://iabtechlab.com/press-releases/iab-tech-lab-introduces-aamp-3-0-with-openproposal/) |
| **Short link** | [iabtechlab.com/AAMPv3](https://iabtechlab.com/AAMPv3) (points to this repository) |
| **How to comment** | [CONTRIBUTING.md](CONTRIBUTING.md) |
Expand Down Expand Up @@ -56,7 +56,7 @@ Pick the route that matches what you have to say:
| :--- | :--- |
| Flag something unclear, wrong, or missing | [Open a **Comment**](https://github.com/IABTechLab/OpenProposal/issues/new?template=comment.yml) |
| Propose specific normative wording | [Open a **Change request**](https://github.com/IABTechLab/OpenProposal/issues/new?template=change-request.yml), or send a pull request against `spec/openproposal-3.0.md` |
| Answer one of the 7 open questions | Comment on that question's [tracking issue](docs/open-questions.md) |
| Answer one of the open questions | Comment on that question's [tracking issue](docs/open-questions.md) |
| Report what happened when you tried to implement it | [Open **Implementation feedback**](https://github.com/IABTechLab/OpenProposal/issues/new?template=implementation-feedback.yml) |
| Ask a question rather than raise an issue | Use [Discussions](https://github.com/IABTechLab/OpenProposal/discussions) |

Expand All @@ -69,15 +69,15 @@ in [docs/disposition-log.md](docs/disposition-log.md). See

Three things to understand before the field tables make sense:

1. **No inheritance.** Every line item is fully self-contained. A field never
1. **No inheritance.** Every term of a line item is on the line item. A field never
takes its value from the parent proposal or a sibling line item.
2. **Every field carries exactly one mutability marker** (§ 3) — `immutable`,
`seller-set`, `selectable`, `settable`, `supplied`, `requestable` or
`derived`. The marker is what tells a buying agent whether it can act
unilaterally.
3. **Composition is constraint satisfaction, not negotiation.** Of 71 fields,
only 3 require a round trip with the counterparty. That ratio is the design
claim the draft is asking you to test.
`seller-set`, `selectable`, `settable`, `supplied`, `requestable`, `derived`,
`lifecycle`, `recorded`, `asserted` or `mixed`. The marker is what tells a
buying agent whether it can act unilaterally.
3. **Composition is constraint satisfaction, not negotiation.** Only `requestable`
fields require a round trip with the counterparty to resolve. Appendix B has the
count. That ratio is the design claim the draft is asking you to test.

## Downstream standards

Expand All @@ -89,8 +89,8 @@ OpenRTB 2.6). See § 1.1.

Machine-readable schemas are coming. They are not published with this first
draft, because the comment period is still deciding questions that shape
them. They will follow the first revision, after the comment period closes on
2026-10-22. Until then, [`examples/`](examples/) is the best reference for
them. They will follow the first revision, after the comment period closes.
Until then, [`examples/`](examples/) is the best reference for
shape. See [schema/README.md](schema/README.md).

## Contributors and governance
Expand Down
8 changes: 4 additions & 4 deletions docs/comment-process.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ or a documented decision not to change it.
| Phase | Dates | What happens |
| :--- | :--- | :--- |
| **1. Comment period opens** | 2026-09-22 | Draft frozen at a tagged version. Announcement published. Issues open. |
| **2. Comment period** | 2026-09-22 → 2026-10-22 (30 days) | Anyone may file. Maintainers triage and label within 5 business days of filing, but do not resolve. |
| **3. Comment period closes** | 2026-10-22 | No new comments enter the formal record. Later issues are labelled `post-comment` and considered for the following draft. |
| **2. Comment period** | 2026-09-22 → 2026-11-10 | Anyone may file. Maintainers triage and label within 5 business days of filing, but do not resolve. |
| **3. Comment period closes** | 2026-11-10 | No new comments enter the formal record. Later issues are labelled `post-comment` and considered for the following draft. |
| **4. Adjudication** | `TBD` → `TBD` | Working group works the queue. Every open comment gets a disposition. |
| **5. Disposition published** | `TBD` | [disposition-log.md](disposition-log.md) published in full. Commenters notified on their issue. |
| **6. Revised draft** | `TBD` | New draft tagged. Either ratification or a second comment period, depending on how much moved. |

> **Maintainers: phases 4–6 are still `TBD`.** Fill them before the comment
> period closes on 2026-10-22.
> period closes.

## Dispositions

Expand Down Expand Up @@ -59,7 +59,7 @@ Triage labels, applied on filing:
| :--- | :--- |
| `comment` | General comment on the draft |
| `change-request` | Proposes specific normative wording |
| `open-question` | Relates to one of the 7 questions in § 8 |
| `open-question` | Relates to one of the questions in § 8 |
| `implementation-feedback` | From someone who built against the draft |
| `editorial` | Typo, formatting, broken link — no normative effect |
| `normative` | Changes what the spec requires |
Expand Down
2 changes: 1 addition & 1 deletion docs/disposition-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
The formal record of every comment filed during the OpenProposal 3.0 public
comment period, and what was decided.

**Status: comment period open (2026-09-22 → 2026-10-22). No dispositions yet.**
**Status: comment period open (2026-09-22 → 2026-11-10). No dispositions yet.**

This file is updated as comments are adjudicated and published in full at the
end of the period. See [comment-process.md](comment-process.md) for what each
Expand Down
109 changes: 88 additions & 21 deletions docs/open-questions.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Open questions

The draft asks seven questions it does not answer. These are the highest-value
places to comment, because the working group is genuinely undecided.
These are the questions the draft asks and does not answer. They are the
highest-value places to comment, because the working group is genuinely undecided.

Each has its own tracking issue, labelled
[`open-question`](https://github.com/IABTechLab/OpenProposal/issues?q=label%3Aopen-question).
Expand All @@ -24,13 +24,15 @@ whether resolving inside one is worth the modelling cost.

---

### OQ-2 — Do seller catalogs (`catalog_ref`) belong in 3.0?
### OQ-2 — Is a fetchable reference to a seller catalog needed?

**Issue:** [#3](https://github.com/IABTechLab/OpenProposal/issues/3) · **Spec:** § 2.2
**Issue:** [#3](https://github.com/IABTechLab/OpenProposal/issues/3) · **Spec:** § 2.1

Or should the object stay fully inline until a later version? `catalog_ref`
buys compactness across a large shelf at the cost of a resolution step during
discovery and a versioning regime sellers must operate.
The object is fully inline. A seller reuses catalog entries in its own systems, and
a summary lists what § 2.1 names. A reference a buyer could fetch would buy
compactness across a large shelf at the cost of a fetch rule, a resolution step
during discovery, and a versioning regime sellers must operate. A `Line.productid`
would be one use: an agreed record doesn't say which OpenDirect `Product` it books.

**What would settle it:** how large a real shelf gets, and whether sellers
already maintain versioned, immutable catalog entries or would have to build
Expand Down Expand Up @@ -65,48 +67,113 @@ proposed fallback behaviour.

---

### OQ-5 — Is a `min_line_items` field needed?
### OQ-5 — Do `linked_execution` and `requires` cover bundle purchases?

**Issue:** [#6](https://github.com/IABTechLab/OpenProposal/issues/6) · **Spec:** § 2, § 4

The draft makes proposals subsettable unless binding terms mandate linked
execution. Does the proposal need an explicit `min_line_items` to require a
bundle purchase, or is that left to buyer discretion and the binding terms?
The draft makes proposals subsettable unless `linked_execution` is `all`, and a line
item can state `requires`. Does the proposal also need a `min_line_items` field?

**What would settle it:** whether sellers actually merchandise bundles that must
be bought whole, and whether "binding terms" is a precise enough hook.
**What would settle it:** whether sellers merchandise a bundle these two fields
can't express.

---

### OQ-6 — Should `payment_terms` and `invoicing_party` be catalog references?
### OQ-6 — Should `payment_terms` and `invoicing_party` repeat on every line item?

**Issue:** [#7](https://github.com/IABTechLab/OpenProposal/issues/7) · **Spec:** § 5.10

Rather than repeated on every line item, given they are usually identical across
a seller's shelf. Note this is in tension with the no-inheritance rule (§ 2) —
a `catalog_ref` is explicitly not inheritance, but the ergonomics are similar.
They are usually identical across a seller's shelf. Note this is in tension with the
no-inheritance rule (§ 2): sharing them would need another mechanism.

**What would settle it:** whether `billing` genuinely varies per line item in
practice (different supplier of record, different invoicing entity per
property).

---

### OQ-7 — `environments[]` needs validation against real inventory
### OQ-7 — `environments.available[]` needs validation against real inventory

**Issue:** [#8](https://github.com/IABTechLab/OpenProposal/issues/8) · **Spec:** § 5.2

The enum — `web_desktop`, `web_mobile`, `app_mobile`, `ctv`, `dooh`,
`audio_streaming` — is proposed, not derived from implementation experience.
The enum — `web_desktop`, `web_mobile`, `app_mobile`, `ctv`, `dooh`, each
defined in § 5.2.1 — is proposed, not derived from implementation experience.

**What would settle it:** sellers mapping their real inventory onto the enum and
reporting what does not fit.

---

### OQ-8 — How does a receiver read a document from a later release?

**Issue:** [#131](https://github.com/IABTechLab/OpenProposal/issues/131) · **Spec:** § 2.5, § 4.1

`spec_version` names the release a document follows, and § 2.5 makes a key the
receiver's release does not list invalid. Nothing says whether a receiver rejects a
release it does not know, or keeps and ignores keys it does not list.

**What would settle it:** how an implementer upgrades a seller and its buyers when
they don't move at the same time, and whether unread keys can reach an assent.

---

### OQ-9 — What basis is a money value on?

**Issue:** [#30](https://github.com/IABTechLab/OpenProposal/issues/30), [#115](https://github.com/IABTechLab/OpenProposal/issues/115) · **Spec:** § 5.6

Every `Amount` on a line item is on one basis. The draft doesn't say whether that
basis is gross or net of agency commission, or whether it includes tax. A
`commitment.amount` of 80,000.00 at an `agreed_rate` of 24.00 `CPM` buys 3,333,333
impressions if 24.00 is what the seller invoices. If 24.00 is gross of a 15%
commission, the seller invoices 20.40, and 80,000.00 stated net buys 3,921,568.

**What would settle it:** how sellers and agencies state a rate today, and what the
invoice is expected to match.

---

### OQ-10 — What settles a shortfall once no remedy remains?

**Issue:** [#95](https://github.com/IABTechLab/OpenProposal/issues/95), [#146](https://github.com/IABTechLab/OpenProposal/pull/146) · **Spec:** § 5.7.1, § 5.6.7

A buyer may refuse a sole or last `makegood`, and § 5.7.1 then points at `remedy_terms`,
whose keys describe only a makegood. The draft also doesn't state what a `credit` is
worth. Such a shortfall could settle under terms the seller states or fall back to a
credit, or a sole makegood within the flight could bind the buyer. Nor does the draft
say how much delivery a preemption takes (§ 5.6.7).

**What would settle it:** what sellers and buyers do today when a makegood is refused,
how they value a credit, and how they measure the delivery a preemption takes.

---

### OQ-11 — Must a manifest response carry both `ETag` and `Last-Modified`?

**Issue:** [#29](https://github.com/IABTechLab/OpenProposal/issues/29) · **Spec:** § 2.3

The draft requires at least one, so a buyer's client handles whichever the seller
sends.

**What would settle it:** which validator polling clients use, and what the hosts
that serve the manifest send by default.

---

### OQ-12 — How does a `change_requests[]` entry state a change other than a cancellation?

**Issue:** [#68](https://github.com/IABTechLab/OpenProposal/issues/68) · **Spec:** § 4.4

`cancellation` states a notice to cancel. The OpenDirect 2.1 ChangeRequest has no
structured statement of any other change, only free-text `comments`.

**What would settle it:** how sellers and buyers state a change today, and what a
system that applies one needs to read.

---

## Not on this list but worth saying

If you think the draft has a problem it has not asked about, file it as a
[Comment](https://github.com/IABTechLab/OpenProposal/issues/new?template=comment.yml) or a
[Change request](https://github.com/IABTechLab/OpenProposal/issues/new?template=change-request.yml). The seven
[Change request](https://github.com/IABTechLab/OpenProposal/issues/new?template=change-request.yml). The questions
above are where we know we are undecided, not the limit of what we will consider.
Loading