Decision records · What each rule accepts
D-035 Which payloads does each rule on one line item accept, and what does a receiver do, where the specification states the rule only in prose?
What the schemas do
Read each rule as narrowly as its words allow, and give it the vectors that reading decides:
- the line item's own status
- a pin as a sha256
- the channel rows and the environment rows, matched by device and distribution
- the seller named by the proposal's seller_id
Options
Why
Type rules § 9 gives every rule a valid and an invalid vector, so leaving these rules without vectors fails the gate. The vectors read each rule as follows. "Reaches status agreed" is the line item's own status, since the line item is self-contained, so an agreed line item carries no catalog_ref and no list_ref. A list_ref is hash-pinned when it carries sha256. An environments.available[] value matches an impression of the line item's channel when one of the value's (distribution channel, device type) pairs can hold an impression that § 5.1.1 gives that channel, its first matching row: dooh admits only dooh, and ctv only ctv, while display admits web_desktop, web_mobile, and app_mobile. The plcmt rule reads its key row as it is written: "plcmt | REQUIRED for video ads (channel video, or video on channel ctv); otherwise OPTIONAL". A line item whose channel is video holds video ads, so it gives plcmt. A line item whose channel is ctv says in no field whether its ads are video: a format ID is namespaced by channel, not by medium, as ctv/instream-15s is, the format registry has no ctv/* entries, and the delivery protocol is a term the text doesn't list (D-041). So a ctv line item without plcmt is undecided, neither accepted nor rejected, its vectors leave it out, and the examples gate records each one, as the bonus example is. "The seller" as a measurement_source vendor is the vendor whose ID is the proposal's seller_id, which the line item doesn't carry, so the vectors give it as context. An exclusion type is a key of exclusions that exclusions_accepted.types can list, so list_ref, whose entries have no stated type, is none. A consumer that doesn't recognise a channel, such as a namespaced one, skips the line item and keeps the proposal. A code block shows part of a line item, so a rule whose verdict turns on a member the block leaves out while it shows another the rule reads is undecided: the status beside a list_ref or a catalog_ref, the channel beside environments or placement, and any of the members the measurement rule reads. So is a measurement_source option given as a catalog_ref, whose vendor the line item holds only once the reference is resolved. The measurement rule is a SHOULD NOT, so an example that breaks it is a warning, not an error.
What we ask the specification to state
Say:
- whether "reaches status
agreed" means the proposal's status or the line item's - how a line item names the seller as its
measurement_sourcevendor - how a
ctvline item says it carries video, so that theplcmtcondition can be checked - which exclusion type a
list_refholds
The specification lines it rests on
Each line is quoted as the record pins it. Expand an item to read the quote.
main
§ 2.2, a requirement L109 at 44dfaaf
When a proposal reaches status
agreed, everycatalog_refMUST be replaced by its resolved value in the stored record, so the committed artifact is self-contained and immutable.
With the open PRs
§ 2.2, a requirement L102 on main at 981a74e
When a proposal reaches status
agreed, everycatalog_refMUST be replaced by its resolved value in the stored record, so the committed artifact is self-contained and immutable.§ 5.5, a requirement L298 in #71
list_refMUST be hash-pinned, and resolved into the stored record atagreed, as forcatalog_ref(§ 2.2).§ 5.1.1, a requirement L247 in #119
A consumer MUST skip a line item whose
channelit does not recognise, and MUST NOT reject the proposal because of it.§ 5.2.1, a requirement L280 in #119
Each
environments.available[]value MUST match at least one impression to which 5.1.1 gives the line item'schannel.§ 5.1.1, the definition of
doohforchannelL235 in #119dooh| Distribution channelDooh§ 5.1.1, the definition of
audioforchannelL236 in #119audio| Audio ad (AudioPlacement)§ 5.1.1, the definition of
ctvforchannelL237 in #119ctv| Device type Connected TV (3), Connected Device (6) or Set Top Box (7)§ 5.1.1, the definition of
nativeforchannelL238 in #119native| Native ad (DisplayPlacement.nativefmt), including native ads with video assets§ 5.1.1, the definition of
videoforchannelL239 in #119video| Video ad (VideoPlacement)§ 5.1.1, the definition of
displayforchannelL240 in #119display| Any other display ad (DisplayPlacement)§ 5.2.1, the definition of
web_desktopforenvironmentsL266 in #119web_desktop|Site| Personal Computer (2)§ 5.2.1, the definition of
web_mobileforenvironmentsL267 in #119web_mobile|Site| Mobile/Tablet - General (1), Phone (4), Tablet (5)§ 5.2.1, the definition of
app_mobileforenvironmentsL268 in #119app_mobile|App| Mobile/Tablet - General (1), Phone (4), Tablet (5)§ 5.2.1, the definition of
ctvforenvironmentsL269 in #119ctv|SiteorApp| Connected TV (3), Connected Device (6), Set Top Box (7)§ 5.2.1, the definition of
doohforenvironmentsL270 in #119dooh|Dooh| Any§ 5.2.2, a requirement L265 in #120
Unless
api[]includes OMID 1.0 (7), a line item whosecommitted_metrics[]includesviewable_rateand whoseenvironments.available[]includesapp_mobileorctvSHOULD NOT offer ameasurement_sourcevendor other than the seller.§ 5.2, a requirement
plcmtis REQUIRED for video ads.The integration of the open PRs wrote this text, to resolve a conflict or as its lock records, so no commit on GitHub holds it.
§ 5.2.2, the
placement.plcmtkey row L247 in #120plcmt| REQUIRED for video ads (channelvideo, or video onchannelctv); otherwise OPTIONAL | One value from List: Plcmt Subtypes - Video: Instream (1), Accompanying Content (2), Interstitial (3), No Content/Standalone (4), Pause (5), Screensaver (6), Overlay (7), Squeezeback (8), In-scene (9) |VideoPlacement.ptype,video.plcmt§ 5.5, a requirement L294 in #71
A buyer MUST NOT supply an exclusion type absent from
exclusions_accepted.types.
What it shapes
With the open PRs: LineItemSummaryPlacement.plcmt, Placement.plcmt