Files
mesh-contracts/format/seat-definition.schema.json
T
jschoubben 166aad0a99 SD-M1: the seat definition's format and its own schema (ADR 0608 §1, design 26)
One seat.json per seat at the whole grain or the seat list's, parts taken in whole, fixtures as data, an index for the
seat list's reading order; read strictly, at most 256 KiB.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 11:41:29 +01:00

420 lines
9.3 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.novox.be/novox/mesh-contracts/format/seat-definition.schema.json",
"title": "A seat's definition (novox/hq ADR 0608 \u00a71, design 26), format 1",
"description": "One file per seat, seats/<seat>/seat.json. A whole definition (grain whole) gives every verb's input and answer, every message's body and where its events are kept; one at the seat list's grain (seat-list) holds what mesh-sdk's compiled seat list held (ADR 0613 \u00a72). At most 256 KiB. Read strictly: a field not named here is refused.",
"type": "object",
"additionalProperties": false,
"required": [
"format",
"seat",
"scope",
"grain",
"decision"
],
"properties": {
"format": {
"const": 1
},
"seat": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*[a-z0-9]$"
},
"scope": {
"enum": [
"mesh",
"node"
]
},
"grain": {
"enum": [
"whole",
"seat-list"
]
},
"decision": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"holder-declares": {
"type": "boolean",
"description": "the seat is not in the compiled seat list; its holder's manifest declares it"
},
"delivers": {
"type": "string"
},
"replicated": {
"type": "boolean"
},
"pulled-by-kind": {
"type": "boolean"
},
"yields": {
"type": "boolean"
},
"held-by-the-engine": {
"type": "boolean"
},
"includes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"description": "parts/<name>.json taken in whole"
},
"verbs": {
"type": "array",
"items": {
"$ref": "#/$defs/verb"
}
},
"accepts": {
"type": "array",
"items": {
"$ref": "#/$defs/message"
}
},
"events": {
"type": "array",
"items": {
"$ref": "#/$defs/message"
},
"description": "published on mesh.seat.<seat>.event.<name>"
},
"family": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"max-age-days"
],
"properties": {
"name": {
"type": "string"
},
"max-age-days": {
"type": "integer",
"minimum": 1
},
"max-mib": {
"type": "integer",
"minimum": 1
}
}
},
"holder-events": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"subject"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"subject": {
"type": "string"
},
"family": {
"type": "string"
},
"body": {
"type": "object",
"description": "a JSON Schema"
}
}
},
"description": "the holder's own events listed beside the seat, keeping the holder's subjects (ADR 0620 \u00a72)"
},
"records": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"key": {
"type": "string"
},
"value": {
"type": "object",
"description": "a JSON Schema"
}
}
}
},
"provisions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"form"
],
"properties": {
"name": {
"type": "string"
},
"form": {
"type": "object",
"description": "a JSON Schema"
}
}
}
},
"receives": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
},
"comment": {
"type": "string"
},
"dirs": {
"type": "boolean"
},
"offered": {
"type": "boolean"
},
"shape": {
"type": "object",
"additionalProperties": false,
"properties": {
"places": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"field"
],
"properties": {
"field": {
"type": "string"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"order": {
"type": "string"
},
"examples": {
"type": "array",
"items": {
"type": "object"
}
},
"text": {
"type": "boolean"
}
}
}
}
}
},
"paths": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"pattern": "^/"
},
"steps-back-for": {
"type": "string"
}
}
}
},
"defs": {
"type": "object",
"additionalProperties": {
"type": "object",
"description": "a JSON Schema"
}
}
},
"$defs": {
"verb": {
"type": "object",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"description": {
"type": "string"
},
"optional": {
"type": "boolean"
},
"replaces": {
"type": "array",
"items": {
"type": "string"
}
},
"input": {
"type": "object",
"description": "a JSON Schema"
},
"answer": {
"type": "object",
"description": "a JSON Schema"
},
"callers": {
"type": "string"
}
}
},
"message": {
"type": "object",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"body": {
"type": "object",
"description": "a JSON Schema"
},
"by-caller": {
"type": "boolean"
}
}
},
"part": {
"description": "parts/<name>.json",
"type": "object",
"additionalProperties": false,
"required": [
"format",
"part"
],
"properties": {
"format": {
"const": 1
},
"part": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"description": {
"type": "string"
},
"verbs": {
"type": "array",
"items": {
"$ref": "#/$defs/verb"
}
},
"events": {
"type": "array",
"items": {
"$ref": "#/$defs/message"
}
},
"defs": {
"type": "object",
"additionalProperties": {
"type": "object",
"description": "a JSON Schema"
}
}
}
},
"fixtures": {
"description": "seats/<seat>/fixtures/*.json: data, never functions",
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"of",
"given"
],
"properties": {
"name": {
"type": "string"
},
"of": {
"type": "string",
"pattern": "^(verb:[a-z][a-z0-9-]*\\.(input|answer)|accept:[a-z][a-z0-9-]*|event:[a-z][a-z0-9-]*|holder-event:[a-z][a-z0-9-]*)$"
},
"subject": {
"type": "string"
},
"given": {},
"wire": {},
"why": {
"type": "string"
}
}
}
},
"index": {
"description": "seats/index.json: the seat list's reading order",
"type": "object",
"additionalProperties": false,
"required": [
"format",
"seats"
],
"properties": {
"format": {
"const": 1
},
"seats": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
}
}
}
}
}