Files
mesh-contracts/format/seat-definition.schema.json
T
jschoubben f31de828e9 SD-M2b: mesh-broker's events on mesh.seat.mesh-broker.said.<event>
The lead's ruling of 12:5x (design 25 § 12.3): mesh-broker's events ride the bus module's own stream, 30 days,
on mesh.seat.mesh-broker.said.<event>, outside the shared events stream's mesh.seat.*.event.>, so the bus never
refuses the two as overlapping.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 12:42:16 +01:00

434 lines
9.9 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>.<token>.<name>, the token event unless the family names its own"
},
"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
},
"token": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$",
"not": {
"enum": [
"event",
"accept",
"tool",
"call",
"proof"
]
},
"description": "the subject's word after the seat's name, event when absent: a family kept in a stream of its own names another, outside the shared events stream's mesh.seat.*.event.>"
}
}
},
"holder-events": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"subject"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*(\\.[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-]*(\\.[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
}
}
}
}
}