- Retrait de l'exclusion /docker dans .dockerignore
- Permet de copier add_team_link.* et team-page.tsx durant le build
Corrige l'erreur 'checksum ... /docker/add_team_link.sh not found'
- Déplace add_team_link.py et add_team_link.sh dans docker/
- Remplace les heredocs par des COPY dans Dockerfile.business
- Évite l'erreur de parsing 'unknown instruction: import'
Compatibilité Portainer sans syntaxe heredoc.
- Ajout docker/team-page.tsx avec le composant React complet
- Remplacement du heredoc dans Dockerfile.business par un COPY
- Évite les erreurs de parsing Docker (unknown instruction: import)
Assure la compatibilité Portainer sans syntaxe heredoc
- Ajout directive # syntax=docker/dockerfile:1.4
- Permet l'usage des heredocs dans le Dockerfile
Doit supprimer l'erreur 'unknown instruction: import' lors du parsing
- Remplace HTML intégré par vraie page React
- Import dynamique de Cytoscape et ECharts (évite erreurs SSR)
- États React pour gestion des onglets et données
- Refs pour containers des graphiques
- Installation dépendances cytoscape et echarts-for-react
- Gestion erreurs et états de chargement
Résout problème scripts non exécutés dans contexte React
- Suppression copie team-static.html du Dockerfile (plus nécessaire)
- Suppression vérifications team-static.html des logs de build
- Suppression fichier public/team-static.html (intégration directe)
Nettoyage suite à l'intégration directe du HTML dans la page React
- Page team.tsx charge directement le HTML des visualisations
- Plus de redirection, le contenu est rendu dans React
- Évite les conflits de routing Next.js
- Scripts Cytoscape/ECharts intégrés directement
- Contenu team-visualization-data.json chargé depuis la page React
Cette approche contourne complètement les problèmes de déploiement statique
- Déplacement de la copie de team-static.html dans la section principale de copie
- Déplacement de la copie de team-visualization-data.json dans la section principale
- Suppression des copies dupliquées qui étaient mal placées
- Maintenant les fichiers seront copiés correctement lors du build
Ces fichiers étaient absents du déploiement, causant l'affichage du radar au lieu des visualisations équipe
- Nouvelle page team-static.html : page HTML pure sans React
- team.tsx redirige simplement vers /team-static.html
- Évite tous les conflits d'injection DOM dans React
- team-static.html copié dans out/ lors du build
- Contient tous les logs de débogage et visualisations équipe
Cette approche contourne complètement les problèmes React/DOM
- Au lieu de rediriger, la page Next.js charge et injecte team.html
- Exécution des scripts JavaScript et injection du CSS
- Gestion d'erreur si team.html ne se charge pas
- Logs détaillés pour diagnostiquer le processus
Cette approche évite les problèmes de redirection et assure que :
- team.html se charge correctement
- Les scripts s'exécutent dans le contexte Next.js
- Les visualisations s'affichent
- Log au chargement des scripts externes (Cytoscape, ECharts)
- Log au démarrage de loadData()
- Log au début de chaque fonction d'initialisation
- Vérifications de disponibilité des données
Ces logs permettront de voir exactement où le processus bloque :
- Scripts externes se chargent-ils ?
- Données se chargent-elles ?
- Fonctions d'initialisation s'exécutent-elles ?
- Graphiques se créent-ils ?
- Logs console détaillés dans team.html pour diagnostiquer le chargement
- Message de fallback informatif si données non chargées
- Vérifications build pour team-visualization-data.json
- Diagnostic pour identifier pourquoi les visualisations n'apparaissent pas
Les logs console aideront à identifier si le problème vient :
- Du chargement des données JSON
- De l'initialisation des graphiques Cytoscape/ECharts
- De l'accès aux fichiers statiques
- Page team.tsx fait redirection immédiate vers /team.html (évite conflits React)
- Ajout bouton retour dans header de team.html vers l'accueil
- Évite tous les conflits entre scripts JavaScript et React
Cette approche simple devrait :
- Afficher les visualisations équipe correctement
- Permettre la navigation retour avec le bouton ajouté
- Page team.tsx rend directement l'iframe dans React (pas de manipulation DOM)
- Script bloqueur plus sélectif : bloque seulement strategie-script.js
- Permet les scripts de navigation essentiels
- Évite les conflits avec les scripts JavaScript
Cette approche devrait :
- Afficher les visualisations équipe correctement
- Garder la navigation fonctionnelle (logo vers accueil)
- Suppression de la manipulation DOM complexe (createElement, appendChild)
- Remplacement direct par innerHTML simple
- Ajout de try/catch pour sécurité
- Rendu côté serveur basique pour éviter erreurs SSR
Cette version devrait compiler sans erreur
- Vérification team-block-script.js
- Vérification protection __blockTeamPages
- Vérification config-business.json jsFile
Ces logs aideront à confirmer que tous les changements sont appliqués
- Nouveau script team-block-script.js chargé en premier (config-business.json)
- Bloqueur absolu qui empêche tout autre script sur /team
- Page team.tsx encore plus agressive (remplacement useEffect)
- Double protection dans strategie-script.js
- Script principal bloqué si __blockTeamPages=true
Cette approche à couches multiples devrait définitivement résoudre :
- Les deux liens équipe (1 seul)
- L'affichage radar au lieu des visualisations
- Vérification contenu team.tsx dans logs build
- Vérification protection script JS dans logs build
- Diagnostic pour s'assurer que les changements sont appliqués
Cela aidera à déboguer pourquoi Portainer ne prend pas les changements
- Page Next.js simplifiée au maximum pour éviter erreurs compilation
- Remplacement immédiat du body par l'iframe côté client
- Protection absolue dans strategie-script.js contre les pages équipe
- Script bloqué complètement sur toute URL contenant /team
Ces changements devraient définitivement résoudre :
- Les deux liens équipe (1 seul lien Next.js)
- L'affichage radar au lieu des visualisations équipe
- Protection contre exécution sur pages Next.js (détection __NEXT_DATA__)
- Suppression de l'interception des clics sur /team (Next.js gère maintenant)
- Désactivation de checkTeamRouteImmediately()
- Désactivation de showTeamPage()
- Suppression de la gestion popstate pour /team
- Script ne gère plus que les pages HTML pures (stratégie, business, etc.)
Cela élimine le deuxième lien et permet à Next.js d'afficher correctement /team
- Suppression de styled-jsx (style jsx global)
- Utilisation de dangerouslySetInnerHTML pour les styles
- Suppression de getLayout qui n'est pas supporté
- Styles inline uniquement pour éviter les dépendances
Cela devrait corriger l'erreur de build npm run build
- Suppression de la redirection vers /team.html
- Chargement direct de l'iframe dans la page Next.js
- Styles pour masquer le layout par défaut
- getLayout retourne la page directement sans layout
Cela évite que Next.js charge les données du radar avant l'affichage
- Pattern 1: Blocs <li> complets avec <Link>
- Pattern 2: Lignes contenant href="/team"
- Pattern 3: Blocs <li> contenant /team sur plusieurs lignes
Cela devrait supprimer tous les formats possibles de liens team
- Vérification de /team au tout début du script (avant Fast Refresh protection)
- Triple nettoyage dans le script Python (3 patterns différents)
- Redirection immédiate vers /team.html sans attendre
Cela devrait enfin fonctionner car :
- Le script s'exécute en premier
- Tous les formats de liens sont supprimés
- La redirection est immédiate
- Affichage des occurrences exactes si plusieurs liens détectés
- Vérification améliorée avec tous les formats possibles
- Affichage du contenu complet si le nettoyage échoue
- Arrêt du build si des doublons persistent après nettoyage
- Vérification immédiate de /team au chargement du script (avant Next.js)
- Interception des clics en phase de capture (avant Next.js)
- Nettoyage supplémentaire dans le script Python si des liens persistent
- Affichage immédiat sans attendre le header
Cela devrait enfin résoudre les deux problèmes persistants
- Vérification immédiate de la route /team au chargement du script (avant Next.js)
- Interception des clics sur les liens /team en phase de capture (avant Next.js)
- Nettoyage supplémentaire dans le script Python si des liens persistent
- Affichage immédiat de la page équipe sans attendre le header
Cela devrait résoudre :
- Les deux liens (nettoyage supplémentaire si nécessaire)
- L'affichage du radar (interception avant Next.js + vérification immédiate)
- Utilisation d'une regex multiligne pour supprimer tous les blocs <li> contenant des liens /team
- Nettoyage manuel en fallback si la regex ne capture pas tout
- Suppression de tous les formats: /team, /team/, /team.html
Cela devrait éliminer définitivement les doublons de liens Équipe
- Gestion du popstate pour la route /team
- Amélioration du script Python avec regex pour détecter tous les formats de liens team
- La fonction showTeamPage() est maintenant appelée correctement lors de la navigation
- Ajout de showTeamPage() dans strategie-script.js pour gérer /team
- La route /team remplace maintenant le body par l'iframe team.html
- Amélioration du script Python avec regex pour détecter tous les formats de liens
- Gestion du popstate pour la route /team
Cela corrige :
- Les deux liens (détection améliorée avec regex)
- L'affichage du radar au lieu des visualisations (remplacement du body par l'iframe)
- Détection améliorée pour inclure /team, /team/, /team.html
- Création d'un fichier HTML statique /team/index.html en plus de la page Next.js
- La page Next.js redirige maintenant vers /team.html directement
- Copie de /team/index.html dans out/ lors du build
Cela corrige :
- Les deux liens Équipe (détection de tous les formats)
- L'affichage du radar au lieu des visualisations (HTML statique garanti)
- Script Python amélioré pour détecter aussi les liens vers /team.html
- Vérifications améliorées pour inclure /team et /team.html
- Génération automatique de team-visualization-data.json si absent
- Toutes les vérifications incluent maintenant /team.html
Cela corrige :
- Les deux liens Équipe (un vers /team, un vers /team.html)
- L'absence des visualisations (données générées automatiquement)
- La page /team masque maintenant le header/navigation existant
- Évite la duplication du header quand on clique sur le lien Équipe
- L'iframe team.html s'affiche en plein écran sans header dupliqué
- Le header est restauré quand on quitte la page /team
- Script Python amélioré pour détecter et supprimer les doublons de composant Navigation
- Vérifications post-modification dans le script shell (fonctions, nav, ul, logo, export)
- Vérification post-build pour détecter les doublons dans le HTML généré
- Détection automatique des composants Navigation dupliqués
- Arrêt du build si duplication détectée
Le script détecte maintenant :
- Duplication du composant Navigation (plusieurs fonctions)
- Duplication structurelle (nav, ul, logo)
- Duplication dans le HTML généré (headers/nav)
Toutes les vérifications s'exécutent automatiquement lors du build Docker.
- scripts/generate-team-visualization-data.js : remplacement de 'core' par 'adopt' dans generateCongestionMatrix() et generateGenesisTeam()
- scripts/analyze-business-metrics.js : remplacement de 'core' par 'adopt' dans 3 endroits
- docs/app/guide-page-equipe.md : précisions sur l'utilisation de 'adopt' pour les technologies critiques
- docs/app/architecture.md : précisions sur les technologies utilisées dans les visualisations
Tous les scripts utilisent maintenant les rings standards (adopt|trial|assess|hold) conformément à la migration effectuée.
- le script supprime maintenant TOUS les liens Équipe existants (même s'il n'y en a qu'un)
- puis ajoute un seul lien Équipe au bon endroit
- vérifie qu'il n'y a qu'un seul lien après l'opération
- évite les doublons même si le script s'exécute plusieurs fois
- désactivation de addLinksToHeader() dans strategie-script.js
- désactivation de addStrategyLinkToHeader() dans strategie-link.js
- tous les liens de navigation sont maintenant gérés uniquement par Navigation.tsx
- évite les doublons de liens (Équipe, Stratégie, etc.)
- création d'un script shell /tmp/add_team_link.sh pour simplifier la logique
- séparation des préoccupations : script shell pour orchestration, Python pour manipulation
- meilleure lisibilité et maintenabilité
- gestion d'erreurs simplifiée avec set -e
- ajout de try/except pour capturer toutes les erreurs
- logs de débogage améliorés (répertoire actuel, contenu)
- meilleure gestion des fins de ligne
- affichage de la traceback en cas d'erreur
- vérification de l'existence du fichier avant lecture
- utilisation de splitlines(keepends=True) pour préserver les fins de ligne
- gestion d'encodage UTF-8 explicite
- amélioration de la gestion des erreurs dans le Dockerfile
- le script vérifie maintenant si le lien existe déjà
- si plusieurs occurrences sont détectées, elles sont supprimées
- évite la création de doublons lors de rebuilds multiples
- restauration de la config avec adopt|trial|assess|hold
- mapping core -> adopt, strategic -> assess, support -> adopt, trial -> trial
- tous les 38 blips utilisent maintenant les rings standards
- Remplacer config.json par radar-business/config-business.json dans .techradar/data
- Copier explicitement team.html et team-visualization-data.json dans .techradar/public
- Les blips business sont copiés dans .techradar/data/radar/2025-01-15
- rm -rf .techradar/data/radar avant copie des blips business
- copie explicite de team.html et team-visualization-data.json dans .techradar/public
- logs inchangés
- Ajout d'un RUN pour compter les fichiers markdown copiés dans .techradar/data/radar
- Affiche aussi quelques noms pour vérifier que les blips sont bien copiés
- Script Python dans /tmp/add_team_link.py
- Plus lisible et fiable que Python inline
- Pas de problèmes d'échappement
- Gestion d'erreurs avec sys.exit
- Utilisation de sed en premier (plus simple)
- Fallback avec Python en une seule ligne si sed échoue
- Pas de heredoc complexe qui cause des problèmes d'échappement
- Création de team.tsx directement dans le Dockerfile
- Modification de Navigation.tsx avec Python inline
- Méthode alternative si le pattern regex ne fonctionne pas
- Plus simple et plus fiable que d'utiliser un script séparé
- Utilisation de return au lieu de exit pour ne pas tuer le shell parent
- Le Dockerfile gère déjà les erreurs avec || exit 1
- Retour 0 à la fin pour indiquer le succès
- Simplification de la gestion d'erreurs dans Dockerfile
- Suppression de set -e dans le script pour mieux gérer les erreurs
- Vérification que Navigation.tsx existe avant modification
- Affichage du contenu en cas d'échec
- Désactivation temporaire de set -e pour voir toutes les erreurs
- Capture du code de sortie du script
- Affichage du contenu de Navigation.tsx en cas d'échec
- Réactivation de set -e à la fin
- Utilisation de if/then au lieu de && pour mieux gérer les erreurs
- Affichage du contenu de Navigation.tsx en cas d'échec
- Affichage du contenu du dossier pages/ si team.tsx n'existe pas
- Messages d'erreur plus clairs
- Affichage du contenu de Navigation.tsx avant modification
- Affichage complet après modification pour vérification
- Exit code 1 si la modification échoue
- Logs détaillés pour identifier le problème
- Utilisation de sed en premier (plus simple)
- Fallback avec Python si sed échoue
- Logs détaillés pour voir le contenu avant/après
- Affichage du contenu modifié pour vérification
- Ajout de /app/.techradar/public/ dans la recherche
- Logs détaillés avec pwd pour voir le répertoire actuel
- Vérification après copie pour confirmer le succès
- Meilleur diagnostic des chemins
- Vérification explicite que team.html existe dans public/ source
- Logs détaillés pour identifier où le fichier se trouve
- Vérification après copie dans .techradar/public/
- Recherche dans .techradar/public/
- Recherche dans /app/public/
- Recherche dans ../public/
- Logs détaillés pour diagnostic
- Copie de team-visualization-data.json également
- Installation de Python3 dans Dockerfile
- Logs détaillés pour diagnostic
- Vérification après modification
- set -e pour arrêter en cas d'erreur
- Vérification dans Dockerfile que le script a réussi
- Utilisation de Python au lieu de sed/awk pour modification précise
- Insertion correcte du lien Équipe après Overview
- Page team.tsx avec iframe pour charger team.html
- Script create-team-page.sh pour créer team.tsx et modifier Navigation
- Page Next.js qui charge team.html dynamiquement
- Lien Équipe ajouté directement dans le composant Navigation React
- Plus fiable que l'injection JavaScript
- Vérification de l'existence de team.html dans out/ au démarrage
- Copie automatique depuis public/ si absent
- Ajout de --single à serve pour gérer les routes SPA (peut aider pour les fichiers HTML)
- Utilisation de MutationObserver pour détecter quand le header est ajouté au DOM
- Timeout de sécurité après 5 secondes
- Amélioration de la logique d'initialisation pour éviter les exécutions multiples
- Logs détaillés pour diagnostic
- Logs dans initWhenReady() pour voir si le header est trouvé
- Logs dans addLinksToHeader() pour voir si la fonction est appelée
- Retry avec limite de 10 tentatives pour trouver le header
- Logs pour vérifier l'ajout du lien Équipe
- Logs détaillés pour voir ce qui est copié dans out/
- Vérification du contenu de out/ avant et après copie
- Diagnostic amélioré pour identifier le problème
- Amélioration de la copie de team.html avec vérifications et logs
- Fonction initWhenReady() pour attendre que le header soit disponible
- Logs de debug pour vérifier l'ajout du lien Équipe
- Vérification de l'existence des fichiers avant copie dans out/
- Correction logique addLinksToHeader() pour éviter retour prématuré
- Utilisation d'un conteneur dédié pour les liens de navigation
- Copie explicite de team.html et team-visualization-data.json dans out/ après build
- Le lien Équipe s'affiche maintenant correctement dans le header
- Création de guide-page-equipe.md avec documentation complète
- Description des 3 visualisations (graphe réseau, matrice congestion, équipe genèse)
- Instructions pour régénérer les données
- Guide de personnalisation et cas d'usage
- Mise à jour du README avec lien vers la nouvelle documentation
- Création du script generate-team-visualization-data.js pour générer les données JSON
- Page /team.html avec 3 visualisations :
* Graphe réseau (Cytoscape.js) : technologies ↔ membres
* Matrice de congestion : technologies core et disponibilité
* Équipe de genèse MVP : sélection automatique pour MVP 2 mois
- Ajout du lien '👥 Équipe' dans le header du radar
- Données JSON générées pour visualisations interactives
- Identification des congestions et technologies non couvertes
- Création de 12 fichiers de profils individuels dans docs/data/team/
- Chaque profil contient métadonnées YAML complètes (compétences, projets, soft skills)
- Correction du script extract-technologies.js pour charger toutes les compétences depuis les fichiers
- Mise à jour des blips radar avec les données d'équipe correctes
- Suppression des anciens fichiers dans radar/ (remplacés par radar-business/)
- 58 compétences au total chargées depuis les fichiers individuels
- Légende remontée de bottom: 220px à bottom: 320px
- Plus d'espace entre la légende et le quadrant 4
- La légende est maintenant bien plus haute à droite
- Quadrant 4 descendu à bottom: 10px (tout en bas)
- Légende remontée à bottom: 220px (en haut à droite)
- La légende prend maintenant la place qu'occupait le quadrant 4
- Le quadrant 4 est maintenant en bas à droite
- Largeur des labels augmentée à 180px (au lieu de 160px)
- Tailles de police augmentées : titre 15px, description 12px
- Labels positionnés à 10px des bords (extrêmes coins)
- Quadrant 4 remonté à 240px du bas (très haut)
- Légende positionnée à 10px du bas à droite (coin extrême)
- Espacement maximal entre tous les éléments
- Utilisation de sélecteurs basés sur la structure réelle du DOM
- Réduction de la largeur des labels à 160px
- Réduction de toutes les tailles de police (titre 14px, description 11px)
- Labels positionnés à 60px des bords
- Quadrant 4 remonté à 160px du bas pour la légende
- Légende positionnée à 60px du bas à droite
- Z-index 100 pour la légende
- Sélecteurs ciblant directement [class*='Radar_radar'] [class*='Label_label']
- Approche simplifiée avec sélecteurs plus génériques
- Marges augmentées à 50px pour tous les quadrants
- Quadrant 4 repositionné à 200px du bas
- Légende repositionnée à 50px du bas à droite
- Z-index augmenté pour la légende
- Suppression des sélecteurs trop spécifiques qui ne fonctionnaient pas