Decision records · Changes we propose
D-041 What does a field hold whose values are terms that the specification doesn't list?
What we propose
Each field gets a named open vocabulary with the core terms the specification lists, none yet, so each accepts namespaced terms <domain>:<term> only.
As written
Each field whose values are terms the text doesn't list takes a bare term, such as modeled, vast_4_2, mrc, or s3: an audience's provenance, creative_delivery.protocol, an asset's approval_status, availability's unit and basis, committed_metrics[]'s basis, reporting's delivery_mechanism, and, on main, an external reference's role.
The as-written variant takes the option bare-term. Switch the type map to As written to see it.
Options
Why
Each of these fields holds terms: an audience's provenance, a creative delivery's protocol, an asset's approval_status, an availability's unit and basis, a guarantee's basis, a report's delivery_mechanism, and, on main, an external reference's role. The text lists no terms for them, and the examples write bare terms such as modeled, javascript_tag, mrc, seller_reported, vast_4_2, api, and s3. Every open vocabulary of the specification is a core list that implementations extend with namespaced terms. A bare term is open in the wrong direction: it accepts any word as if it were core and rejects the namespaced extension. A named vocabulary per field gives each concept a type, and its core grows as the specification lists terms. The schema departs from the examples: until the specification lists a field's core terms, the field accepts only namespaced terms.
What we ask the specification to change
List the core terms of each field whose values are terms. These are an audience's provenance, creative_delivery.protocol, an asset's approval_status, availability's unit and basis, committed_metrics[]'s basis, and reporting's delivery_mechanism. The examples use modeled, first_party, javascript_tag, vast_4_2, mrc, seller_reported, api, and s3, which aren't listed. Until they are, each field accepts only namespaced extension terms.
The specification lines it rests on
Each line is quoted as the record pins it. Expand an item to read the quote.
main
§ 5.3, the
audiencesrow's description: the inline object L233 at 44dfaaf{ id, name, taxonomy_ref, provenance, addressable_scale }
§ 5.4, the
creative_deliveryrow's description: the inline object L245 at 44dfaaf{ method: buyer_hosted | seller_hosted | api | platform_managed, protocol, secure_required, endpoint }
§ 5.4, the
assets[]row's description: the inline object L246 at 44dfaaf{ asset_id, format_ref, url_or_tag, submitted_at, approval_status }
§ 5.6, the
availabilityrow's description: the inline object L275 at 44dfaaf{ unit, basis, as_of, granularity, type: forecast | reservable, quantity }
§ 5.7, the
committed_metrics[]row's description: the inline object L320 at 44dfaaf{ metric, value, basis }
§ 5.7, the
reportingrow's description: the inline object L323 at 44dfaaf{ feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }
§ 5.10, the
external_references[]row L349 at 44dfaafexternal_references[]| Array[Object] | derived |{ system, namespace, id, role }. Replaces platform-specific key names. A buyer-owned reference such as a Prismaio_idis supplied
With the open PRs
§ 5.3, the
audiencesrow's description: the inline object L226 on main at 981a74e{ id, name, taxonomy_ref, provenance, addressable_scale }
§ 5.4, the
creative_deliveryrow's description: the inline object L238 on main at 981a74e{ method: buyer_hosted | seller_hosted | api | platform_managed, protocol, secure_required, endpoint }
§ 5.4, the
assets[]row's description: the inline object L239 on main at 981a74e{ asset_id, format_ref, url_or_tag, submitted_at, approval_status }
§ 5.6, the
availabilityrow's description: the inline object L268 on main at 981a74e{ unit, basis, as_of, granularity, type: forecast | reservable, quantity }
§ 5.7, the
committed_metrics[]row's description: the inline object L313 on main at 981a74e{ metric, value, basis }
§ 5.7, the
reportingrow's description: the inline object L316 on main at 981a74e{ feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }
§ 5.10, the
external_references[]row L352 in #75external_references[]| Array[Object] | derived |{ system, namespace, id, role }. Replaces platform-specific key names. A buyer-owned reference such as a Prismaio_idis supplied. Documentedrolevalues:io, an IO id generated by an order management system and carried back on the line item;agreement, a buyer-held agreement id
Examples that follow the text, not this change
| Example | Where | Why | Input |
|---|---|---|---|
examples/line-item-audio.yaml | /committed_metrics/0/basis | The example follows the text, which lists no terms for basis: it writes seller_reported. We propose namespaced terms in a field until the specification lists its core terms, seller_reported among them. | main, open PRs |
examples/line-item-ctv-bonus.yaml | /creative_delivery/protocol | The example follows the text, which lists no terms for protocol: it writes vast_4_2. We propose namespaced terms in a field until the specification lists its core terms, vast_4_2 among them. | open PRs |
examples/line-item-ctv.yaml | /committed_metrics/0/basis | The example follows the text, which lists no terms for basis: it writes seller_reported. We propose namespaced terms in a field until the specification lists its core terms, seller_reported among them. | main, open PRs |
examples/line-item-ctv.yaml | /creative_delivery/protocol | The example follows the text, which lists no terms for protocol: it writes vast_4_2. We propose namespaced terms in a field until the specification lists its core terms, vast_4_2 among them. | main, open PRs |
examples/line-item-display.yaml | /audiences/available/1 | The example follows the text, which states no form for an option's id and lists no terms for provenance: it writes the readable name ep:hnw-investors and the term modeled. We propose a UUID for every ID a party mints, a catalog entry's id included. We also propose namespaced terms in a field until the specification lists its core terms. | main, open PRs |
examples/line-item-display.yaml | /audiences/available/2 | The example follows the text, which states no form for an option's id and lists no terms for provenance: it writes the readable name ep:cfo-finance-leaders and the term first_party. We propose a UUID for every ID a party mints, a catalog entry's id included. We also propose namespaced terms in a field until the specification lists its core terms. | main, open PRs |
examples/line-item-display.yaml | /committed_metrics/0/basis | The example follows the text, which lists no terms for basis: it writes mrc. We propose namespaced terms in a field until the specification lists its core terms, mrc among them. | main, open PRs |
examples/line-item-display.yaml | /creative_delivery/protocol | The example follows the text, which lists no terms for protocol: it writes javascript_tag. We propose namespaced terms in a field until the specification lists its core terms, javascript_tag among them. | main, open PRs |
examples/line-item-display.yaml | /reporting/available/0/delivery_mechanism | The example follows the text, which lists no terms for delivery_mechanism: it writes api. We propose namespaced terms in a field until the specification lists its core terms, api among them. | main, open PRs |
examples/line-item-display.yaml | /reporting/available/1/delivery_mechanism | The example follows the text, which lists no terms for delivery_mechanism: it writes s3. We propose namespaced terms in a field until the specification lists its core terms, s3 among them. | main, open PRs |
examples/line-item-rewarded-video.yaml | /committed_metrics/0/basis/committed_metrics/1/basis | The example follows the text, which lists no terms for basis: it writes mrc. We propose namespaced terms in a field until the specification lists its core terms, mrc among them. | open PRs |
examples/line-item-rewarded-video.yaml | /creative_delivery/protocol | The example follows the text, which lists no terms for protocol: it writes vast_4_2. We propose namespaced terms in a field until the specification lists its core terms, vast_4_2 among them. | open PRs |
What it shapes
main: AssetApprovalStatus, AvailabilityBasis, AvailabilityUnit, CreativeDeliveryProtocol, ExternalReferenceRole, MeasurementBasis, Provenance, ReportingDeliveryMechanism, AssetsEntry.approval_status, AssetsEntry.asset_id, AssetsEntry.format_ref, AssetsEntry.submitted_at, AssetsEntry.url_or_tag, AudiencesOption.addressable_scale, AudiencesOption.id, AudiencesOption.name, AudiencesOption.provenance, AudiencesOption.taxonomy_ref, Availability.as_of, Availability.basis, Availability.granularity, Availability.quantity, Availability.type, Availability.unit, CommittedMetricsEntry.basis, CommittedMetricsEntry.metric, CommittedMetricsEntry.value, CreativeDelivery.endpoint, CreativeDelivery.method, CreativeDelivery.protocol, CreativeDelivery.secure_required, LineItem.external_references, ReportingOption.cadence, ReportingOption.delivery_mechanism, ReportingOption.feed_type, ReportingOption.latency, ReportingOption.metrics_provided
With the open PRs: AssetApprovalStatus, AvailabilityBasis, AvailabilityUnit, CreativeDeliveryProtocol, MeasurementBasis, Provenance, ReportingDeliveryMechanism, AssetsEntry.approval_status, AssetsEntry.asset_id, AssetsEntry.format_ref, AssetsEntry.submitted_at, AssetsEntry.url_or_tag, AudiencesOption.addressable_scale, AudiencesOption.id, AudiencesOption.name, AudiencesOption.provenance, AudiencesOption.taxonomy_ref, Availability.as_of, Availability.basis, Availability.granularity, Availability.quantity, Availability.type, Availability.unit, CommittedMetricsEntry.basis, CommittedMetricsEntry.metric, CommittedMetricsEntry.value, CreativeDelivery.endpoint, CreativeDelivery.method, CreativeDelivery.protocol, CreativeDelivery.secure_required, LineItem.external_references, ReportingOption.cadence, ReportingOption.delivery_mechanism, ReportingOption.feed_type, ReportingOption.latency, ReportingOption.metrics_provided