Decision records · Types the tables leave open
D-018 Which selectable and settable fields take a bare value in place of their full form?
What the schemas do
None. Each field takes its full form only. A seller-set value is the full form: one option in available[] and the same option in included[], or one value in allowed[].
Options
Why
§ 3.1, § 3.2, and § 5.5 let a field carry a bare value and treat it as seller-set, but they never say what a bare value is (D-008). For most fields any choice would invent structure: a bare geo could be one code or several, a bare frequency_cap would replace its max, and the examples write none. The full form states every seller-set value already. With no bare value, the constructors take no B, and the untagged fallback union of type rules § 8 doesn't occur.
What we ask the specification to state
State the type of the bare value for each selectable and settable field, or drop the fallback in § 3.1, § 3.2, and § 5.5.
The specification lines it rests on
Each line is quoted as the record pins it. Expand an item to read the quote.
main
§ 5.2, the
propertiesrow L225 at 44dfaafproperties| Object | selectable |available[]of{ id, name, domains, supported_formats },included[],pricing,max_select§ 5.2, the
environmentsrow L227 at 44dfaafenvironments| Object | selectable |available[]fromweb_desktop|web_mobile|app_mobile|ctv|dooh|audio_streaming§ 5.3, the
audiencesrow L233 at 44dfaafaudiences| Object | selectable |available[]of{ id, name, taxonomy_ref, provenance, addressable_scale },included[],pricingasdelta_cpmper option,max_select§ 5.3, the
activation_routerow L235 at 44dfaafactivation_route| Object | selectable |available[]frompublisher_side|clean_room|id_partner,included[],pricing§ 5.4, the
formatsrow L242 at 44dfaafformats| Object | selectable |available[]of registry format ids namespaced by channel (display/300x250,audio/host-read-30s),included[],pricing,max_select§ 5.4, the
productionrow L249 at 44dfaafproduction| Object | selectable | Custom units.available[]of build options withpricingandlead_time;{ custom_unit, build_owner, lead_time, cost }§ 5.5, the
georow L258 at 44dfaafgeo| Object | settable |allowed[]of geo codes the buyer may select within§ 5.5, the
devicerow L259 at 44dfaafdevice| Object | settable |allowed[]of device categories§ 5.5, the
daypartrow L260 at 44dfaafdaypart| Object | settable |allowed[]of time windows§ 5.5, the
frequency_caprow L261 at 44dfaaffrequency_cap| Object | settable |{ max: { min, max }, period, basis: device | household | listener }. Basis matters: CTV typically caps at household, audio at listener§ 5.6, the
commitmentrow L277 at 44dfaafcommitment| Object | settable | The buyer's actual commitment. See 5.6.1§ 5.6, the
cancellation_policyrow L280 at 44dfaafcancellation_policy| Object | selectable |available[]of cancellation rights withpricingper option§ 5.6, the
exclusivityrow L281 at 44dfaafexclusivity| Object | selectable |available[]of exclusivity terms withpricing§ 5.7, the
measurement_sourcerow L321 at 44dfaafmeasurement_source| Object | selectable |available[]of{ vendor, attribution_window, qualifier }withpricing. Lets a buyer transact in its own currency§ 5.7, the
shortfall_remedyrow L322 at 44dfaafshortfall_remedy| Object | selectable |available[]frommakegood|credit|none, plusremedy_terms§ 5.7, the
reportingrow L323 at 44dfaafreporting| Object | selectable |available[]of{ feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }withpricing§ 5.9, the
transaction_mechanismrow L339 at 44dfaaftransaction_mechanism| Object | selectable |available[]fromDIRECT_IO|PROGRAMMATIC_GUARANTEED|PREFERRED_DEAL|PRIVATE_AUCTION|OPEN_AUCTION. A seller MAY offer the same inventory through more than one§ 3.1, a requirement L149 at 44dfaaf
A field marked
selectablethat carries a bare value and noavailable[]MUST be treated asseller-set.§ 3.2, a requirement L161 at 44dfaaf
A field marked
settablethat carries a bare value and no bounds MUST be treated asseller-set.
With the open PRs
§ 5.2, the
propertiesrow L225 in #17properties| Object | selectable |available[]of{ id, name, domains, apps, supported_formats },included[],pricing,max_select. Each property MUST carrydomains,appsor both§ 5.2, the
environmentsrow L257 in #119environments| Object | selectable |available[]fromweb_desktop|web_mobile|app_mobile|ctv|dooh, each defined in 5.2.1§ 5.3, the
audiencesrow L226 on main at 981a74eaudiences| Object | selectable |available[]of{ id, name, taxonomy_ref, provenance, addressable_scale },included[],pricingasdelta_cpmper option,max_select§ 5.3, the
activation_routerow L228 on main at 981a74eactivation_route| Object | selectable |available[]frompublisher_side|clean_room|id_partner,included[],pricing§ 5.4, the
formatsrow L235 on main at 981a74eformats| Object | selectable |available[]of registry format ids namespaced by channel (display/300x250,audio/host-read-30s),included[],pricing,max_select§ 5.4, the
productionrow L242 on main at 981a74eproduction| Object | selectable | Custom units.available[]of build options withpricingandlead_time;{ custom_unit, build_owner, lead_time, cost }§ 5.5, the
georow L260 in #72geo| Object | selectable |available[]of geo codes withincluded[],pricingdeltas andmax_select(§ 3.1), for a line item priced by market. Ageothat declares onlyallowed[]issettable. See below§ 5.5, the
devicerow L252 on main at 981a74edevice| Object | settable |allowed[]of device categories§ 5.5, the
daypartrow L260 in #123daypart| Object | settable |allowed[]of{ days[], start, end }:days[]frommonday|tuesday|wednesday|thursday|friday|saturday|sunday, HH:MM civil time,endexclusive, up to24:00§ 5.5, the
frequency_caprow L254 on main at 981a74efrequency_cap| Object | settable |{ max: { min, max }, period, basis: device | household | listener }. Basis matters: CTV typically caps at household, audio at listener§ 5.6, the
commitmentrow L270 on main at 981a74ecommitment| Object | settable | The buyer's actual commitment. See 5.6.1§ 5.6, the
cancellation_policyrow L273 on main at 981a74ecancellation_policy| Object | selectable |available[]of cancellation rights withpricingper option§ 5.6, the
exclusivityrow L274 on main at 981a74eexclusivity| Object | selectable |available[]of exclusivity terms withpricing§ 5.7, the
measurement_sourcerow L314 on main at 981a74emeasurement_source| Object | selectable |available[]of{ vendor, attribution_window, qualifier }withpricing. Lets a buyer transact in its own currency§ 5.7, the
shortfall_remedyrow L315 on main at 981a74eshortfall_remedy| Object | selectable |available[]frommakegood|credit|none, plusremedy_terms§ 5.7, the
reportingrow L316 on main at 981a74ereporting| Object | selectable |available[]of{ feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }withpricing§ 5.9, the
transaction_mechanismrow L332 on main at 981a74etransaction_mechanism| Object | selectable |available[]fromDIRECT_IO|PROGRAMMATIC_GUARANTEED|PREFERRED_DEAL|PRIVATE_AUCTION|OPEN_AUCTION. A seller MAY offer the same inventory through more than one§ 3.1, a requirement L142 on main at 981a74e
A field marked
selectablethat carries a bare value and noavailable[]MUST be treated asseller-set.§ 3.2, a requirement L154 on main at 981a74e
A field marked
settablethat carries a bare value and no bounds MUST be treated asseller-set.
What it shapes
main: LineItem.activation_route, LineItem.audiences, LineItem.cancellation_policy, LineItem.commitment, LineItem.daypart, LineItem.device, LineItem.environments, LineItem.exclusivity, LineItem.formats, LineItem.frequency_cap, LineItem.geo, LineItem.measurement_source, LineItem.production, LineItem.properties, LineItem.reporting, LineItem.shortfall_remedy, LineItem.transaction_mechanism
With the open PRs: LineItem.activation_route, LineItem.audiences, LineItem.cancellation_policy, LineItem.commitment, LineItem.daypart, LineItem.device, LineItem.environments, LineItem.exclusivity, LineItem.formats, LineItem.frequency_cap, LineItem.geo, LineItem.measurement_source, LineItem.production, LineItem.properties, LineItem.reporting, LineItem.shortfall_remedy, LineItem.transaction_mechanism