Les téléchargements Content et les images OG peuvent survivre à un runner
éphémère. Leurs règles d’invalidation diffèrent, donc deux commandes duxt les
gèrent séparément.

## Sources distantes publiques

```yaml [.github/workflows/deploy.yml]
- id: sources
  run: duxt-cache-key --root . --github >> "$GITHUB_OUTPUT"
- if: steps.sources.outputs.cacheable == 'true'
  uses: actions/cache@v6
  with:
    path: ${{ steps.sources.outputs.paths }}
    key: ${{ steps.sources.outputs.key }}
```

`--root` désigne l’application Nuxt consommatrice. La clé contient les dépôts
et refs déjà résolus ; `contents.sqlite*` reste exclu car il s’agit d’un résultat
de parsing. Une seule source privée, SSH ou authentifiée rend toute la liste
`cacheable=false`. Sans `--github`, la commande affiche les entrées expurgées et
la raison.

## Images OG rendues

```yaml [.github/workflows/deploy.yml]
- id: og
  run: duxt-og-cache --root . --run "$GITHUB_SHA" --github >> "$GITHUB_OUTPUT"
- uses: actions/cache@v6
  with:
    path: ${{ steps.og.outputs.path }}
    key: ${{ steps.og.outputs.key }}
    restore-keys: ${{ steps.og.outputs['restore-keys'] }}
```

La configuration Nuxt consommatrice intègre aussi
`@kirchdev/duxt/og-image-cache` et calcule l’empreinte des options, polices et
versions du renderer. Un changement vide le cache restauré avant qu’une ancienne
image puisse être servie. Après le build, `duxt-og-cache --root . --report
--since "$STARTED_MS" --log build.log` mesure la réutilisation réelle.

## Liste de contrôle

- [ ] `--root` pointe vers l’application consommatrice.
- [ ] Le cache des sources ne fonctionne qu’avec `cacheable == 'true'`.
- [ ] `contents.sqlite*` et les sources privées restent exclus.
- [ ] Le cache OG utilise les rolling restore keys émises.
- [ ] Nuxt inclut les entrées de rendu du site dans l’empreinte.