← Roadmap publique

Contexte développement

Hub Client AWM V1.11.50Snapshot sécurisé de la version effectivement publiée. Les lignes potentiellement sensibles sont masquées automatiquement.
# Contexte développement — Hub Client AWM 1.11.50


---

## CHANGELOG.md

# Hub Client AWM 1.11.50 — déploiement manuel sans blocage Recovery

- Le canal manuel signé venant de Core peut installer Hub Client/Tech avec sauvegarde fichiers locale et rollback même lorsque Recovery complet n'est pas encore validé sur le site.
- Les mises à jour automatiques restent bloquées tant que `recovery_ready_for_auto` n'est pas confirmé.
- Le mode manuel n'affaiblit pas l'appairage, l'authentification du canal, la signature HMAC, le SHA-256, le contrôle du domaine Alliance ni la validation de version.
- Le hook Recovery de l'upgrader n'est pas relancé dans ce mode manuel afin d'éviter le même blocage; la sauvegarde locale de module reste obligatoire avant remplacement.

# Hub Client AWM 1.11.49 - Suite 4.5.235

- L'autopilote Hub Client/Tech est désormais bloqué tant que Recovery n'a pas `recovery_ready_for_auto`; chaque mise à jour AWM admise crée un point complet fichiers + BD via `admit-deploy` et exige un redémarrage frais via `finish-deploy`.
## 1.11.49 — Recovery auto-amorcé et télémétrie de sécurité — 2026-09-15
- Installe et raccorde automatiquement Recovery avec repli exact avant WordPress lorsque le serveur ignore la règle `.htaccess`, sans créer de dossier `/hub`.
- Adopte le raccord Bootstrap 1.1.3 déjà présent et conserve la sauvegarde privée du `index.php` original.
- Remonte à Tech uniquement des booléens de sécurité : intégrité route, périmètre backup confirmé, test de restauration et prêt pour automatisation; aucun secret.
- Les mises à jour automatiques restent bloquées jusqu'à validation réelle du périmètre et du test fichiers + SQL.

Date : 2026-09-15

Recovery 1.2.0 embarque, copie independante et installation automatique. Route /hub/recovery sans chargement WordPress. Archivage local avant transfert a Alliance; meme contenu sur plusieurs clients: pas de nouvel upload ZIP. Mise a jour tierce uniquement par le chemin protege, avec verifications fraiches.

Retention: version courante + cinq precedentes; sauvegardes completes: cinq. Pas de comptes generiques Tech 1/Responsable. Aucune migration destructive de donnees metier.

Candidate de stabilisation. Aucun deploiement effectue. Recette reelle WordPress + MySQL/MariaDB + PHP-FPM/OPcache + HTTPS et watchdog systeme obligatoire avant activation. Autopilote Suite AWM toujours suspendu. Les paquets des nouvelles mises a jour tierces proviennent encore du fournisseur WordPress de chaque site; leur telechargement unique depuis Alliance reste au roadmap.

## Historique

## 1.11.47 — Recovery externe et retention cinq versions — 2026-09-14

- Ajoute `recovery_available`, `recovery_url` et `recovery_cli_ready` au `fleet_state` compact.
- Intercepte `upgrader_pre_install` pour archiver l extension dans Recovery avant remplacement lorsque Recovery est configure.
- Une erreur de sauvegarde Recovery bloque la mise a jour; l absence de configuration Recovery conserve le comportement historique.
- Passe la retention locale de rollback de trois a cinq copies pour les modules AWM et extensions WordPress tierces.
- Aucun secret Recovery, mot de passe DB ou chemin serveur n est transmis a Alliance.

## 1.11.46 — Fraîcheur de flotte dans fleet_state — 2026-09-12

- fleet_state transmet maintenant l âge et la fraîcheur de l inventaire en plus des versions/autopilote/canal.
- Aucun secret Connector, chemin serveur ou clé API n est ajouté au payload.

## 1.11.45 — Pulse opérationnel transversal — 2026-09-12

- Envoie un `fleet_state` compact avec inventaire : versions runtime, autopilote, canal, dernier inventaire et dernier statut de mise à jour.
- Aucun secret Connector, chemin serveur ou clé API n est inclus dans cet état de flotte.

## Hub Client AWM 1.11.44 — bibliothèque WordPress

- Nouvelle route sécurisée `tech/plugin/install` pour installer, vérifier et activer une extension officielle WordPress.org demandée par Tech AWM.
- Les slugs AWM restent explicitement interdits sur cette route et continuent d utiliser le canal signé Core.
- La route réutilise l authentification Connector existante et vérifie la présence/version du plugin après installation.

# Hub Client AWM 1.11.43 — contrôles WordPress frais à la demande

- La route privée `tech/inventory` accepte `force_checks=1`.
- Une demande forcée relance `wp_update_plugins()`, `wp_update_themes()` et la vérification du Core WordPress avant de retourner l inventaire.
- Le cache d indexabilité Tech est invalidé afin que le statut Index/No-index reflète le contrôle demandé.
- Le mécanisme existant de mise à jour plugin conserve sauvegarde, validation de version, réactivation et rollback.

# 1.11.42 — autopilote AWM Hub Client + Tech

- Étend l autopilote stable à Tech AWM en plus de Hub Client.
- Tech est traité avant Hub Client afin de conserver l agent courant intact jusqu à la fin du cycle.
- Les autres modules centraux AWM ne sont jamais installés automatiquement sur un site client.
- Chaque paquet continue d utiliser publication Core, signature, SHA-256, sauvegarde et rollback.
- L inventaire Hub Client relit la version réellement présente sur disque après une auto-mise à jour pour éviter un statut temporairement périmé.
- Le contrôle s exécute de façon répartie par WP-Cron (premier passage environ 5 à 35 minutes après activation, puis chaque heure).

## 1.11.41 — 2026-09-11

- Ajoute l autopilote Hub Client : après appairage, une tâche horaire vérifie uniquement le canal stable Core et applique une nouvelle version Hub Client sans approbation WordPress répétée.
- Réutilise le paquet signé Core, la vérification SHA-256, le canal authentifié du `site_id`, la sauvegarde locale et le rollback déjà utilisés par la maintenance distante AWM.
- Ajoute la route privée `tech/plugin/update` permettant à Tech de mettre à jour une extension WordPress tierce précise avec sauvegarde locale des fichiers et vérification de version.
- Les modules AWM sont refusés sur cette route générique et restent exclusivement gérés par le canal Suite signé.
- En cas d accès fichiers non direct (`filesystem_method != direct`), la mise à jour automatique est refusée proprement plutôt que de demander des identifiants FTP.
- Les sauvegardes de plugin conservent les trois dernières copies locales par extension; le rollback de fichiers tente aussi de rétablir l état actif précédent.

## 1.11.40 — 2026-09-10
- Ajoute un fallback GeoIP serveur gratuit via **FreeIPAPI** lorsque les en-têtes de l hébergeur ne fournissent pas une vraie localité exploitable.
- Résout automatiquement ville, région, code région, pays, code postal et latitude/longitude approximatives pour les nouveaux visiteurs.
- FreeIPAPI n est appelé que si ville + coordonnées manquent; les en-têtes Cloudflare/GeoIP locaux et le filtre MaxMind local restent prioritaires.
- Cache le résultat GeoIP 12 h via une clé HMAC irréversible et limite volontairement Hub Client à 45 appels/minute pour rester sous la limite gratuite du fournisseur.
- L adresse IP brute n est jamais enregistrée dans WordPress ni envoyée à Alliance; elle est utilisée uniquement côté site client pendant le lookup GeoIP externe.
- Ajoute `geo_source` et `geo_precision` au contrat d événement afin que Stats sache distinguer localité GeoIP, région/pays et simple repli de fuseau.
- Le repli fuseau navigateur reste disponible pour diagnostic, mais ne doit plus créer artificiellement un point de visite sur la carte.


## 1.11.39 — 2026-09-10
- Corrige la carte historique Stats vide : le fuseau IANA du navigateur est maintenant envoyé avec tous les événements Web, pas seulement avec le heartbeat `presence`.
- Le contexte GeoIP approximatif déjà disponible côté hébergeur/reverse proxy est attaché aux page views, formulaires, conversions et engagements avant passage dans la file Connector.
- Ajoute les en-têtes de localisation courants Cloudflare, Vercel, CloudFront et GeoIP serveur comme sources facultatives.
- Aucune adresse IP ni position GPS n est transmise à Alliance; latitude/longitude restent arrondies à deux décimales.
- Cette évolution permet à Stats AWM d afficher les nouveaux points sur Aujourd hui / 30 jours / 3 mois au lieu de limiter la géographie au mode temps réel.

## 1.11.38 — 2026-09-09
- Ajoute le fuseau IANA du navigateur aux heartbeats `presence` comme repli cartographique approximatif lorsque le GeoIP local est incomplet.
- Le fuseau n'est envoyé que pour la présence temps réel et reste lié au contrat `client_id + site_id + instance_uuid`.
- Aucun GPS ni adresse IP n'est ajouté au tracker; GeoIP local reste prioritaire.

## 1.11.37 — 2026-09-09
- Ajoute le heartbeat `presence` Stats toutes les 20 secondes lorsque la page est visible.
- Accélère la remontée du heartbeat via wp-cron non bloquant afin d'alimenter la vue Visiteurs en direct.
- Résout localement une localisation GeoIP approximative depuis les en-têtes de l'hébergeur/reverse proxy lorsqu'ils existent.
- N'envoie jamais l'adresse IP ni une position GPS à Alliance; latitude/longitude GeoIP sont arrondies à deux décimales.
- Le heartbeat conserve le contrat `client_id + site_id + instance_uuid` et respecte la file Connector existante.

## 1.11.36 — 2026-09-09

- Après un appairage `AWM-SITE-*` réussi, Hub Client synchronise immédiatement le répertoire WordPress puis l inventaire Hub/Tech vers Core.
- Évite le cas où un site secondaire reste `Hub à vérifier` / inventaire non synchronisé jusqu à une action manuelle supplémentaire.
- La liaison reste valide même si le premier inventaire échoue; Hub Client journalise uniquement le code d erreur local et relance automatiquement au prochain cycle.
- Conserve le contrat `client_id + site_id + instance_uuid` et le tracker Stats first-party existant.

# CHANGELOG — Hub Client AWM

## 1.11.35 — 2026-09-09
- Migration automatique depuis les anciens plugins « Alliance Web Marketing Hub Connector », « AWM Hub Connector » et « CallInk Client Connector » : les anciennes copies actives sont désactivées lors de l'activation du Hub Client canonique.
- Génère l'`instance_uuid` dès l'activation afin qu'une nouvelle clé `AWM-SITE-*` puisse être appairée immédiatement à un site secondaire.
- Redirige les anciennes pages de réglages Connector vers `Hub > État de la liaison` pour éviter qu'un administrateur continue à utiliser une interface obsolète.
- Conserve le contrat multi-sites `client_id + site_id + instance_uuid`; aucun secret ou code de liaison n'est exposé dans l'interface ou les logs.
- La preuve runtime continue d'indiquer les anciennes copies désactivées automatiquement.

## 1.11.34 — 2026-09-08

- Ajoute le tracker Stats AWM automatique sur les pages publiques des sites jumelés.
- Les événements sont assainis localement puis envoyés en lot par le Connector; le secret Alliance n'est jamais exposé au navigateur.
- Chaque lot conserve le `client_id`, le `site_id` et l'`instance_uuid` du site connecté afin de distinguer site principal et sites secondaires.
- Suit pages vues, sessions/visiteurs pseudonymes, engagement, formulaires, conversions explicites, clics téléphone/courriel, référent et UTM.
- Ne collecte ni adresse IP dans les données Stats, ni valeur de champ, ni contenu de formulaire, ni chaîne de requête de l'URL.
- Évite le double comptage lorsqu'un ancien script `stats-awm.js` est encore installé manuellement.
- Met en file locale et expédie par lots afin de ne pas ralentir le rendu de la page.
- Dès qu'un Hub Client est jumelé, son `site_id` devient automatiquement une source Stats/Health du client; aucun ajout manuel du site n'est requis.

# 1.11.32 — inventaire Tech à la demande
- Ajoute la route privée `tech/inventory`, authentifiée par le canal de scan Hub Client existant.
- Permet au dashboard Tech côté Alliance de demander immédiatement le profil logiciel complet sans attendre le prochain contact spontané du runtime.
- La route reste invisible côté client et ne transmet aucun secret Alliance ni clé de vulnérabilités.
- Conserve le logo Alliance officiel strictement intact.

# 1.11.31 — contenu long, image Elementor et génération média Tech
- Étend le contexte de texte sélectionné afin que Tech puisse réécrire des paragraphes plus longs sans tronquer prématurément le contenu utile.
- Autorise le réglage `image` uniquement sur les widgets Elementor image et valide l attachment local avant écriture.
- Ajoute le transport privé `tech/generate-image` sur les canaux Connector résilients.
- Le média généré est importé localement et peut être appliqué au widget ciblé avec snapshot et rollback.
- Tech demeure totalement invisible dans le Hub Client.

# 1.11.30 — styles Elementor sécurisés pour Tech
- Étend le moteur privé de modification Elementor utilisé par Tech AWM aux couleurs, fonds, alignements, tailles de police responsive, marges et padding.
- Valide strictement les unités, valeurs, couleurs et types d éléments avant toute écriture.
- Continue de créer un snapshot avant modification et de restaurer automatiquement si le document ou le rendu devient invalide.
- Expose uniquement le sous-ensemble de styles nécessaires à l intervention Alliance; aucun PHP, JavaScript ou CSS arbitraire n est accepté.

# 1.11.29 — handoff Elementor autonome dans Hub Client

- La route privée `tech/intervention/prepare` ne dépend plus du runtime Tech déjà chargé dans la requête courante.
- Hub Client peut valider directement la session auprès d Alliance via le Connector résilient puis créer le handoff Elementor à usage unique.
- Le handoff conserve le même format sécurisé attendu par Tech AWM et reste limité au domaine jumelé, à la page ciblée et à la durée de la session.
- La version Tech réellement présente sur disque est relue avant la redirection et les caches PHP du dossier Tech sont invalidés.
- Si le runtime Tech courant sait déjà préparer Elementor, la délégation normale reste prioritaire; le nouveau mécanisme n est qu un repli déterministe.

# 1.11.28 — auto-réparation propre de Tech AWM

- Ajoute un second passage de réparation propre pour Tech AWM lorsqu une mise à jour distante reste bloquée sur une ancienne version.
- La réparation sauvegarde Tech, désactive le runtime courant, retire uniquement le dossier canonique `tech-awm`, réinstalle le paquet officiel signé, réactive le module puis invalide OPcache.
- Le paquet reste vérifié par SHA-256 et signature Core; aucun autre plugin client n est touché.
- Retourne `success_repaired` et `clean_repair=true` pour que Core puisse distinguer une mise à jour normale d une récupération automatique.
- Futur : ajouter un diagnostic de permissions/fichiers verrouillés avant remplacement afin d éviter même le second passage.

# 1.11.27 — paquet canonique à racine unique

- Corrige uniquement la distribution du module : le ZIP contient maintenant **un seul dossier racine** `hub-client-awm/`.
- Supprime le dossier parasite `hc/` qui faisait refuser le paquet par Core avant installation.
- Conserve la route privée `awm-client-hub/v1/tech/intervention/prepare` et la délégation Tech introduites en 1.11.26.
- Conserve le logo Alliance officiel strictement intact et son SHA-256 canonique.

# 1.11.26 — route Elementor privee toujours disponible

- Deplace le point d entree prive `awm-client-hub/v1/tech/intervention/prepare` sous la responsabilite de Hub Client afin d eviter les 404 lorsque Tech vient d etre mis a jour.
- `update/status` remonte maintenant `tech_prepare_route_ready` en plus de la version runtime Tech reellement chargee.
- La route delegue ensuite la preparation a Tech AWM et retourne une erreur explicite si le runtime Tech n est pas disponible, au lieu de `No route was found`.
- Conserve le logo Alliance canonique strictement intact.

# 1.11.25 — preuve runtime Tech et invalidation PHP

- Après une installation distante, invalide les scripts PHP du module dans OPcache et nettoie le cache des extensions WordPress.
- Désactive les copies actives historiques de Tech AWM ou Hub Client qui pourraient charger un ancien runtime avant le dossier canonique.
- `update/status` retourne maintenant `tech_runtime_version`, soit la constante Tech réellement chargée dans la requête courante.
- Permet à Core de distinguer une version de fichier installée d un runtime PHP réellement actif avant d ouvrir Elementor.
- Conserve le logo Alliance officiel strictement intact.

# 1.11.24 — administration locale épurée

- Retire complètement le grand panneau explicatif **Sécurité** de l’administration locale Hub Client.
- Les protections HTTPS, sessions chiffrées, validation Connector et contrôles de domaine restent actives en arrière-plan; seule leur exposition visuelle côté client est supprimée.
- Confirme la séparation d’architecture : Tech AWM et les détails opérationnels de sécurité sont réservés à Alliance Web Marketing.
- Conserve le provisioning silencieux de Tech AWM et les mécanismes de mise à jour sans ajouter de service ou d’outil Tech au Hub Client.
- Le logo Alliance officiel reste strictement identique au fichier canonique fourni.

# 1.11.23 — Tech AWM devient invisible côté client

- Retire Tech AWM de la navigation, des cartes, des sections et des écrans du portail `/hub/`.
- Une URL historique `?section=tech_awm` est ramenée vers l accueil du Hub.
- Retire la carte Tech de l administration locale Hub Client; le provisioning et la télémétrie restent strictement en arrière-plan.
- Tech AWM demeure installable et maintenable par Alliance, mais n est plus présenté comme un service client.
- Le logo Alliance officiel reste strictement identique au fichier canonique fourni.

# 1.11.22 — télémétrie Connector pour Tech AWM 1.4.3
- Mémorise localement le dernier transport Connector fonctionnel, sa latence et les erreurs récentes, sans stocker le secret.
- Expose à Tech AWM un test contrôlé des quatre transports : REST en-têtes, REST corps HTTPS, admin-ajax et pont frontal.
- Enrichit le profil Tech sécurisé avec le dernier transport, le dernier succès et le dernier événement diagnostic.
- Le logo Alliance officiel reste strictement identique au fichier canonique fourni.

# 1.11.21 — auto-provision du paquet Tech AWM manquant
- Lorsque Tech AWM est **activé par Alliance** mais absent du WordPress client, Hub Client demande à Core l'offre signée du paquet Tech et tente son installation automatiquement.
- Ajoute le bouton **Installer / réparer Tech AWM** dans l'administration Hub Client pour forcer une nouvelle tentative et afficher le diagnostic exact.
- Répare les installations partielles : un dossier `tech-awm` incomplet est sauvegardé en quarantaine puis retiré avant une nouvelle installation propre.
- Accepte les variantes `www` / sans `www` du même domaine Alliance pour le lien HTTPS signé du paquet, sans élargir l'autorisation à un autre domaine.
- Affiche la méthode de système de fichiers lorsqu'un hébergement refuse l'installation distante afin de rendre l'erreur exploitable.
- Le logo Alliance officiel reste strictement inchangé et conserve son SHA-256 canonique `1b0dcbd96e1ed931ce785cda2918e7dc38597c214735e21c92243c02eb43b13a`; le badge Hub orange demeure séparé.

# 1.11.20 — logo Alliance strict dans toutes les sections du Hub Client
- Applique une source de rendu unique du logo Alliance officiel à toutes les sections du portail `/hub/` : Accueil, CallTracker et ses sous-sections, Stats, Tech AWM, Mon compte, Profil, Apparence et Facturation.
- Les écrans de connexion et d’état non lié utilisent exactement le même composant de marque.
- Renforce la protection CSS afin qu’aucun style de module ne puisse filtrer, recolorer, masquer, déformer, recadrer ou redessiner le PNG Alliance.
- Le badge orange Hub demeure un asset distinct superposé et n’altère jamais le fichier du logo.
- Le PNG officiel est recopié octet pour octet depuis le fichier canonique et conserve son SHA-256 `1b0dcbd96e1ed931ce785cda2918e7dc38597c214735e21c92243c02eb43b13a`.

# 1.11.19 — logo Alliance strict et vérifié par empreinte
- Verrouille le logo Alliance officiel avec son SHA-256 canonique `1b0dcbd96e1ed931ce785cda2918e7dc38597c214735e21c92243c02eb43b13a`.
- Ajoute une vérification d'intégrité avant chaque utilisation du logo dans le menu WordPress, le bandeau Hub Client et le portail `/hub/`.
- En cas de fichier absent ou modifié, Hub Client refuse d'afficher une variante : le logo de fond est masqué plutôt que redessiné, recoloré ou remplacé.
- Conserve le badge orange Hub comme asset indépendant superposé, sans modifier le PNG Alliance.
- Ajoute `assets/images/alliance-logo.sha256` comme référence d'intégrité de livraison.

# 1.11.18 — logo Alliance officiel intact sur toutes les surfaces
- Étend l'identité 1.11.17 au portail public `/hub/` : logo Alliance PNG officiel + badge Hub orange séparé.
- Supprime l'ancien SVG composite qui redessinait le logo Alliance afin qu'aucune surface Hub Client ne puisse utiliser une variante du logo.
- Le menu WordPress conserve le logo Alliance original comme icône et ajoute le badge Hub par CSS.
- Le bandeau d'administration et le portail utilisent deux assets superposés sans filtre, recoloration, déformation ni redessin du logo Alliance.
- L'empreinte SHA-256 du PNG Alliance est conservée identique au fichier officiel fourni.

# 1.11.17 — vrai logo Alliance + badge Hub séparé
- Intègre le logo Alliance officiel fourni, pixel pour pixel, dans `assets/images/alliance-logo.png`.
- Le logo Alliance n'est plus redessiné ni recoloré dans l'administration.
- Conserve le pictogramme orange Hub comme badge indépendant superposé au logo.
- Applique cette composition dans l'onglet WordPress Hub et dans le bandeau supérieur à côté du titre Hub.
- Le badge du menu est ajouté en CSS afin que le fichier du logo Alliance reste intact.

# 1.11.16 — logo Hub canonique sans cache
- Remplace toutes les références à l'ancien asset `hub-client-menu-icon.svg` par `hub-awm-product-logo.svg`.
- Le menu WordPress, l'en-tête admin et le portail `/hub/` utilisent tous le même logo Hub AWM avec badge orange.
- Ajoute un versionnement explicite de l'URL du logo pour empêcher l'ancien logo de rester en cache.

## 1.11.15 - 2026-09-05

- Repare les installations Hub Client dupliquees : lors de l activation, la copie 1.11.15 desactive automatiquement les anciennes copies actives du meme module.
- Affiche le runtime et le chemin plugin reel dans l administration locale pour confirmer quelle copie est chargee.
- Force un cache-busting du CSS Premium avec filemtime afin que le nouveau shell ne reste pas masque par un ancien cache navigateur/CDN.
- Conserve les donnees, le Connector, les options et le client_id CRM; aucune re-liaison n est requise.

## 1.11.15 - 2026-09-05
- Hub Client reconnait toujours le plugin qui execute l agent, meme si son dossier historique ne s appelle pas hub-client-awm.
- L inventaire renvoie le vrai plugin_file actif et la version AWM_CLIENT_HUB_VERSION.
- Une mise a jour depuis un ancien dossier migre vers le dossier canonique hub-client-awm avec sauvegarde et reactivation.
- Les prochaines mises a jour distantes ne dependent plus du nom du dossier historique.

# Hub Client AWM 1.11.13 — interface admin Hub Premium

- Utilise le logo produit Hub AWM avec badge orange Hub dans le menu et l'en-tete local.
- Aligne l'ecran Hub Client sur le shell Premium sombre de Hub AWM : cartes, badges, boutons, formulaires et responsive.
- Regroupe l'etat Connector et Tech en donnees compactes; les blocs Relier et Securite deviennent repliables.
- Conserve la liaison CRM canonique, le Connector chiffre et toutes les fonctions existantes.

## 1.11.12 — 2026-09-04
- Ajoute un transport Connector résilient REST en-tête → REST corps HTTPS → admin-ajax.
- Le statut Tech et les échanges Tech utilisent automatiquement le canal disponible.
- Les erreurs finales indiquent les codes HTTP des transports sans exposer le secret.

## 1.11.11 — 2026-09-04
- Renforce le canal de déploiement distant utilisé par Core AWM 4.5.97.
- Accepte le secret de scan dans l'en-tête habituel ou, en repli, dans le corps HTTPS lorsque l'hébergement filtre les en-têtes personnalisés.
- Retourne des erreurs REST explicites pour distinguer Hub non lié, canal non synchronisé et authentification refusée.
- Télécharge les paquets avec un client HTTP sécurisé dédié et rapporte clairement le code HTTP si Alliance refuse le paquet.
- Compatible avec le nouvel endpoint de téléchargement REST signé de Core, sans exposer de chemin serveur ni d'URL permanente de fichier.

## 1.11.10 — 2026-09-04

- Corrige le statut Tech AWM qui pouvait être refusé par certains hébergements malgré une activation Alliance valide.
- Ajoute le transport Connector Tech compatible via le corps HTTPS lorsque les en-têtes personnalisés sont filtrés.
- Répare automatiquement le `client_id` local si Core authentifie le Connector sur une autre fiche CRM canonique.
- Affiche l'identifiant de fiche CRM dans l'administration Hub Client et le client CRM confirmé par Tech.

## 1.11.9 — 2026-09-04
- Le portail `/hub/` utilise maintenant le logo produit Hub AWM canonique, avec la même identité visuelle que Hub AWM; le logo CRM du client ne remplace plus le logo du produit.
- L administration locale Hub utilise le même logo Hub AWM canonique.
- Conserve le nom et le contexte du client à côté du logo sans créer une variante graphique Hub Client.
- Prépare l intégration Tech AWM 1.4.0 avec fenêtre front-end contextuelle et ciblage d URL internes.

## 1.11.8 — 2026-09-04
- Affiche Tech AWM dans la navigation du portail dès que l activation centrale Alliance est active, même avant installation du paquet runtime.
- Ajoute dans l administration Hub Client une carte d état Tech AWM : autorisation Alliance, paquet installé, version et action attendue.
- Si Tech est activé mais absent, le portail affiche une explication plutôt que de masquer silencieusement le module.
- Le statut Tech est lu via le Connector Hub Client existant et mis en cache brièvement; aucun secret supplémentaire n est créé.

## 1.11.7 — 2026-09-04
- Hub Client utilise désormais exactement le même logo Hub AWM que le module Hub, sans badge/variante client.
- L’absence de campagne CallTracker n’est plus traitée comme une erreur Hub Client : CallTracker reste entièrement optionnel.
- Le bloc Réception directe des formulaires affiche un état informatif non bloquant lorsqu’aucune campagne n’existe.
- Le loader d’administration ne transforme plus les alertes passives de sous-modules en fenêtres d’erreur; seuls les résultats explicites d’une action ouvrent le message Premium.

# Changelog Hub Client AWM

## 1.11.6 — 2026-09-04
- Corrige l’erreur critique dans l’administration Hub Client lors du rendu de « Réception directe des formulaires ».
- Le hook `awm_client_hub_admin_after_connection` déclare maintenant explicitement 2 arguments pour `AWM_Client_Hub_Form_Capture::render_admin()`.
- `render_admin()` conserve une valeur de secours pour l’autorisation runtime afin d’éviter une erreur fatale si la méthode est invoquée par une intégration plus ancienne.
- Vérifie les autres consommateurs du même hook : l’agent de mise à jour utilisait déjà correctement 2 arguments.

## 1.11.5 — 2026-09-04
- Extrait le runtime Tech AWM vers le paquet autonome Tech AWM 1.1.0.
- Le portail /hub/ conserve la section Tech AWM lorsque le paquet autonome est actif et autorisé par Alliance.
- Ajoute Tech AWM à l inventaire et au moteur de mises à jour AWM.
- Autorise Core à installer automatiquement Tech AWM lorsqu il est absent, avec SHA-256, activation contrôlée et rollback pour les mises à jour ultérieures.

## 1.11.4 — 2026-09-04

- Intègre **Tech AWM** directement dans Hub Client; aucun plugin ou bridge Tech séparé n est requis.
- Ajoute une section Tech AWM au portail `/hub/` uniquement lorsque Alliance l active dans Thech AWM.
- Ajoute une bulle contextuelle sur les pages WordPress pour discuter, joindre des fichiers, sélectionner un élément Elementor et proposer des modifications.
- Réutilise le Connector Hub Client existant et les routes Studio sécurisées de document/patch/snapshot/restore.
- Sépare les permissions Chat, Diagnostics, Écriture Elementor, Actions WordPress sûres et Fichiers.
- Revérifie l activation Alliance avant toute application ou restauration et refuse une écriture si le hash Elementor a changé depuis l analyse.
- Permet les diagnostics/actions WordPress sûres depuis la section Hub même sans page sélectionnée; les modifications de page exigent un contexte WordPress éditable.

## 1.11.3 — 2026-09-03

- Refonte visuelle **Premium adaptative** de CallTracker → Routage inspirée du modèle 3 validé.
- Tous les contours, halos, fonds, icônes et CTA dérivent automatiquement des couleurs `brand` et `secondary` configurées pour le client; aucune palette bleue fixe n est imposée.
- Ajoute un calcul de contraste pour garder le texte des actions principales lisible même avec une couleur client très claire ou très foncée.
- Agrandit les pictogrammes de campagne, route, horaire, fuseau, délai et destinations avec SVG monochromes pilotés par `currentColor`.
- Renforce la graisse des titres, valeurs et boutons dans le parcours CallTracker sans remplacer les polices choisies par le client.
- Transforme les quatre étapes du funnel en stepper premium relié et rend l étape active beaucoup plus évidente.
- Passe le résumé routage à quatre cartes : route actuelle, état, fuseau et délai de débordement.
- Recompose l horaire en deux tableaux compacts avec en-têtes Jour / Ouverture / Fermeture, tout en conservant le responsive mobile.
- Rend **Enregistrer le routage**, Voir la campagne et Configurer le routage visuellement identifiables comme de vrais boutons dans toutes les palettes client.

## 1.11.2 — 2026-09-03

- Refonte UX de **CallTracker → Routage** pour condenser les réglages sans retirer de fonction.
- Regroupe destinations, fuseau et délai dans une grille compacte à deux rangées.
- Affiche l horaire hebdomadaire sur deux colonnes en bureau afin de réduire fortement la hauteur de page.
- Remplace les champs `time` natifs par des listes d heures 24 h par tranches de 15 minutes pour supprimer le grand sélecteur blanc du navigateur.
- Ajoute un interrupteur compact pour activer l horaire et des blocs distincts pour fermetures spéciales et Message 2.
- Améliore les espacements, tailles de contrôles, responsive et contraste en thème sombre.

## 1.11.1 — 2026-09-03

- Transforme chaque carte **Campagnes** en point d entrée vers une fiche de campagne dédiée.
- Le **nom de la campagne** et son numéro restent visibles dans la liste puis dans l en-tête de la fiche.
- La fiche affiche uniquement les **appels**, **formulaires** et **CPL** de la campagne sélectionnée.
- Ajoute un accès direct au routage de la campagne depuis sa fiche.
- Conserve l isolation stricte : une campagne d un autre client ne peut pas être ouverte par modification de l URL.

## 1.11.0 — 2026-09-02

- Remplace le parcours client centré sur l achat direct par **CallTracker → Nouveaux services → Nouveau funnel → Configuration du numéro → Formulaire/Webhook → Routage**.
- Ajoute **Mes funnels** et **Nouveau funnel** sous Nouveaux services; la liste reflète l état commercial fourni par CRM.
- Étape 1 : le client confirme le Funnel CallTracker à **10 $/mois** et CRM crée le service sans démarrer la facturation tant que le numéro n est pas attribué.
- Étape 2 : recherche, achat et attribution du numéro au funnel déjà créé.
- Étape 3 : webhook du formulaire, copie, test et documentation intégrée.
- Étape 4 : routage complet avec destination principale, fuseau, horaires, jours fermés, destination hors heures, débordement et délai.
- L ancien écran Numéros reste accepté comme alias de compatibilité mais n est plus un onglet principal du CallTracker client.
- Les campagnes existantes renvoient vers l écran Routage dédié au lieu de dupliquer un éditeur simplifié.

## 1.10.2 — 2026-09-02

- Ajoute **CallTracker → Formulaires** dans l espace client.
- Affiche pour chaque funnel son URL de webhook unique avec bouton **Copier**.
- Affiche le dernier formulaire reçu et un bouton **Tester la configuration** sans créer de faux lead.
- Intègre directement la documentation Elementor Pro, Gravity Forms, WPForms et formulaire personnalisé.
- Fournit un exemple JSON et recommande `submission_id` pour améliorer le dédoublonnage.
- Rappelle que l URL du webhook est secrète et doit rester privée.

## 1.10.1 — 2026-09-02

- Ajoute **CallTracker → Numéros** dans le Hub Client.
- Le client peut rechercher un numéro local ou sans frais par pays, indicatif, province/État, ville ou chiffres souhaités.
- Chaque résultat permet de nommer le funnel, confirmer le service à 10 $/mois puis acheter et attribuer le numéro.
- Le Hub n accède jamais aux identifiants Twilio; toutes les recherches et opérations facturables passent par Core AWM.
- L écran est responsive et affiche clairement la formule **1 numéro + 1 formulaire**.

## 1.10.0 — 2026-08-31
- Ajoute les routes privées Studio `page-document`, `update-page-content` et `restore-page-snapshot`.
- Expose à Studio un outline Elementor contrôlé avec IDs et contenu éditable des widgets standards, sans exposer de secret local.
- Applique uniquement des opérations autorisées sur Heading, Text Editor et Button; aucun widget inconnu n est supprimé ni remplacé.
- Autorise l ajout de sections contrôlées à la fin d une page en réutilisant le moteur Elementor local Containers/legacy.
- Crée une sauvegarde avant chaque modification Elementor ou SEOPress, avec empreinte SHA-256 et restauration sécurisée.
- Refuse l écriture si le document Elementor a changé depuis l analyse afin d éviter d écraser une modification concurrente.

## 1.9.5 — 2026-08-27
- Ajoute `/awm-client-hub/v1/studio/publish-page`.
- La publication est limitée aux pages créées par Studio et aux statuts brouillon/en attente/privé.
- Conserve la création initiale en brouillon et les protections SEO existantes.

## 1.9.4 — 2026-08-27
- Ajoute Hero `split` et `image-background` au moteur Studio.
- Ajoute largeur contrôlée 1080/1180/1280/1360 px et échelle typographique responsive.
- Applique réellement l alternance image/texte détectée dans la page de référence.
- Dérive les surfaces sombres/claires depuis la palette du client plutôt que d imposer une couleur générique.
- Conserve Containers, repli Sections/Colonnes, brouillon, noindex et validation du rendu.

## 1.9.3 — 2026-08-27
- Expose la typographie Elementor du site client à Core Studio.
- Applique le profil de design Studio contrôlé aux pages Elementor générées.
- Ajoute effets de survol statiques accessibles et respecte prefers-reduced-motion.

## 1.9.2 — 2026-08-27
- L agent Studio accepte maintenant les modes Photos IA, Photos du client et Mixte.
- Une page peut être créée sans images générées lorsque le mode Photos du client est choisi.
- Le mode Mixte accepte une seule image IA principale; le mode Photos IA conserve l exigence de deux images minimum.
- Le score SEO et le rendu Elementor s adaptent au mode photo sans supprimer les protections de brouillon/noindex.

# Changelog — Hub Client AWM

## 1.9.1 — 2026-08-27
- Ajoute `/awm-client-hub/v1/studio/pages-scan` pour analyser toutes les pages existantes par lots de 100.
- Analyse Elementor ou le contenu WordPress : H1/H2/H3, nombre de mots, images et ALT.
- Lit titre SEO, méta description, mot-clé, canonical, métas sociales et noindex SEOPress.
- Calcule un score SEO pour chaque page et signale les pages système sensibles.
- Ajoute `/awm-client-hub/v1/studio/update-page-seo` pour une révision SEOPress explicite depuis Alliance.
- Refuse la modification des pages système sensibles sans confirmation spécifique.
- Conserve toutes les routes de création, médias et réparation Studio 1.9.0.

## 1.9.0 — 2026-08-27
- Détecte SEOPress et SEOPress Pro dans l’état Studio du site.
- Reçoit au moins deux images générées par Core et les enregistre localement dans la médiathèque.
- Nomme les fichiers `nom-de-la-page-0001.jpg`, `-0002.jpg` et suivants.
- Définit `0001` comme image mise en avant et renseigne titre, ALT et description des médias.
- Intègre la première image dans le Hero et la deuxième dans le contenu Elementor.
- Configure les métadonnées SEOPress et maintient noindex sur le brouillon; noindex est retiré à la publication.
- Retourne un score SEO Studio et les informations médias à Hub.


## 1.8.9 — 2026-08-27
- Corrige la génération Studio pouvant produire une page Elementor blanche.
- Ajoute `isInner` à tous les widgets générés conformément à la structure Elementor.
- Détecte l activation réelle des Flexbox Containers.
- Génère automatiquement une structure legacy Section / Colonne / Widget lorsque Containers n est pas disponible.
- Valide le JSON enregistré, le nombre d éléments et le rendu frontend avant de retourner un succès.
- Retente automatiquement en Sections/Colonnes si un rendu Containers est vide.
- Ajoute `/awm-client-hub/v1/studio/repair-page` pour réparer uniquement les brouillons Studio existants.
- Conserve la publication directe bloquée et les secrets hors du site client.

## 1.8.8 — 2026-08-27
- Ajoute l’agent local privé **Studio AWM**.
- Ajoute `/awm-client-hub/v1/studio/status` pour analyser Elementor, Elementor Pro, thème, WordPress, PHP, logo et palette.
- Ajoute `/awm-client-hub/v1/studio/create-page` pour créer uniquement des brouillons WordPress/Elementor.
- Réutilise le secret de commande Hub Client 256 bits déjà synchronisé avec Core; aucune nouvelle clé n’est exposée.
- Rend les commandes de création idempotentes par identifiant de requête.
- Reconstruit localement les widgets Elementor depuis une liste de sections autorisées; aucun PHP, JavaScript ou HTML arbitraire du brief n’est exécuté.
- Conserve les fonctions portail, CallTracker, Stats, Facturation, profil, apparence et mises à jour existantes.

---

## 1.8.7 — 2026-08-25

- Ajoute la lecture des enregistrements CallTracker par proxy local de session.
- Ne reçoit plus d URL Twilio brute dans le contrat client.
- Utilise Core pour vérifier la propriété puis récupérer le média avec les secrets conservés côté Alliance.
- Ajoute un contrôle audio dans Appels uniquement lorsqu un enregistrement autorisé existe.
- Affiche les appels dans le fuseau de leur campagne à partir de la date UTC canonique.
- Conserve l état CPL en validation et les contrôles fail-closed de 1.8.6.

---

## 1.8.6 — 2026-08-25

- Affiche un état **CPL en validation** lorsque des campagnes CallTracker du client ne sont pas encore approuvées.
- Indique le nombre de campagnes approuvées par rapport au total sans exposer les détails administratifs internes.
- Masque les lignes CPL des campagnes en attente et n’affiche jamais les données d’une autre campagne comme remplacement.
- Conserve les campagnes, appels, formulaires et Dialer accessibles selon les services et permissions existants.
- Remplace les confirmations navigateur natives de suppression du Message 2 et d’une attribution de formulaire par des confirmations AWM intégrées avec contrôle serveur.
- Exige Core AWM 4.5.39 et CallTracker AWM 1.9.2 pour la validation complète.

---

## 1.8.5 — 2026-08-24

- Mon compte → Facturation affiche maintenant les avoirs appliqués aux factures natives CRM.
- Le solde visible tient compte des paiements et des crédits.
- Ajoute les statuts Réglée et Créditée à l’affichage client.
- Le résumé de facturation distingue le total des avoirs et regroupe les factures soldées.
- Une facture sans solde n’affiche plus d’action de paiement.
- Aucun détail du grand livre interne ni aucune donnée sensible de paiement n’est exposé au portail.

---

# Changelog — Hub Client AWM

## 1.8.4 — 2026-08-24

- Remplace les bandeaux `.awm-alert` de l’administration Hub par un loader local.
- Supprime aussi les notices réseau/utilisateur WordPress et les update nags sur la page Hub.
- Conserve les erreurs importantes ouvertes jusqu’à fermeture; les succès disparaissent automatiquement.
- Aucun changement au Connector, aux sessions, à la facturation ou au Dialer.

## 1.8.3 — 2026-08-24

- Ajoute sur `/hub/` deux modes clairement séparés : **Connexion Alliance** et **Compte WordPress autorisé**.
- Permet de saisir directement un identifiant/courriel et un mot de passe WordPress sur `/hub/`; le mot de passe est validé localement par WordPress et n’est jamais transmis à Alliance.
- Après authentification locale, Core vérifie toujours que la référence cryptographique du compte fait partie des utilisateurs explicitement autorisés dans la fiche client.
- Conserve le bouton de continuation pour un utilisateur WordPress déjà connecté.
- Remplace l’icône visible du menu `Hub` par la base graphique AWM officielle utilisée par les autres modules, avec un petit badge portail/client.
- Conserve les dimensions 20 × 20 px et l’alignement WordPress.
- Aucun changement de Connector, session, facturation, Dialer ou données client.

## 1.8.2 — 2026-08-24

- Corrige la taille de l’icône **Hub** dans le menu WordPress du site client.
- Force l’icône AWM à 20 × 20 px dans le menu afin de l’aligner sur les autres entrées WordPress.
- Conserve le libellé visible **Hub** côté client et l’identité technique **Hub Client AWM** dans Core/diagnostics.
- Aucun changement des sessions, du Connector, de la facturation, du Dialer ou des données métier.

---

## 1.8.1 — 2026-08-24

- Déplace **Facturation** dans **Mon compte → Facturation**; elle n’est plus présentée comme un module CRM client.
- Retire le module interne `crm_awm` de la navigation et des cartes de services du Hub côté client.
- La facturation du compte Alliance reste disponible indépendamment de l’activation d’un éventuel service CRM destiné aux propres clients du client.
- Ajoute au sous-onglet Facturation le résumé du solde, des factures à payer, en retard et payées.
- Conserve le paiement sécurisé via SSO WHMCS sans faire transiter de numéro de carte ni de CVV dans AWM.

---

## 1.7.0 — 2026-08-24

- Présente le module côté WordPress client simplement sous le nom visible **Hub** avec une icône AWM dédiée.
- Refonte le Dialer CallTracker sur le modèle administrateur : campagne, grand numéro, clavier 1–9/*/0/#, activation micro, appel, raccrochage, effacement et états Twilio.
- Ajoute DTMF pendant un appel lorsque le SDK Twilio le permet.
- Ajoute dans Campagnes la modification du numéro de réception et la gestion du Message 2 publicitaire.
- Permet au client de téléverser/remplacer/supprimer un MP3 Message 2 de 5 Mo maximum; le contenu reste stocké chez Alliance.
- Affiche Message 1 en lecture seule, sous contrôle Alliance.
- Affiche les appels sortants comme **Sortant** et rappelle qu’ils sont exclus des leads/CPL.
- Conserve le Connector, sessions, agent de mise à jour et personnalisation existants.

---

# Changelog

## 1.6.1 — 2026-08-24
- Premier test reel du deploiement distant Core → Hub Client.
- Force le bootstrap du secret de commande distante lorsque 1.6.0 a ete installe manuellement mais que Core ne l'a pas encore recu.
- La route locale de diagnostic indique maintenant explicitement si l'agent est pret.
- Aucun changement des sessions, du Connector, de Profil/Apparence ou des donnees client.
 — Hub Client AWM

## 1.6.0 — 2026-08-24

- Ajoute l’agent local de mises à jour AWM pilotable depuis Core sans connexion manuelle à wp-admin.
- Expose les endpoints privés `/awm-client-hub/v1/update/status`, `/update/apply` et `/update/rollback`, authentifiés avec le secret 256 bits déjà utilisé par le Connector.
- Synchronise l’inventaire des modules AWM installés, leurs versions et leur état actif/inactif vers Core.
- Vérifie que chaque commande provient de la plateforme Alliance liée, exige HTTPS, valide la signature HMAC et le SHA-256 du ZIP avant installation.
- Exécute l’installation avec les API WordPress locales seulement lorsque le système de fichiers est disponible en mode `direct`.
- Sauvegarde le dossier du module avant remplacement, conserve jusqu’à trois sauvegardes par module et restaure automatiquement en cas d’échec ou de version inattendue.
- Intègre aussi les publications Core au système natif de mises à jour WordPress comme voie de secours.
- Aucune donnée métier, session, Connector ou personnalisation client n’est supprimée par une mise à jour de fichiers.

---
## Historique conservé

## 1.5.0 — 2026-08-24

- Synchronise un annuaire minimal des utilisateurs WordPress vers Core AWM afin qu’Alliance puisse les autoriser depuis la fiche client.
- L’accès local à `/hub/` n’est plus accordé simplement parce qu’un compte possède `manage_options`; Core exige maintenant une autorisation explicite du compte scanné.
- Ajoute un callback privé de scan protégé par un secret aléatoire chiffré localement et dans le coffre Core.
- Synchronise aussi l’annuaire après création, modification, changement de rôle ou suppression d’un utilisateur.
- Corrige le sélecteur de couleur d’Apparence : le champ perd son focus après sélection et la molette retrouve immédiatement le défilement vertical.
- Conserve la liaison Hub Connector existante, les sessions chiffrées, le portail modulaire et les données métier chez Alliance.

---
## Historique conservé

# Changelog — Hub Client AWM

## 1.4.0 — 2026-08-23

- Transforme `/hub/` en portail **modulaire** : Accueil, CallTracker, Stats et Mon compte sont séparés en onglets de premier niveau.
- Regroupe Campagnes, Leads, Appels, CPL et Dialer dans le module CallTracker avec une sous-navigation dédiée.
- Stats AWM devient un module distinct et n’apparaît que lorsqu’il est activé pour le client.
- La navigation utilise le registre des services renvoyé par Core; un module non attribué au client n’est ni présenté ni ouvert par le portail.
- Ajoute un accueil par cartes de services actifs avec accès direct aux modules.
- Améliore le responsive téléphone/tablette : onglets défilables, cartes en une colonne, KPI adaptatifs et tableaux Leads/Appels/CPL convertis en cartes lisibles sur petit écran.
- Conserve Profil et Apparence dans un groupe Mon compte distinct des modules métier.
- Conserve la liaison Connector, la session chiffrée, le Dialer et les données historiques sans changement d’identifiant ni de stockage.

---
## Historique conservé

## 1.3.0 — 2026-08-23

- Ajoute l’onglet **Profil** dans `/hub/` pour modifier le nom affiché et la fonction du client.
- Le profil d’affichage reste séparé du nom canonique, du courriel et des données de facturation CRM/WHMCS.
- Ajoute l’onglet **Apparence** pour personnaliser les couleurs, polices et graisses du portail et de la page de connexion.
- Les valeurs sont envoyées à Alliance par la session Hub chiffrée; Core revalide le client et journalise chaque écriture.
- Les polices sont limitées à une liste autorisée et aucun CSS arbitraire n’est accepté.
- Un instantané local non sensible du profil et du style permet de personnaliser la page de connexion avant authentification; le jeton Alliance reste côté serveur.
- Les instantanés sont rafraîchis lors de la liaison, de la connexion, de l’accès administrateur et après chaque modification.
- Ajoute les styles responsive requis pour les formulaires Profil et Apparence.
- Conserve CPL, Dialer, campagnes, formulaires directs et toutes les protections Hub Connector 1.2.0.
---
## Historique des versions précédentes

## 1.1.1 — 2026-08-18
- Ajoute l’onglet Dialer directement dans `/hub/` avec sélection de campagne, microphone, appel et raccrochage.
- Le SDK Twilio Voice est livré localement avec l’extension; aucun CDN tiers n’est requis pour charger le Dialer.
[Ligne masquée automatiquement par Core AWM : contenu sensible potentiel]
- La vue Campagnes consomme la résolution canonique Core 4.5.4 et peut donc retrouver les anciennes campagnes sûres du même client.
- Le message vide parle désormais de campagne « liée » plutôt que seulement de campagne « active », puisque les campagnes publiées inactives restent visibles.

## 1.1.0 — 2026-08-18
- Corrige le cas « Identifiants invalides » pour les administrateurs : le formulaire distingue maintenant compte Alliance et accès administrateur du WordPress local.
- Ajoute une session administrateur locale déléguée au client lié, vérifiée par Core via l’autorisation runtime du Connector.
- Le Connector runtime est chiffré au repos sur le WordPress client; le code de pairing est à usage unique.
- Les administrateurs Alliance peuvent se connecter avec leur compte central tout en restant limités au client associé à ce domaine.


## Sécurité 1.0.1 — 2026-08-17

- Hub Client AWM 1.0.1 chiffre la totalité de la session locale côté serveur, lie la session au navigateur et exige HTTPS vers Alliance; aucune donnée Alliance exploitable n’est persistée en clair sur le site client.
# Changelog — Hub Client AWM

## 1.0.0 — 2026-08-17
- Première version installable sur le WordPress du client.
- Point d'entrée public `/hub/` sans création obligatoire d'une page WordPress.
- Liaison sécurisée par code Hub Connector généré dans la fiche client Alliance.
- Connexion distante au compte client Alliance sans stockage du mot de passe.
- Session locale HttpOnly avec jeton Alliance chiffré côté serveur.
- Vérification stricte que le compte connecté correspond au client lié au domaine.
- Vue responsive clair/sombre avec mémorisation du thème avant rendu.
- Identité visuelle client issue du profil Alliance lorsque disponible.
- Vues Vue d'ensemble, Campagnes, Leads, Appels et Stats AWM.
- Masquage des notices WordPress/tiers sur la page d'administration du module.

## 1.8.0 — 2026-08-24
- Ajout du module CRM avec sous-onglet Facturation.
- Affichage des factures, soldes, échéances, taxes et lignes de facture du client connecté.
- Bouton Payer maintenant utilisant un SSO WHMCS à usage unique; aucune donnée de carte n’est traitée par Hub.


---

## README.md

## Hub Client AWM 1.11.50

Les déploiements manuels explicitement déclenchés depuis Core restent possibles avec sauvegarde/rollback fichiers local, même lorsque Recovery complet n'est pas prêt. Les mises à jour automatiques restent suspendues jusqu'à validation Recovery.

# Hub Client AWM 1.11.49 - Suite 4.5.235

- L'autopilote Hub Client/Tech est désormais bloqué tant que Recovery n'a pas `recovery_ready_for_auto`; chaque mise à jour AWM admise crée un point complet fichiers + BD via `admit-deploy` et exige un redémarrage frais via `finish-deploy`.
## 1.11.49 — Recovery auto-amorcé et télémétrie de sécurité — 2026-09-15
- Installe et raccorde automatiquement Recovery avec repli exact avant WordPress lorsque le serveur ignore la règle `.htaccess`, sans créer de dossier `/hub`.
- Adopte le raccord Bootstrap 1.1.3 déjà présent et conserve la sauvegarde privée du `index.php` original.
- Remonte à Tech uniquement des booléens de sécurité : intégrité route, périmètre backup confirmé, test de restauration et prêt pour automatisation; aucun secret.
- Les mises à jour automatiques restent bloquées jusqu'à validation réelle du périmètre et du test fichiers + SQL.

Date : 2026-09-15

Recovery 1.2.0 embarque, copie independante et installation automatique. Route /hub/recovery sans chargement WordPress. Archivage local avant transfert a Alliance; meme contenu sur plusieurs clients: pas de nouvel upload ZIP. Mise a jour tierce uniquement par le chemin protege, avec verifications fraiches.

Candidate de stabilisation. Aucun deploiement effectue. Recette reelle WordPress + MySQL/MariaDB + PHP-FPM/OPcache + HTTPS et watchdog systeme obligatoire avant activation. Autopilote Suite AWM toujours suspendu. Les paquets des nouvelles mises a jour tierces proviennent encore du fournisseur WordPress de chaque site; leur telechargement unique depuis Alliance reste au roadmap.

Voir le guide Recovery embarque et les notes de livraison.

## Documentation anterieure conservee

# Hub Client AWM 1.11.47 — annonce Recovery et cinq sauvegardes locales — 2026-09-14

- `fleet_state` annonce si la porte Recovery externe et son CLI sont disponibles, sans chemin prive ni secret.
- Avant une mise a jour WordPress, Hub Client demande au Recovery externe d archiver l extension lorsque le moteur est configure.
- Si Recovery est configure mais ne confirme pas l archive, la mise a jour est bloquee plutot que de continuer sans filet.
- Le fallback local Hub Client conserve maintenant cinq copies au lieu de trois pour les modules AWM et extensions tierces.
- L URL Recovery est HTTPS et Core la rattache au domaine du site avant de l afficher dans Tech.

## 1.11.46 — Fraîcheur de flotte dans fleet_state — 2026-09-12

- fleet_state transmet maintenant l âge et la fraîcheur de l inventaire en plus des versions/autopilote/canal.
- Aucun secret Connector, chemin serveur ou clé API n est ajouté au payload.

## 1.11.45 — Pulse opérationnel transversal — 2026-09-12

- Envoie un `fleet_state` compact avec inventaire : versions runtime, autopilote, canal, dernier inventaire et dernier statut de mise à jour.
- Aucun secret Connector, chemin serveur ou clé API n est inclus dans cet état de flotte.

## Hub Client AWM 1.11.44 — bibliothèque WordPress

- Nouvelle route sécurisée `tech/plugin/install` pour installer, vérifier et activer une extension officielle WordPress.org demandée par Tech AWM.
- Les slugs AWM restent explicitement interdits sur cette route et continuent d utiliser le canal signé Core.
- La route réutilise l authentification Connector existante et vérifie la présence/version du plugin après installation.

# Hub Client AWM 1.11.43

Cette version permet à Tech AWM de demander un contrôle WordPress réellement frais avant une intervention manuelle : mises à jour, état et indexabilité sont recalculés sur le site exact.

# Hub Client AWM 1.11.42

Autopilote du parc client : Hub Client et Tech AWM suivent automatiquement la publication stable Core après appairage, avec canal signé, SHA-256, sauvegarde et rollback.

# Hub Client AWM 1.11.41 — autopilote stable

Une fois cette version installée et le site appairé, Hub Client peut maintenir **Hub Client lui-même** sans redemander une approbation WordPress à chaque publication. Le site vérifie le canal stable Core, télécharge uniquement le paquet autorisé pour son `client_id + site_id`, valide le SHA-256/signature, conserve une sauvegarde locale et utilise le mécanisme de rollback existant.

Tech AWM peut aussi demander la mise à jour d une extension WordPress tierce précise. Cette voie exige un filesystem WordPress direct, sauvegarde les fichiers du plugin avant mise à jour et refuse systématiquement les modules AWM, qui restent sur le canal signé de la Suite.

**Important :** les sites encore en 1.11.40 doivent recevoir 1.11.41 une fois; l autopilote ne peut agir qu après que son propre code a été installé.

# Hub Client AWM
Hub Client 1.11.40 conserve la boucle de liaison de 1.11.36 : dès que le code AWM-SITE est accepté, le site pousse immédiatement son répertoire et son inventaire vers Core. Il devient donc visible dans les écrans distants dès que le Connector runtime est actif, sans scan manuel supplémentaire.

Tous les événements Stats transmettent le contexte géographique disponible. Les en-têtes GeoIP du serveur restent prioritaires et, si la ville/les coordonnées manquent, un fallback FreeIPAPI côté serveur peut enrichir pays, région, ville et coordonnées approximatives. L IP brute n est jamais enregistrée ni transmise à Alliance.


**Version actuelle : 1.11.40 — localité GeoIP automatique pour Stats**

Hub Client installe maintenant automatiquement un tracker léger sur le site WordPress jumelé. Le navigateur envoie les événements au WordPress local; Hub Client les assainit et les transmet en lot vers Alliance par le Connector site-scoped. Aucun secret Connector n'est livré au navigateur.

Le tracker rattache chaque événement au `client_id` CRM et au `site_id` exact. Le site principal et chaque site secondaire deviennent donc des sources de données distinctes tout en restant consolidables au niveau du client. Les administrateurs WordPress connectés sont exclus afin de limiter le trafic interne.

Dès que la liaison Hub Client est active, le site est découvert automatiquement par Stats/Health; aucun ajout manuel de site n’est requis et un site secondaire garde exactement la même importance de données que le site principal.

Données suivies : page vue, identifiants aléatoires de session/visiteur, engagement, formulaire soumis, conversion explicite, clic téléphone/courriel, appareil, navigateur, référent et UTM. Les paramètres d'URL, valeurs de champs et contenu des formulaires ne sont pas transmis.

Si un ancien tracker Stats AWM manuel est détecté dans la page, Hub Client se met en retrait pour éviter le double comptage.

# Hub Client AWM 1.11.32

Cette version ajoute un point d inventaire privé à la demande pour Tech AWM 1.6.5. Alliance peut relire immédiatement WordPress, plugins, thèmes, mises à jour disponibles et état du runtime via le canal authentifié Hub Client, sans exposer de nouvelle interface au client.

Cette version étend l agent privé utilisé par Tech AWM 1.6.2 : contexte texte plus long pour les réécritures formelles, prise en charge contrôlée du réglage image Elementor et transport résilient de la génération d image depuis Alliance. L image générée est importée dans la médiathèque locale avant toute éventuelle écriture Elementor.

Tech AWM reste invisible pour le client; aucune clé IA ni secret Alliance n est exposé dans le navigateur ou le portail client.

# Hub Client AWM 1.11.30

Cette version étend le moteur Elementor privé utilisé par Tech AWM 1.6.1 afin que les employés Alliance puissent appliquer directement depuis le frontend des changements visuels sécurisés et réversibles.

# Hub Client AWM 1.11.29

Cette version rend l ouverture Elementor indépendante du fait qu une ancienne classe Tech puisse encore être chargée pendant la requête de mise à jour. Hub Client valide la session Alliance avec le Connector résilient, résout la page WordPress, crée un handoff à usage unique puis ouvre directement `wp-admin/post.php?action=elementor`. La requête Elementor suivante charge le Tech présent sur disque et récupère la session.

Tech reste invisible pour le client : cette mécanique n est exposée qu au canal privé Core/Alliance.

Cette version renforce le moteur de maintenance distante Tech. Lorsqu une installation Tech reste bloquée sur une ancienne version, Core peut demander une réparation propre et signée : sauvegarde locale, désactivation, retrait du dossier canonique, réinstallation, activation, invalidation OPcache et nouvelle vérification runtime. Le mécanisme est limité à Tech AWM et conserve le rollback.

# Hub Client AWM 1.11.27

Cette version rend la preparation Elementor deterministe : le canal prive appele par Core est maintenant enregistre par Hub Client lui-meme. Tech AWM execute toujours la logique d intervention, mais une mise a jour ou un redemarrage du runtime Tech ne peut plus faire disparaitre la route REST et produire un 404 silencieux. `update/status` expose aussi `tech_prepare_route_ready` pour que Core confirme la capacite avant de lancer Elementor.

# Hub Client AWM 1.11.25
## Runtime Tech fiable — 1.11.25
Le moteur de mise à jour distant invalide OPcache après remplacement des fichiers, désactive les copies historiques concurrentes et remonte la version `TECH_AWM_VERSION` réellement chargée. Cette preuve runtime est utilisée par Core avant toute intervention Elementor.

L’administration locale Hub Client est désormais plus compacte : le panneau explicatif Sécurité est retiré de l’interface, tandis que toutes les protections restent actives en arrière-plan. Tech AWM demeure un agent privé Alliance invisible côté client. Le logo Alliance officiel reste servi depuis le PNG canonique vérifié par SHA-256, avec le badge Hub orange séparé.

# Hub Client AWM 1.11.23
Toutes les sections du Hub Client utilisent maintenant une source de marque unique : le PNG Alliance officiel, vérifié par SHA-256 et servi sans transformation, avec le badge orange Hub comme asset séparé. Cette règle couvre le portail authentifié, ses modules et sous-sections, la connexion, l’état non lié et l’administration locale.

# Hub Client AWM 1.11.19
Le logo Alliance officiel fourni reste strictement identique au fichier canonique. Hub Client 1.11.19 valide maintenant son SHA-256 `1b0dcbd96e1ed931ce785cda2918e7dc38597c214735e21c92243c02eb43b13a` avant de l'afficher; si l'empreinte ne correspond pas, aucune variante du logo n'est servie. Le badge Hub orange demeure un asset séparé superposé.

# Hub Client AWM 1.11.15 - Auto-detection du runtime

Cette version rend l agent de mise a jour independant du nom historique du dossier du plugin. Le runtime actif est detecte par son propre chemin WordPress puis migre vers le dossier canonique lors d une mise a jour reussie.

# Hub Client AWM 1.11.13 — identite Hub AWM Premium

Hub Client reprend maintenant l'identite visuelle de Hub AWM dans wp-admin, sans changer son role de portail installe sur le site client.
Le logo, le shell sombre, les cartes, boutons, badges et panneaux suivent le meme langage visuel Premium que Hub AWM.

Hub Client AWM 1.11.12 rend la liaison Tech tolérante aux WAF/proxies : trois transports sécurisés sont essayés sans modifier le client_id CRM canonique ni exposer le secret Connector.

Hub Client AWM 1.11.11 renforce le déploiement distant : authentification Connector tolérante aux proxies, téléchargement sécurisé depuis l'endpoint REST signé de Core et diagnostics HTTP explicites. Les données clients restent liées au client_id CRM canonique.


## Migration des anciens Connectors
Depuis 1.11.35, l'activation du Hub Client canonique désactive automatiquement les anciennes extensions Hub Connector/CallInk Connector reconnues, génère l'identifiant unique de l'installation WordPress et redirige les anciennes pages d'administration vers le nouveau Hub. Une clé de site `AWM-SITE-*` doit ensuite être liée depuis l'écran `Hub > État de la liaison`.


### Présence temps réel Stats — 1.11.37
Le tracker first-party émet un heartbeat `presence` léger toutes les 20 secondes pendant que la page est visible. La plateforme Alliance utilise ce heartbeat pour le compteur et la carte temps réel. Aucune adresse IP ni donnée GPS n'est envoyée. Si l'hébergement expose déjà des en-têtes GeoIP, Hub Client transmet uniquement ville/région/pays et des coordonnées approximatives arrondies; sinon la présence reste visible sans localisation cartographique.


## Géolocalisation Stats
Hub Client privilégie les données de localisation déjà fournies par l hébergeur ou le reverse proxy. Si la ville et les coordonnées manquent, la version 1.11.40 peut interroger FreeIPAPI côté serveur. Le résultat est réduit à une localité approximative et mis en cache; l adresse IP brute n est jamais stockée ni transmise à Alliance Web Marketing.

Le fallback externe peut être désactivé par code avec le filtre `awm_client_hub_stats_external_geoip_enabled` si un client exige une résolution strictement locale.


---

## ROADMAP.md

# Hub Client AWM 1.11.50 — séparation manuel / automatique

## Livré
- Déploiement manuel Core autorisé avec rollback fichiers local lorsque Recovery complet n'est pas encore prêt.
- Autopilote/self-update toujours fail-closed jusqu'à validation Recovery.

## Maintenant
- Valider 1.11.46 → 1.11.50 sur un site pilote depuis Core.
- Valider ensuite Tech 1.7.34 → 1.7.37 sur le même site.

## Prochaines étapes
- Exposer dans Core le code d'erreur exact et le type de protection utilisé : Recovery complet ou rollback fichiers manuel.
- Réactiver l'autopilote uniquement après Recovery asynchrone validé site par site.

# Hub Client AWM 1.11.49 - Suite 4.5.235

- L'autopilote Hub Client/Tech est désormais bloqué tant que Recovery n'a pas `recovery_ready_for_auto`; chaque mise à jour AWM admise crée un point complet fichiers + BD via `admit-deploy` et exige un redémarrage frais via `finish-deploy`.
## Livré dans 4.5.235
### 1.11.49 — Recovery auto-amorcé et télémétrie de sécurité — 2026-09-15
- Installe et raccorde automatiquement Recovery avec repli exact avant WordPress lorsque le serveur ignore la règle `.htaccess`, sans créer de dossier `/hub`.
- Adopte le raccord Bootstrap 1.1.3 déjà présent et conserve la sauvegarde privée du `index.php` original.
- Remonte à Tech uniquement des booléens de sécurité : intégrité route, périmètre backup confirmé, test de restauration et prêt pour automatisation; aucun secret.
- Les mises à jour automatiques restent bloquées jusqu'à validation réelle du périmètre et du test fichiers + SQL.

Date : 2026-09-15

## Livre dans le code candidat

Recovery 1.2.0 embarque, copie independante et installation automatique. Route /hub/recovery sans chargement WordPress. Archivage local avant transfert a Alliance; meme contenu sur plusieurs clients: pas de nouvel upload ZIP. Mise a jour tierce uniquement par le chemin protege, avec verifications fraiches.

## Validation terrain requise

Candidate de stabilisation. Aucun deploiement effectue. Recette reelle WordPress + MySQL/MariaDB + PHP-FPM/OPcache + HTTPS et watchdog systeme obligatoire avant activation. Autopilote Suite AWM toujours suspendu. Les paquets des nouvelles mises a jour tierces proviennent encore du fournisseur WordPress de chaque site; leur telechargement unique depuis Alliance reste au roadmap.

## Prochaines etapes

Telechargement central des mises a jour fournisseurs avec droits/licences par site; restauration depuis une archive Alliance absente localement; ordonnanceur et politique editables dans UI; purge physique des objets orphelins apres verification des references; tests visuels/metier et MFA de secours. Les signatures de fournisseurs ne sont pas remplacees par les seules empreintes SHA.

## Roadmap anterieure conservee

# Hub Client AWM 1.11.47 — porte Recovery annoncee

## Livre
- Annonce de la porte Recovery et de l agent CLI dans `fleet_state`.
- Sauvegarde Recovery pre-update pour les extensions lorsque le moteur externe est configure.
- Cinq versions locales conservees en fallback au lieu de trois.

## Validation terrain
- Configurer Recovery 1.1.0 sur un Hub Client pilote et verifier que Tech conserve son URL apres coupure de WordPress.
- Mettre a jour une extension tierce et confirmer les cinq archives Recovery et les cinq copies locales.
- Provoquer une panne de plugin en staging et confirmer un retour cible sans restauration DB.

## Futur
- Preuve de derniere restauration testee et espace disque Recovery dans le `fleet_state`, sans exposer les chemins serveur.

# Hub Client Awm 1.11.46 — Fraîcheur de flotte dans fleet_state

## Livré
- fleet_state transmet maintenant l âge et la fraîcheur de l inventaire en plus des versions/autopilote/canal.
- Aucun secret Connector, chemin serveur ou clé API n est ajouté au payload.

## Prochain lot accéléré
- Fenêtres de maintenance optionnelles pour autopilote/interventions distantes.
- Diagnostic local GeoIP/réseau et qualité de télémétrie sans collecte intrusive.

# Hub Client AWM 1.11.45 — Pulse opérationnel transversal

## Livré
- Envoie un `fleet_state` compact avec inventaire : versions runtime, autopilote, canal, dernier inventaire et dernier statut de mise à jour.
- Aucun secret Connector, chemin serveur ou clé API n est inclus dans cet état de flotte.

## Prochain lot accéléré
- Fenêtres de maintenance optionnelles pour l autopilote et les interventions distantes.
- Diagnostics GeoIP/politique réseau et fraîcheur de télémétrie sans collecte intrusive.

## Hub Client AWM 1.11.44 — bibliothèque WordPress

- Nouvelle route sécurisée `tech/plugin/install` pour installer, vérifier et activer une extension officielle WordPress.org demandée par Tech AWM.
- Les slugs AWM restent explicitement interdits sur cette route et continuent d utiliser le canal signé Core.
- La route réutilise l authentification Connector existante et vérifie la présence/version du plugin après installation.

# Hub Client AWM 1.11.43 — diagnostic frais piloté par Tech

## Livré
- Rafraîchissement forcé des caches de mises à jour WordPress/plugins/thèmes.
- Invalidation du cache Index/No-index sur demande Tech.

## Maintenant
- Valider un contrôle puis une mise à jour tierce (ex. SEOPress) depuis une fiche Tech.

# 1.11.42 — autopilote AWM Hub Client + Tech

- Étend l autopilote stable à Tech AWM en plus de Hub Client.
- Tech est traité avant Hub Client afin de conserver l agent courant intact jusqu à la fin du cycle.
- Les autres modules centraux AWM ne sont jamais installés automatiquement sur un site client.
- Chaque paquet continue d utiliser publication Core, signature, SHA-256, sauvegarde et rollback.
- L inventaire Hub Client relit la version réellement présente sur disque après une auto-mise à jour pour éviter un statut temporairement périmé.
- Le contrôle s exécute de façon répartie par WP-Cron (premier passage environ 5 à 35 minutes après activation, puis chaque heure).

# Hub Client AWM 1.11.41 — autopilote de maintenance

## Livré
- [x] Vérification automatique horaire de la publication stable Core après appairage.
- [x] Auto-mise à jour de Hub Client via le paquet Core authentifié, signé et contrôlé par SHA-256.
- [x] Sauvegarde locale et rollback de fichiers conservés avant remplacement.
- [x] Route privée de mise à jour d une extension WordPress tierce précise pour Tech AWM.
- [x] Refus explicite des modules AWM dans le moteur générique WordPress.
- [x] Aucun mot de passe FTP/SSH demandé ou stocké.

## Maintenant
- [ ] Déployer 1.11.41 une fois sur un site pilote encore en 1.11.40, puis publier une version Hub Client de test supérieure et confirmer le passage automatique.
- [ ] Tester une extension tierce active et inactive en mode mise à jour Tech avec sauvegarde puis vérification de version.

## Prochaines étapes
- [ ] Remonter à Core un état de flotte compact : dernier contrôle, dernière réussite, dernière erreur et version cible.
- [ ] Ajouter une politique de fenêtre de maintenance facultative pour les parcs qui veulent limiter les mises à jour tierces à certaines heures.

# Hub Client AWM 1.11.40 — localité GeoIP automatique
- Livré 1.11.40 : fallback FreeIPAPI côté serveur pour compléter ville/région/coordonnées quand le proxy ne les fournit pas.
- Livré 1.11.39 : fuseau navigateur + GeoIP proxy approximatif propagés à tous les événements Stats pour alimenter la carte historique.
- Futur : diagnostic local des en-têtes Geo disponibles et intégration MaxMind/GeoLite facultative sans service externe.

- Livré 1.11.38 : fuseau IANA navigateur comme repli de localisation approximatif pour la carte temps réel, sans GPS/IP.
- Après pairing, pousser immédiatement répertoire + inventaire.
- Un site secondaire connecté doit apparaître dans Core/Stats/Health sans action manuelle supplémentaire.
- En cas d échec réseau initial, conserver la liaison et retenter automatiquement.

# Hub Client AWM 1.11.34 — collecte KPI multi-sites

## Livré
- Tracker public automatique pour chaque installation Hub Client jumelée.
- File locale et envoi groupé par Connector avec `client_id + site_id + instance_uuid`.
- Détection du tracker historique afin d'éviter les doublons.
- Collecte sans contenu de formulaire ni paramètres d'URL.

## Maintenant
- Valider sur un client avec site principal et site secondaire que les événements apparaissent séparément dans Stats AWM puis se consolident au niveau client.

## Prochaines étapes
- Diagnostic local de qualité de collecte : dernière page vue, taille de file, dernier envoi réussi et raison d'un éventuel arrêt.
- Détection plus fine des conversions métiers configurables par client.

## Futur
- Consentement/activation conditionnelle pilotable par politique client et intégration avec les principales plateformes de gestion du consentement.

# Hub Client AWM 1.11.32 — contenu et médias Tech

## Livré
- Contexte texte Elementor étendu pour rallonger, corriger ou formaliser un contenu sélectionné.
- Remplacement sécurisé du widget image Elementor avec attachment local validé.
- Canal privé résilient de génération d image Alliance → médiathèque WordPress.

## Maintenant
- Validation terrain : couleur de titre, réécriture formelle, génération d image, remplacement et rollback.

## Prochaines étapes
- Aperçu comparatif texte/image avant écriture.

## Futur
- Même contrat média et contenu pour Gutenberg et les autres moteurs de page supportés.

# Hub Client AWM 1.11.30 — moteur d actions Tech frontend

## Livré
- Écritures Elementor sécurisées pour couleurs, fonds, typographie responsive, alignement, marges et padding.
- Snapshot et rollback conservés avant toute modification Tech.

## Maintenant
- Validation terrain des modifications frontend Tech sur pages Elementor réelles.

## Prochaines étapes
- Remplacement d image contrôlé avec bibliothèque média et alt.

## Futur
- Contrat d édition unifié Elementor / Gutenberg avec même flux Aperçu → Appliquer → Rollback.

# Hub Client AWM 1.11.29 — handoff Elementor autonome

- **Livré** : préparation Elementor directe par Hub Client lorsque le runtime Tech chargé est ancien ou vient d être remplacé.
- **Livré** : validation Connector résiliente, contrôle du domaine, post WordPress ciblé et handoff à usage unique.
- **Maintenant** : confirmer sur École Esthétique Avancée que `Tech AWM → Sites → Elementor` ouvre l éditeur avec la boîte Tech unique.
- **Prochaines étapes** : afficher dans Tech AWM la trace `session créée → handoff validé → Elementor chargé → boîte injectée`.
- **Futur** : test E2E automatique sur un site staging couvrant mise à jour à chaud, OPcache, www/domaine nu, Elementor et rollback avant chaque publication.

- **Livré** : second passage de réinstallation propre Tech AWM, avec sauvegarde et validation du paquet signé.
- **Maintenant** : confirmer sur École Esthétique Avancée le passage Tech 1.5.11 → 1.5.12 sans intervention manuelle.
- **Prochaines étapes** : afficher dans Core le motif exact ayant déclenché la réparation propre et sa durée.
- **Futur** : préflight des permissions, fichiers verrouillés et OPcache avant mise à jour afin de choisir automatiquement la meilleure stratégie de remplacement.

# Hub Client AWM 1.11.27 — paquet canonique

- **Livré** : ZIP strict avec `hub-client-awm/` comme unique dossier racine.
- **Maintenant** : déployer 1.11.27 sur les sites pilotes puis reprendre le handoff Elementor Tech.
- **Prochaines étapes** : test automatique de la structure ZIP avant chaque publication Hub Client.
- **Futur** : build reproductible depuis une arborescence propre, sans répertoire de travail ou de debug.

# Hub Client AWM 1.11.26 — preparation Elementor fiable

- **Livre** : route privee de preparation Elementor possedee par Hub Client et delegation au runtime Tech.
- **Maintenant** : validation terrain du parcours Alliance → route Hub Client → Tech → handoff → Elementor.
- **Prochaines etapes** : remonter le code de panne exact et l etape de preparation dans la fiche Tech Alliance.
- **Futur** : test de contrat automatique des routes privees Hub Client/Tech avant publication d une Suite.

# Hub Client AWM 1.11.25 — runtime Tech vérifiable

- **Livré** : invalidation OPcache et nettoyage des copies runtime concurrentes après mise à jour distante.
- **Livré** : preuve `tech_runtime_version` lue dans une nouvelle requête PHP.
- **Maintenant** : valider sur École Esthétique Avancée le parcours Hub 1.11.25 → Tech 1.5.11 → boîte Elementor unique.
- **Prochaines étapes** : afficher dans Tech AWM la preuve fichier/runtime côte à côte pendant les diagnostics.
- **Futur** : préflight automatique OPcache/PHP-FPM avant toute intervention distante et blocage préventif si le runtime ne peut pas être rafraîchi.

# Hub Client AWM 1.11.24 — interface client épurée

- Livré : retrait du panneau explicatif Sécurité de l’administration locale Hub Client.
- Livré : protections de sécurité conservées en arrière-plan sans exposer les détails techniques au client.
- Livré : Tech AWM demeure totalement invisible comme service, section ou outil client.
- Maintenant : valider l’écran Hub local sur bureau et mobile après retrait du panneau.

# Hub Client AWM 1.11.23 — séparation stricte de Tech AWM

- Livré : aucun onglet, service, carte, diagnostic ou outil Tech AWM visible au client.
- Livré : les anciennes URLs Tech du Hub redirigent logiquement vers l accueil.
- Livré : le runtime Tech reste un agent silencieux exploité uniquement par Alliance.
- Maintenant : valider la navigation complète du Hub sur bureau et mobile après retrait de Tech.

# Hub Client AWM 1.11.22 — santé Connector
- Livré : télémétrie locale des quatre transports Connector sans journalisation du secret.
- Livré : API interne de diagnostic utilisée par Tech AWM 1.4.3.
- Livré : profil Tech enrichi avec transport, dernier succès et dernier événement technique.
- Maintenant : déployer Tech AWM 1.4.3 sur les sites clients autorisés et valider les quatre canaux.

# Hub Client AWM 1.11.21 — provisioning Tech fiable
- Livré : auto-installation du paquet Tech AWM lorsque l'autorisation Alliance est active et que le runtime est absent.
- Livré : réparation sécurisée des dossiers Tech partiellement installés avec quarantaine avant remplacement.
- Livré : action manuelle Installer / réparer Tech AWM et diagnostic du dernier échec.
- Livré : validation stricte du paquet signé, SHA-256, domaine Alliance et activation après installation.
- Maintenant : confirmer Tech AWM 1.4.2 installé sur École Esthétique Avancée et Déménagement Hull.

# Hub Client AWM 1.11.20 — identité Alliance uniforme dans toutes les sections
- Livré : composant de marque canonique unique utilisé sur toutes les sections `/hub/`, y compris CallTracker, Stats, Tech AWM et Mon compte.
- Livré : protection CSS stricte contre filtres, masques, transformations, recolorations et remplacements du PNG Alliance.
- Livré : login, état non lié, portail authentifié et administration locale utilisent la même source officielle.
- Maintenant : validation visuelle terrain dans chaque section du Hub Client sur École Esthétique Avancée.

# Hub Client AWM 1.11.19 — intégrité stricte du logo Alliance
- Livré : empreinte SHA-256 canonique du logo Alliance verrouillée à `1b0dcbd96e1ed931ce785cda2918e7dc38597c214735e21c92243c02eb43b13a`.
- Livré : vérification d'intégrité avant affichage sur le menu WordPress, le bandeau Hub Client et le portail `/hub/`.
- Livré : comportement fail-closed; une copie modifiée du logo n'est jamais affichée.
- Livré : badge Hub orange maintenu comme asset séparé, sans toucher au PNG Alliance.

# Hub Client AWM 1.11.18 — logo Alliance officiel verrouillé
- Livré : logo Alliance officiel intact dans le menu WordPress, le bandeau d'administration et le portail `/hub/`.
- Livré : badge Hub orange conservé comme asset indépendant et superposé.
- Livré : suppression du SVG composite/redessiné pour empêcher toute variante graphique du logo Alliance.
- Maintenant : validation visuelle après déploiement sur École Esthétique Avancée.

# Hub Client AWM 1.11.17 — identité Alliance officielle
- Livré : vrai logo Alliance fourni par l'utilisateur, conservé intact comme asset PNG.
- Livré : badge orange Hub séparé et superposé sans modifier le logo Alliance.
- Livré : nouvelle identité appliquée au menu WordPress et au bandeau Hub de l'administration.
- Maintenant : validation visuelle sur École Esthétique Avancée après déploiement.

# Hub Client AWM 1.11.16 — identité Hub canonique
- Livré : nouvel asset `hub-awm-product-logo.svg` utilisé partout.
- Livré : cache-busting par version sur le logo Hub.
- Maintenant : validation visuelle sur le site École Esthétique Avancée.

# Hub Client AWM 1.11.15 - Auto-detection du runtime

## Livre
- Detection du vrai chemin du plugin actif.
- Inventaire self-aware.
- Migration vers hub-client-awm pendant les prochaines mises a jour.

## Maintenant
- Validation terrain sur Ecole Esthetique Avancee.

# Hub Client AWM 1.11.13 — Premium Hub client

- Livré : logo Hub AWM produit avec badge Hub dans l'administration du site client.
- Livré : CSS Premium autonome compatible avec un site client qui n'installe pas Hub AWM.
- Livré : mise en page responsive compacte de la liaison, Tech, connexion et securite.
- Maintenant : validation terrain sur Ecole Esthetique Avancee en mode bureau et mobile.

# Hub Client AWM 1.11.12 — transport Tech résilient

## Livré
- Fallback Connector admin-ajax limité à Tech.
[Ligne masquée automatiquement par Core AWM : contenu sensible potentiel]

## Maintenant
- Validation terrain HTTP 403 sur École Esthétique Avancée.

# Hub Client AWM 1.11.11 — déploiement distant robuste

## Livré
- Authentification du canal distant par en-tête ou repli dans le corps HTTPS.
- Téléchargement de paquets via le endpoint signé Core avec contrôle HTTP explicite.
- Messages d'erreur précis au lieu d'un simple `Forbidden` générique.

## Maintenant
- Valider sur École Esthétique Avancée la mise à jour Hub Client puis Tech AWM depuis Core.

## Terminé — 1.11.35
- Migration automatique des anciens Hub Connector installés sur les sites clients.
- Génération anticipée de `instance_uuid` pour les sites secondaires.
- Redirection des anciens écrans de liaison vers l'interface Hub Client canonique.
- Test terrain : liaison de `www.demenagementhull.com` au `site_id` secondaire déjà préparé dans CRM.

- [x] Heartbeat first-party pour Visiteurs en direct Stats AWM, site-scoped et sans IP/GPS.
- [ ] Résolveur GeoIP local MaxMind optionnel et diagnostic de disponibilité des en-têtes de géolocalisation.

## 1.11.40 — GeoIP localité pour Stats
- [x] Fallback FreeIPAPI sans clé pour enrichir ville/région/coordonnées quand le proxy ne fournit pas la localité.
- [x] Cache HMAC local 12 h et budget interne 45 requêtes/minute.
- [x] Ne jamais stocker ni transmettre l IP brute à Alliance; seul le fournisseur GeoIP externe la reçoit pendant le lookup.
- [x] Priorité aux en-têtes hébergeur/Cloudflare et aux résolveurs locaux avant l API externe.
- [ ] Ajouter plus tard une option UI explicite pour choisir `Auto / GeoLite local / FreeIPAPI / Désactivé` selon les besoins de confidentialité du client.
- [ ] Ajouter un diagnostic de taux de succès GeoIP par site sans exposer les IP.
- [ ] Prévoir un fallback GeoLite2 City local afin de supprimer toute dépendance externe pour les clients qui le souhaitent.