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?
What the schemas do
Either type: an untagged union (anyOf) of the two named types, with Offset read as an ISO 8601 duration.
Options
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
specificationsrow L201 at 44dfaafspecifications| String/Object | seller-set | Structured detail at media-kit depth§ 5.4, the
materials_duerow L247 at 44dfaafmaterials_due| Timestamp/Offset | requestable | Deadline for creative to land. A buyer MAY request a later date
With the open PRs
§ 4.2, the
specificationsrow L194 on main at 981a74especifications| String/Object | seller-set | Structured detail at media-kit depth§ 5.4, the
materials_duerow L240 on main at 981a74ematerials_due| Timestamp/Offset | requestable | Deadline for creative to land. A buyer MAY request a later date
Examples that disagree with the text
| Example | Where | Why | Input |
|---|---|---|---|
examples/line-item-display.yaml | /materials_due | materials_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