# Mise en service — 1er septembre 2026, 11 h 00

Mode opératoire de la bascule de `vulcanaffutage.com` vers le site 2.0.
État au 2026-08-29 : **tout ce qui pouvait être automatisé l'est**. Il reste
trois actions qui ne se font que depuis le panneau OVH (§ 3).

---

## 1. Ce qui se déclenche tout seul à 11 h 00

Deux verrous tombent au même instant, sans intervention, sans redéploiement.

### a. Le domaine principal cesse de renvoyer vers l'ancien site

`public/.htaccess`, tout en haut des règles de réécriture :

```apache
RewriteCond %{HTTP_HOST} ^(www\.)?vulcanaffutage\.com$ [NC]
RewriteCond %{TIME} <20260901110000
RewriteRule ^ https://old.vulcanaffutage.com%{REQUEST_URI} [R=302,L]
```

Tant que l'instant n'est pas atteint, le domaine principal renvoie vers
l'ancien site, servi tel quel depuis `~/www` — **jamais modifié**. Passé
11 h 00 la condition tombe d'elle-même et le domaine sert la 2.0.

- `%{TIME}` est en heure **locale d'Apache**. Vérifié empiriquement sur ce
  mutualisé le 2026-08-29 : le shell SSH répond en UTC, **Apache répond en
  Europe/Paris**. `20260901110000` vise donc bien 11 h 00 heure de Paris.
- **302 et non 301** : un permanent serait mémorisé par les navigateurs et
  continuerait de renvoyer vers l'ancien site longtemps après l'ouverture.
- La condition d'hôte épargne `new.vulcanaffutage.com`, qui sert la 2.0
  directement, avant comme après.

**Vérifié en conditions réelles** le 2026-08-29 : la même règle, dupliquée
temporairement sur l'hôte de recette, renvoyait bien vers
`old.vulcanaffutage.com/<chemin>?<paramètres>` avec un seuil futur, et ne se
déclenchait plus du tout avec un seuil déjà passé. Chemin et paramètres sont
conservés.

### b. Le portail d'accès (code `Vulcan63`) s'efface

`BETA_GATE_OPEN_AT=2026-09-01T11:00:00+02:00` dans `~/new-v2/.env.local`.
Passé cet instant, `App\Service\BetaGate::isEnabled()` renvoie `false` et le
site s'ouvre. Le décalage `+02:00` est **indispensable** : le serveur tourne en
UTC, et la comparaison se fait en instant absolu.

- `BETA_GATE_ENABLED=0` reste le coupe-circuit manuel : il ouvre le site
  immédiatement, quelle que soit la date.
- Une date illisible ne s'interprète jamais comme « ouvert » : le portail est
  maintenu.

### Décalage résiduel possible

Le répartiteur OVH peut conserver quelques dizaines de secondes une
redirection déjà servie. Un visiteur arrivé juste après 11 h 00 peut donc être
renvoyé une dernière fois vers l'ancien site ; un rechargement forcé
(Ctrl+Maj+R) suffit. C'est de l'ordre de la minute, pas de l'heure.

---

## 2. Vérifier que la bascule a bien eu lieu

Le 1er septembre, à partir de 11 h 01, depuis n'importe quel poste :

```bash
# Doit répondre 200 et servir la 2.0 (plus aucune redirection vers old.)
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" https://vulcanaffutage.com/

# Doit afficher la boutique, et non la page de code d'accès
curl -s https://vulcanaffutage.com/produits | grep -c "acces-beta"   # attendu : 0
```

Si le domaine renvoie encore vers `old.` plus de deux minutes après 11 h 00 :
vérifier l'heure du serveur (`ssh … date`) et le seuil dans
`~/new-v2/public/.htaccess`.

Si la page de code d'accès s'affiche encore : poser `BETA_GATE_ENABLED=0` dans
`~/new-v2/.env.local`, puis
`/usr/local/php8.4/bin/php bin/console cache:clear`.

---

## 3. Les trois actions à faire dans le panneau OVH

Elles ne sont pas réalisables en SSH : l'affectation des domaines aux dossiers
et les tâches planifiées passent obligatoirement par l'interface OVH.

### 3.1 Créer le sous-domaine de l'ancien site

| Champ | Valeur |
|---|---|
| Domaine | `old.vulcanaffutage.com` |
| Dossier racine | `/homez.2167/vulcans/www/vulcan-affutage/public` |
| SSL | activé |

À faire **en premier** : tant que ce sous-domaine n'existe pas, la redirection
du § 1a mène dans le vide.

### 3.2 Réaffecter le domaine principal

| Domaine | Dossier racine actuel | Nouveau dossier racine |
|---|---|---|
| `vulcanaffutage.com` | `…/www/vulcan-affutage/public` | `/homez.2167/vulcans/new-v2/public` |
| `www.vulcanaffutage.com` | idem | idem |

**Quand le faire.** Dès que c'est fait, le domaine principal affiche
`old.vulcanaffutage.com` dans la barre d'adresse des visiteurs, jusqu'au
1er septembre 11 h. Deux stratégies :

- **Recommandé — le 31 août au soir.** La propagation est réglée bien avant
  l'échéance, et l'exposition du sous-domaine `old.` se limite à une nuit,
  hors heures d'affluence.
- Le 1er septembre au matin : exposition réduite à quelques minutes, mais
  toute lenteur de propagation mange sur l'heure d'ouverture.

Dans les deux cas, la bascule de 11 h reste automatique : c'est le fichier
`.htaccess` qui décide, pas l'heure de la manipulation.

### 3.3 Planifier la tâche périodique

| Champ | Valeur |
|---|---|
| Fréquence | toutes les 15 minutes |
| Langage | PHP 8.4 |
| Commande | `/homez.2167/vulcans/new-v2/bin/console app:cron` |
| Journalisation | e-mail en cas d'erreur uniquement |

**Sans cette tâche, quatre e-mails clients n'existent pas** (colis livré,
satisfaction J+2, rappel d'atelier J-1, expiration de réservation) et **les
places d'atelier non payées restent bloquées indéfiniment**, fermant des
créneaux à de vrais acheteurs. Voir `docs/emails-transactionnels.md` § 7.

La commande est idempotente et verrouillée : deux exécutions simultanées ne
font pas double emploi. Essai à blanc effectué le 2026-08-29, les sept étapes
passent.

---

## 4. Ce qui a été fait côté serveur le 2026-08-29

- **Sauvegarde de la base** avant toute écriture :
  `~/migration-work/v2-avant-mise-en-prod-20260829-132716.sql.gz` (mode 600).
- **Purge des données de recette** : comptes, commandes, adresses, paiements,
  bons cadeaux, réservations, demandes d'affûtage, notifications, audience.
  **Conservés** : 128 produits (dont 50 en vente), 7 modèles de couteau,
  4 modes de livraison, 3 comptes gestionnaires, 1 point de dépôt.
- **`.env.local` passé en production** (sauvegarde dans `~/migration-work/`) :

  | Variable | Avant | Après |
  |---|---|---|
  | `MAILER_CATCH_ALL` | `thekiki93@gmail.com` | *(vide)* — les clients reçoivent enfin leurs e-mails |
  | `APP_TRACKING_MOCK` | `1` | `0` — plus aucun suivi de colis inventé |
  | `APP_URL` | `https://new.vulcanaffutage.com` | `https://vulcanaffutage.com` |
  | `BETA_GATE_OPEN_AT` | *(absent)* | `2026-09-01T11:00:00+02:00` |

- **Identifiants PayPal live validés** (`app:paypal:check`) : jeton OAuth
  obtenu, aucune capture.

---

## 5. Points restés ouverts — décisions à prendre

Aucun n'empêche techniquement l'ouverture ; les deux premiers ont une portée
juridique ou commerciale.

1. **Aucun médiateur de la consommation n'est désigné.** L'article L.612-1 du
   Code de la consommation l'impose à tout professionnel vendant à des
   particuliers. Il faut adhérer à un médiateur agréé, puis inscrire son nom,
   son adresse et son site dans les CGV et sur la page contact. Rien ne peut
   être rédigé avant l'adhésion.
2. **Aucun atelier n'est créé en base.** La page « Ateliers » retombe donc sur
   son texte statique et renvoie vers le téléphone, et la page « Carte
   cadeau » décrit un bon pour un atelier de création de couteau **qui ne peut
   pas être acheté** : seule la carte à montant libre est proposée. À créer
   dans `/gestion/ateliers` (atelier + créneaux) avant l'ouverture, ou à
   assumer.
3. **Cinq entrées des menus produits mènent à une page vide** (Couteaux de
   cuisine, Cravate Western, Les Artisanaux, Le couteau de l'Ours, Couteaux de
   table) : aucun des 128 produits ne porte ces catégories. À reclasser en
   admin, ou à retirer des menus.
4. **Pas de signature DKIM détectée** sur `vulcanaffutage.com`. SPF
   (`-all`) et DMARC (`p=quarantine`) sont en place et alignés, donc les
   e-mails partent dans de bonnes conditions ; activer DKIM depuis le panneau
   OVH renforcerait encore la remise en boîte de réception.
5. **Le suivi de colis n'est pas automatique** faute de contrat API La Poste.
   Le gestionnaire saisit le numéro, le client reçoit le lien de suivi
   La Poste — qui fonctionne. Ce qui manque : la mise à jour automatique du
   statut, l'e-mail « colis livré » et, par ricochet, l'e-mail de satisfaction
   des commandes physiques. Souscrire la clé API (`developer.laposte.fr`),
   la poser dans `LAPOSTE_API_KEY`, et tout se rebranche seul.
6. **Le consentement cookies est conservé en session (72 h)**, pas dans un
   cookie dédié : un visiteur qui revient est re-sollicité. La CNIL recommande
   de conserver le choix — refus compris — de 6 à 13 mois. Non bloquant : le
   refus est bien respecté pendant toute la session.

---

## 6. Après l'ouverture — nettoyage

Une fois la bascule constatée et stabilisée (quelques jours suffisent) :

- retirer le bloc « Mise en service » de `public/.htaccess` ;
- supprimer le portail bêta : `App\Service\BetaGate`, `BetaGateSubscriber`,
  `BetaGateController`, `templates/beta/`, `public/styles/ds-v2-beta.css`,
  `public/scripts/ds-v2-beta.js`, et les variables `BETA_GATE_*` ;
- décider du sort de `new.vulcanaffutage.com` : il sert le même site et porte
  désormais un `X-Robots-Tag: noindex` pour ne pas concurrencer le domaine
  principal dans les moteurs. Le supprimer serait plus propre encore.
