Repository navigation
§ 2.1, § 2.2, § 2.6, § 3 — Shared types and authoring rules (#121) - #137
Open
KonstantinMirin wants to merge 14 commits into
Open
KonstantinMirin wants to merge 14 commits into
KonstantinMirin wants to merge 14 commits into
Conversation
A proposal can say its line items must be bought together (linked_execution, § 4.1), and a line item can name the line items or spend that must be in the same commitment (requires, § 5.6.3). A bonus line is a line item with requires and its own price. The § 2 "binding terms" hook now points at a field, and the Summary Representation carries has_requires and linked_execution. Adds a CTV bonus line example (§ 6.5) and linked_execution: none to the proposal example. Refs IABTechLab#23
A new § 2.3 lets a seller publish its public standard line items at /.well-known/openproposal.json: seller_id, generated_at, spec_version and, per proposal, proposal_id, version, the Summary Representation of each line item and a full_url. ETag / Last-Modified are required, only line items with visibility public appear, and entries must match the current version. Buyers discover from the manifest, then fetch the Full Representation of shortlisted line items. Adds examples/manifest.json (§ 6.5) and visibility: public to the CTV and audio examples; the registry_gated display line item is not listed. Refs IABTechLab#29
The rule that a hold on a linked_execution: all proposal uses hold_scope: proposal came from a comment on IABTechLab#23, not the change request as filed. It moves to the PR description as a point for the working group, so this PR carries only the filed change. Refs IABTechLab#23
Read the media condition from the ad served when an impression accepts several media, name the seller as the party that serves, place linear TV outside the table, and state environments as (distribution channel, device type) pairs. Insert environments.available[] into the summary list without rewrapping it, shorten the changelog entry and drop audio_streaming from OQ-7 in docs/open-questions.md. Refs IABTechLab#90
"At least one of" an empty list is never satisfied, so the bonus line would fail a literal check. An absent key sets no condition. Only the examples change; the any_of[] row and the rules stay as filed in IABTechLab#23. Refs IABTechLab#23
Give each repeated concept one type in section 2.2, and state the table, presence, type, key, and value rules in section 2.6. Add Type and Required columns to every field and key table. Add the lifecycle, recorded, asserted, and mixed markers, and a line_items[] field. Define the Summary as a strict path subset, with manifest key tables. Delete catalog_ref. Rename the time, reference, delta, cap, and path fields to use the shared types. Number every heading, and keep issue citations and edit history out of normative text. Update the examples, the manifest, the appendices, and the docs. Teach check_appendix.py the new columns and a closed layout list, and add check_examples.py, which checks the examples against the spec's tables.
This was referenced Nov 4, 2026
Open
Open
Open
Open
Open
This was referenced Nov 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
In draft 1, a schema can't be derived from the field tables. One concept has several written forms, and many rows give no type or presence. This PR gives each repeated concept one type, and states the rules tables follow.
VocabularyTermwith one rule for an unknown term.line_items[](§ 4.1).catalog_refis removed.scripts/check_examples.pychecks the examples against the tables, in CI.Related issue
Closes #121, an implementation report from Postindustria (IAB Tech Lab member).
Refs #31, #33, #2, #3, #36, #90, #118, #119, #76, #70.
Builds on
This PR carries #118 by @aleksUIX, #70 by @Sirajmx, and #76 by @Kishore-2572, at their heads. The merge of #76 renumbers its example § 6.6, after #70's § 6.5. Our channel definitions PR (#119), which refs #90, folds into this one. Review the last commit; earlier ones are the PRs it builds on.
Type
Checklist
scripts/check_appendix.pypassesline_items[];supplied3 → 0,requestable3 → 2; fields the buyer touches 23 → 19;lifecycle,recorded, andassertedadded,mixed2 → 5examples/is updated and still parses — five examples updated,manifest.jsonregenerated;scripts/check_examples.pypassesselectabledeclaresavailable[]andincluded[]; anythingsettabledeclares bounds (§ 3.1, § 3.2) — everyselectablefield is aSelectable[T]; everysettablefield is aSettable[T], exceptfrequency_capandcommitment, whose bounds § 3.2 namesKnock-on effects
catalog_refremoved, andtransaction_mechanismvalues in lower snake case. Terms compare byte for byte, andcost_method: flatis writtenFLAT.line_items[]answers the container half of @VJAlkimi's #31, with @EvgenyAndroid's implementation evidence.catalog_reftakes the inline side of OQ-2 on @Sirajmx's #3. OQ-2 — Do seller catalogs (catalog_ref) belong in 3.0? #3 keeps tracking § 8 question 2, on whether a fetchable reference is needed.SeatRefnames a seat with its DSP's domain, as @dtbarne asks on #2.HistoryEntryandDelta.scripts/check_appendix.pylists each as pending until its PR lands. The audience option,buyer_supplied,buyer_requirements, andbuying_routekeep their filed form until then. Our PR on what is signed typesDocumentRef.urlas anHttpsUrl.min_commitment[]tomin_commitments[], and recasts § 2.3 — Static manifest at a well-known URL for standard proposals (#29) #76's text as key tables.cost_methodiscpm. Under § 2.2,cpmis an unknown term.README.mdanddocs/give the 2026-11-10 close date.By opening this pull request I agree my contribution may be published under this
repository's licence, as set out in CONTRIBUTING.md.
Analyzed and generated with the help of Claude, fully reviewed by me.