Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
e71bfc0
Add app identity to properties for app and CTV inventory
Sirajmx Oct 6, 2026
ff53dc5
Clarify that pricing[].floor is the offer floor
Sirajmx Oct 6, 2026
dc0e37c
Make the app developer domain RECOMMENDED
Sirajmx Oct 8, 2026
b70a5c3
Add linked_execution and requires for linked line items
Sirajmx Oct 22, 2026
fc7ec37
Add buyer-supplied block lists to the targeting envelope
Sirajmx Oct 22, 2026
684c865
Let geo be selectable with per-market price deltas
Sirajmx Oct 22, 2026
cbe7fe0
Require proposal_id and version on commitments
Kishore-2572 Oct 22, 2026
7a89385
Add proposal_template_id for issued proposals
Kishore-2572 Oct 22, 2026
af6c878
Add terms_ref and agreement_ref for contract references
Kishore-2572 Oct 22, 2026
8e1f614
Add a static publication manifest at a well-known URL
Kishore-2572 Oct 22, 2026
74a2544
Scope the replay rule to the same buyer
Kishore-2572 Oct 22, 2026
b88e9a0
Name agreement_ref parties with defined identifiers
Kishore-2572 Oct 22, 2026
ecec3d7
Keep the hold rule out of the spec text
Sirajmx Oct 23, 2026
63712c0
Restore iab_content_category as filed
Sirajmx Oct 23, 2026
208f0c2
Leave combining several market deltas to the working group
Sirajmx Oct 23, 2026
6573e9c
Add discussion fixtures for pricing alternatives and seller fees
aleksUIX Oct 24, 2026
7ab6d2b
Separate creative inspection from production notifications
aleksUIX Oct 24, 2026
841c9c8
Keep floor eligibility outside the pricing arithmetic profile
aleksUIX Oct 24, 2026
8fde92c
Close inspection URL and notification-observation gaps
aleksUIX Oct 24, 2026
49ad2e2
Define channel and environments in AdCOM terms
KonstantinMirin Oct 25, 2026
0bc3f7e
Add placement to say what each impression is
KonstantinMirin Oct 25, 2026
0125d55
Clarify channel and environment matching rules
KonstantinMirin Oct 25, 2026
81de4d8
Define placement matching and value types
KonstantinMirin Oct 25, 2026
e51ee17
Clarify fee basis and allow zero-rate unit commitments
aleksUIX Oct 25, 2026
395ca83
Narrow creative inspection wording and separate fixture tooling
aleksUIX Oct 25, 2026
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
fa03c04
Merge #18, offer floor
KonstantinMirin Nov 3, 2026
92b081a
Merge the buyer writes change
KonstantinMirin Nov 4, 2026
f2591e1
Define what the buyer writes and how the rate is computed
KonstantinMirin Nov 4, 2026
e3eb0ad
Define what is signed and how a seller checks it
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
0bd739d
Merge #120, placement attributes
KonstantinMirin Nov 4, 2026
36d0932
Define video and audio placement, programs, and break position
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
2428a46
Merge the video and audio change
KonstantinMirin Nov 4, 2026
38a02d9
Merge the audience change
KonstantinMirin Nov 4, 2026
98adc3d
Fix earlier text and widen the example checks
KonstantinMirin Nov 4, 2026
f312c61
Write the line items into proposal.yaml and check the extracts
KonstantinMirin Nov 4, 2026
ad4527a
Pin each format spec to one version and rename the format fields
KonstantinMirin Nov 4, 2026
1b70d1a
Add asset provenance and the seller's voice keys
KonstantinMirin Nov 4, 2026
5160e65
Let assets record the creative the seller builds
KonstantinMirin Nov 4, 2026
756ec7e
Require the advertiser, the decline ground, and a timely answer
KonstantinMirin Nov 5, 2026
860cf0a
Merge the signing change
KonstantinMirin Nov 5, 2026
b493533
Merge the post-agreement 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
b925ad0
Merge the DOOH change
KonstantinMirin Nov 5, 2026
1336925
Name the advertiser in the embedded podcast example
KonstantinMirin Nov 5, 2026
0af3864
Merge the property option change
KonstantinMirin Nov 5, 2026
13ebb0c
Merge the video and audio change
KonstantinMirin Nov 5, 2026
d25e553
Merge the audience change
KonstantinMirin Nov 5, 2026
b00fea7
Define the voice key and flag a synthetic asset under human_only
KonstantinMirin Nov 5, 2026
6139398
Replace requires and linked_execution with packages
KonstantinMirin Nov 5, 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
Loading