Release Notes — WUIC Framework v1.7.0
Data: 11 agosto 2026 Versione precedente pubblicata: 1.5.0 (21 luglio 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21
Pacchetti sostituiti il 15 agosto 2026. Gli archivi pubblicati inizialmente contenevano un
appsettings.jsonconautoGeneratedQueryTimeouta1: con quel valore ogni interrogazione che supera un secondo termina con un errore del server. Insieme erano rimaste alcune impostazioni dell'intestazione (logo, orientamento del menu, selettore dei temi, notifiche) lasciate da una sessione di test. Gli archivi sono stati ricostruiti e le somme di controllo aggiornate.Se hai scaricato prima del 15 agosto: riscarica il pacchetto, oppure apri
appsettings.jsone riportaautoGeneratedQueryTimeouta30, eliminando le chiaviheader-logo,header-logo-position,header-menu-orientation,header-show-theme-selector,header-menu-multicolumn-submenueheader-show-notificationsse non le hai impostate tu. Nessuna delle due impostazioni tocca i dati: l'installazione si corregge modificando il file e riavviando.
Tre settimane di lavoro concentrate su due fronti. Il primo è l'aspetto: arriva il Theme Builder, una pagina da cui comporre temi su misura — colori, tipografia, sfondo, densità, resa della griglia — che valgono per tutti gli utenti dell'installazione, e l'intestazione dell'applicazione è stata ridisegnata e resa configurabile. Il secondo è l'integrazione e l'osservabilità: il nuovo Webhook Hub per ricevere e inviare eventi con firma e ritentativi, e il Performance Inspector che misura fetch e render per route. Il chatbot impara ad agire su altre tre superfici dell'applicazione e a interrogare lo schema del database.
🎨 Theme Builder
Una nuova pagina sotto Amministrazione permette di comporre temi personalizzati senza toccare il codice. Ogni tema salvato compare nel selettore dei temi di tutti gli utenti dell'installazione, accanto a quelli predefiniti.
Cosa si può impostare:
- Colore principale, da cui viene generata l'intera scala a 11 tonalità: la scala resta cliccabile, e scegliere una tonalità più scura la promuove a colore principale. Un badge indica il rapporto di contrasto WCAG raggiunto (AAA / AA / AA-large / fail).
- Superfici chiare e scure, raggio degli angoli e densità (comoda o compatta).
- Tipografia: famiglia di caratteri da un catalogo di font di sistema oppure stack libero, e dimensione di base che scala l'intera interfaccia.
- Sfondo pagina: tinta unita, gradiente o immagine. Il gradiente può avere una deriva lenta opzionale, che fa oscillare l'inclinazione nel tempo; l'immagine si configura con adattamento, ripetizione, posizione e velo scuro per non compromettere la leggibilità del testo.
- Griglia: righe alternate e riga selezionata non sono più colori fissi ma mescole fra la superficie e un accento, con due sole manopole di intensità e la possibilità di usare un accento diverso dal colore principale.
- Modalità chiaro/scuro libera oppure imposta dal tema.
L'anteprima è live e applica il tema a tutta la pagina mentre lo si compone, senza toccare le preferenze dell'utente: uscendo, ricaricando o chiudendo il browser il proprio tema torna quello di prima.
L'export Excel segue il tema: un file esportato con un tema personalizzato attivo esce con i colori di quel tema — intestazione, righe alternate, bordi — invece dei grigi generici. Per tutte le famiglie di preset sono stati aggiunti gli stili di ripiego, così anche un tema non ancora campionato eredita l'aspetto della propria famiglia.
Il catalogo dei temi predefiniti si allarga con nuove varianti, e il tema attivo viene applicato già al primo fotogramma dopo un ricaricamento, senza il lampeggio del tema precedente.
🖥️ Intestazione ridisegnata e configurabile
L'intestazione dell'applicazione è ora un componente del framework: le installazioni la ereditano invece di mantenerne una copia. Il blocco in alto a destra è stato compattato — selettore temi, chiaro/scuro, lingua, notifiche e area utente stanno in una card che si espande al passaggio del mouse — e l'area utente mostra nome, ruolo, licenza e uscita.
Una nuova sezione Header & Menu nelle impostazioni permette di scegliere l'orientamento del menu (orizzontale sopra o sotto, verticale a sinistra o a destra), di caricare un logo e posizionarlo, e di attivare o disattivare selettore lingua, selettore temi e notifiche. È inoltre possibile disattivare l'affiancamento automatico delle voci di sottomenu: in quel caso i sottomenu lunghi diventano scorrevoli invece di essere troncati.
🔗 Webhook Hub
Nuovo sistema per integrare l'applicazione con servizi esterni, in entrambe le direzioni.
In uscita: gli eventi vengono accodati e consegnati in modo asincrono, con firma HMAC del payload, ritentativi a intervallo fisso o esponenziale, coda di dead letter per le consegne definitivamente fallite e possibilità di rigiocare una consegna. Ogni tentativo è tracciato nei log.
In entrata: l'endpoint POST /api/webhooks/inbound accetta chiamate esterne e le instrada in base a una configurazione di metadati — esecuzione SQL, chiamata HTTP o invocazione di un metodo — con protezione anti-replay.
Sono incluse le politiche di notifica con periodo di silenzio configurabile, una API amministrativa per la gestione degli endpoint e un job dello scheduler per lo smaltimento della coda. Tutta la configurazione — endpoint, eventi, sottoscrizioni, regole di ingresso — vive su tabelle di metadati: aggiungere una integrazione non richiede né codice dedicato né un nuovo deploy. La pagina «Webhook Hub» della documentazione in-app riporta la procedura completa in 5 lingue.
📈 Performance Inspector
Il framework può raccogliere metriche di fetch e render per ogni route, aggregarle e mostrarle in una dashboard amministrativa: media, p95, massimo e conteggio, con ritenzione a 7 giorni e possibilità di attivare la raccolta route per route.
La funzione è disattivata per impostazione predefinita e si abilita con AppSettings:enablePerformanceInspector, in hot-reload. Accanto alle metriche è disponibile un ispettore della qualità del dato, attivabile per singola route dal props bag (extraProps.qualityInspector).
🤖 Chatbot: nuove azioni e lettura dello schema
Il chatbot RAG guadagna dieci nuovi tipi di azione e la capacità di interrogare la struttura del progetto.
- Tre nuove superfici contestuali: pivot builder, editor delle impostazioni e report designer. Il chatbot propone azioni sulla pagina in cui ci si trova. Sull'editor delle impostazioni le modifiche vengono solo preparate: il salvataggio resta un gesto esplicito dell'utente. Nel dump inviato al modello i valori riservati — stringhe di connessione, password, chiavi, licenza — sono mascherati, e una lista di esclusione impedisce di scriverli. Sul report designer viene sempre generato un file nuovo con data e ora, senza toccare il report aperto.
- Operazioni sui metadati: creazione di tabella, scaffolding di tabelle, viste e colonne, spostamento di voci di menu. Le due operazioni non reversibili — eliminazione di una colonna e di una voce di menu — richiedono una conferma esplicita verificata anche lato server, quindi anche quando la richiesta arriva da un client senza interfaccia.
- Introspezione: il chatbot può elencare connessioni (solo i nomi, mai le stringhe di connessione), database, tabelle, colonne e l'albero del menu. Senza queste letture non poteva conoscere gli identificativi reali su cui operare.
Una nuova pagina di documentazione elenca i prompt supportati, verificata rispetto ai test automatici.
📊 Spreadsheet: visibilità delle colonne allineata alla griglia
Lo spreadsheet rispetta ora gli stessi flag di visibilità della list-grid: mc_hide_in_list, mc_hide_in_edit e mc_show_in_filters. Una colonna nascosta in elenco non compare più nel foglio, e una colonna nascosta in modifica non è più editabile nelle celle.
🛡️ Sicurezza
Hardening best-effort sulla creazione guidata dei report: il nome del file richiesto viene ora validato rifiutando percorsi assoluti e caratteri non ammessi, con un controllo che si comporta allo stesso modo su Windows e su Linux — in precedenza si appoggiava a una normalizzazione che sui due sistemi filtrava in modo diverso. L'errore restituito distingue una configurazione non valida da un fallimento della generazione, così chi integra il framework non cerca il problema nel posto sbagliato.
🐛 Bug fix degni di nota
- Calendario, primo caricamento: la vista mostrava dati non filtrati per l'intervallo visualizzato — tipicamente nessun evento nel mese corrente, anche con appuntamenti presenti. Il primo caricamento partiva prima che i campi di inizio e fine configurati per l'archetipo fossero disponibili, e nessuna richiesta successiva correggeva il tiro. Ora i campi vengono risolti prima di comporre il filtro e, se arrivano dopo, i dati vengono richiesti di nuovo una sola volta.
- Scene 3D con licenza professional: le pagine del designer e del visualizzatore 3D rimandavano alla schermata di accesso negato, perché la funzionalità non risultava inclusa in nessun profilo di licenza. Ora fa parte del profilo professional.
- Report su Linux: la creazione guidata di un report falliva perché i caratteri venivano gestiti tramite una libreria grafica disponibile solo su Windows.
- Performance Inspector, aggregazione: due esecuzioni sovrapposte del job di aggregazione — la dashboard lo richiama al proprio ricaricamento, mentre può essere lanciato anche a mano — terminavano con un errore per chiave duplicata. Inoltre la finestra dei dati grezzi non era allineata al confine del bucket giornaliero, e il bucket più vecchio veniva ricostruito da un sottoinsieme degli eventi.
- Linux dietro reverse proxy: gli URL assoluti generati dal backend perdevano la porta e usavano lo schema sbagliato quando l'installazione è servita su una porta non standard o solo in HTTP.
- Oracle, salvataggio delle scene 3D: il salvataggio falliva per l'uso di un nome di parametro riservato e per la conversione dei valori numerici. Corretti entrambi, insieme alla gestione delle colonne con nome minuscolo quotato.
- Oracle, esposizione OData: le colonne venivano forzate in maiuscolo invece di usare il nome fisico dichiarato nei metadati, rendendo irraggiungibili le entità con nomi misti.
- PostgreSQL e Oracle, lookup nei grafici e nei raggruppamenti: il campo descrittivo di un lookup non veniva risolto dal nome logico a quello fisico, e il raggruppamento mostrava valori vuoti o errati.
- Chatbot, conferme mancanti: in quattro punti la richiesta di conferma non compariva mai a causa di una chiamata malformata; in due di quei punti la cancellazione (cronologia e sessioni della chat) avveniva senza chiedere nulla. Ora ogni conferma passa dallo stesso percorso e in caso di errore la risposta è "annulla".
- Importazione metadati: le route il cui campo database è vuoto — cioè quelle che usano il database predefinito dell'applicazione — non potevano essere importate, e l'errore suggeriva un problema di permessi o di database sbagliato.
- Visualizzatore 3D: la scena occupava una fascia orizzontale invece dell'altezza piena della pagina.
- Interfaccia, griglia con sfondo a tema: l'area sotto l'ultima riga lasciava trasparire lo sfondo della pagina, facendo sembrare la griglia bucata. Ora la superficie della griglia segue il tema, in chiaro e in scuro.
🔧 Aggiornamenti operativi raccomandati per chi aggiorna
- Verificare
appsettings.jsondopo l'aggiornamento: le chiavi nuove hanno valori predefiniti prudenti e non richiedono intervento, ma è il momento giusto per rivederle. - Performance Inspector: impostare
AppSettings:enablePerformanceInspectoratrueper attivarlo; resta disattivo se la chiave è assente. - Webhook Hub: non serve alcun intervento per renderlo raggiungibile. Tabelle, route amministrative e voci di menu — raccolte in un sottomenu «Webhook Hub» sotto Amministrazione — vengono create al primo caricamento del menu, sia su installazione nuova sia aggiornando da una versione precedente. Resta da configurare l'integrazione: in uscita servono tre righe (l'endpoint con URL di destinazione, segreto condiviso, timeout e politica di ritentativo; l'evento; la sottoscrizione che li collega), in entrata un endpoint con direzione
inbounde una regola di instradamento. La firma viaggia nell'headerX-Wuic-Signature; la procedura completa è nella pagina «Webhook Hub» della documentazione in-app. - Theme Builder: la tabella dei temi viene creata al primo salvataggio. Se si usano temi personalizzati, verificare l'export Excel di una griglia per confermare che i colori siano quelli attesi.
- Chatbot: le nuove azioni sono disponibili dopo il riavvio del motore RAG; le operazioni non reversibili richiedono conferma e non possono essere applicate senza.
- Linux dietro reverse proxy: se l'installazione risponde su una porta non standard o solo in HTTP, rigenerare la configurazione nginx oppure allineare a mano il vhost esistente a
proxy_set_header Host $http_host;eproxy_set_header X-Forwarded-Proto $scheme;. Gli aggiornamenti non riscrivono un vhost già presente.