OpenProposal 3.0 JSON Schema Unofficial

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?

Proposal Decision 45 on the supporting page of #121. Cited on main and with the open PRs.

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

  • add-id Chosen

    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.

  • own-member

    No. Each option is named by a member the text lists for it, such as a measurement source's vendor or a report's feed_type.

  • as-written As written

    No. The options keep the members the text lists, and included[] and the pricing keys can't name them.

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 44dfaaf
    included[] | REQUIRED | Which options are in the base rate. MAY be empty
  • § 3.1, the pricing key row L146 at 44dfaaf
    pricing | OPTIONAL | Delta per option beyond those included, as { option_id: { delta_cpm | delta_flat | delta_pct } }
  • § 5.4, the production row L249 at 44dfaaf
    production | Object | selectable | Custom units. available[] of build options with pricing and lead_time; { custom_unit, build_owner, lead_time, cost }
  • § 5.4, the production row's description: the inline object L249 at 44dfaaf
    { custom_unit, build_owner, lead_time, cost }
  • § 5.7, the measurement_source row L321 at 44dfaaf
    measurement_source | Object | selectable | available[] of { vendor, attribution_window, qualifier } with pricing. Lets a buyer transact in its own currency
  • § 5.7, the measurement_source row's description: the inline object L321 at 44dfaaf
    { vendor, attribution_window, qualifier }
  • § 5.7, the reporting row L323 at 44dfaaf
    reporting | Object | selectable | available[] of { feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency } with pricing
  • § 5.7, the reporting row'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 981a74e
    included[] | REQUIRED | Which options are in the base rate. MAY be empty
  • § 3.1, the pricing key row L139 on main at 981a74e
    pricing | OPTIONAL | Delta per option beyond those included, as { option_id: { delta_cpm | delta_flat | delta_pct } }
  • § 5.4, the production row L242 on main at 981a74e
    production | Object | selectable | Custom units. available[] of build options with pricing and lead_time; { custom_unit, build_owner, lead_time, cost }
  • § 5.4, the production row's description: the inline object L242 on main at 981a74e
    { custom_unit, build_owner, lead_time, cost }
  • § 5.7, the measurement_source row L314 on main at 981a74e
    measurement_source | Object | selectable | available[] of { vendor, attribution_window, qualifier } with pricing. Lets a buyer transact in its own currency
  • § 5.7, the measurement_source row's description: the inline object L314 on main at 981a74e
    { vendor, attribution_window, qualifier }
  • § 5.7, the reporting row L316 on main at 981a74e
    reporting | Object | selectable | available[] of { feed_type: log_level | aggregate | none, cadence, delivery_mechanism, metrics_provided[], latency } with pricing
  • § 5.7, the reporting row'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

ExampleWhereWhyInput
examples/line-item-display.yaml/measurement_source/available/0The 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/1The 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/0The 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/0The 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/0The 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/1The 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/0The 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/0The 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/pricingThe 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_levelThe 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/0The 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/1The 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/0The 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/0The 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

The record's YAML file