Decision records · Types the tables leave open
D-012 Is mixed an eighth marker, and may an implementation add markers of its own?
What the schemas do
The markers are the seven of § 3, a closed list. A mixed field has no marker of its own: each of its sub-fields or member objects carries one.
Options
Why
§ 3 says every field carries exactly one marker and defines seven. The two fields marked mixed state their members' markers instead: each pricing[] sub-field has a row with its own marker, and buyer_requirements says its first object is seller-set and its second is supplied. So mixed summarizes the members; it isn't a rule of its own. A marker is a mutability rule that every SDK enforces between two versions, and an unknown marker can't be enforced, so the list is closed. The model keeps the seven as the kernel vocabulary Marker, whose terms the marker rows define, and the rules for each marker belong to it.
What we ask the specification to state
Either define mixed in § 3 as "the field's members carry their own markers", or give pricing[] and buyer_requirements rows for their members. Each row carries one marker, as pricing[] already has. State that the seven markers are the complete list.
The specification lines it rests on
Each line is quoted as the record pins it. Expand an item to read the quote.
main
§ 5.6, the
pricing[]row L267 at 44dfaafpricing[]| Array[Object] | mixed | See below§ 5.9, the
buyer_requirementsrow L342 at 44dfaafbuyer_requirements| Object | mixed |{ seat_required, dsp_allowed[] }are seller-set;{ dsp_seat_id, dsp_id, seat_owner_entity }are supplied§ 3, the
immutablemarker row L121 at 44dfaafimmutable| Set once at creation. Neither party may change it.§ 3, the
seller-setmarker row L122 at 44dfaafseller-set| The seller sets it and MAY revise it while status isdraftorpublished. The buyer cannot change it directly.§ 3, the
selectablemarker row L123 at 44dfaafselectable| The buyer chooses from a seller-declared set. Each option MAY carry a price delta. Resolves without seller assent.§ 3, the
settablemarker row L124 at 44dfaafsettable| The buyer supplies a value within seller-declared bounds. Resolves without seller assent.§ 3, the
suppliedmarker row L125 at 44dfaafsupplied| The buyer provides data or an artifact. The seller does not pre-populate it.§ 3, the
requestablemarker row L126 at 44dfaafrequestable| The buyer MAY ask for a value outside the declared space. Requires explicit seller assent.§ 3, the
derivedmarker row L127 at 44dfaafderived| Computed from other fields. Neither party sets it directly.§ 5.9, the
buyer_requirementsrow's description: the inline object L342 at 44dfaaf{ seat_required, dsp_allowed[] }
§ 5.9, the
buyer_requirementsrow's description: the inline object 2 L342 at 44dfaaf{ dsp_seat_id, dsp_id, seat_owner_entity }
With the open PRs
§ 5.6, the
pricing[]row L260 on main at 981a74epricing[]| Array[Object] | mixed | See below§ 5.9, the
buyer_requirementsrow L335 on main at 981a74ebuyer_requirements| Object | mixed |{ seat_required, dsp_allowed[] }are seller-set;{ dsp_seat_id, dsp_id, seat_owner_entity }are supplied§ 3, the
immutablemarker row L114 on main at 981a74eimmutable| Set once at creation. Neither party may change it.§ 3, the
seller-setmarker row L115 on main at 981a74eseller-set| The seller sets it and MAY revise it while status isdraftorpublished. The buyer cannot change it directly.§ 3, the
selectablemarker row L116 on main at 981a74eselectable| The buyer chooses from a seller-declared set. Each option MAY carry a price delta. Resolves without seller assent.§ 3, the
settablemarker row L117 on main at 981a74esettable| The buyer supplies a value within seller-declared bounds. Resolves without seller assent.§ 3, the
suppliedmarker row L118 on main at 981a74esupplied| The buyer provides data or an artifact. The seller does not pre-populate it.§ 3, the
requestablemarker row L119 on main at 981a74erequestable| The buyer MAY ask for a value outside the declared space. Requires explicit seller assent.§ 3, the
derivedmarker row L120 on main at 981a74ederived| Computed from other fields. Neither party sets it directly.§ 5.9, the
buyer_requirementsrow's description: the inline object L335 on main at 981a74e{ seat_required, dsp_allowed[] }
§ 5.9, the
buyer_requirementsrow's description: the inline object 2 L335 on main at 981a74e{ dsp_seat_id, dsp_id, seat_owner_entity }
What it shapes
main: BuyerRequirements, Marker, BuyerRequirements.dsp_allowed, BuyerRequirements.dsp_id, BuyerRequirements.dsp_seat_id, BuyerRequirements.seat_owner_entity, BuyerRequirements.seat_required, LineItem.buyer_requirements, LineItem.pricing
With the open PRs: BuyerRequirements, Marker, BuyerRequirements.dsp_allowed, BuyerRequirements.dsp_id, BuyerRequirements.dsp_seat_id, BuyerRequirements.seat_owner_entity, BuyerRequirements.seat_required, LineItem.buyer_requirements, LineItem.pricing