OpenProposal 3.0 JSON Schema Unofficial

Decision records · Selectable and settable fields

D-046 What names an object option in included[] and the pricing keys, and must a property's or an audience option's id be present?

Gap Decision 16 on the supporting page of #121. Cited on main and with the open PRs.

What the schemas do

An object option is named by its id. Every object option carries one, required: the identity the seller mints for it.

Options

  • required-id Chosen

    An object option is named by its id. Every object option carries one, required: the identity the seller mints for it.

  • own-member

    Each option is named by a member of its own that sets it apart, such as a measurement source's vendor or a report's feed_type.

  • optional-id

    An object option may carry id, and one without it can't be named in included[] or pricing.

Why

§ 3.1 keys pricing by option_id, and included[] lists which options are in the base rate, so every option that can be included or priced needs a name. A string option is its own name. The text doesn't say what names an object option, and the property and audience options write id with no presence. A member of an option's own, such as vendor or feed_type, isn't unique: a seller can offer one vendor with two attribution windows, or one feed type at two cadences. An optional id leaves an option that included[] and pricing can't name. So an object option is named by its id, which it carries, required: the constructor gives it, as a rule of the selectable template, to each object type that is an option, and the mapping keeps the members the text writes. The property and audience options keep the id they write and make it required, and the cancellation and exclusivity options, whose members the text doesn't state, carry it too. An option given as a catalog_ref has no id (D-007). The id is a UUID, as every ID a party mints is (D-037). Giving an id to the production, measurement source, and reporting options, whose members the text lists without one, changes what the text settles, so that part is a change we propose (D-047).

What we ask the specification to state

Say that included[] and the pricing keys name an object option by its id. Mark the id of a property and an audience option REQUIRED. Give the cancellation and exclusivity options an id once their members are defined.

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.2, the properties row's description: the inline object L225 at 44dfaaf
    { id, name, domains, supported_formats }
  • § 5.3, the audiences row's description: the inline object L233 at 44dfaaf
    { id, name, taxonomy_ref, provenance, addressable_scale }
  • § 5.6, the cancellation_policy row L280 at 44dfaaf
    cancellation_policy | Object | selectable | available[] of cancellation rights with pricing per option
  • § 5.6, the exclusivity row L281 at 44dfaaf
    exclusivity | Object | selectable | available[] of exclusivity terms with pricing

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.2, the properties row's description: the inline object L225 in #17
    { id, name, domains, apps, supported_formats }
  • § 5.3, the audiences row's description: the inline object L226 on main at 981a74e
    { id, name, taxonomy_ref, provenance, addressable_scale }
  • § 5.6, the cancellation_policy row L273 on main at 981a74e
    cancellation_policy | Object | selectable | available[] of cancellation rights with pricing per option
  • § 5.6, the exclusivity row L274 on main at 981a74e
    exclusivity | Object | selectable | available[] of exclusivity terms with pricing

What it shapes

main: AudiencesOption, CancellationPolicyOption, ExclusivityOption, MeasurementSourceOption, ProductionOption, PropertiesOption, ReportingOption, AudiencesOption.addressable_scale, AudiencesOption.id, AudiencesOption.name, AudiencesOption.provenance, AudiencesOption.taxonomy_ref, LineItem.cancellation_policy, LineItem.exclusivity, LineItemSummaryFormatsSelection.included, LineItemSummaryPropertiesOption.name, PropertiesOption.domains, PropertiesOption.id, PropertiesOption.name, PropertiesOption.supported_formats

With the open PRs: AudiencesOption, CancellationPolicyOption, ExclusivityOption, MeasurementSourceOption, ProductionOption, PropertiesOption, ReportingOption, AudiencesOption.addressable_scale, AudiencesOption.id, AudiencesOption.name, AudiencesOption.provenance, AudiencesOption.taxonomy_ref, LineItem.cancellation_policy, LineItem.exclusivity, LineItemSummaryFormatsSelection.included, LineItemSummaryPropertiesOption.name, PropertiesOption.apps, PropertiesOption.domains, PropertiesOption.id, PropertiesOption.name, PropertiesOption.supported_formats

The record's YAML file