Notes de version — WUIC Framework v1.7.0
Date: 11 août 2026 Version publiée précédente: 1.5.0 (21 juillet 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21
Paquets remplacés le 15 août 2026. Les archives publiées initialement contenaient un
appsettings.jsonavecautoGeneratedQueryTimeoutà1: avec cette valeur, toute requête dépassant une seconde se termine par une erreur du serveur. Quelques réglages d'en-tête (logo, orientation du menu, sélecteur de thèmes, notifications) étaient également restés d'une session de test. Les archives ont été reconstruites et leurs sommes de contrôle mises à jour.Si vous avez téléchargé avant le 15 août : téléchargez à nouveau le paquet, ou ouvrez
appsettings.jsonet remettezautoGeneratedQueryTimeoutà30, en supprimant les clésheader-logo,header-logo-position,header-menu-orientation,header-show-theme-selector,header-menu-multicolumn-submenuetheader-show-notificationssi vous ne les avez pas définies vous-même. Aucun de ces réglages ne touche aux données : modifier le fichier et redémarrer suffit.
Trois semaines de travail sur deux fronts. Le premier est l'apparence : arrive le Theme Builder, une page depuis laquelle composer des thèmes sur mesure — couleurs, typographie, arrière-plan, densité, rendu de la grille — qui s'appliquent à tous les utilisateurs de l'installation, et l'en-tête de l'application a été redessiné et rendu configurable. Le second est l'intégration et l'observabilité : le nouveau Webhook Hub pour recevoir et envoyer des événements avec signature et réessais, et le Performance Inspector qui mesure les temps de fetch et de rendu par route. Le chatbot apprend à agir sur trois autres surfaces de l'application et à interroger le schéma de la base de données.
🎨 Theme Builder
Une nouvelle page sous Administration permet de composer des thèmes personnalisés sans toucher au code. Chaque thème enregistré apparaît dans le sélecteur de thèmes de tous les utilisateurs de l'installation, à côté de ceux fournis.
Ce que l'on peut régler :
- Couleur principale, à partir de laquelle est générée l'échelle complète de 11 nuances : l'échelle reste cliquable, et choisir une nuance plus sombre la promeut en couleur principale. Une étiquette indique le rapport de contraste WCAG atteint (AAA / AA / AA-large / fail).
- Surfaces claires et sombres, rayon des coins et densité (confortable ou compacte).
- Typographie : famille de caractères issue d'un catalogue de polices système ou pile libre, et taille de base qui met à l'échelle toute l'interface.
- Arrière-plan de page : couleur unie, dégradé ou image. Le dégradé peut avoir une dérive lente optionnelle qui fait osciller son inclinaison dans le temps ; l'image se configure avec ajustement, répétition, position et un voile sombre pour que le texte reste lisible.
- Grille : les lignes alternées et la ligne sélectionnée ne sont plus des couleurs fixes mais des mélanges entre la surface et un accent, pilotés par deux molettes d'intensité, avec la possibilité d'un accent différent de la couleur principale.
- Mode clair/sombre laissé libre ou imposé par le thème.
L'aperçu est en direct et applique le thème à toute la page pendant qu'on le compose, sans toucher aux préférences de l'utilisateur : en quittant, en rechargeant ou en fermant le navigateur, son propre thème revient.
L'export Excel suit le thème : un fichier exporté avec un thème personnalisé actif sort avec les couleurs de ce thème — en-tête, lignes alternées, bordures — au lieu des gris génériques. Des styles de repli ont été ajoutés pour toutes les familles de préréglages, si bien qu'un thème pas encore échantillonné hérite de l'aspect de sa famille.
Le catalogue des thèmes fournis s'élargit de nouvelles variantes, et le thème actif est appliqué dès la première image après un rechargement, sans le clignotement du thème précédent.
🖥️ En-tête redessiné et configurable
L'en-tête de l'application est désormais un composant du framework : les installations en héritent au lieu d'en maintenir une copie. Le bloc en haut à droite a été compacté — sélecteur de thèmes, clair/sombre, langue, notifications et espace utilisateur tiennent dans une carte qui se déplie au survol — et l'espace utilisateur affiche nom, rôle, licence et déconnexion.
Une nouvelle section Header & Menu dans les paramètres permet de choisir l'orientation du menu (horizontal au-dessus ou en dessous, vertical à gauche ou à droite), de charger un logo et de le positionner, et d'activer ou de désactiver le sélecteur de langue, celui de thèmes et les notifications. Il est aussi possible de désactiver la disposition automatique en plusieurs colonnes des entrées de sous-menu : les sous-menus longs deviennent alors défilables au lieu d'être tronqués.
🔗 Webhook Hub
Nouveau système pour intégrer l'application à des services externes, dans les deux sens.
En sortie : les événements sont mis en file et livrés de façon asynchrone, avec signature HMAC du payload, réessais à intervalle fixe ou exponentiel, file de dead letter pour les livraisons définitivement échouées et possibilité de rejouer une livraison. Chaque tentative est tracée dans les logs.
En entrée : l'endpoint POST /api/webhooks/inbound accepte les appels externes et les achemine selon une configuration de métadonnées — exécution SQL, appel HTTP ou invocation d'une méthode — avec protection anti-replay.
Sont également inclus des politiques de notification avec période de silence configurable, une API d'administration pour gérer les endpoints et une tâche du planificateur qui vide la file. Toute la configuration — endpoints, événements, abonnements, règles d'entrée — vit dans des tables de métadonnées : ajouter une intégration ne demande ni code dédié ni nouveau déploiement. La page « Webhook Hub » de la documentation intégrée décrit la procédure complète en 5 langues.
📈 Performance Inspector
Le framework peut collecter des métriques de fetch et de rendu pour chaque route, les agréger et les présenter dans un tableau de bord d'administration : moyenne, p95, maximum et nombre, avec une rétention de 7 jours et une activation route par route.
La fonction est désactivée par défaut et s'active avec AppSettings:enablePerformanceInspector, en hot-reload. À côté des métriques, un inspecteur de la qualité des données s'active par route depuis le props bag (extraProps.qualityInspector).
🤖 Chatbot : nouvelles actions et lecture du schéma
Le chatbot RAG gagne dix nouveaux types d'action et la capacité d'interroger la structure du projet.
- Trois nouvelles surfaces contextuelles : pivot builder, éditeur de paramètres et report designer. Le chatbot propose des actions sur la page où l'on se trouve. Dans l'éditeur de paramètres, les modifications sont seulement préparées : l'enregistrement reste un geste explicite de l'utilisateur. Dans le dump envoyé au modèle, les valeurs réservées — chaînes de connexion, mots de passe, clés, licence — sont masquées, et une liste d'exclusion empêche de les écrire. Dans le report designer, un nouveau fichier horodaté est toujours généré, sans toucher au rapport ouvert.
- Opérations sur les métadonnées : création de table, scaffolding de tables, vues et colonnes, déplacement d'entrées de menu. Les deux opérations non réversibles — suppression d'une colonne et d'une entrée de menu — exigent une confirmation explicite, vérifiée aussi côté serveur, ce qui vaut même lorsque la demande vient d'un client sans interface.
- Introspection : le chatbot peut énumérer les connexions (les noms seulement, jamais les chaînes de connexion), les bases, les tables, les colonnes et l'arbre du menu. Sans ces lectures, il ne pouvait pas connaître les identifiants réels sur lesquels agir.
Une nouvelle page de documentation liste les prompts pris en charge, vérifiée face aux tests automatisés.
📊 Spreadsheet : visibilité des colonnes alignée sur la grille
Le spreadsheet respecte désormais les mêmes indicateurs de visibilité que la list grid : mc_hide_in_list, mc_hide_in_edit et mc_show_in_filters. Une colonne masquée dans la liste n'apparaît plus dans la feuille, et une colonne masquée en édition n'est plus modifiable dans les cellules.
🛡️ Sécurité
Hardening best-effort sur la génération assistée des rapports : le nom de fichier demandé est désormais validé en rejetant les chemins absolus et les caractères non autorisés, avec un contrôle qui se comporte de la même manière sous Windows et sous Linux — il s'appuyait auparavant sur une normalisation qui filtrait différemment sur les deux systèmes. L'erreur renvoyée distingue une configuration invalide d'un échec de génération, afin que les intégrateurs ne cherchent pas le problème au mauvais endroit.
🐛 Corrections notables
- Calendrier, premier chargement : la vue affichait des données non filtrées sur l'intervalle affiché — typiquement aucun événement dans le mois courant, même en présence de rendez-vous. Le premier chargement partait avant que les champs de début et de fin configurés pour l'archétype soient disponibles, et aucune requête ultérieure ne corrigeait le tir. Les champs sont maintenant résolus avant la composition du filtre et, s'ils arrivent ensuite, les données sont redemandées une seule fois.
- Scènes 3D avec une licence professional : les pages du concepteur et de la visionneuse 3D renvoyaient vers l'écran d'accès refusé, car la fonctionnalité n'était incluse dans aucun profil de licence. Elle fait désormais partie du profil professional.
- Rapports sous Linux : la génération assistée d'un rapport échouait parce que les polices étaient traitées via une bibliothèque graphique disponible uniquement sous Windows.
- Performance Inspector, agrégation : deux exécutions superposées du job d'agrégation — le tableau de bord le déclenche lors de son propre rechargement, et il peut aussi être lancé à la main — se terminaient par une erreur de clé dupliquée. De plus, la fenêtre des données brutes n'était pas alignée sur la limite du bucket journalier, si bien que le bucket le plus ancien était reconstruit à partir d'un sous-ensemble des événements.
- Linux derrière un reverse proxy : les URL absolues générées par le backend perdaient le port et utilisaient le mauvais schéma lorsque l'installation est servie sur un port non standard ou uniquement en HTTP.
- Oracle, enregistrement des scènes 3D : l'enregistrement échouait à cause d'un nom de paramètre réservé et de la conversion des valeurs numériques. Les deux sont corrigés, ainsi que le traitement des colonnes au nom en minuscules entre guillemets.
- Oracle, exposition OData : les colonnes étaient forcées en majuscules au lieu d'utiliser le nom physique déclaré dans les métadonnées, rendant inaccessibles les entités aux noms mixtes.
- PostgreSQL et Oracle, lookups dans les graphiques et les regroupements : le champ descriptif d'un lookup n'était pas résolu du nom logique au nom physique, et le regroupement affichait des valeurs vides ou erronées.
- Chatbot, confirmations manquantes : à quatre endroits la demande de confirmation n'apparaissait jamais en raison d'un appel mal formé ; à deux de ces endroits la suppression (historique et sessions du chat) se faisait sans rien demander. Toute confirmation passe désormais par le même chemin et, en cas d'erreur, la réponse est « annuler ».
- Import de métadonnées : les routes dont le champ base de données est vide — celles qui utilisent la base par défaut de l'application — ne pouvaient pas être importées, et l'erreur laissait penser à un problème de droits ou à une mauvaise base.
- Visionneuse 3D : la scène occupait une bande horizontale au lieu de toute la hauteur de la page.
- Interface, grille sur fond thématique : la zone sous la dernière ligne laissait transparaître l'arrière-plan de la page, donnant l'impression d'une grille trouée. La surface de la grille suit désormais le thème, en clair comme en sombre.
🔧 Mises à jour opérationnelles recommandées
- Revoir
appsettings.jsonaprès la mise à jour : les nouvelles clés ont des valeurs par défaut prudentes et ne demandent aucune intervention, mais c'est le bon moment pour les parcourir. - Performance Inspector : mettre
AppSettings:enablePerformanceInspectoràtruepour l'activer ; il reste inactif si la clé est absente. - Webhook Hub : aucune intervention n'est nécessaire pour le rendre accessible. Tables, routes d'administration et entrées de menu — regroupées dans un sous-menu « Webhook Hub » sous Administration — sont créées au premier chargement du menu, aussi bien sur une installation neuve qu'en mise à jour depuis une version antérieure. Reste à configurer l'intégration : en sortie trois lignes (l'endpoint avec URL de destination, secret partagé, délai et politique de réessai ; l'événement ; l'abonnement qui les relie), en entrée un endpoint de direction
inboundet une règle d'acheminement. La signature voyage dans l'en-têteX-Wuic-Signature; la procédure complète figure dans la page « Webhook Hub » de la documentation intégrée. - Theme Builder : la table des thèmes est créée au premier enregistrement. Si vous utilisez des thèmes personnalisés, vérifiez l'export Excel d'une grille pour confirmer que les couleurs sont celles attendues.
- Chatbot : les nouvelles actions sont disponibles après le redémarrage du moteur RAG ; les opérations non réversibles exigent une confirmation et ne peuvent pas être appliquées sans elle.
- Linux derrière un reverse proxy : si l'installation répond sur un port non standard ou uniquement en HTTP, régénérer la configuration nginx ou aligner à la main le vhost existant sur
proxy_set_header Host $http_host;etproxy_set_header X-Forwarded-Proto $scheme;. Les mises à jour ne réécrivent pas un vhost déjà présent.