OpenProposal 3.0 JSON Schema Unofficial

Decision records · Types the tables leave open

D-017 What does a field typed with two types joined by a slash, such as Timestamp/Offset, hold?

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

What the schemas do

Either type: an untagged union (anyOf) of the two named types, with Offset read as an ISO 8601 duration.

Options

  • union Chosen

    Either type: an untagged union (anyOf) of the two named types, with Offset read as an ISO 8601 duration.

  • first-type

    Only the first type.

Why

The slash is the specification's own way to write "either". Type rules § 8 already lists materials_due as an untagged union that draft 1 requires, and specifications (String/Object) is the same case. A Timestamp and an ISO 8601 duration are told apart by their format, and a string and an object by their JSON type. Offset has no definition; a duration is the only reading in which an offset is written without a reference point, and the kernel's Duration already writes one.

What we ask the specification to state

Tag the two forms of materials_due and say what an Offset counts from, such as the flight start. The display example writes a date, 2026-09-24, which is neither form.

The specification lines it rests on

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

main

  • § 4.2, the specifications row L201 at 44dfaaf
    specifications | String/Object | seller-set | Structured detail at media-kit depth
  • § 5.4, the materials_due row L247 at 44dfaaf
    materials_due | Timestamp/Offset | requestable | Deadline for creative to land. A buyer MAY request a later date

With the open PRs

  • § 4.2, the specifications row L194 on main at 981a74e
    specifications | String/Object | seller-set | Structured detail at media-kit depth
  • § 5.4, the materials_due row L240 on main at 981a74e
    materials_due | Timestamp/Offset | requestable | Deadline for creative to land. A buyer MAY request a later date

Examples that disagree with the text

ExampleWhereWhyInput
examples/line-item-display.yaml/materials_duematerials_due is Timestamp/Offset: an RFC 3339 date-time or an ISO 8601 duration. The example writes the calendar date 2026-09-24, which is neither. The example should write a date-time, or the Type should add a date.main, open PRs

What it shapes

main: MaterialsDue, Specifications, SpecificationsDetail, LineItem.materials_due, Proposal.specifications

With the open PRs: MaterialsDue, Specifications, SpecificationsDetail, LineItem.materials_due, Proposal.specifications

The record's YAML file