OpenProposal 3.0 JSON Schema Unofficial

Decision records · Types the tables leave open

D-021 What type does a settable field take when its bounds aren't in the field itself?

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

What the schemas do

The field's own object. commitment is the object of § 5.6.1, whose bounds are commitment_bounds. frequency_cap is its inline object, whose bounds are the range in max.

Options

  • the-object Chosen

    The field's own object. commitment is the object of § 5.6.1, whose bounds are commitment_bounds. frequency_cap is its inline object, whose bounds are the range in max.

  • settable-copy

    A Settable copy of the object, with allowed[] of whole commitments or caps.

Why

§ 3.2 says a settable field declares allowed[] or min / max. commitment doesn't: it is "the buyer's actual commitment", with the keys of § 5.6.1, and commitment_bounds holds the envelope it must fit. frequency_cap carries its bounds inside its max member, a { min, max } range (D-011). Wrapping either object in Settable would make a buyer choose among whole objects, which neither field means, and would nest a range inside a settable structure. So each takes its own object, and the bounds are where the specification puts them.

What we ask the specification to state

Say how commitment and frequency_cap meet § 3.2: name commitment_bounds as commitment's bounds, and say that a frequency_cap's bounds are the range in max.

The specification lines it rests on

Each line is quoted as the record pins it. Expand an item to read the quote.

main

  • § 5.5, the frequency_cap row L261 at 44dfaaf
    frequency_cap | Object | settable | { max: { min, max }, period, basis: device | household | listener }. Basis matters: CTV typically caps at household, audio at listener
  • § 5.6, the commitment_bounds row L276 at 44dfaaf
    commitment_bounds | Object | seller-set | The envelope inside which a buyer may commit: { min_impressions, max_impressions, min_budget, max_budget }
  • § 5.6, the commitment row L277 at 44dfaaf
    commitment | Object | settable | The buyer's actual commitment. See 5.6.1
  • § 5.5, the frequency_cap row's description: the inline object L261 at 44dfaaf
    { max: { min, max }, period, basis: device | household | listener }
  • § 3.2, a requirement L158 at 44dfaaf
    Every field marked settable MUST declare its bounds: either allowed[] (an enumerated set) or min / max (a numeric or date range).

With the open PRs

  • § 5.5, the frequency_cap row L254 on main at 981a74e
    frequency_cap | Object | settable | { max: { min, max }, period, basis: device | household | listener }. Basis matters: CTV typically caps at household, audio at listener
  • § 5.6, the commitment_bounds row L269 on main at 981a74e
    commitment_bounds | Object | seller-set | The envelope inside which a buyer may commit: { min_impressions, max_impressions, min_budget, max_budget }
  • § 5.6, the commitment row L270 on main at 981a74e
    commitment | Object | settable | The buyer's actual commitment. See 5.6.1
  • § 5.5, the frequency_cap row's description: the inline object L254 on main at 981a74e
    { max: { min, max }, period, basis: device | household | listener }
  • § 3.2, a requirement L151 on main at 981a74e
    Every field marked settable MUST declare its bounds: either allowed[] (an enumerated set) or min / max (a numeric or date range).

What it shapes

main: FrequencyCap, FrequencyCap.basis, FrequencyCap.max, FrequencyCap.period, LineItem.commitment, LineItem.commitment_bounds, LineItem.frequency_cap

With the open PRs: FrequencyCap, FrequencyCap.basis, FrequencyCap.max, FrequencyCap.period, LineItem.commitment, LineItem.commitment_bounds, LineItem.frequency_cap

The record's YAML file