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?
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
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_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
commitment_boundsrow L276 at 44dfaafcommitment_bounds| Object | seller-set | The envelope inside which a buyer may commit:{ min_impressions, max_impressions, min_budget, max_budget }§ 5.6, the
commitmentrow L277 at 44dfaafcommitment| Object | settable | The buyer's actual commitment. See 5.6.1§ 5.5, the
frequency_caprow'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
settableMUST declare its bounds: eitherallowed[](an enumerated set) ormin/max(a numeric or date range).
With the open PRs
§ 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
commitment_boundsrow L269 on main at 981a74ecommitment_bounds| Object | seller-set | The envelope inside which a buyer may commit:{ min_impressions, max_impressions, min_budget, max_budget }§ 5.6, the
commitmentrow L270 on main at 981a74ecommitment| Object | settable | The buyer's actual commitment. See 5.6.1§ 5.5, the
frequency_caprow'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
settableMUST declare its bounds: eitherallowed[](an enumerated set) ormin/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