Vocabulaire des catalogues

Un contrat se lit nom → versions → N → revisions → R → fields. Le vocabulaire des champs est fermé, et c'est voulu : il est interprété par le moteur, jamais exécuté.

motoùsensexemple du chat
typerègle de champObligatoire. "string", "number" (fini), "boolean", "object", "array".ecrit: { type: "boolean", required: true }
requiredrègle de champLe champ doit être présent dans un payload de cette révision. Peut passer de faux à vrai d'une révision à l'autre, avec un default.texte: { type: "string", required: true, … }
patternstring seulementExpression régulière, source JavaScript. Vérifiée à la validation.ref: { pattern: "^[0-9a-f-]{36}$" }
enumprimitifsTableau non vide de valeurs admises, du type déclaré.event: { enum: ["connected", "resumed", "disconnected", "expired"] }
defaultrègle de champValeur de complétion à l'upcast, jamais à la validation. Nécessaire sur un champ requis ajouté en révision > 0. Interdit sur un membre de oneOf.(absent du chat, qui n'a que des révisions sans champ ajouté requis) ; color: { …, default: "black" } dans le tuto 5
fieldsrévision, ou champ objectLes sous-champs. Obligatoire sur tout objet : pas d'objet opaque.accord: { type: "object", fields: { pseudo: {…} } }
itemschamp arrayLa règle de chaque élément. Obligatoire.participants: { type: "array", items: { type: "object", fields: {…} } }
oneOfrévision, ou champ objectExactement un des champs listés est présent. Ses membres restent optionnels et sans default : l'upcast ne vérifie pas l'invariant, il ne doit pas pouvoir le casser.oneOf: ["accord", "refus"] ; oneOf: ["message", "historique"]
upcastFromversion N ≥ 2Comment un payload N−1 devient un payload N : rename (carte ancien→nouveau chemin), defaults (chemin→valeur, posé si absent), remove (liste de chemins). Le . est le séparateur de chemin, interdit dans les noms de champ.tuto 5 : rename: { "color": "style.color" }
examples / counterexamplescontratPreuves : { version: { révision: [payload] } } et { version: { révision: [{ reason, payload }] } }. Hors du hash de contenu.chaque contrat du chat

Ce que le vocabulaire ne permet pas, et pourquoi

Un contrat complet, lu dans le catalogue du chat