{
  "titre": "Contrats — Widgets Grist",
  "description": "Les contrats déclaratifs que se partagent ces outils. Un producteur les écrit, un consommateur les lit, et aucun des deux n'a besoin de connaître l'autre. Ils sont faits pour être produits et interprétés par des agents autant que par des humains : le schéma est la contrainte de génération, pas la documentation.",
  "contrats": [
    {
      "nom": "FormDef",
      "version": "1.0",
      "schema": "https://nic01asfr.github.io/Widgets-Grist/schemas/formdef-1.0.schema.json",
      "porte": "La définition d'un formulaire : champs typés Grist, conditions d'affichage, cascades de références, filtres dynamiques.",
      "produit_par": [
        "grist_forms (builder)",
        "qgis2grist (depuis une couche QField)"
      ],
      "lu_par": [
        "grist_forms (runtime)"
      ],
      "empreinte": "sha256:4e23f4100ab3fe8c",
      "octets": 9056
    },
    {
      "nom": "Scene Manifest",
      "version": "0.2.2",
      "schema": "https://nic01asfr.github.io/Widgets-Grist/schemas/scene-manifest-0.2.2.schema.json",
      "porte": "La définition d’une scène cartographique : couches, symbolisation déclarative, contrôles, récit rejouable.",
      "produit_par": [
        "qgis2grist"
      ],
      "lu_par": [
        "Atlas"
      ],
      "empreinte": "sha256:3fd18b1c9db7aae2",
      "octets": 10633
    }
  ],
  "note": "Chaque adresse porte sa version : ciblez une version précise plutôt que « la dernière », sinon un contenu valide cesse de l'être sans que rien ne vous en avertisse.",
  "verifier_une_copie": "Chaque contrat porte une empreinte du fichier servi. Pour savoir si une copie locale a divergé, comparer son empreinte à celle-ci — il n'est pas nécessaire de rapatrier le schéma. L'empreinte change à chaque modification du contrat, y compris une correction de description."
}
