@mmmbuto/nexuscrew 0.9.52 → 0.9.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/frontend/dist/assets/index-DBlFdkZn.js +169 -0
- package/frontend/dist/assets/{index-CcZskBmy.css → index-Da4oBb4f.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/version.json +1 -1
- package/lib/cli/commands.js +63 -14
- package/lib/cli/messages.js +55 -0
- package/lib/cli/url.js +6 -2
- package/lib/notify/ask-answer-service.js +1 -0
- package/lib/notify/asks.js +58 -7
- package/lib/notify/event-feed-client.js +420 -48
- package/lib/notify/event-feed-routes.js +44 -3
- package/lib/notify/persist.js +69 -12
- package/lib/notify/routes.js +19 -1
- package/lib/prefs/routes.js +52 -0
- package/lib/prefs/store.js +112 -0
- package/lib/proxy/federation.js +49 -5
- package/lib/server.js +112 -34
- package/lib/update/core.js +45 -0
- package/lib/update/manager.js +31 -8
- package/lib/update/npm-env.js +109 -0
- package/lib/update/runner.js +54 -14
- package/lib/update/start-lock.js +106 -0
- package/package.json +1 -1
- package/frontend/dist/assets/index-5MtkSiOQ.js +0 -169
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to NexusCrew are tracked here.
|
|
4
4
|
|
|
5
|
+
## 0.9.53 — 2026-09-30
|
|
6
|
+
|
|
7
|
+
- **Telefono: le preferenze non si perdono più quando il browser le dimentica.** Pin, ordine delle celle e viste si sincronizzano sul nodo, per dispositivo: un telefono ritrova la sua disposizione anche dopo che lo storage del browser è stato svuotato. Il link di `show` porta l'identificativo del dispositivo; al primo uso il nodo ne emette uno. Una copia vuota non sostituisce mai una copia piena, un ripristino fallito viene riportato per quello che è e il nodo conserva la sua versione per ritentare al giro successivo. In Impostazioni c'è il diario delle ultime scritture (con copia e pulizia) e lo stato della memoria; l'app chiede al browser la memoria persistente, registra l'esito e ritenta un rifiuto al massimo una volta al giorno. I file di esportazione e importazione contengono solo pin, ordine e viste, mai il token.
|
|
8
|
+
- **L'ordine della lista segue il nodo, non il suo nome.** Pin, ordine e viste sono legati all'identità del nodo, non al nome: rinominare un nodo non li orfana più. Un valore salvato illeggibile si conserva invece di cadere nel default, e il default non lo sovrascrive (la copia grezza va in un campo a parte e l'evento finisce nel diario). Uno spostamento non cancella più le chiavi non visibili in quel momento: con una lista parziale un solo spostamento non rimette in fondo le celle o i nodi nascosti. Il riordino è bloccato mentre la lista è incompleta, con un avviso che dice perché. Quando il fleet non risponde a un avvio fresco, l'ultima lista buona resta come elenco non live, così le celle spente non spariscono dal roster.
|
|
9
|
+
- **Le domande chiuse non ricompaiono più tra nodi.** Un'ask chiusa dall'owner ricompariva perché la view del feed non conservava memoria dello scarto: ora la tiene, con scadenza ed epoca della view, e la applica sia unendo lo stream sia allo snapshot locale; la X non è più muta e un dismiss fallito mostra la causa. Lo stream federato inoltrato non viene più trattato come una richiesta ferma: il timeout iniziale è separato dal watchdog di inattività che chiude uno stream muto, e il 504 dei GET normali resta com'era.
|
|
10
|
+
- **Lo store delle domande illeggibile non produce più un elenco vuoto autorevole.** Se gli asks non si leggono, lo snapshot risponde 503 ritentabile invece di un elenco vuoto presentato come veritiero; un file malformato (virgola finale, JSON non a oggetto, `asks` non array) non viene mai sovrascritto con uno vuoto e le mutazioni rifiutano finché il file non è riparato, così le domande aperte non si perdono. La chiusura federata su uno store illeggibile risponde 503 ritentabile, perché la coda riprovi dopo la riparazione invece di considerare la chiusura conclusa. Un fd aperto non resta più appeso quando una guardia rifiuta il file dopo l'apertura.
|
|
11
|
+
- **La card di una domanda resta gestibile anche a feed esaurito.** Quando i tentativi di sincronizzazione dello snapshot si esauriscono, la view non resta congelata: un cooldown a gradini cresce a ogni esaurimento, paga un tentativo fresco a ogni scadenza e torna al primo gradino dopo un frame sano; un dismiss confermato dall'owner chiude la card subito, stream o non stream. Un tentativo di recupero fallito riarma il cooldown al gradino successivo, così il poll non ripete lo snapshot a ogni tick. Con la view non aggiornata la card avvisa che il feed non è attivo anche quando la risposta è concessa, e la X dice che lo scarto parte comunque via relay diretto.
|
|
12
|
+
- **Porta occupata: il messaggio dice la porta e l'azione.** Il nodo non si sposta più di porta da solo: una porta occupata aspetta l'orfano del nodo o fallisce con un messaggio che nomina la porta e dice cosa fare (liberala, o sceglierne un'altra con `nexuscrew init --port <N>`), in italiano, inglese e spagnolo. Il `show` non riscrive più la config quando la sonda della porta va in timeout.
|
|
13
|
+
- **Aggiornamento automatico più sicuro.** npm è lanciato con il node del daemon, così un node diverso nel PATH non installa in un altro albero; un preflight verifica il prefix e che il root globale di npm punti al pacchetto in esecuzione; la versione installata è letta dal path eseguito. Dopo il riavvio la versione in esecuzione è confrontata con il target (e uno `started:false` è un errore, a meno che il processo non giri già la versione attesa); una versione che non è stata presa viene bloccata, gli install automatici sono limitati a due per versione nelle 24 ore e uno all'ora, e il primo controllo dopo uno start aspetta il resto dell'intervallo invece di partire subito. Lo start e il riavvio sono serializzati su un lock condiviso, così due avviatori non si ammazzano a vicenda il nodo fresco.
|
|
14
|
+
- **Login: il token digitato non raggiunge lo storage a ogni tasto.** Il token entra nello stato dell'app e nello storage solo su «ok» o Invio; prima ogni tasto lo scriveva e la schermata spariva al primo carattere, perdendo un token inserito a mano a ogni riapertura. «Ricorda su questo dispositivo» è di default sui touch. Un 401 dal nodo locale, mai da una rotta federata o da un timeout, riapre il prompt con il motivo lasciando pin e ordine intatti.
|
|
15
|
+
- **Banner di aggiornamento dentro lo schermo.** Il banner non esce più dallo schermo sui telefoni stretti: è largo al massimo quanto lo schermo, va a capo e i suoi tasti non si restringono.
|
|
16
|
+
|
|
5
17
|
## 0.9.52 — 2026-09-29
|
|
6
18
|
|
|
7
19
|
- **Telefono: CTRL e ALT non chiudono più la tastiera.** Toccandoli la tastiera si apre se era chiusa e resta aperta se lo era già; gli altri tasti della barra e la preferenza di tenerla chiusa non cambiano.
|