# ADR-002 — Validation douce (⚠️) pour les types CamelCase non référencés
*Date : 2026-05-12 — Session 1*
*Statut : Accepté*

## Contexte
L'IA (GPT-4o-mini) suggère parfois des types schema.org en CamelCase valide (`BuildingMaterialStore`, `Supplier`, `ConstructionCompany`) qui n'existent pas dans le vocabulaire officiel. Avant cette session, `nrs_filter_valid_schema_types()` ne connaissait que deux états : `valid` (dans la liste statique) ou `rejected` (hallucination pure). Résultat : tout type absent de la liste embarquée — y compris des types réels — était bloqué avec un ❌.

## Décision
Introduire un troisième bucket `unknown` dans `nrs_filter_valid_schema_types()` :
- **`valid`** — présent dans le vocabulaire officiel → bouton vert cliquable
- **`unknown`** — CamelCase valide (`^[A-Z][a-zA-Z]+$`) mais absent du vocab courant → bouton ⚠️ jaune cliquable (non bloquant, avec lien vers schema.org/<type> en tooltip)
- **`rejected`** — format invalide (minuscules, espaces, chiffres, mots français…) → badge rouge ❌ non cliquable

Le pick handler JS filtre aussi toute valeur non-CamelCase déjà présente dans le champ avant d'append (évite le cas "carrière de pierre, WholesaleStore").

## Alternatives écartées
| Alternative | Raison de l'abandon |
|-------------|---------------------|
| Strict — tout absent = ❌ bloqué | Casse les types schema.org récents (ajoutés après la dernière sync du cron) et frustre les collaborateurs qui ne peuvent pas ajouter un type valide sans appeler l'agence |
| Permissif — tout CamelCase = ✅ valide | Laisse passer les hallucinations IA sans avertissement — contraire à l'objectif du module |
| Blocage sauf liste blanche manuelle | Charge de maintenance continue sur l'équipe Nexxis à chaque évolution schema.org |

## Conséquences
**Positives :** Les collaborateurs ne sont pas bloqués sur des types réels récents. L'IA est contrainte de choisir dans le vocabulaire officiel (prompt injecté) — le bucket `unknown` devient un filet de sécurité, pas une porte d'entrée pour les hallucinations. Le cron mensuel réduit naturellement le nombre de `unknown`.

**Négatives :** Un utilisateur peut théoriquement ajouter un type hallucination CamelCase (`ConstructionCompany`) en cliquant le ⚠️. Le tooltip "vérifiez sur schema.org/<type>" est le seul garde-fou UX.

**Irréversibilité :** Faible — revenir à 2 buckets ne nécessite que de supprimer la branche `elseif` dans `nrs_filter_valid_schema_types()` et de retirer les boutons ⚠️ du JS.

## Révision possible
Si schema.org stabilise une API de validation publique (actuellement inexistante), on pourrait valider à la volée côté serveur au lieu de dépendre du cache mensuel.
