# Runbook : Opérations Lucarne

## 1. Déploiement et Rollback (P10-010)

- **`NEXT_PUBLIC_SITE_URL` doit être défini dans l'environnement de _build_.** `site.baseUrl` de l'instance retombe sinon sur `http://localhost:<port>`, et cette valeur est figée dans les URL canoniques, les `hreflang` et l'intégralité du sitemap : le site se déclare alors sur localhost et devient inindexable. Le définir au démarrage ne corrige rien, il faut reconstruire. Contrôle après chaque build, avant mise en ligne :

  ```bash
  curl -s https://<domaine>/sitemap.xml | grep -m1 '<loc>'
  ```

- L'artefact généré par Next.js est en mode `standalone`. Il inclut `server.js` et les dépendances `node_modules` requises.
- **Rollback :** Le routage DNS/CDN (Vercel ou Cloudflare) ou le changement d'image Docker doit cibler la release précédente taggée de l'image immuable.

## 2. Invalidation de Cache (P8-003)

- Endpoint : `POST /api/revalidate`
- Header requis : `Authorization: Bearer <REVALIDATION_SECRET>`
- Payload : `{ "tags": ["center-123"] }` ou `{ "paths": ["/recherche"] }`

## 3. Panne amont (API CRISalid) (P10-007)

- Si la source retourne une 500 ou Timeout (>5s), le BFF remonte une erreur `UpstreamApiError`.
- **Mitigation** : Le cache (CDN et Next) sert la variante "stale" tant qu'elle est disponible (SWR). Le client observe une date de fraîcheur décalée mais sans interruption d'accès à la donnée lue.

## 4. Astreinte et Maintien (P10-015)

- Maintenir Node.js 22 LTS, Next.js 16 et Mantine 7 en surveillance.
- Alerte de sécurité critique > Mettre à jour via `pnpm up <package>` et exécuter le pipeline de tests `make check` complet.

## 5. Supervision et alertes

- Tableaux, alertes et conduite à tenir par alerte : [observabilite.md](/exploitation/observabilite) (§ 6 et § 8).
