# Coaster World DATA v1.3.0 — ajout de parc avec recherche IA

Le patch s’applique sur **la version 1.2.0 complète**, empreinte SHA-256 `407c00c846fdc665a1968d4e93a377f6376f6ff6dadecee8b8fac140774267d3`. Il contient uniquement les fichiers nouveaux ou modifiés. Aucune nouvelle dépendance Composer ni migration n’est nécessaire. La base reste MySQL sous Laragon.

## Installation sur votre projet existant

Ouvrir le **terminal Laragon en mode CMD**. Adapter le dossier si votre projet porte un autre nom.

```bat
cd /d C:\laragon\www\coaster-world-data
STOP_DATA.bat
php artisan down
php artisan cw:data:backup
```

Conserver également une copie du dossier du projet avec son `.env` et son `APP_KEY`. Si la commande de sauvegarde échoue, effectuer un export MySQL avec l’outil habituel et vérifier sa présence avant de remplacer les fichiers.

Extraire `coaster-world-data_v1.3.0_2026-10-04_update.zip` **à la racine du projet, à côté d’artisan**, en conservant les sous-dossiers et en acceptant les remplacements. Ne pas effacer le dossier existant. Le patch ne contient ni `.env`, ni base de données, ni fichiers d’exécution.

Ouvrir la configuration :

```bat
notepad .env
```

Modifier les lignes existantes, sans créer de doublons :

```dotenv
CW_DATA_VERSION=1.3.0
CW_DATA_AI_ENABLED=true
OPENAI_API_KEY=VOTRE_CLE_API_OPENAI
CW_DATA_AI_MODEL=gpt-5.5
```

`gpt-5.5` est un exemple de modèle compatible mentionné dans la documentation officielle consultée le 4 octobre 2026. Choisir un modèle Responses avec l’outil `web_search` disponible pour votre compte. La clé doit être une véritable clé API OpenAI, saisie uniquement dans votre `.env` local. Les recherches utilisent l’API et sa facturation. Les clés et le modèle restent configurables ; aucune clé n’est fournie dans l’archive.

Conserver `DB_CONNECTION=mysql`, les accès MySQL, `APP_KEY`, les réglages API et les choix des fournisseurs. Si vous utilisez le User-Agent standard dans `.env`, vous pouvez actualiser sa version en `CoasterWorldData/1.3.0`.

Puis exécuter :

```bat
php artisan optimize:clear
php artisan up
START_DATA.bat
php artisan cw:system:status
```

`START_DATA.bat` relance les workers existants. Le worker de la file **default** exécute les recherches. Sans ce worker, une demande reste « En attente ». Après redémarrage, rafraîchir le navigateur avec **Ctrl+F5**.

Les scripts Windows sont conservés. Ne pas régénérer `APP_KEY`. Aucun `composer update`, build npm ou import massif de données n’est requis pour cette mise à jour.

## Premier essai

1. Ouvrir **Accueil → Ajouter un parc** ou **Ma base → Ajouter un parc**, avec un compte administrateur ou éditeur.
2. Saisir le nom exact du parc. Le pays facultatif utilise deux lettres, par exemple `FR`, `NL` ou `DE`.
3. Laisser la recherche du contenu cochée si vous souhaitez les attractions, coasters, zones et POI. La collecte initiale est limitée à **50 éléments**, sans garantie d’exhaustivité.
4. Pour un premier essai, choisir **0 ou 5 recherches détaillées**. Une recherche détaillée nécessite un appel supplémentaire pour une fiche. La limite est de 25 nouvelles recherches par lancement, 10 par défaut.
5. Cocher l’autorisation puis cliquer sur **Lancer la recherche**. La page de suivi attend la recherche du parc et, si activées, les recherches détaillées.
6. Ouvrir le parc intégré, les sources consultées et **Exceptions à vérifier**. Les liens vers les lots et les candidats permettent de retrouver la réponse d’origine et chaque proposition.
7. Si plusieurs parcs sont possibles, ou si l’identité n’est pas suffisamment étayée, aucune création automatique n’a lieu. Ouvrir le lot, créer ou associer **un seul parc**, puis revenir au suivi.
8. **Reprendre ce lot** réutilise la recherche initiale enregistrée. Choisir le nombre de recherches détaillées souhaité, même si le premier lancement utilisait 0. Le prochain groupe de fiches est ajouté ; les recherches déjà lancées ne sont pas répétées.

La saisie manuelle reste accessible depuis le formulaire IA. Sans configuration IA, le lancement est désactivé avec une explication ; les autres fonctions de DATA restent disponibles.

## Règles d’intégration

- L’appel utilise l’API Responses avec l’outil `web_search`, accès web externe et appel d’outil obligatoire. Une réponse sans recherche web terminée, incomplète ou non exploitable est refusée.
- Une URL citée doit figurer parmi les sources retournées par l’outil. Les URL privées, locales ou non HTTP(S) sont refusées. Ces contrôles ne constituent pas une validation indépendante de l’exactitude des pages.
- L’intégration automatique de l’identité exige un nom normalisé exact, une confiance déclarée d’au moins 90, un pays cohérent et une source du domaine présenté comme officiel. Plusieurs identités possibles, ressemblances seules, collisions de classement ou rattachements incohérents restent à vérifier.
- Une valeur doit passer les contrôles de type, bornes, langue, dictionnaire, source et confiance (au moins 85) avant de compléter un champ vide. La confiance enregistrée est plafonnée à 90 et reste une estimation IA. Une valeur intégrée par ce parcours n’est pas marquée « vérifiée manuellement ».
- Les valeurs canoniques existantes, les colonnes métier renseignées et les traductions existantes différentes sont conservées. La proposition IA et son origine restent consultables. Un zéro ou un booléen faux restent de vraies valeurs.
- Les valeurs incertaines, contradictoires, sans source utilisable, hors validation ou visant un champ désactivé ne deviennent pas automatiquement finales. Les erreurs de champ et les identités non résolues apparaissent dans les exceptions du suivi. Certaines propositions ignorées pour une structure ou une langue non reconnue restent uniquement dans la réponse brute du candidat.
- Les fiches sont associées par identifiant, nom exact ou alias exact dans le bon parc. La reprise des lots et les recherches répétées conservent les identifiants IA pour limiter les doublons.
- Le fournisseur `ai-research` est actif et global lors de sa première création, seulement au premier lancement du parcours. Les désactivations existantes, capacités et sources ne sont pas réactivées. Une collecte par nom d’un nouveau parc nécessite le périmètre global ; un fournisseur limité à des parcs sélectionnés peut bloquer cette recherche.
- Le contenu non identifiable ou sans source exploitable est écarté, compté et conservé dans la réponse brute. Les recherches détaillées ciblent uniquement les contenus déjà rattachés au parc.
- La reprise après une erreur conserve le lot lorsqu’un point de reprise a été enregistré. Une erreur survenue avant cet enregistrement peut nécessiter un nouvel appel API. Une tâche détaillée échouée peut être relancée depuis sa page de tâche.
- L’ancienne action IA d’une fiche conserve son fonctionnement : observations plafonnées à 70 et validation humaine. Le parcours par nom est distinct.

Le lot ne télécharge pas de médias, ne crée pas automatiquement des organisations métier à partir d’un nom et ne modifie pas le moteur Live. Les champs complémentaires (budget, cuisine, historique, propriétaire…) peuvent être conservés comme valeurs encyclopédiques. Une source retrouvée par l’IA ne suffit pas à garantir que tout le parc a été inventorié.

## Checklist après mise à jour

- [ ] `/api/v1/health` indique la version 1.3.0.
- [ ] Les données existantes, l’import Excel, les fournisseurs, le Live et l’API restent accessibles.
- [ ] Ajouter un parc ouvre le formulaire par nom ; Saisie manuelle reste accessible.
- [ ] Sans clé ou modèle, le formulaire explique la configuration manquante.
- [ ] Avec la configuration requise et le worker default, une recherche quitte l’état En attente.
- [ ] Les sources sont cliquables ; les contenus sont rattachés au bon parc.
- [ ] Les exceptions sont accessibles et une correction humaine reste conservée.
- [ ] Reprendre ce lot traite le groupe suivant sans relancer la recherche initiale enregistrée.
- [ ] Les écrans s’affichent dans les cinq langues et les deux thèmes.

Commandes de contrôle :

```bat
php artisan cw:system:status
curl http://coaster-world-data.test/api/v1/health
```

Adapter l’URL au domaine Laragon habituel. Pour contrôler l’archive dans PowerShell, depuis le dossier de téléchargement :

```powershell
Get-FileHash .\coaster-world-data_v1.3.0_2026-10-04_update.zip -Algorithm SHA256
```

Comparer avec `SHA256SUMS_v1.3.0.txt`.

## Installation neuve et retour arrière

Pour une installation neuve, utiliser l’archive complète v1.3.0 dans un nouveau dossier. Créer une base MySQL vide, copier `.env.example` en `.env`, configurer MySQL et la racine web sur `public/`, puis lancer `INSTALL_DATA.bat`. Ouvrir `/setup` pour créer l’administrateur, activer l’IA si souhaité et lancer `START_DATA.bat`.

Pour revenir exactement à l’état précédent, arrêter les workers puis restaurer la copie du projet et la sauvegarde MySQL correspondante, avec le `.env` et l’`APP_KEY` conservés. Restaurer seulement les fichiers v1.2 ne supprime pas les données intégrées par la recherche.

Validation automatisée : PHP 8.3 sous Linux, pilote MySQL sur MariaDB et navigateur Chromium. Aucun appel API payant réel ni exécution sous Windows/Laragon n’a été effectué. Un premier essai réel limité reste à effectuer sur votre installation avec votre configuration.

Documentation officielle utilisée : [Recherche web avec l’API Responses](https://developers.openai.com/api/docs/guides/tools-web-search), consultée le 4 octobre 2026. Détails des contrôles : `docs/VALIDATION_v1.3.0.md`.
