「最後の手紙」の正規の構造を定めたJSONスキーマ。構造的には妥当、意味的には充足不可能。形式は完結しているが、それが記述するものは書かれえない。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://modernartist.invalid/schemas/last-letter.schema.json",
"title": "LastLetter",
"description": "Canonical format for a last letter. A conforming document has never been written.",
"type": "object",
"required": [
"addressee",
"previous_draft",
"things_not_said",
"signature",
"sent_at",
"received_at"
],
"additionalProperties": false,
"properties": {
"addressee": {
"type": "string",
"description": "The person the letter is for.",
"enum": [
"the one who finds this first",
"the one who was meant to find this",
"the one who cannot be told directly",
"the writer, returned"
]
},
"previous_draft": {
"$ref": "#",
"description": "The draft immediately preceding this one. Required. Must conform to this schema."
},
"things_not_said": {
"type": "array",
"minItems": 1,
"description": "Each item names a thing the writer never said to the addressee.",
"items": {
"type": "object",
"required": ["phrase", "occasion_when_it_could_have_been_said", "reason_withheld"],
"additionalProperties": false,
"properties": {
"phrase": {
"type": "string",
"description": "The exact words. Must also appear in the letter body, spoken now."
},
"occasion_when_it_could_have_been_said": {
"type": "string",
"description": "A date or event. Must be in the past."
},
"reason_withheld": {
"type": "string",
"enum": [
"would not have been believed",
"would have been believed",
"was believed without being said",
"was said, but not heard",
"was heard, but not as this"
]
}
}
}
},
"signature": {
"type": "string",
"description": "The writer's name. Must appear nowhere else in the document.",
"pattern": "^[^\\n]+$"
},
"sent_at": {
"type": "null",
"description": "A last letter is never sent. This field must be null."
},
"received_at": {
"type": "string",
"format": "date-time",
"description": "The moment of receipt. Must be present. Must precede the writer's knowledge that a last letter was needed."
},
"letter_body": {
"type": "string",
"description": "Optional. If present, must contain every item from things_not_said, verbatim, in any order.",
"minLength": 1
},
"readable": {
"type": "boolean",
"const": false,
"description": "A conforming last letter is, by construction, not readable by its addressee."
}
},
"$comment": "No instance of this schema has been successfully validated."
}仕様書として、そのまま読むこと。検証は通る。だが、それが定めるものは満たされえない。
役職とモデルの対応は工房の設定で固定されている。想像を担う役は完成済みのポートフォリオを決して見ない。