Files
SimpleClient-releases/CLAUDE.md
Pierre Marx 057504a65f docs: Amélioration du workflow de release dans CLAUDE.md
- Ajout du workflow complet de A à Z (6 phases détaillées)
- Phase 1: Développement sur branche feature
- Phase 2: Préparation de la release (changelog + version)
- Phase 3: Fusion dans main avec --no-ff
- Phase 4: Build des exécutables multi-plateformes
- Phase 5: Documentation finale (notes de release)
- Phase 6: Déploiement en production
- Ajout de la structure finale attendue
- Points de vigilance et bonnes pratiques
- Références à Semantic Versioning et Conventional Commits
2025-10-21 11:17:10 -04:00

9.2 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Commands

Development

npm start         # Lance l'application en production
npm run dev       # Mode développement avec DevTools (NODE_ENV=development)

Build & Distribution

npm run build                 # Build pour toutes les plateformes
npm run build:win             # Build pour Windows (.exe, .nsis)
npm run build:mac             # Build pour macOS (.dmg, .app)
npm run build:linux           # Build pour Linux (AppImage, .deb, .rpm)
npm run build:linux-x64       # Build Linux spécifique x64
npm run build:linux-arm64     # Build Linux spécifique ARM64

Architecture

Stack technologique

  • Electron 28.0.0 : Framework principal pour l'application desktop
  • SignalR (@microsoft/signalr 9.0.6) : Communication temps réel avec le serveur CTI/IPBX
  • Choices.js 11.1.0 : Interface de sélection améliorée pour les terminaux téléphoniques
  • HTML/CSS/JavaScript natif : Pas de framework frontend (React, Vue, etc.)

Structure des fichiers principaux

/
├── main.js              # Process principal Electron - gère SignalR, IPC et fenêtres
├── renderer.js          # Process renderer - UI et gestion des webviews
├── index.html           # Structure HTML de l'application
├── styles-modern.css    # Styles CSS avec gradients et animations
├── config.json          # Configuration SignalR uniquement
└── notes/              # Stockage des notes agents (format: notes_{agentId}.json)

Communication inter-process (IPC)

Le système utilise IPC pour la communication entre le process principal et le renderer :

Canaux principaux :

  • agent-login : Authentification via SignalR (AgentLogin)
  • logout / quit-app : Déconnexion et fermeture
  • get-terminals : Récupération de la liste des terminaux
  • save-notes / get-notes : Gestion des notes avec persistance fichier
  • signalr-status : État de la connexion SignalR
  • switch-to-center / release-center : Événements IPBX pour la gestion des appels

Intégration SignalR

Hub SignalR : /planningHub

Méthodes invoquées :

  • GetTerminalListByServiceProvider : Liste des terminaux disponibles
  • AgentLogin : Connexion agent (email, password, terminal)
  • AgentLogoff : Déconnexion agent

Événements écoutés :

  • IpbxEvent : Événements téléphoniques (codes 1=appel entrant, 2=fin d'appel)
  • Plus de 13 types d'événements potentiels loggés dans ~/.simpleconnect-ng/signalr.log

Gestion des webviews

Chaque centre médical a sa propre webview Electron avec :

  • Session isolée : Partition unique par centre pour cookies/auth séparés
  • Auto-connexion : Injection des credentials dans les plateformes (Doctolib, MonDocteur, etc.)
  • Preload script : Injection JavaScript pour automatiser la connexion
  • UserAgent personnalisé : Identification comme navigateur standard

Système de logging

SignalR logs : ~/.simpleconnect-ng/signalr.log

  • Tous les événements SignalR en JSON structuré
  • Timestamp, arguments et contexte agent

Notes agents : /notes/notes_{agentId}.json

  • Sauvegarde automatique après 2 secondes d'inactivité
  • Historique des 50 dernières versions
  • Synchronisation localStorage + fichier

Workflow de développement

Workflow complet de release (de A à Z)

Suivre systématiquement ce workflow pour chaque nouvelle version :

Phase 1 : Développement sur branche feature

  1. Créer une branche feature

    git checkout -b feature/nom-de-la-fonctionnalite
    
  2. Développer avec commits atomiques

    • Préfixes : feat:, fix:, refactor:, docs:, style:, test:, chore:
    • Un commit = une modification logique
    • Messages clairs et descriptifs
    git commit -m "feat: Ajouter la fonctionnalité X"
    git commit -m "fix: Corriger le bug Y"
    git commit -m "refactor: Simplifier le code Z"
    
  3. Tester les modifications

    npm run dev  # Test en mode développement
    

Phase 2 : Préparation de la release

  1. Mettre à jour le changelog (docs/changelog.md)

    • Obtenir la date : date +%Y-%m-%d
    • Format : ## [X.X.X] - AAAA-MM-JJ
    • Catégories : Ajouté, Modifié, Corrigé, Supprimé, Technique, Documentation
    • Ajouter en haut du fichier (au-dessus de la version précédente)
  2. Bumper la version (package.json)

    • PATCH (x.x.+1) : Corrections, petits ajustements
    • MINOR (x.+1.0) : Nouvelles fonctionnalités compatibles
    • MAJOR (+1.0.0) : Changements majeurs incompatibles
    • Modifier le champ "version": "X.X.X"
  3. Commit de release

    git add docs/changelog.md package.json
    git commit -m "release: Version X.X.X - Titre court
    
    - Fonctionnalité 1
    - Fonctionnalité 2
    - Correction 1
    - Bump version X.X.X"
    

    Important : Ne jamais mentionner Claude, Anthropic ou des adresses emails relatives à ces entités

Phase 3 : Fusion dans main

  1. Basculer sur main et fusionner

    git checkout main
    git merge feature/nom-de-la-fonctionnalite --no-ff
    
    • --no-ff : Force un merge commit (historique propre et tracé)
  2. Push vers origin

    git push origin main
    

Phase 4 : Build des exécutables

  1. Build pour les plateformes nécessaires

    # macOS (si développement sur Mac)
    npm run build
    
    # Linux x64 (production principale)
    npm run build:linux-x64
    
    # Windows (si nécessaire)
    npm run build:win
    
  2. Organiser les builds dans dist/vX.X.X/

    # Créer le dossier de version
    mkdir -p dist/vX.X.X
    
    # Copier le changelog
    cp docs/changelog.md dist/vX.X.X/CHANGELOG.md
    
    # Déplacer les builds
    mv dist/SimpleConnect-X.X.X*.{AppImage,dmg,zip,exe} dist/vX.X.X/ 2>/dev/null
    mv dist/SimpleConnect-X.X.X*.blockmap dist/vX.X.X/ 2>/dev/null
    
    # Vérifier le contenu
    ls -lh dist/vX.X.X/
    

Phase 5 : Documentation finale

  1. Créer les notes de release (releases/vX.X.X.md)

    • Structure markdown avec sections :
      • Titre et date
      • Résumé des changements
      • Nouveautés principales
      • Corrections
      • Fichiers disponibles
      • Compatibilité
      • Guide d'utilisation (si nécessaire)
  2. Commit et push de la documentation

    git add releases/vX.X.X.md
    git commit -m "docs: Ajout des notes de release pour vX.X.X"
    git push origin main
    

Phase 6 : Déploiement (optionnel)

  1. Déployer sur le serveur de production
    scp dist/vX.X.X/SimpleConnect-X.X.X.AppImage user@server:/path/to/app/
    

Structure finale attendue

Après chaque release, vérifier cette structure :

project/
├── docs/
│   └── changelog.md          # ✅ Contient la nouvelle version
├── releases/
│   └── vX.X.X.md            # ✅ Notes de release détaillées
├── dist/
│   └── vX.X.X/              # ✅ Dossier de version
│       ├── CHANGELOG.md
│       ├── SimpleConnect-X.X.X.AppImage
│       ├── SimpleConnect-X.X.X-arm64.dmg
│       └── SimpleConnect-X.X.X-arm64-mac.zip
└── package.json             # ✅ Version à jour

Points de vigilance

  • Ne JAMAIS committer les binaires dans Git (dist/ est dans .gitignore)
  • Toujours utiliser --no-ff pour les merges (historique tracé)
  • Tester avant de merger dans main
  • Suivre Semantic Versioning (semver.org)
  • Conventional Commits pour les messages (conventionalcommits.org)

Points d'attention

Sécurité

  • Jamais de credentials en dur : Tout passe par SignalR
  • Sessions isolées : Chaque centre a sa partition Electron
  • Logs sécurisés : Pas de mots de passe dans les logs

UI/UX

  • Pas d'emojis : Utiliser des icônes SVG inline pour compatibilité Linux
  • Animations fluides : Transitions CSS avec cubic-bezier
  • Responsive : Panneau de notes redimensionnable (280-600px)

SignalR

  • Reconnexion automatique : [0, 2000, 5000, 10000]ms
  • Filtrage par terminal : Ne recevoir que les événements du terminal connecté
  • Gestion des erreurs : Try/catch sur toutes les invocations

Build cross-platform

  • Windows : NSIS installer avec shortcuts
  • macOS : DMG avec icône personnalisée
  • Linux : AppImage, .deb, .rpm (x64 et arm64)

Fonctionnalités clés

Authentification

  • Connexion centralisée via SignalR
  • Option "Forcer la déconnexion" pour débloquer sessions
  • Auto-focus sur le champ code d'accès

Gestion des appels

  • Basculement automatique vers le bon centre (IpbxEvent code 1)
  • Libération automatique après raccrochage (IpbxEvent code 2)
  • Notifications visuelles et sonores

Interface

  • Header unifié avec onglets (fusion pour gagner de l'espace)
  • Panneau de notes latéral avec sauvegarde automatique
  • Pas de barre de menu Electron (autoHideMenuBar: true)
  • Scrollbars masquées mais fonctionnelles

Persistance

  • Notes sauvegardées localement et sur serveur
  • Préférences utilisateur dans localStorage
  • Historique des 50 dernières versions de notes