Decision records · Changes we propose
D-047 Do the production, measurement source, and reporting options carry an id that included[] and the pricing keys name them by?
What we propose
Yes. Each of these options carries id, required, beside the members the text lists, and included[] and the pricing keys name the option by it.
As written
The production, measurement source, and reporting options have only the members the text lists, and no id, so included[] and the pricing keys can't name them.
The as-written variant takes the option as-written. Switch the type map to As written to see it.
Options
Why
The text lists the members of a production option, { custom_unit, build_owner, lead_time, cost }, of a measurement source, { vendor, attribution_window, qualifier }, and of a report, { feed_type, cadence, delivery_mechanism, metrics_provided[], latency }, and none is an id. An object option is named by its id (D-046), so these options can't be included or priced as the text writes them. None of the listed members names one option: a seller can offer one vendor with two attribution windows, or one feed type at two cadences, and two build options can share a custom unit. So each of these options carries id, required, beside the members the text lists, and the model gives it as it gives every object option its id. The schema departs from the text, which lists the members without one, and from the examples that follow it: the display example names a measurement source by its vendor and a report by its feed_type, and the audio example writes an id the text doesn't list.
What we ask the specification to change
Write id, REQUIRED, into the production, measurement source, and reporting options, so that included[] and the pricing keys name each option by it. The text lists these options' members without an id. The display example names a measurement source by its vendor, IAS, and a report by its feed_type, aggregate, as the text allows. A second source from one vendor, or a second report of one feed type, would need a name of its own.
The specification lines it rests on
Each line is quoted as the record pins it. Expand an item to read the quote.
main
§ 3.1, the
included[]key row L145 at 44dfaafincluded[]| REQUIRED | Which options are in the base rate. MAY be empty§ 3.1, the
pricingkey row L146 at 44dfaafpricing| OPTIONAL | Delta per option beyond those included, as{ option_id: { delta_cpm | delta_flat | delta_pct } }§ 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.4, the
productionrow's description: the inline object L249 at 44dfaaf{ custom_unit, build_owner, lead_time, cost }
§ 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
measurement_sourcerow's description: the inline object L321 at 44dfaaf{ vendor, attribution_window, qualifier }
§ 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.7, the
reportingrow's description: the inline object L323 at 44dfaaf{ feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency }
With the open PRs
§ 3.1, the
included[]key row L138 on main at 981a74eincluded[]| REQUIRED | Which options are in the base rate. MAY be empty§ 3.1, the
pricingkey row L139 on main at 981a74epricing| OPTIONAL | Delta per option beyond those included, as{ option_id: { delta_cpm | delta_flat | delta_pct } }§ 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.4, the
productionrow's description: the inline object L242 on main at 981a74e{ custom_unit, build_owner, lead_time, cost }
§ 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
measurement_sourcerow's description: the inline object L314 on main at 981a74e{ vendor, attribution_window, qualifier }
§ 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.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 }
Examples that follow the text, not this change
| Example | Where | Why | Input |
|---|---|---|---|
examples/line-item-display.yaml | /measurement_source/available/0 | The example follows the text, which lists a measurement source option's members as vendor, attribution_window, and qualifier: this option, from IAS, has no id. We propose an id, REQUIRED, on every object option, so that included[] and the pricing keys name the option by it. | main, open PRs |
examples/line-item-display.yaml | /measurement_source/available/1 | The example follows the text, which lists a measurement source option's members as vendor, attribution_window, and qualifier: this option, from DoubleVerify, has no id. We propose an id, REQUIRED, on every object option, so that included[] and the pricing keys name the option by it. | main, open PRs |
examples/line-item-display.yaml | /measurement_source/included/0 | The example follows the text, which gives a measurement source option no id: included[] names the option by its vendor, IAS, which no option of available[] carries as its id. We propose an id on every object option, a UUID as for every ID a party mints, so that included[] names the option by that UUID. | main, open PRs |
examples/line-item-display.yaml | /measurement_source/included/0 | The example follows the text, which gives a measurement source option no id: included[] names the option by its vendor, IAS, which no option of available[] carries as its id. We propose an id on every object option, a UUID as for every ID a party mints, so that included[] names the option by that UUID. | main, open PRs |
examples/line-item-display.yaml | /reporting/available/0 | The example follows the text, which lists a reporting option's members without an id: this aggregate report has none. We propose an id, REQUIRED, on every object option, so that included[] and the pricing keys name the option by it. | main, open PRs |
examples/line-item-display.yaml | /reporting/available/1 | The example follows the text, which lists a reporting option's members without an id: this log_level report has none. We propose an id, REQUIRED, on every object option, so that included[] and the pricing keys name the option by it. | main, open PRs |
examples/line-item-display.yaml | /reporting/included/0 | The example follows the text, which gives a reporting option no id: included[] names the option by its feed_type, aggregate, which no option of available[] carries as its id. We propose an id on every object option, a UUID as for every ID a party mints, so that included[] names the option by that UUID. | main, open PRs |
examples/line-item-display.yaml | /reporting/included/0 | The example follows the text, which gives a reporting option no id: included[] names the option by its feed_type, aggregate, which no option of available[] carries as its id. We propose an id on every object option, a UUID as for every ID a party mints, so that included[] names the option by that UUID. | main, open PRs |
examples/line-item-display.yaml | /reporting/pricing | The example follows the text, which gives a reporting option no id: the pricing keys name the option by its feed_type, log_level. We propose an id on every object option, a UUID as for every ID a party mints, so that the pricing keys name the option by that UUID. | main, open PRs |
examples/line-item-display.yaml | /reporting/pricing/log_level | The example follows the text, which gives a reporting option no id: the pricing key names the option by its feed_type, log_level, which no option of available[] carries as its id. We propose an id on every object option, so that the pricing keys name the option by it. | main, open PRs |
examples/line-item-rewarded-video.yaml | /measurement_source/available/0 | The example follows the text, which lists a measurement source option's members as vendor, attribution_window, and qualifier: this option, from IAS, has no id. We propose an id, REQUIRED, on every object option, so that included[] and the pricing keys name the option by it. | open PRs |
examples/line-item-rewarded-video.yaml | /measurement_source/available/1 | The example follows the text, which lists a measurement source option's members as vendor, attribution_window, and qualifier: this option, from DoubleVerify, has no id. We propose an id, REQUIRED, on every object option, so that included[] and the pricing keys name the option by it. | open PRs |
examples/line-item-rewarded-video.yaml | /measurement_source/included/0 | The example follows the text, which gives a measurement source option no id: included[] names the option by its vendor, IAS, which no option of available[] carries as its id. We propose an id on every object option, a UUID as for every ID a party mints, so that included[] names the option by that UUID. | open PRs |
examples/line-item-rewarded-video.yaml | /measurement_source/included/0 | The example follows the text, which gives a measurement source option no id: included[] names the option by its vendor, IAS, which no option of available[] carries as its id. We propose an id on every object option, a UUID as for every ID a party mints, so that included[] names the option by that UUID. | open PRs |
What it shapes
main: MeasurementSourceOption, ProductionOption, ReportingOption, LineItem.measurement_source, LineItem.production, LineItem.reporting, LineItemSummaryFormatsSelection.included, MeasurementSourceOption.attribution_window, MeasurementSourceOption.qualifier, MeasurementSourceOption.vendor, ProductionOption.build_owner, ProductionOption.cost, ProductionOption.custom_unit, ProductionOption.lead_time, ReportingOption.cadence, ReportingOption.delivery_mechanism, ReportingOption.feed_type, ReportingOption.latency, ReportingOption.metrics_provided
With the open PRs: MeasurementSourceOption, ProductionOption, ReportingOption, LineItem.measurement_source, LineItem.production, LineItem.reporting, LineItemSummaryFormatsSelection.included, MeasurementSourceOption.attribution_window, MeasurementSourceOption.qualifier, MeasurementSourceOption.vendor, ProductionOption.build_owner, ProductionOption.cost, ProductionOption.custom_unit, ProductionOption.lead_time, ReportingOption.cadence, ReportingOption.delivery_mechanism, ReportingOption.feed_type, ReportingOption.latency, ReportingOption.metrics_provided