Skip to content

§ 2.1, § 2.2, § 2.6, § 3 — Shared types and authoring rules (#121) - #137

Open
KonstantinMirin wants to merge 14 commits into
IABTechLab:mainfrom
KonstantinMirin:op30-shared-types
Open

KonstantinMirin wants to merge 14 commits into
IABTechLab:mainfrom
KonstantinMirin:op30-shared-types

Conversation

@KonstantinMirin

Copy link
Copy Markdown

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.

  • § 2.2 defines the shared types, including VocabularyTerm with one rule for an unknown term.
  • § 2.6 states the table, type, presence, key, and value conventions.
  • Every field and key row has Type and Required columns, and the inline objects this PR owns get key tables.
  • § 3 adds four markers and moves the fields they fit.
  • The proposal lists its line_items[] (§ 4.1).
  • § 2.1 makes the Summary a strict path subset of the Full Representation, and § 2.3 gives the manifest key tables.
  • catalog_ref is removed.
  • Fields are renamed to follow § 2.2 and § 2.6; the CHANGELOG lists each.
  • Headings are numbered, and normative text cites no issue.
  • scripts/check_examples.py checks 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

  • Editorial — no normative effect
  • Normative — changes what the spec requires
  • Breaking — would break an implementation already built to this draft
  • Examples / schema / docs only

Checklist

  • The body section is updated — § 2, § 2.1, § 2.2, § 2.3, § 2.6, § 3, § 4, § 5, § 6, § 7, § 8
  • Appendix A (field index) matches the body — it gains a Required column; scripts/check_appendix.py passes
  • Appendix B (fields by marker, and the counts) matches the body — 73 → 74 fields with line_items[]; supplied 3 → 0, requestable 3 → 2; fields the buyer touches 23 → 19; lifecycle, recorded, and asserted added, mixed 2 → 5
  • Any affected example in examples/ is updated and still parses — five examples updated, manifest.json regenerated; scripts/check_examples.py passes
  • RFC 2119 keywords used deliberately — MUST / SHOULD / MAY are not synonyms
  • The no-inheritance rule (§ 2) still holds — reworded, same rule
  • Anything selectable declares available[] and included[]; anything settable declares bounds (§ 3.1, § 3.2) — every selectable field is a Selectable[T]; every settable field is a Settable[T], except frequency_cap and commitment, whose bounds § 3.2 names
  • No confidential or commercially sensitive content

Knock-on effects


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.

Sirajmx and others added 14 commits October 22, 2026 15:56
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
This was referenced Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Impl] A schema can't be derived from the tables yet: seven authoring rules and a CI lint would fix that

4 participants