# Vérifier les textes d'IKG vers SoVisu+
> **En bref :**
> Vingt-six tests sur la façon dont titres, résumés et noms d'unités passent d'IKG à la base de SoVisu+ (SoVisuPlus), sur une base PostgreSQL temporaire. Statut : **Confirmé** (exécution locale).

**Résultat :** code `0` pour les deux scripts, 26 tests sur 26 (11 + 15), le 22 octobre 2026. IKG coupe les textes à 4 000 caractères, alors que la base de SoVisu+ limite les titres et descriptions à 2 000 et les libellés à 255 ; une erreur de longueur laisse des écritures partielles ; un état ancien rejoué écrase un état plus récent.

## Pourquoi ce contrôle

Une vitrine affiche surtout du texte, dans plusieurs langues. Ce contrôle répond à **« un texte qui sort d'IKG arrive-t-il intact dans SoVisu+, et que se passe-t-il s'il est trop long ou rejoué ? »**. Les résultats sont tenus dans le [dictionnaire de données](/03-crisalid/01-donnees/dictionnaire-de-donnees).

## Avant de commencer

- L'environnement Python du [contrôle Bridge → IKG](./verifier-contrat-bridge-ikg) (variable `env_dir`).
- PostgreSQL 16 (`initdb`, `pg_ctl`, `psql`), Node et npm, et les copies `crisalid-ikg` et `SoVisuPlus`.
- **À ne pas faire :** pointer ces scripts vers une base existante. Chacun crée puis supprime sa propre base, joignable seulement en local.

## Étapes

### Étape 1 — Contrôler les modèles d'IKG et les contraintes SQL

**Pourquoi :** savoir ce que la base accepte avant de regarder ce que l'application y écrit.

```bash
"$env_dir/venv/bin/python" scripts/check-crisalid-text-contract.py   # --pg-bin <dossier> si besoin
```

Onze tests : troncature d'IKG, langues, limites de chaque colonne (en caractères, pas en octets), unicité par langue.

### Étape 2 — Contrôler les écritures de SoVisu+

**Pourquoi :** observer ce que le vrai code de SoVisu+ écrit, avec un vrai client de base de données (Prisma).

```bash
runtime=$(mktemp -d)
npm install --prefix "$runtime" --ignore-scripts --no-audit --no-fund --no-save \
  typescript@5.9.3 iso-639-1@3.1.6 prisma@6.19.3 @prisma/client@6.19.3 slugify@1.6.9 remove-accents@0.5.0
node scripts/check-crisalid-prisma-contract.mjs --runtime "$runtime"
```

Quinze tests, dont six de reprise : erreurs de longueur rejouées, instantané corrigé, retour d'un état ancien. Les classes de SoVisu+ sont chargées depuis les sources ; seul l'accès à la base est remplacé par la base temporaire.

### Étape 3 — Lire le rapport

**Pourquoi :** les erreurs SQL de longueur et d'unicité font partie des résultats attendus.

Chaque script affiche ses tests puis un rapport JSON (versions, révisions, périmètre).

## Ce que le contrôle établit

- Écart de limites entre IKG (4 000) et SoVisu+ (2 000 ou 255) : un texte accepté par le graphe peut être refusé par SoVisu+.
- Une erreur au milieu d'une écriture laisse la base dans un état partiel ; un instantané corrigé la répare.
- Aucune protection contre le rejeu d'un état ancien.

## Limites

- Objets minimaux : ni contributions, ni sujets, ni relations.
- Ni bus, ni traitements de SoVisu+, ni Apollo : la chaîne de synchronisation n'est pas exécutée.
- Exécuté sous Node 22, alors que SoVisu+ déclare Node 24.

## Et ensuite

Contrôle suivant : [SoVisu+ sans la pile](./preparer-sovisuplus).

Révision lue : `crisalid-ikg` `ebdaae75`, `SoVisuPlus` `8e571657`.
