# Règles — chargements explicites

> Archive historique conservée côté `TTM_API`.
>
> Source de vérité active : `C:\Users\VT\PhpstormProjects\ttm-dev-tools\docs\DEV_TOOLS_DEPLOYMENT_AUDIT.md` et `C:\Users\VT\PhpstormProjects\ttm-dev-tools\docs\README_DEV_TOOLS_UI.md`.
>
> Ce document formalise une règle UX antérieure à l’extraction du `dev-tools` vers `ttm-dev-tools`. À utiliser seulement comme contexte d’archive.

## Objectif
- Rendre visibles les chargements et rafraîchissements non instantanés dans les dev-tools.
- Éviter tout changement d’état perçu comme silencieux ou soudain.
- Cette règle n’ajoute aucune logique métier nouvelle ni orchestration implicite ; elle formalise uniquement l’affichage explicite d’attentes déjà existantes.

## Périmètre
- Cette règle s’applique à `Build`, `Deploy`, `Database`, `Runtime` et aux autres pages dev-tools concernées.
- `Build` reste dans le périmètre d’application du pattern, sans rouvrir un chantier de conception spécifique.

## Cas de chargement à couvrir
1. chargement initial de page ou de zone
2. refresh local d’un bloc déjà visible
3. action utilisateur non instantanée
4. rechargement visuel après action

## Règle transverse
- Toute attente non instantanée doit produire un feedback visible immédiatement.
- Le feedback doit être localisé et apparaître au niveau UI concerné : `page`, `bloc`, `carte` ou `bouton`.
- On privilégie toujours le niveau le plus local pertinent.
- Un chargement ne doit jamais être silencieux.
- Une donnée ne doit jamais changer d’un coup sans état intermédiaire visible.

## Niveaux de feedback autorisés
### Page
- Réservé uniquement aux vrais chargements initiaux globaux ou aux vraies actualisations globales d’une page.
- Libellés : `Chargement…`, `Actualisation…`

### Bloc
- Réservé au refresh d’un bloc déjà visible.
- Libellé : `Mise à jour…`

### Carte
- Réservé à une action non instantanée portée par une carte.
- Libellé : `En cours`

### Bouton
- Réservé à l’accusé immédiat du clic.
- Libellés : `Chargement…`, `Actualisation…`, `Lancement…`

## Pendant le chargement
### Doit rester visible
- le titre de page
- le titre du bloc ou de la carte concernée
- le dernier état utile déjà affiché
- le contexte déjà connu

### Peut être atténué
- le contenu en cours de refresh
- les valeurs en cours de mise à jour

## Désactivation temporaire
### Doit être désactivé
- le bouton qui vient de déclencher l’attente
- le contrôle qui relance exactement le même chargement
- les actions redondantes dans le même périmètre si elles créent un doublon évident

### Ne doit pas être désactivé sans raison
- toute la page si seul un bloc recharge
- des actions non liées au chargement en cours

## Libellés standards
- `Chargement…`
- `Mise à jour…`
- `Actualisation…`
- `Lancement…`
- `En cours`

## Interdits UX
- aucun chargement silencieux
- aucun spinner seul sans texte
- aucune disparition complète d’un bloc déjà lisible pendant un refresh local
- aucun feedback affiché au mauvais niveau
- aucun bouton laissé actif s’il relance exactement la même attente
- aucun changement de données sans état intermédiaire visible

## Mini-checklist de validation
- [ ] Chaque attente non instantanée affiche un état visible immédiatement
- [ ] Le feedback apparaît au bon niveau : `page` / `bloc` / `carte` / `bouton`
- [ ] Le dernier état utile reste visible pendant le chargement
- [ ] Le contrôle redondant est temporairement désactivé
- [ ] Le libellé de chargement est court, standard et compréhensible
- [ ] Aucun changement de données n’apparaît sans état intermédiaire visible
