{
  "$id": "https://flexway.io/schema/v1/architecture.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Architecture model of a Flexway configuration (flexway.architecture.v1): routes as lines, policies as stations, shared resources as interchanges, refusals with their code. Derived from what a gateway publishes, never stored.",
  "properties": {
    "bricks": {
      "description": "Every resource the configuration names, once.",
      "items": {
        "additionalProperties": false,
        "properties": {
          "attributes": {
            "description": "The brick's facts as `/config` publishes them: never a secret nor a resolved reference.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "key": {
                  "description": "Key, dotted path below the brick's node.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "Key, dotted path below the brick's node.",
                    "fr": "Clé, chemin pointé sous le nœud de la brique."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "sensitive": {
                  "description": "True for a value a reader bound to one tenant does not see (an address).",
                  "type": "boolean",
                  "x-flexway-description": {
                    "en": "True for a value a reader bound to one tenant does not see (an address).",
                    "fr": "Vrai pour une valeur qu'un lecteur limité à un tenant ne voit pas (une adresse)."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "value": {
                  "description": "Value on one line; a masked value is written `***`.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "Value on one line; a masked value is written `***`.",
                    "fr": "Valeur sur une ligne ; une valeur masquée s'écrit `***`."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                }
              },
              "required": [
                "key",
                "sensitive",
                "value"
              ],
              "type": "object"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "The brick's facts as `/config` publishes them: never a secret nor a resolved reference.",
              "fr": "Faits de la brique tels que `/config` les publie : jamais un secret ni une référence résolue."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "id": {
            "description": "Unique identifier: kind and name, `upstream:orders`.",
            "type": "string",
            "x-flexway-description": {
              "en": "Unique identifier: kind and name, `upstream:orders`.",
              "fr": "Identifiant unique : sorte et nom, `upstream:orders`."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "kind": {
            "description": "The brick's kind.",
            "enum": [
              "issuer",
              "security_scheme",
              "api_keys",
              "client_certs",
              "host",
              "contract",
              "operation",
              "policy",
              "operation_cache",
              "upstream",
              "ai_backend",
              "ai_budget",
              "ai_override",
              "mcp_server"
            ],
            "type": "string",
            "x-flexway-description": {
              "en": "The brick's kind.",
              "fr": "Sorte de brique."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "line": {
            "description": "The node's line in the file, from the repository only.",
            "type": "integer",
            "x-flexway-description": {
              "en": "The node's line in the file, from the repository only.",
              "fr": "Ligne du nœud dans le fichier, depuis le dépôt seulement."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "locked": {
            "description": "True for a brick imposed by an imported fragment, read-only.",
            "type": "boolean",
            "x-flexway-description": {
              "en": "True for a brick imposed by an imported fragment, read-only.",
              "fr": "Vrai pour une brique imposée par un fragment importé, en lecture seule."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "name": {
            "description": "The brick's name, as the configuration writes it.",
            "type": "string",
            "x-flexway-description": {
              "en": "The brick's name, as the configuration writes it.",
              "fr": "Nom de la brique, tel qu'écrit dans la configuration."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "path": {
            "description": "YAML path of the source node (`upstreams.orders`), or contract and operation (`./orders.yaml#listOrders`).",
            "type": "string",
            "x-flexway-description": {
              "en": "YAML path of the source node (`upstreams.orders`), or contract and operation (`./orders.yaml#listOrders`).",
              "fr": "Chemin YAML du nœud source (`upstreams.orders`), ou contrat et opération (`./orders.yaml#listOrders`)."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "ref": {
            "description": "Key of the published reference that describes the brick (`flexway.schema.json`).",
            "type": "string",
            "x-flexway-description": {
              "en": "Key of the published reference that describes the brick (`flexway.schema.json`).",
              "fr": "Clé de la référence publiée qui décrit la brique (`flexway.schema.json`)."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "refusals": {
            "description": "What the brick can answer instead of the upstream.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "code": {
                  "description": "The refusal's problem code (RFC 9457), or the OpenAI envelope's for inference.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "The refusal's problem code (RFC 9457), or the OpenAI envelope's for inference.",
                    "fr": "Code de problème du refus (RFC 9457), ou de l'enveloppe OpenAI pour l'inférence."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "status": {
                  "description": "The refusal's HTTP status.",
                  "type": "integer",
                  "x-flexway-description": {
                    "en": "The refusal's HTTP status.",
                    "fr": "Statut HTTP du refus."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                }
              },
              "required": [
                "code",
                "status"
              ],
              "type": "object"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "What the brick can answer instead of the upstream.",
              "fr": "Ce que la brique peut répondre à la place de l'amont."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "shared": {
            "description": "True when more than one route names the brick: an interchange.",
            "type": "boolean",
            "x-flexway-description": {
              "en": "True when more than one route names the brick: an interchange.",
              "fr": "Vrai quand plus d'une route nomme la brique : une correspondance."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "status": {
            "description": "Status: served, modified, added, removed (a draft).",
            "enum": [
              "served",
              "modified",
              "added",
              "removed"
            ],
            "type": "string",
            "x-flexway-description": {
              "en": "Status: served, modified, added, removed (a draft).",
              "fr": "État : servi, modifié, ajouté, retiré (un brouillon)."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "tenant": {
            "description": "Tenant the brick is bound to (an `ai.overrides` entry); absent for every tenant.",
            "type": "string",
            "x-flexway-description": {
              "en": "Tenant the brick is bound to (an `ai.overrides` entry); absent for every tenant.",
              "fr": "Tenant auquel la brique est liée (entrée de `ai.overrides`) ; absent pour tous."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "type": {
            "description": "The brick's own type: a policy's type, an upstream's protocol, a security scheme's or a backend's kind.",
            "type": "string",
            "x-flexway-description": {
              "en": "The brick's own type: a policy's type, an upstream's protocol, a security scheme's or a backend's kind.",
              "fr": "Type propre : type d'une politique, protocole d'un amont, sorte d'un schéma de sécurité ou d'un backend."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "used_by": {
            "description": "How many routes name the brick.",
            "type": "integer",
            "x-flexway-description": {
              "en": "How many routes name the brick.",
              "fr": "Nombre de routes qui nomment la brique."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          }
        },
        "required": [
          "attributes",
          "id",
          "kind",
          "locked",
          "name",
          "refusals",
          "shared",
          "status",
          "used_by"
        ],
        "type": "object"
      },
      "type": "array",
      "x-flexway-description": {
        "en": "Every resource the configuration names, once.",
        "fr": "Chaque ressource nommée par la configuration, une fois."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "config_digest": {
      "description": "The configuration's `config_digest`, as a gateway publishes it (12 hexadecimal characters).",
      "pattern": "^([0-9a-f]{12})?$",
      "type": "string",
      "x-flexway-description": {
        "en": "The configuration's `config_digest`, as a gateway publishes it (12 hexadecimal characters).",
        "fr": "`config_digest` de la configuration, tel qu'une passerelle le publie (12 caractères hexadécimaux)."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "counts": {
      "additionalProperties": false,
      "description": "The model's totals, before any cut.",
      "properties": {
        "hosts": {
          "description": "Hosts, `*` included.",
          "type": "integer",
          "x-flexway-description": {
            "en": "Hosts, `*` included.",
            "fr": "Hôtes, `*` compris."
          },
          "x-flexway-reloadable": true,
          "x-flexway-since": "1.11.0"
        },
        "operations": {
          "description": "Served operations.",
          "type": "integer",
          "x-flexway-description": {
            "en": "Served operations.",
            "fr": "Opérations servies."
          },
          "x-flexway-reloadable": true,
          "x-flexway-since": "1.11.0"
        },
        "policies": {
          "description": "Named policies.",
          "type": "integer",
          "x-flexway-description": {
            "en": "Named policies.",
            "fr": "Politiques nommées."
          },
          "x-flexway-reloadable": true,
          "x-flexway-since": "1.11.0"
        },
        "shared": {
          "description": "Interchanges: bricks used by more than one route.",
          "type": "integer",
          "x-flexway-description": {
            "en": "Interchanges: bricks used by more than one route.",
            "fr": "Correspondances : briques utilisées par plus d'une route."
          },
          "x-flexway-reloadable": true,
          "x-flexway-since": "1.11.0"
        },
        "upstreams": {
          "description": "Declared upstreams.",
          "type": "integer",
          "x-flexway-description": {
            "en": "Declared upstreams.",
            "fr": "Amonts déclarés."
          },
          "x-flexway-reloadable": true,
          "x-flexway-since": "1.11.0"
        }
      },
      "type": "object",
      "x-flexway-description": {
        "en": "The model's totals, before any cut.",
        "fr": "Totaux du modèle, avant toute coupe."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "file": {
      "description": "The configuration file's path in the repository; absent from `/config`.",
      "type": "string",
      "x-flexway-description": {
        "en": "The configuration file's path in the repository; absent from `/config`.",
        "fr": "Chemin du fichier de configuration dans le dépôt ; absent depuis `/config`."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "links": {
      "description": "Links between bricks besides the routes' stations.",
      "items": {
        "additionalProperties": false,
        "properties": {
          "from": {
            "description": "Source brick.",
            "type": "string",
            "x-flexway-description": {
              "en": "Source brick.",
              "fr": "Brique de départ."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "kind": {
            "description": "Link kind: served, refused, event, uses.",
            "enum": [
              "served",
              "refused",
              "event",
              "uses"
            ],
            "type": "string",
            "x-flexway-description": {
              "en": "Link kind: served, refused, event, uses.",
              "fr": "Sorte de lien : servi, refusé, évènement, utilise."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "to": {
            "description": "Target brick.",
            "type": "string",
            "x-flexway-description": {
              "en": "Target brick.",
              "fr": "Brique d'arrivée."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "type": "array",
      "x-flexway-description": {
        "en": "Links between bricks besides the routes' stations.",
        "fr": "Liens entre briques en plus des stations des routes."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "routes": {
      "description": "Served operations, one line each, in a stable order (host, path, method).",
      "items": {
        "additionalProperties": false,
        "properties": {
          "builtin": {
            "description": "True for a built-in operation (inference, A2A).",
            "type": "boolean",
            "x-flexway-description": {
              "en": "True for a built-in operation (inference, A2A).",
              "fr": "Vrai pour une opération intégrée (inférence, A2A)."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "contract": {
            "description": "The contract file that declares the operation.",
            "type": "string",
            "x-flexway-description": {
              "en": "The contract file that declares the operation.",
              "fr": "Fichier du contrat qui déclare l'opération."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "forks": {
            "description": "The other termini the route may end at, and why.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "brick": {
                  "description": "The terminus's brick.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "The terminus's brick.",
                    "fr": "Brique du terminus."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "reason": {
                  "description": "`sensitive` (the sensitive header picks the internal backend) or `fallback`.",
                  "enum": [
                    "sensitive",
                    "fallback"
                  ],
                  "type": "string",
                  "x-flexway-description": {
                    "en": "`sensitive` (the sensitive header picks the internal backend) or `fallback`.",
                    "fr": "`sensitive` (l'en-tête sensible choisit le backend interne) ou `fallback` (repli)."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                }
              },
              "required": [
                "reason"
              ],
              "type": "object"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "The other termini the route may end at, and why.",
              "fr": "Autres terminus possibles, et pourquoi."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "group": {
            "description": "The host the line is drawn under: its first host.",
            "type": "string",
            "x-flexway-description": {
              "en": "The host the line is drawn under: its first host.",
              "fr": "Hôte sous lequel la ligne est dessinée : son premier hôte."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "hosts": {
            "description": "Hosts that serve the operation; `*` for the default contracts.",
            "items": {
              "type": "string"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "Hosts that serve the operation; `*` for the default contracts.",
              "fr": "Hôtes qui servent l'opération ; `*` pour les contrats par défaut."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "id": {
            "description": "The operation's identifier.",
            "type": "string",
            "x-flexway-description": {
              "en": "The operation's identifier.",
              "fr": "Identifiant de l'opération."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "method": {
            "description": "HTTP method.",
            "type": "string",
            "x-flexway-description": {
              "en": "HTTP method.",
              "fr": "Méthode HTTP."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "path": {
            "description": "Path template.",
            "type": "string",
            "x-flexway-description": {
              "en": "Path template.",
              "fr": "Gabarit de chemin."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "protocol": {
            "description": "The operation's protocol: `http` or `grpc`.",
            "type": "string",
            "x-flexway-description": {
              "en": "The operation's protocol: `http` or `grpc`.",
              "fr": "Protocole de l'opération : `http` ou `grpc`."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "rate_class": {
            "description": "Declared rate class.",
            "type": "string",
            "x-flexway-description": {
              "en": "Declared rate class.",
              "fr": "Classe de débit déclarée."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "removed": {
            "description": "Policies taken out of the chain by `!name`, and where.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "level": {
                  "description": "Level of the removal.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "Level of the removal.",
                    "fr": "Niveau du retrait."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "policy": {
                  "description": "The removed policy.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "The removed policy.",
                    "fr": "Politique retirée."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "source": {
                  "description": "What carries the removal at that level.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "What carries the removal at that level.",
                    "fr": "Ce qui porte le retrait à ce niveau."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                }
              },
              "type": "object"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "Policies taken out of the chain by `!name`, and where.",
              "fr": "Politiques retirées de la chaîne par `!nom`, et où."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "stations": {
            "description": "The decision chain in order: identity, policies, the operation's cache, the inference budget.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "brick": {
                  "description": "The station's brick.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "The station's brick.",
                    "fr": "Brique de la station."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "origins": {
                  "description": "Where the station is attached.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "level": {
                        "description": "Level: `global`, `host`, `route` or `operation`.",
                        "type": "string",
                        "x-flexway-description": {
                          "en": "Level: `global`, `host`, `route` or `operation`.",
                          "fr": "Niveau : `global`, `host`, `route` ou `operation`."
                        },
                        "x-flexway-reloadable": true,
                        "x-flexway-since": "1.11.0"
                      },
                      "source": {
                        "description": "What names the station at that level: the host, the route motif, the contract.",
                        "type": "string",
                        "x-flexway-description": {
                          "en": "What names the station at that level: the host, the route motif, the contract.",
                          "fr": "Ce qui nomme la station à ce niveau : l'hôte, le motif de route, le contrat."
                        },
                        "x-flexway-reloadable": true,
                        "x-flexway-since": "1.11.0"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array",
                  "x-flexway-description": {
                    "en": "Where the station is attached.",
                    "fr": "Où la station est attachée."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "phase": {
                  "description": "A policy's phase (`request`, `response`, `error`).",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "A policy's phase (`request`, `response`, `error`).",
                    "fr": "Phase d'une politique (`request`, `response`, `error`)."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "refusals": {
                  "description": "The branches that leave the line at this station.",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "code": {
                        "description": "The refusal's problem code.",
                        "type": "string",
                        "x-flexway-description": {
                          "en": "The refusal's problem code.",
                          "fr": "Code de problème du refus."
                        },
                        "x-flexway-reloadable": true,
                        "x-flexway-since": "1.11.0"
                      },
                      "status": {
                        "description": "The refusal's HTTP status.",
                        "type": "integer",
                        "x-flexway-description": {
                          "en": "The refusal's HTTP status.",
                          "fr": "Statut HTTP du refus."
                        },
                        "x-flexway-reloadable": true,
                        "x-flexway-since": "1.11.0"
                      }
                    },
                    "required": [
                      "code",
                      "status"
                    ],
                    "type": "object"
                  },
                  "type": "array",
                  "x-flexway-description": {
                    "en": "The branches that leave the line at this station.",
                    "fr": "Branches qui quittent la ligne à cette station."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "step": {
                  "description": "Step of the chain.",
                  "enum": [
                    "identity",
                    "policy",
                    "cache",
                    "budget"
                  ],
                  "type": "string",
                  "x-flexway-description": {
                    "en": "Step of the chain.",
                    "fr": "Étape de la chaîne."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                },
                "when": {
                  "description": "CEL condition as written; absent: always.",
                  "type": "string",
                  "x-flexway-description": {
                    "en": "CEL condition as written; absent: always.",
                    "fr": "Condition CEL telle qu'écrite ; absente : toujours."
                  },
                  "x-flexway-reloadable": true,
                  "x-flexway-since": "1.11.0"
                }
              },
              "required": [
                "brick",
                "origins",
                "refusals",
                "step"
              ],
              "type": "object"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "The decision chain in order: identity, policies, the operation's cache, the inference budget.",
              "fr": "Chaîne de décision dans l'ordre : identité, politiques, cache de l'opération, budget d'inférence."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "status": {
            "description": "The route's status: served, modified, added, removed.",
            "enum": [
              "served",
              "modified",
              "added",
              "removed"
            ],
            "type": "string",
            "x-flexway-description": {
              "en": "The route's status: served, modified, added, removed.",
              "fr": "État de la route : servie, modifiée, ajoutée, retirée."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "tags": {
            "description": "The contract's tags.",
            "items": {
              "type": "string"
            },
            "type": "array",
            "x-flexway-description": {
              "en": "The contract's tags.",
              "fr": "Étiquettes du contrat."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "terminus": {
            "description": "The brick the route ends at: an upstream, an inference backend.",
            "type": "string",
            "x-flexway-description": {
              "en": "The brick the route ends at: an upstream, an inference backend.",
              "fr": "Brique où la route aboutit : un amont, un backend d'inférence."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "tool": {
            "description": "The operation's MCP tool name, when it is one.",
            "type": "string",
            "x-flexway-description": {
              "en": "The operation's MCP tool name, when it is one.",
              "fr": "Nom d'outil MCP de l'opération, si elle en est un."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          }
        },
        "required": [
          "builtin",
          "forks",
          "group",
          "hosts",
          "id",
          "method",
          "path",
          "protocol",
          "removed",
          "stations",
          "status",
          "tags",
          "terminus"
        ],
        "type": "object"
      },
      "type": "array",
      "x-flexway-description": {
        "en": "Served operations, one line each, in a stable order (host, path, method).",
        "fr": "Opérations servies, une ligne chacune, dans un ordre stable (hôte, chemin, méthode)."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "schema": {
      "description": "The model's format, `flexway.architecture.v1`.",
      "enum": [
        "flexway.architecture.v1"
      ],
      "type": "string",
      "x-flexway-description": {
        "en": "The model's format, `flexway.architecture.v1`.",
        "fr": "Format du modèle, `flexway.architecture.v1`."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "source": {
      "description": "Where the model was read from: `repository` (the repository's files, lines and comments known) or `config` (a gateway's `/config`, secrets masked, no lines).",
      "enum": [
        "repository",
        "config"
      ],
      "type": "string",
      "x-flexway-description": {
        "en": "Where the model was read from: `repository` (the repository's files, lines and comments known) or `config` (a gateway's `/config`, secrets masked, no lines).",
        "fr": "Origine du modèle : `repository` (fichiers du dépôt, lignes et commentaires connus) ou `config` (`/config` d'une passerelle, secrets masqués, sans lignes)."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "truncated": {
      "description": "True when the routes past 5,000 were cut.",
      "type": "boolean",
      "x-flexway-description": {
        "en": "True when the routes past 5,000 were cut.",
        "fr": "Vrai quand les routes au-delà de 5 000 ont été coupées."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    },
    "unrepresented": {
      "description": "What the model does not draw: kept as written, never rewritten.",
      "items": {
        "additionalProperties": false,
        "properties": {
          "count": {
            "description": "How many lines the entry stands for (comments).",
            "type": "integer",
            "x-flexway-description": {
              "en": "How many lines the entry stands for (comments).",
              "fr": "Nombre de lignes que l'entrée représente (commentaires)."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "line": {
            "description": "Line in the file, from the repository only.",
            "type": "integer",
            "x-flexway-description": {
              "en": "Line in the file, from the repository only.",
              "fr": "Ligne dans le fichier, depuis le dépôt seulement."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "path": {
            "description": "The node's YAML path; empty for the file's comments.",
            "type": "string",
            "x-flexway-description": {
              "en": "The node's YAML path; empty for the file's comments.",
              "fr": "Chemin YAML du nœud ; vide pour les commentaires du fichier."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          },
          "reason": {
            "description": "Reason: a section not drawn, an anchor, an alias, comments, or not visible from `/config`.",
            "enum": [
              "not_modelled",
              "anchor",
              "alias",
              "comments",
              "not_visible"
            ],
            "type": "string",
            "x-flexway-description": {
              "en": "Reason: a section not drawn, an anchor, an alias, comments, or not visible from `/config`.",
              "fr": "Raison : section non dessinée, ancre, alias, commentaires, ou invisible depuis `/config`."
            },
            "x-flexway-reloadable": true,
            "x-flexway-since": "1.11.0"
          }
        },
        "required": [
          "reason"
        ],
        "type": "object"
      },
      "type": "array",
      "x-flexway-description": {
        "en": "What the model does not draw: kept as written, never rewritten.",
        "fr": "Ce que le modèle ne dessine pas : gardé tel qu'écrit, jamais réécrit."
      },
      "x-flexway-reloadable": true,
      "x-flexway-since": "1.11.0"
    }
  },
  "required": [
    "bricks",
    "config_digest",
    "counts",
    "links",
    "routes",
    "schema",
    "source",
    "truncated",
    "unrepresented"
  ],
  "title": "flexway.architecture.v1",
  "type": "object",
  "x-flexway-description": {
    "en": "Architecture model of a Flexway configuration (flexway.architecture.v1): routes as lines, policies as stations, shared resources as interchanges, refusals with their code. Derived from what a gateway publishes, never stored.",
    "fr": "Modèle d'architecture d'une configuration Flexway (flexway.architecture.v1) : les routes en lignes, les politiques en stations, les ressources partagées en correspondances, les refus avec leur code. Dérivé de ce que publie une passerelle, jamais stocké."
  }
}
