`granularity` est la seule option que le type lit. Elle prend `split` — la valeur
par défaut — ou `flat`, et la différence va plus loin que le nombre de pages.

```ts
{
  type: 'changelog',
  path: 'CHANGELOG.md',
  label: 'Changelog',
  options: { granularity: 'flat' }
}
```

## `split` — une page par version

La valeur par défaut, et ce à quoi sert un historique des versions. Chaque version
devient une page à elle sous une vue d’ensemble générée, ce qui achète quatre
choses qu’une page unique ne peut pas avoir :

- un **lien direct** vers une version, et vers un groupe à l’intérieur ;
- un **résultat de recherche** qui est la version, et non le fichier entier ;
- une **entrée de flux** par version, dès que
  [`feed.path`](/reference/changelog/section) nomme la section ;
- une **entrée d’`llms.txt`** par version, de sorte qu’un modèle qui demande ce qui
  a changé en `2.1.0` reçoive cette version et non quatre cents kilo-octets
  d’historique.

La vue d’ensemble est une chronologie — chaque version, la plus récente d’abord,
avec sa date et les types de changement à côté, filtrable par ces types. Les
entrées elles-mêmes restent sur les pages de version : les répéter sur la vue
d’ensemble mettrait le journal entier deux fois dans l’index de recherche, dans
`llms-full.txt` et dans le flux.

Les pages séparées se rendent dans une **mise en page à elles** : les versions dans
la barre latérale, une colonne de lecture bornée à une mesure, et une colonne de
sommaire listant les groupes. Voir [Composants](/reference/changelog/components).

## `flat` — le fichier tel quel

Une page, contenant le fichier tel qu’il a été écrit. Pour un projet qui veut
simplement voir son journal affiché.

Un journal plat est une **page de documentation ordinaire** et garde le cadre de la
documentation — la barre latérale de prose, le fil d’Ariane et un sommaire qui
liste les versions, ce qu’un long fichier veut précisément. C’est pourquoi la
question de la mise en page se règle depuis les options de la déclaration plutôt
que d’être fixée par le type : le même type produit deux choses différentes.

Rien n’est réécrit que le titre. Le `# Changelog` propre du fichier s’en va, parce
que la page tire son titre de `title` et qu’un second `<h1>` dans le corps est à la
fois un doublon et un défaut d’accessibilité. Chaque titre de version reste
exactement là où l’outil de release l’a mis — ce que « inchangé » doit vouloir
dire, sinon le mode n’est pas l’issue de secours pour laquelle il existe.

## Vers laquelle se tourner

| Vous voulez                                                        | Prenez  |
| :------------------------------------------------------------------ | :------ |
| Un historique où les lecteurs naviguent et vers lequel ils lient     | `split` |
| Un flux, ou des entrées par version dans `llms.txt`                  | `split` |
| Le fichier affiché tel qu’écrit, sans URL inventée                   | `flat`  |

::callout{type="warning" title="Une option mal orthographiée fait échouer le build"}
`granularty`, ou une granularité qui n’est ni l’une ni l’autre, arrête le build en
nommant la clé ou la valeur qu’il n’a pas reconnue. À un caractère de la clé qui
marche, c’est un site qui obtient silencieusement la valeur par défaut au lieu de ce
qu’il a configuré, et le build est le dernier endroit qui puisse le dire.
::