# kView INVESTOR — Vérification UAT PostgreSQL et Passport

> Statut au 17 juillet 2026 : commande couverte par un test automatisé avec
> PostgreSQL, client Passport password grant, endpoint bearer et refresh. Le
> passage sur l'UAT réel reste à exécuter avec les secrets de cet environnement.

## Objectif

La commande `php artisan kview_investor:verify-uat` transforme la porte de
préproduction en contrôle reproductible. Elle vérifie, dans cet ordre :

1. environnement `uat`, `staging` ou `preproduction` ;
2. connexion PostgreSQL réellement active ;
3. absence de migration en attente ;
4. présence d'un client Passport actif autorisant le password grant ;
5. émission d'un access token et d'un refresh token ;
6. appel authentifié de l'endpoint configuré ;
7. renouvellement effectif de l'access token ;
8. révocation des jetons de smoke créés par la commande.

La commande ne journalise ni identifiant utilisateur, ni secret client, ni mot
de passe, ni jeton.

## Configuration

Copier les clés de `.env.uat.example` dans les secrets de déploiement :

```dotenv
UAT_SMOKE_BASE_URL=https://uat.example.com
UAT_SMOKE_API_PATH=/api/v1/funds
UAT_SMOKE_CLIENT_ID=
UAT_SMOKE_CLIENT_SECRET=
UAT_SMOKE_USERNAME=
UAT_SMOKE_PASSWORD=
UAT_SMOKE_TIMEOUT=15
```

Le client doit être confidentiel, non révoqué et accepter le grant
`password`. Le compte doit être un utilisateur UAT dédié, sans droits
administrateur et sans données sensibles.

Ne jamais transmettre ces valeurs comme arguments de commande : elles
resteraient dans l'historique du shell. Elles doivent venir du gestionnaire de
secrets de l'environnement.

## Exécution

Sur le serveur UAT :

```bash
php artisan config:clear
php artisan kview_investor:verify-uat --no-interaction
```

Ou pendant un déploiement explicitement marqué pour le smoke :

```bash
./scripts/post-deploy.sh --run-uat-smoke
```

Le script ne lance pas ce contrôle par défaut. Cela évite qu'une configuration
UAT absente perturbe un déploiement local ou de production.

## Interprétation

Un succès prouve la chaîne réelle navigateur/API attendue par les clients
Passport : PostgreSQL, schéma, client, utilisateur, password grant, bearer
token, route protégée et refresh.

Un échec ne révèle que l'étape et le statut HTTP éventuel. Les détails restent
dans les logs serveur protégés. Corriger la configuration ou le service avant
de poursuivre un upgrade majeur.

## Porte de promotion

Laravel 13 est validé localement. Sa promotion de l'UAT vers la production est
autorisée uniquement si cette commande réussit sur l'UAT réel, après le
déploiement et avant l'ouverture aux utilisateurs. Conserver la sortie de la
commande dans le journal de déploiement, sans y ajouter les variables secrètes.
