Torna al changelog

v0.39.3

10 luglio 2026

Release di sole correzioni: un giro di *hardening* su API e interfaccia. Chiude alcune situazioni in cui si poteva perdere lavoro in silenzio (una richiesta ripetuta con dati diversi, due operazioni in corsa sullo stesso item) e alcune incoerenze tra ciò che l’interfaccia mostra e ciò su cui poi agisce (lista flussi, stampa mappa, ruoli degli eventi). Nessuna migrazione di database.

  • Miglioramento

    Niente lavoro perso: richieste ripetute e operazioni concorrenti

    Se ripeti la creazione di un item con la **stessa Idempotency-Key** ma un **flusso o un’entità diversi**, XFLOW risponde ora con un **errore chiaro (422)** invece di restituire *silenziosamente* l’item originale scartando i nuovi dati — stessa protezione sull’avvio via trigger. E quando due operazioni provano a far avanzare lo **stesso item nello stesso istante**, la seconda riceve ora un **conflitto (409) con messaggio chiaro “riprova”** invece di un errore generico del server (500) — vale anche per il force-transizione dell’Admin.

  • Miglioramento

    Coerenza della lista flussi

    La riga di un flusso mostra ora la **versione live e ci porta lì**: badge, numero di versione e link indicano sempre la **stessa versione** (quella pubblicata/live), come già avviene per le Process Map. E le azioni che modificano — archivia, elimina, sposta, “modifica nel designer” — continuano ad agire sulla **versione più recente** (es. la bozza in lavorazione): così, con una famiglia *live v1 + bozza v2*, non si rischia più di archiviare o disabilitare la **v1 pubblicata** al posto della bozza.

  • Sicurezza

    Integrità di stampa ed eventi

    Il **PDF di una Process Map include solo i flussi davvero collegati alla mappa**: gli identificativi passati nell’indirizzo della pagina di stampa vengono ora **filtrati** sui flussi presenti nella mappa, così non è più possibile “iniettare” flussi estranei nel documento manipolando l’URL. I **ruoli abilitati a un evento vengono ora verificati**: alla creazione/modifica di una definizione di evento i ruoli devono essere **reali** (di sistema o personalizzati del tenant) — un ruolo inesistente viene **rifiutato con un errore** invece di essere salvato (e poi bloccare silenziosamente l’evento per tutti). Infine, lo **schema del payload di un evento viene finalmente salvato** e restituito (a scopo di documentazione), mentre prima veniva scartato senza avviso.