OpenProposal 3.0 JSON Schema Unofficial

Decision records · Types the tables leave open

D-012 Is mixed an eighth marker, and may an implementation add markers of its own?

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

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

  • members-carry-markers Chosen

    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.

  • eighth-marker

    mixed is an eighth marker, meaning that the field's members carry their own markers.

  • open-markers

    The markers are an open vocabulary that an implementation may extend with namespaced terms.

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 44dfaaf
    pricing[] | Array[Object] | mixed | See below
  • § 5.9, the buyer_requirements row L342 at 44dfaaf
    buyer_requirements | Object | mixed | { seat_required, dsp_allowed[] } are seller-set; { dsp_seat_id, dsp_id, seat_owner_entity } are supplied
  • § 3, the immutable marker row L121 at 44dfaaf
    immutable | Set once at creation. Neither party may change it.
  • § 3, the seller-set marker row L122 at 44dfaaf
    seller-set | The seller sets it and MAY revise it while status is draft or published. The buyer cannot change it directly.
  • § 3, the selectable marker row L123 at 44dfaaf
    selectable | The buyer chooses from a seller-declared set. Each option MAY carry a price delta. Resolves without seller assent.
  • § 3, the settable marker row L124 at 44dfaaf
    settable | The buyer supplies a value within seller-declared bounds. Resolves without seller assent.
  • § 3, the supplied marker row L125 at 44dfaaf
    supplied | The buyer provides data or an artifact. The seller does not pre-populate it.
  • § 3, the requestable marker row L126 at 44dfaaf
    requestable | The buyer MAY ask for a value outside the declared space. Requires explicit seller assent.
  • § 3, the derived marker row L127 at 44dfaaf
    derived | Computed from other fields. Neither party sets it directly.
  • § 5.9, the buyer_requirements row's description: the inline object L342 at 44dfaaf
    { seat_required, dsp_allowed[] }
  • § 5.9, the buyer_requirements row'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 981a74e
    pricing[] | Array[Object] | mixed | See below
  • § 5.9, the buyer_requirements row L335 on main at 981a74e
    buyer_requirements | Object | mixed | { seat_required, dsp_allowed[] } are seller-set; { dsp_seat_id, dsp_id, seat_owner_entity } are supplied
  • § 3, the immutable marker row L114 on main at 981a74e
    immutable | Set once at creation. Neither party may change it.
  • § 3, the seller-set marker row L115 on main at 981a74e
    seller-set | The seller sets it and MAY revise it while status is draft or published. The buyer cannot change it directly.
  • § 3, the selectable marker row L116 on main at 981a74e
    selectable | The buyer chooses from a seller-declared set. Each option MAY carry a price delta. Resolves without seller assent.
  • § 3, the settable marker row L117 on main at 981a74e
    settable | The buyer supplies a value within seller-declared bounds. Resolves without seller assent.
  • § 3, the supplied marker row L118 on main at 981a74e
    supplied | The buyer provides data or an artifact. The seller does not pre-populate it.
  • § 3, the requestable marker row L119 on main at 981a74e
    requestable | The buyer MAY ask for a value outside the declared space. Requires explicit seller assent.
  • § 3, the derived marker row L120 on main at 981a74e
    derived | Computed from other fields. Neither party sets it directly.
  • § 5.9, the buyer_requirements row's description: the inline object L335 on main at 981a74e
    { seat_required, dsp_allowed[] }
  • § 5.9, the buyer_requirements row'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

The record's YAML file