Accessi e porte
🟢 attivoagg. 2026-09-03Agente Residente openclaw/ACCESSI_E_PORTE.mdAccessi e porte — dashboard degli indirizzi
Prerequisito unico: avere Tailscale attivo sul dispositivo, loggato sullo stesso tailnet.
Tutto è tailnet-only (privato, non pubblico su internet). Host del mini-PC:
`mini-it12.tailc565d5.ts.net` (nome completo) · IP100.110.106.30.
👉 Punto d'ingresso consigliato: l'Hub Strumenti — da lì apri (quasi) tutto.
⚠️ Come scrivere l'URL (leggere — errore comune)
Ci sono due famiglie di indirizzi, con regole diverse:
- App via `tailscale serve` (OpenClaw Control + tutte le porte 844x): HTTPS e nome COMPLETO →
https://mini-it12.tailc565d5.ts.net:<porta>/✅ ❌ NON funzionano néhttp://né il nome cortomini-it12: es.http://mini-it12:8443fallisce, perché queste porte parlano HTTPS con certificato valido solo per `…tailc565d5.ts.net`. - App Docker (7575, 8096, 2283, …): connessione diretta → va bene http + nome corto →
http://mini-it12:<porta>✅ (funziona anche il nome lungo). Eccezione: Portainer è https (https://mini-it12:9443, avviso certificato self-signed = normale).
Regola veloce: porte 844x / 443 → `https://…ts.net` · porte Docker → `http://mini-it12:…`.
🧭 Hub Strumenti — da qui apri tutto
https://mini-it12.tailc565d5.ts.net:8447/ (locale: 127.0.0.1:8830)
I tre indirizzi dell'Hub, per esteso (dal 03/09 sono scritti anche dentro l'Hub, nella
striscia sotto il titolo — così non serve più aprire questo file per ritrovarli):
- 🏠 dal mini-PC →
http://127.0.0.1:8830 - 🔵 da casa o dal telefono, con Tailscale acceso →
https://mini-it12.tailc565d5.ts.net:8447/ - 🌐 da internet, senza Tailscale →
https://mini-it12.tailc565d5.ts.net/hub
Il terzo è quello che non si ricorda mai, perché non è una porta ma un pezzo di percorso:/hub risponde su tutte e tre le porte pubbliche (…/hub, …:8443/hub, …:10000/hub),
qualunque app sia seduta all'ingresso. Sono righe di testo con il link, non bottoni: si leggono,
si copiano e si dettano. La sorgente è la chiave hub_indirizzi di apps.json.
🌍 App con indirizzo HTTPS dedicato (tailscale serve)
| App | Indirizzo da ovunque | Porta locale |
|---|---|---|
| 🐱 OpenClaw Control (chat agenti, sessioni, token) — spostato sulla :8465 il 27/08: l'indirizzo nudo e' passato al Segnapunti, che e' pubblico | https://mini-it12.tailc565d5.ts.net:8465/ | 18789 |
🎬 ~~Video Downloader~~ — ASSORBITO nel Social Hub il 27/08/2026: scaricare un video ora si fa dentro il Social Hub → stanza «Scaricati» (campo per il link in cima). Il server sulla 8799 e' spento e il suo avvio automatico e' stato tolto da Startup; la cartella Video_scaricati\ e' rimasta dov'era (il database ha i percorsi assoluti dei file). Tessera tolta dall'Hub. ⚠️ il `serve` tailnet su :8443 non l'ho spento io (le esposizioni le rifa' Ettore): finche' resta, quell'indirizzo promette una app che non c'e' piu' — ed e' una delle tre porte pubbliche, quindi liberandola si guadagna un posto | ~~https://mini-it12.tailc565d5.ts.net:8443/~~ | ~~8799~~ (spenta) |
✈️ ~~Organizza Viaggi~~ — DISMESSA il 20/08/2026 (anello 7 del refine): i viaggi si scrivono dentro Life OS → Attività → Viaggi. L'app resta sul disco ferma, con DISMESSA.md accanto, e serve solo a rileggere i file vecchi; il suo lanciatore avvisa e chiede conferma. Tessera tolta dall'Hub. ⚠️ il `serve` tailnet su :8444 non è stato spento (è di Romeo): finché resta, quell'indirizzo promette un'app che nessuno deve più usare | ~~https://mini-it12.tailc565d5.ts.net:8444/~~ | 8810 (ferma) |
| 🔐 Cassaforte Chiavi (API key da remoto) | https://mini-it12.tailc565d5.ts.net:8445/ | 8811 |
| 🍽️ Pianificatore Pasti | https://mini-it12.tailc565d5.ts.net:8446/ | 8820 |
| 🧭 Hub Strumenti | https://mini-it12.tailc565d5.ts.net:8447/ | 8830 |
| 🐈 CATPIT / Mission Control | https://mini-it12.tailc565d5.ts.net:8453/ | 3010 |
| 💹 Dashboard Investimenti (Creso) — read-only | https://mini-it12.tailc565d5.ts.net:8454/ | 8010 |
| ⌨️ Claude Code — terminale web (SENSIBILE: espone il terminale del PC; pagina di login + cookie 180 gg, credenziale da Cassaforte) | https://mini-it12.tailc565d5.ts.net:8456/ | 7681 |
🌐 Pubblico su internet (tailscale funnel) — senza Tailscale, da qualsiasi PC
🎲 Segnapunti da tavolo, sull'indirizzo nudo — configurato il 27/08 sera, VERIFICA IN SOSPESO.https://mini-it12.tailc565d5.ts.net/(porta 443, quella standard: passa anche dalle reti che
bloccano le porte strane). E' l'unica app pensata per stare in pubblico. ⚠️ **Dal 01/09 e'
ad accesso libero: il codice e' stato tolto su richiesta di Ettore** — resta il freno sui
tentativi, che ora non ha piu' niente da difendere. Dentro ci sono punteggi di partite, non
dati personali: chi trova l'indirizzo gioca e puo' cancellare le partite. Per fargli posto **OpenClaw Control e' passato alla
:8465. ⚠️ La prova dall'esterno non e' stata fatta**: NordVPN era acceso e prende lo stesso
intervallo di indirizzi100.xdi Tailscale, quindi da questa macchina non si raggiungeva piu'
niente. Si verifica appena NordVPN e' chiuso (Quit, non Pausa).
⛔ DECISIONE DI ETTORE, 01/09/2026 ore 09:58 — su internet stanno SOLO TRE APP.
I ventinove percorsi /a/<id> della porta 10000 sono stati tolti dal funnel (comandotailscale serve --https=10000 --set-path=/a/<id> off, uno per uno). Motivo: un percorso che si
apre male non e' un percorso chiuso — l'indirizzo pubblico rispondeva lo stesso, e dietro i
dodici programmi di terzi ci sono foto (Immich), database (NocoDB, Neo4j) e automazioni con le
chiavi dentro (n8n). Ridotta la superficie a quello che serve davvero.
Cosa resta pubblico (3):
https://mini-it12.tailc565d5.ts.net/(443) — Segnapunti da tavolo, l'unica con un codice.https://mini-it12.tailc565d5.ts.net:8443/— CATPIT.https://mini-it12.tailc565d5.ts.net:10000/— Life OS all'ingresso (piu'/api/apps, che serve all'Hub per caricare le tessere).- Dal 02/09 l'Hub Strumenti risponde su `/hub` di TUTTE E TRE le porte (
.../hub,...:8443/hub,...:10000/hub): qualunque app si sposti, il pannello non sparisce mai da internet.
🔀 INTERRUTTORE PUBBLICO — dal 02/09/2026 (richiesta di Ettore delle 08:42).
In cima all'Hub c'e' il riquadro «🌐 SU INTERNET»: tre righe, una per porta pubblica
(«indirizzo principale» = 443, «:8443», «:10000»), ognuna con una tendina. Si cambia la
tendina e l'app cambia davvero indirizzo (o si spegne con «— spento —»): niente password,
per scelta dichiarata di Ettore. La sicurezza sta nei vincoli della rotta /api/pubblica
dell'Hub: accetta solo una delle tre porte e l'id di un'app con pubblicabile: true
in apps.json — mai porte o URL dal browser. **Dal 02/09 pomeriggio (richiesta di Ettore
delle 10:00) sono pubblicabili TUTTE le app con una porta locale** (37 su 41: le quattro in
sviluppo non hanno porta e non si possono servire), e la tendina le raggruppa per sezione
(Gestionali · App separate · Da assorbire) marcando chi e' spenta («— spenta») e chi e' gia'
seduta su un altro indirizzo («— gia' su :8443»). Lista nera nel codice, quattro voci:
Cassaforte Chiavi, Claude Code (terminale web), Portainer, OpenClaw Control — il criterio
non e' «app delicata» ma «app che da' il controllo della macchina» (chiavi, shell,
Docker, agenti); vince anche su un pubblicabile: true scritto per errore, e toglierne una
e' una decisione di Ettore. I posti restano tre: cambia cosa si sceglie, non quante stanno
insieme. Un'app spenta sul mini-PC viene rifiutata (non si pubblica una porta morta).
Dopo ogni cambio riuscito la rotta ricontrolla tutte e tre le sedie (`tailscale funnel
status --json contro la chiave sedie di apps.json`, piu' la porta locale dell'occupante):
ognuna deve servire la sua app e /hub; se una non torna la risposta dice «cambio eseguito,
ma…» invece di dichiarare successo (nato dalla 443 rimasta vuota il 02/09 mattina). Chi ci sta seduto e' registrato nella chiave sedie diapps.json, che la rotta aggiorna solo a comando Tailscale riuscito; ogni cambio
lascia una riga in Hub_Strumenti\storico_esposizione.log (quando, quale porta, chi esce,
chi entra). Semantica Funnel verificata dal vivo: impostare / sostituisce l'occupante e
non tocca /hub; spegnere si fa con --set-path=/ off (MAI --https=P off secco, che
porterebbe via anche /hub).
⚠️ Life OS resta aperto a chiunque abbia l'indirizzo, senza password, ed e' la cosa piu'
esposta che rimane (finanze, salute, documenti). Scelta dichiarata di Ettore del 26/08, ribadita
il 01/09; la domanda della serratura unica resta sul tavolo.
Tutto il resto e' raggiungibile solo dalla tailnet (dispositivi con Tailscale acceso), sugli
indirizzi 84xx elencati sopra: le ventotto porte dedicate non sono state toccate.
Ripristino: lo stato precedente e' salvato inREGISTRO_SVILUPPO\serve_status_backup_2026-09-01_pre-taglio-pubblico.json, e ogni percorso si
rimette con tailscale funnel --bg --https=10000 --set-path=/a/<id> http://127.0.0.1:<porta>.
Nell'Hub il tasto 🌐 e' rimasto acceso solo su quelle tre tessere
(apps.json.bak.20260901-solo-tre-pubbliche; Life OS ora punta alla radice, non piu' a/a/life_os).
Storia (com'era fino al 01/09)
Tailscale concede solo tre porte per l'accesso pubblico: 443, 8443, 10000. La 443 e'
del Segnapunti dal 27/08 (prima ci stava il gateway OpenClaw/Control, passato alla :8465).
La 8443 si e' liberata il 27/08 quando il Video Downloader e' stato assorbito nel Social Hub,
ed e' stata riassegnata a CATPIT. La 10000 ospitava tutte le altre: con --set-path la
stessa porta teneva piu' app, ognuna sotto il suo pezzo di indirizzo — .../:10000/a/<id-app>.
Le sedici app di casa riparate il 31/08 restano corrette, e la correzione serve comunque:
sotto la tailnet e in ogni futuro spostamento ognuna calcola il proprio prefisso dalocation.pathname. L'elenco: Arte generativa, Efesto al lavoro, Hub Strumenti, Study System,
Pianificatore Pasti, Segnapunti, Richieste mobile, Riferimenti + Mappe, Social Hub, Ricerca
Torrent, Manga Downloader, Site Downloader, Catalog Explorer, Imprese Vicentine, Life OS,
Dashboard Creso. Verificate una per una con un browser vero, guardando che arrivassero i dati.
⚠️ La riga che stava qui prima diceva "14 app" e ne elencava altre: era falsa. Contava chi
rispondeva 200 con la grafica giusta. Provate davvero, **tredici di quelle quattordici erano
rotte**: la pagina arrivava, i dati no. Dettaglio inmateriale condiviso\Sviluppo_Sistema_Agentico\CENSIMENTO_2026-08-31_chiamate-assolute-app.md.
Mai riusciti a stare sotto un percorso condiviso (9): Plancia Video Factory (Next.js, servebasePath a compilazione — richiesta aperta in CATPIT), Metabase, Kavita, Homarr, Immich,
Audiobookshelf, NocoDB, n8n, Neo4j. Le sei di terzi si sistemerebbero col campo percorso base
nelle loro impostazioni: oggi la questione e' sospesa, perche' pubbliche non sono piu'.
📌 La lezione del 27/08 va estesa. Non basta HTTP 200, e non basta nemmeno la grafica:
va guardato il contenuto. Study System rispondeva 200, si disegnava intera e non aveva dentro
un solo dato. Il banco che lo dimostra e' scripts/prova_sotto_prefisso.mjs: apre l'app sotto/a/<id> con un browser vero, registra ogni richiesta di rete e diventa rosso se anche una
sola esce dal prefisso — anche quando lo schermo e' bello.
📌 Lezione, da non ripetere. HTTP 200 col titolo giusto non basta per dire che un'app e'
raggiungibile: la prima verifica del 27/08 dava 24 app a posto, e guardandole davvero un terzo si
apriva senza grafica. Se ne e' accorto Ettore, con uno screenshot di CATPIT senza stile. **Si
controlla che carichino anche i loro file**, o si guarda la pagina.
Tenute fuori di proposito (4) — danno il controllo della macchina o le chiavi in chiaro, e
sull'internet aperto senza serratura sarebbe un regalo a chiunque trovi l'indirizzo:
OpenClaw Control, Claude Code terminale web, Cassaforte Chiavi, Portainer.
Non pubblicabili cosi' come sono (4) — Jellyfin, Navidrome, Calibre-Web e Prowlarr: appena
aperte rimandano a un indirizzo assoluto loro (/web/, /app/, /login) che sotto un
percorso finisce sull'app della radice. Si sistemano impostando il percorso base dentro
ognuna (ogni app ha quel campo nelle sue impostazioni), poi rifunzionano.
✅ Il Segnapunti e' uscito da questa lista il 31/08: aveva lo stesso guasto (`303 Location:
/login`) e il codice e' nostro. Il rimbalzo e' stato tolto: senza cookie la pagina di accesso
si serve dov'e' l'utente, l'indirizzo non cambia e dopo il codice basta ricaricare. Provato
col browser sotto /a/munchkin_tracker, codice compreso.
Come si aggiunge una app (esempio, Segnapunti sotto/gioco):tailscale funnel --bg --https=10000 --set-path=/gioco http://127.0.0.1:8890
Trappola: da Git Bash il percorso viene storpiato in/C:/Program Files/Git/...— questi
comandi si danno da PowerShell. Se l'app chiama un indirizzo assoluto suo (l'Hub chiama/api/apps), va instradato anche quello, altrimenti finisce sull'app che sta alla radice.
Acceso il 27/08/2026, dopo che Ettore ha abilitato Funnel sull'account Tailscale.
Verificato dall'esterno: Life OSHTTP 200col titolo giusto, HubHTTP 200con le tessere
caricate (instradato anche/api/appssulla 8830).
Per spegnerlo:tailscale funnel --https=10000 off.
⚠️ Due cose da sapere. (1) Life OS e' aperto a chiunque abbia l'indirizzo: dentro ci
sono finanze, salute e documenti. E' una scelta dichiarata di Ettore (26/08: *"non mi interessa
mettere chiave e serratura per adesso"*), non una dimenticanza — ma resta il buco piu' grosso
del sistema. (2) La 10000 era la porta destinata al Segnapunti: finche' la tiene Life OS,
il Segnapunti non puo' essere pubblico. Si scambiano con un comando.
🐳 App Docker (raggiungibili sul tailnet)
Formato: `http://mini-it12:<porta>` (nome corto + http, funziona anche il nome lungo). Bind su tutte le interfacce (0.0.0.0). NB: Portainer è in https (9443).
| App | Indirizzo da ovunque | Porta |
|---|---|---|
| 🏠 Homarr (dashboard homelab) | http://mini-it12.tailc565d5.ts.net:7575 | 7575 |
| 🐋 Portainer (gestione Docker) | https://mini-it12.tailc565d5.ts.net:9443 | 9443 |
| 🎞️ Jellyfin (media server) | http://mini-it12.tailc565d5.ts.net:8096 | 8096 |
| 📷 Immich (foto) | http://mini-it12.tailc565d5.ts.net:2283 | 2283 |
| 🎵 Navidrome (musica) | http://mini-it12.tailc565d5.ts.net:4533 | 4533 |
| 🎧 Audiobookshelf (audiolibri/podcast) | http://mini-it12.tailc565d5.ts.net:13378 | 13378 |
| 📚 Calibre-Web (ebook) | http://mini-it12.tailc565d5.ts.net:8083 | 8083 |
| 📖 Kavita (fumetti/manga/ebook) | http://mini-it12.tailc565d5.ts.net:5000 | 5000 |
| 🗃️ NocoDB (database no-code) | http://mini-it12.tailc565d5.ts.net:8081 | 8081 |
🔎 Prowlarr (gestore indicizzatori arr) — solo tailnet: ascolta su `127.0.0.1`, esposto via `tailscale serve` → https*, non http://mini-it12:9696 | https://mini-it12.tailc565d5.ts.net:8463/ | 9696 |
| 🏢 Imprese Vicentine (dashboard) | http://mini-it12.tailc565d5.ts.net:8765 | 8765 |
| 🎲 Segnapunti da tavolo (munchkin) — accesso libero dal 01/09 | http://mini-it12.tailc565d5.ts.net:8890 · in casa anche http://192.168.1.122:8890 · pubblico: https://mini-it12.tailc565d5.ts.net/ (indirizzo nudo 443, dal 27/08 — verifica dall'esterno in sospeso) | 8890 |
🔐 Segnapunti — unica app del sistema destinata a essere PUBBLICA (2026-08-19).
⚠️ Dal 01/09 il codice non c'e' piu' (richiesta di Ettore delle 10:28): il container parte
con la deroga esplicita--senza-pinscritta neldocker-compose.yml, non con un.env
svuotato — cosi' la guardia fail-closed del codice resta intatta e nessuno toglie il PIN per
sbaglio. Per rimetterlo: cancellare la rigacommanddal compose e daredocker compose up -d
(il PIN e' ancora nel.env, niente rebuild).
Storia: dal 19/08 l'app chiedeva un codice di accesso (PIN) su tutti gli indirizzi,
LAN compresa. Il PIN sta inMunchkin_Tracker\.env(MUNCHKIN_PIN) e l'app
non parte se manca — così non può esistere un Funnel acceso su un'app senza password.
Difesa vera: throttling per IP (5 tentativi, poi attesa 30s→15min,429).
Stato del Funnel: PUBBLICA dal 27/08/2026 sull'indirizzo nudo (443) —https://mini-it12.tailc565d5.ts.net/. Per farle posto **OpenClaw Control e' passato alla
:8465 (vedi la sezione «Pubblico su internet»). La verifica dall'esterno e' in sospeso**:
con NordVPN acceso sul PC non si prova da qui, si apre dal telefono fuori dalla tailnet.
🛠️ Mini-app locali (esposte + autostart dal 2026-07-15)
| App | Indirizzo da ovunque | Porta locale | Note |
|---|---|---|---|
| 📕 Manga Downloader | https://mini-it12.tailc565d5.ts.net:8448/ | 8777 | catalogo 2014 titoli offline → PDF |
| 🌐 Site Downloader | https://mini-it12.tailc565d5.ts.net:8449/ | 8778 | pagine web → PDF (uso didattico) |
| 🎬 Catalog Explorer | https://mini-it12.tailc565d5.ts.net:8450/ | 8780 | catalogo film/serie (fonti legali IMDb/TMDB) |
| 🧲 Ricerca Torrent (fonti legali) | https://mini-it12.tailc565d5.ts.net:8451/ | 8840 | Internet Archive · Academic Torrents · LinuxTracker · Gutenberg |
| 📺 Social Hub | https://mini-it12.tailc565d5.ts.net:8452/ | 8850 | centro YouTube personale: canali seguiti + ultimi video + in primo piano (feed RSS, no player) |
| 📑 Riferimenti + Mappe + File | https://mini-it12.tailc565d5.ts.net:8455/ | 8860 | 3 viste: "Riferimenti" (registro 12 doc) · "Mappe concettuali" (mermaid→SVG) · "File" = browser di file read-only sulle 3 radici consentite (workspace, Agente Residente openclaw, MD_DB_v1), con ordinamento data/nome, ricerca per nome e contenuto, rendering .md con indice dei paragrafi; read-only, live dal disco, fuori da CATPIT |
| 🧭 Life OS (SENSIBILE: finanze, salute, documenti, e da stanotte anche i viaggi — nessun PIN: ritirato il 19/08 su decisione di Ettore, protetta solo dall'essere tailnet-only) | https://mini-it12.tailc565d5.ts.net:8458/ | 8870 | cruscotto personale, menu a quattro blocchi (correzione di Ettore del 20/08 ore 17:15): HOME · PLANNING (Calendario — fusione Mese+Calendario —, Pasti, Attività = Film/Musica/Viaggi, Stampabili) · TRACKING (Salute, Abitudini, Finanze) · CANTIERE (Progetti da CATPIT, Note, Liste, Documenti) + Impostazioni in fondo. Dal 20/08 notte i viaggi sono una stanza vera che SCRIVE (Organizza Viaggi 8810 dismessa e assorbita): itinerario, tappe di moto/cammino/volo, luoghi, budget, valigia, dossier, Esplora, scheda da stampare; le date del viaggio compaiono da sole nel Calendario. Esposto e messo in autostart il 2026-08-16 |
| 💶 Gestionale Business (iniziative di profitto, movimenti) | https://mini-it12.tailc565d5.ts.net:8460/ | 8831 | |
| 🪞 Richieste (specchio mobile) | https://mini-it12.tailc565d5.ts.net:8457/ | 8880 | sola lettura dal 2026-08-06 (decisione "Sessioni di lavoro"): stanza Richieste + coda dei task, mobile-first, legge live da CATPIT_vault; nessuna via di scrittura (ogni POST → 405), si risponde da CATPIT (3010); diagnostica /health |
| 🎬 Plancia Video Factory | https://mini-it12.tailc565d5.ts.net:8459/ | 3020 | canali, video e catena di produzione, sola visualizzazione; esposta il 2026-08-18 (8459 = prima porta tailnet libera dopo la 8458 di Life OS), verificata 200 in locale e da tailnet. Autostart VF_Plancia.vbs → vf-plancia\run-plancia.ps1 (next start -p 3020 -H 127.0.0.1), come CATPIT |
| 🎓 Study System (materiale di studio: Università, WE Green, KnoBase) | https://mini-it12.tailc565d5.ts.net:8461/ | 8891 | in Docker dall'anello 7 (21/08); indice reale del disco F:, copertura contro i programmi dei corsi, piano e ripasso programmato (FSRS). Disco F: e vault montati in sola lettura. Esposta sulla tailnet il 25/08 (8461 → porta locale 8891, risposta a q084); riparte da sola col container (restart: unless-stopped) |
| 🔥 Efesto al lavoro | https://mini-it12.tailc565d5.ts.net:8462/ | 8896 | monitor della gabbia di Efesto: sta lavorando adesso? quando riparte? cosa ha fatto nell'ultimo turno? Legge sessioni della gabbia, file della fucina e job cron, e mostra le fonti in disaccordo invece di mediare. Sola lettura (ogni POST/PUT/DELETE → 405). Nata e esposta il 25/08 (8462 → 8896). Autostart attivo dal 25/08 (Efesto_Monitor.vbs in Startup): riparte da sola al logon |
| 🔄 Scambio file (SENSIBILE: riceve file dal telefono e li scrive sul disco — nessun PIN, protetta solo dall'essere tailnet-only) | https://mini-it12.tailc565d5.ts.net:8466/ | 8897 | tubo telefono ↔ mini-PC: 📥 Prendi dal PC (sfoglia e scarica) e 📤 Manda al PC (carica). Vede una cartella sola, C:\Users\Ettore\Scambio e i suoi sottolivelli: non sfoglia il disco. Gli arrivi vanno tutti in In arrivo\, con suffisso in caso di collisione (mai una sovrascrittura), tetto 2 GB per file. ⚠️ NIENTE indirizzo pubblico, e non ci va: un endpoint che riceve file non si mette su internet. Nata ed esposta il 28/08 (8466 → 8897 — la 8464 del piano era già occupata dalla fucina di Efesto). Autostart Scambio_File.vbs |
| ◐ Arte generativa — accessibilità totale: casa, tailnet e internet | https://mini-it12.tailc565d5.ts.net:8467/ | 8898 | stanze, manifesti e opere che nascono da un seme: moiré, illusioni geometriche, tassellature di Truchet, interferenza circolare e — dal 28/08 — «Ritorno», l'opera in movimento. Dal 31/08 le stanze sono venti: al mattino Brina (aggregazione), Nodo (figure di Chladni), Girasole (fillotassi), Territorio (Voronoi e rilassamento), Corrente (campo di flusso); al pomeriggio Macchia (reazione-diffusione), Passaggio (percolazione), Quasi (quasicristallo), Attrattore (mappa iterata), Sedimento (strati ed erosione), Crepa (fratture che si arrestano), Sorgente, Stormo (boids), Accordo (sincronizzazione), Spirale (mezzo eccitabile). Sei stanze su venticinque si muovono. In serata cinque frattali: Confine (Mandelbrot), Prigione (Julia), Radice (Newton), Foglia (felce di Barnsley e gioco del caos), Piega (grammatiche L-system). Ogni stanza è un movimento con il suo manifesto; un'opera è un seme, non un file, e torna identica per sempre. Anche pubblica: .../:10000/a/arte — è arte, non ci sono dati da proteggere, e dal pubblico si guarda e si genera ma non si salva (lo store è scrivibile solo da casa e dalla tailnet). Nata il 28/08 (8467 → 8898). Autostart Arte_Generativa.vbs |
| 🛰️ Hermes Agent — dashboard (SENSIBILE: da qui si vedono e si cambiano provider, modelli e chiavi dell'agente) | https://mini-it12.tailc565d5.ts.net:8468/ | 9119 | interfaccia web di Hermes Agent v0.20.6 (Nous Research), il sistema agentico esterno installato il 29/08: configurazione, scelta del modello, chiavi, sessioni e cron suoi. Si avvia con hermes dashboard --port 9119 --host 127.0.0.1 (la prima partenza compila la UI, un paio di minuti). ⚠️ Niente Funnel pubblico, e non ci va: un pannello che gestisce credenziali non si mette su internet. Autostart `Hermes_Dashboard.vbs` (cartella Startup, creato il 05/09 e provato lanciandolo davvero: ferma l'app, lanciato il .vbs come farebbe il logon, 9119 torna a rispondere 200 col titolo giusto in ~40 s). Parte con --skip-build: serve il pacchetto web già compilato, quindi dopo un aggiornamento di Hermes la UI va ricompilata a mano (cd web && npm run build), altrimenti resta servita la versione vecchia. Esposta il 29/08 (8468 → 9119) |
| 🖼️ Ricerca poster (cruscotto ricerca di mercato, progetto p24) | https://mini-it12.tailc565d5.ts.net:8469/ | 8800 | quattro stanze sui dati della ricerca di mercato del progetto poster: Concorrenti (chi vende, dove, a che prezzi, chi l'ha segnalato), Poster (galleria delle immagini originali dei negozi, con filtri per negozio, formato, fascia di prezzo, stile e soggetto e il filtro «solo preferiti»; 24 per pagina, immagini a caricamento pigro), Prezzi (fascia per formato e confronto fra negozi), Stato (ultimo giro, voci entrate, immagini scaricate, cosa e' fallito). Sola lettura: ogni POST/PUT/DELETE → 405; i dati li scrive la raccolta nei JSON di ricerca-poster\dati\ (contratto in FORMATO_DATI.md) e l'app li rilegge da sola quando cambiano, senza riavvio. Nata il 01/09 (8469 → 8800). ⚠️ 01/09 sera — scorporo: la lavorazione delle immagini (l'interruttore grezze/pulite nella stanza Poster) e la stanza DNA sono state tolte da qui e spostate nell'app separata Lavorazione poster (8801, riga sotto); questa e' tornata a fare solo mercato, con la galleria che mostra gli originali. Autostart Ricerca_Poster.vbs |
| 🧹 Lavorazione poster (banco di lavoro immagini + DNA, progetto p24) | https://mini-it12.tailc565d5.ts.net:8470/ | 8801 | il gemello di Ricerca poster: quella guarda il mercato, questa guarda cosa la macchina ha fatto alle immagini. Tre stanze: Lavorazione (per ogni immagine la grezza del negozio accanto al ritaglio pulito — o il motivo se scartata —, la provenienza col link alla scheda del prodotto, la classe e chi l'ha decisa — geometria o catalogo —, il taglio e quanto e' rimasto, e il segno «ritaglio sbagliato»), Scarti (le rifiutate filtrate per esito e per classe, per scorrere la stessa famiglia), DNA (il poster di un concorrente accanto a quello rifatto dal prompt col punteggio in parole; la scheda leggibile coi colori mostrati e non scritti in esadecimale; gli otto modelli per famiglia). Sta in una cartella sua, Agente Residente openclaw\lavorazione-poster\ (spostata li' il 01/09 sera, dopo la decisione di Ettore delle 15:38: due mestieri, due app, si accorpano quando saranno maturi). Sola lettura sul magazzino: legge i dati dove sono — ..\ricerca-poster\dati\ con pulizia.json, poster_puliti\, scelta_immagine.json e dna\ — e non li duplica: 60 MB di json e 3.700 ritagli in doppia copia sarebbero due verita' che divergono al primo giro di pulizia, e nessuno che sappia piu' quale sta guardando. L'unica scrittura sta in casa sua: lavorazione-poster\dati\ritagli_sbagliati.json, il segno «ritaglio sbagliato» — e pulisci_poster.py lo legge da li' (col vecchio posto come ripiego), cosi' il giudizio di Ettore continua a valere e sopravvive a tutti i giri di pulizia. All'avvio l'app non crea niente nel magazzino dell'altra: se non lo trova si ferma e scrive dove l'ha cercato. Nata il 01/09 scorporando lavorazione e DNA da Ricerca poster (8470 = prima porta tailnet libera dopo la 8469). Ogni poster ha la sua SCHEDA DI LAVORAZIONE (/?stanza=lav&id=<id>, ci si arriva toccando la tessera), che risponde a tre domande in quest'ordine: 1. da dove viene (negozio, paese, piattaforma, prezzo, formati in vendita e il bottone grosso che apre la pagina del prodotto sul sito del negozio - senza quel link il poster e' un'immagine orfana); 2. cosa le e' stato fatto (grezza e pulita affiancate, la classe in parole e chi l'ha decisa, il rettangolo preso e quanta immagine e' rimasta, i gradi di raddrizzamento, il motivo per esteso se scartata, di quale poster e' il doppione col link, e quale delle foto del prodotto e' stata scelta con le scartate e il perche' - da scelta_immagine.json); 3. quanto e' venuta bene (messa a fuoco, forma, frazione d'area con la barra, disegno, misura: ognuna col numero, la parola che lo traduce - «bella nitida», «verticale, la forma di un poster», «circa la meta' dell'immagine di partenza» - e la soglia che doveva superare, piu' il segno «ritaglio sbagliato»). Frecce ‹ precedente / successiva › che scorrono la lista filtrata, cosi' si guardano di fila tutte le rifiutate di una classe. Quattro esiti, non tre: pulita, `intera` (nessun rettangolo da cercare, l'immagine ERA gia' il poster - e' un esito buono, il file sta in poster_puliti\ e non va fra gli Scarti), rifiutata, doppione. Provata con un browser vero a 390 px (node prova_lavorazione.mjs): 87 verdi, 0 rosse — erano 50, e le 37 nuove sono la stanza DNA, che prima nessuna prova guardava: che le coppie originale/rifatto restino affiancate (170 px l'una), che il giro predefinito sia il v2 senza nascondere v1 e v3, che i tre giri servano numeri diversi (un interruttore finto passerebbe inosservato), che i colori si vedano col colore e non come sigle esadecimali, che il prompt sia in pagina per intero col bottone da 44 px per copiarlo, e che gli otto modelli ci siano tutti. Fra le vecchie, che la coppia grezza\|pulita resta affiancata (168 px l'una). ⚠️ Tailnet non verificata dal nome: con NordVPN acceso sul mini-PC nessuna porta tailnet risponde da qui — nemmeno la 8469 di Ricerca poster, attiva da ore (controllo fatto apposta): 8469 e 8470 vanno entrambe in timeout da qui, mentre in locale 8800 e 8801 danno 200. Va aperta dal telefono. Autostart Lavorazione_Poster.vbs (Startup, come Ricerca_Poster.vbs), provato davvero: l'app riparte da li'. Se la porta 8801 e' gia' presa l'app rifiuta di partire e lo scrive nel log, invece di mettersi in ascolto accanto a quella accesa: su Windows due processi possono prendersi la stessa porta e le richieste vanno a uno dei due a caso, cioe' la pagina risponde 200 col codice vecchio. |
| 🏭 Produzione poster (rifare i poster a modo nostro, progetto p24) | https://mini-it12.tailc565d5.ts.net:8471/ | 8802 | la terza app della famiglia poster, nata il 02/09 (P4, task a137) dopo il si' di Ettore ai dieci poster di P1. Due schermate, non sei. Lista di lavoro: template di stile (gli otto del DNA, letti in ricerca-poster\dati\dna emplate\ e non copiati), soggetto, testo, formato di destinazione; le righe si aggiungono, si lanciano (la catena e' la stessa di P1, P1_prova\prova.py tutto --cartella dati, non ce n'e' una seconda) e si vede a che punto sono, col costo dichiarato prima e misurato dopo affiancati (prezzi unitari misurati in P1; primo giro: dichiarato $0,094, misurato $0,094). Vaglio: i generati grandi in griglia e tre gesti soli, tengo · scarto · rifai («rifai» porta una riga di correzione che entra in testa al prompt e fa una riga nuova, p05 → p05b, come le due prove di P1); accanto a ogni poster i ppi veri a ogni misura di vendita (A4, A3, A2, 50×70) e quali passano il cancello dei 150 ppi di P2. Scrive solo in `produzione-poster\dati\`: poster.json e' la lista (modificabile a mano), `scelte.json` sono le scelte di Ettore e la catena non lo tocca mai — provato: segnato «tengo», lanciato un giro, il segno c'era ancora. Legge in sola lettura i dodici poster di P1_prova\; Ricerca (8800) e Lavorazione (8801) non si toccano. L'id del poster e' lo stesso nelle tre app (p01…p10 di P1, poi p11, p12…). Si guarda dal PC (regola del 02/09): griglia a larghezza di monitor, screenshot a 1600 in produzione-poster\_shots\. Se la porta 8802 e' presa l'app rifiuta di partire. Autostart Produzione_Poster.vbs. ⚠️ Tailnet 8471 registrata ma non verificata dal nome (dal PC il nome tailnet non risponde a se stesso, NordVPN): va aperta dal telefono. |
🏠 Solo-localhost (servizi, non esposti)
Raggiungibili solo dal mini-PC (127.0.0.1).
| Servizio | Indirizzo | Porta |
|---|---|---|
| 📊 Metabase (analytics) | http://127.0.0.1:3000 | 3000 |
| 🔄 n8n (automazioni) | http://127.0.0.1:5678 | 5678 |
| 🕸️ Neo4j (knowledge graph) | http://127.0.0.1:7474 | 7474 / 7687 |
| 🐘 Postgres (database) | 127.0.0.1:5432 | 5432 |
| ⚙️ Gateway OpenClaw | 127.0.0.1:19789 | 19789 |
🎫 Sportello CLI — risponde usando l'abbonamento Claude (claude -p) per n8n, Life OS, CATPIT e script. POST /chiedi con l'intestazione x-parola (cassaforte: SPORTELLO_CLI_PAROLA). Solo locale, NON esposto e NON nell'Hub, per scelta: è un esecutore, non un'app da aprire dal telefono. Dal container n8n si chiama http://host.docker.internal:8899/chiedi (provato il 31/08). Cartella sportello_cli\, autostart Sportello_CLI.vbs | http://127.0.0.1:8899 | 8899 |
🚧 Sviluppo (non ancora funzionanti)
Progetti/app in lavorazione — non raggiungibili, elencati per censimento.
| Progetto | Stato | Dove |
|---|---|---|
| 🧠 NotebookLM locale (chat con documenti) | solo piano | 01_SISTEMA_PERSONALE_homelab\Notebook_LM_Locale\ |
| 🤖 Jarvis (assistente residente) | solo bisogni/design | 01_SISTEMA_PERSONALE_homelab\Jarvis_like_System\ |
| 📗 Estrattore libri | prototipo/prompt | 01_STRUMENTI_di_LAVORO\Estrattori app py\ |
| ⬇️ Automazione download | solo contesto | 01_SISTEMA_PERSONALE_homelab\Automazione_download\ |
Note pratiche
- Da telefono: apri Tailscale (connesso), poi il link.
*.ts.netin HTTPS ha certificato valido. Portainer usa HTTPS con certificato self-signed → il browser avvisa (normale). - Persistenza: autostart al login — 16 launcher
.vbsin Startup (probe 2026-07-26, +Life OS 16-08, +Plancia Video Factory 18-08, −Video Downloader 27-08: assorbito nel Social Hub, il suo.vbse' inAgente_2_Archimede\autostart_dismessi\): Hub, Pianificatore Pasti, Cassaforte, CATPIT, Dashboard Creso, Claude Code Web, Manga Downloader, Site Downloader, Catalog Explorer, Ricerca Torrent, Social Hub, Riferimenti + Mappe, Richieste Mobile, Life OS, Plancia Video Factory. I container Docker ripartono da soli (restart policy). NordVPN a parte (vedi sotto). ⚠️ Il buco "riavvio non presidiato → flotta spenta finché nessuno fa login" resta aperto (task a49 §headless, attende scelta di Ettore). - Esporre una mini-app locale:
tailscale serve --bg --https=<porta_libera> http://127.0.0.1:<porta_app>. Spegnere:tailscale serve --https=<porta> off. - ⚠️ NordVPN: se acceso sul mini-PC va in conflitto con Tailscale (range 100.x) → tenerlo spento sul server (Quit, non pausa). Vedi memoria
tailscale-remote-access-setup.
Changelog
- 2026-09-05 (14:25) — Dashboard di Hermes riaccesa (richiesta di Ettore: «aggiorna lo status della dash agent di hermes per farmi entrare»). Era spenta: nessuno in ascolto sulla 9119, quindi la tessera dell'Hub si apriva a vuoto — non un difetto dell'esposizione, che era e resta attiva (
8468 → 9119, confermata datailscale serve status). Riavviata staccata dal terminale conhermes.exe dashboard --port 9119 --host 127.0.0.1 --no-open --skip-build(ci mette ~20 s a rispondere); verificata 200 col titolo `Hermes Agent - Dashboard`, e l'Hub la marca attiva (screenshot a 1500 px: riga in 1 Gestionali, LAN e Tailscale accesi, 38/38 app attive). ⚠️ `hermes dashboard --status` dice «nessun processo» mentre la pagina risponde: non riconosce un avvio fatto fuori dal suo registro, quindi la prova vera è la porta in ascolto, non quel comando. Autostart aggiunto lo stesso giorno su ok di Ettore:Hermes_Dashboard.vbsnella cartella Startup — il gateway di Hermes ripartiva da solo, la dashboard no, ed era quasi sempre questo il motivo per cui non si apriva. Provato davvero, non solo scritto: fermato il processo, lanciato il .vbs come farebbe il logon, la 9119 è tornata a rispondere 200 col titolo giusto in circa 40 secondi (log in%LOCALAPPDATA%\hermes\dashboard-autostart.log, rigaHERMES_DASHBOARD_READY). ⚠️ Parte con--skip-build: al logon npm può non esserci e la compilazione durerebbe minuti, ma dopo un aggiornamento di Hermes la UI va ricompilata a mano o resta servita quella vecchia. Nota della tessera aggiornata (apps.json, backupapps.json.bak.2026-09-05-hermes). (Romeo) - 2026-09-03 (11:45) — L'Hub scrive i propri tre indirizzi dentro di sé (richiesta di Ettore: «non mi ricordo quello per accedere da internet, e non lo trovo»). Striscia di riferimenti sotto la testata dell'Hub, tre righe di testo con il link per esteso:
http://127.0.0.1:8830·https://mini-it12.tailc565d5.ts.net:8447/· `https://mini-it12.tailc565d5.ts.net/hub`. Sorgente = nuova chiave `hub_indirizzi` inapps.json(non codice: si corregge senza toccarehub.py); resa inhub.py(payload/api/apps+ blocco.rif). ⚠️ Non è una tessera: un primo giro l'aveva messa come app in Gestionali ed è stato ritirato — l'Hub in mezzo alle app si sarebbe linkato da solo e, conpubblicabile, avrebbe potuto occupare una delle tre sedie pur essendo già su tutte e tre sotto/hub. Backupapps.json.bak.20260903-riferimenti-hubehub.py.bak.20260903-riferimenti. Verificato: suite Hub 116/116, processo 8830 riavviato (200), screenshot a 1400 px e a 390 px. Da questa macchina i nomi*.ts.netnon rispondono (non fa hairpin sul proprio nome): l'indirizzo pubblico è confermato datailscale serve status(/hub→127.0.0.1:8830su tutte e tre le porte), non da unacurlandata a buon fine. (Romeo) - 2026-09-02 (16:10) — Nata «Produzione poster» (P4, task a137), la terza app del progetto poster: mini-app Python stdlib in
Agente Residente openclaw\produzione-poster\, locale 8802 → tailnet 8471 (tailscale serve --bg --https=8471 http://127.0.0.1:8802; 8802 = prima libera dopo 8800/8801, 8471 = prima libera dopo la 8470). Due schermate: lista di lavoro (costo dichiarato/misurato affiancati) e vaglio (tengo/scarto/rifai, ppi per formato e cancello dei 150 ppi). Scelte di Ettore indati\scelte.json, separate da cio' che la catena riscrive, tenuta provata. Tessera nell'Hub. Primo giro vero: un poster tipografico in A2, $0,094 dichiarati e $0,094 misurati a saldo assestato. - 2026-09-02 (10:20) — Interruttore pubblico: tutte le app scegliibili (ordine di Ettore delle 10:00: «voglio poter scegliere quale app accendere a mio piacimento, non solo quelle 3»).
pubblicabile: truesu tutte le 37 app con una porta (le 4 in sviluppo restano fuori; backupapps.json.bak.20260902-tutte-pubblicabili). Lista nera a quattro nel codice dell'Hub: Cassaforte, Claude Code web, Portainer, OpenClaw Control — criterio «danno il controllo della macchina», non «delicate». Tendina raggruppata per sezione, «— spento —» in cima, marche «— spenta» e «— gia' su :P»; provata a 390 px con browser vero (23 verdi). Dopo ogni cambio riuscito l'Hub ricontrolla tutte e tre le sedie controtailscale funnel status --json(radice,/hub, porta locale) e, se una non torna, risponde «cambio eseguito, ma…» invece di dichiarare successo: e' il controllo mancato stamattina, quando la 443 era rimasta vuota. Provato dal vivo dall'ingresso pubblico (DoH +curl --resolve): Ricerca poster su :8443 → 200 col suo titolo, poi CATPIT rimesso; stato finale = partenza (443 Segnapunti · 8443 CATPIT · 10000 Life OS,/hubsu tutte e tre, 6/6 verificati da internet). Suite Hub 116/116. Commit Hub_Strumentic5b0abf. (Archimede) - 2026-09-01 (sera) — «Lavorazione poster» ha una cartella sua (correzione di rotta di Ettore delle 15:38: «la app andava bene come era prima, con le immagini originali per la visualizzazione. Facciamo che crei una app apposta solo per la lavorazione, cosi' non abbiamo problemi, e quando sara' tutto top accorpiamo»). Il banco era nato dentro la cartella dell'app di ricerca: ora sta in `Agente Residente openclaw\lavorazione-poster\` e sono due app separate anche sul disco, non solo su due porte. Ricerca poster (8800) resta quella di prima e mostra le immagini originali dei negozi: e' il predefinito e ci resta, i preferiti restano suoi. Il magazzino non e' stato duplicato — sarebbe stato l'errore facile: i dati stanno tutti in
ricerca-poster\dati\(compresadna\) e il banco li legge da li' in sola lettura, perche' due copie di 60 MB di json e 3.700 ritagli divergono al primo giro di pulizia e poi nessuno sa piu' quale delle due sta guardando. L'unica scrittura si e' spostata in casa: il segno «ritaglio sbagliato» ora va inlavorazione-poster\dati\ritagli_sbagliati.json, e `pulisci_poster.py` e' stato ripuntato a leggerlo li' — con il vecchio posto tenuto come ripiego, perche' se quel collegamento si rompesse in silenzio il giudizio di Ettore verrebbe ignorato senza che nessuno se ne accorga, che e' esattamente il guasto per cui quel file vive fuori dapulizia.json. Provato end-to-end: l'app scrive nella sua cartella, il magazzino resta intatto, e la pulizia rilegge il segno dalla posizione nuova. All'avvio il banco non crea piu' cartelle dentro il magazzino di un altro programma: se i dati non ci sono si ferma e scrive dove li ha cercati (un percorso sbagliato, in silenzio, sembra «l'archivio e' vuoto» e si perde mezz'ora a cercare il guasto altrove). ⚠️ Trovato mettendo la tessera nell'Hub: la porta tailnet era gia' registrata sulla 8470, e ne avevo aperta una seconda sulla 8471 per la stessa app — due indirizzi per la stessa cosa, cioe' il modo migliore di non sapere piu' quale mandare a Ettore. Rimossa la 8471, resta la 8470. ⚠️ La prova a schermo copriva due stanze su tre: Lavorazione e Scarti si', DNA no — la parte piu' nuova era anche la meno controllata. Aggiunti 37 controlli e ora sono 87 verdi, 0 rosse a 390 px. ⚠️ Tailnet ancora non verificata dal nome, e ora si sa il perche' preciso:Get-NetRoutedice che NordLynx si e' preso `100.64.0.0/10`, la stessa fascia in cui vive Tailscale (100.110.106.30), e da questo PC va in timeout ogni porta tailnet — la 8469 di Ricerca poster e la 8470 di questa allo stesso modo, insieme a Hub 8447 e CATPIT 8453 attive da settimane. Non e' un difetto delle app: in locale 8800 e 8801 danno 200 col titolo giusto, e ilservee' registrato e in ascolto su100.110.106.30:8470. Si apre dal telefono; per verificarla da qui serve chiudere NordVPN (Quit, non pausa) — decisione di Ettore, non la prendo io. Tessere Hub aggiornate, quella di «Ricerca poster» corretta perche' prometteva ancora il DNA (backupapps.json.bak-20260901-lavorazione-cartella-sua), e la tessera verificata sulla pagina renderizzata con uno screenshot a 390 px, non dall'API: c'e' in 1 Gestionali, sotto Ricerca poster. ⚠️ L'autostart era rotto dallo spostamento e non se ne sarebbe accorto nessuno fino al prossimo logon:Startup\Lavorazione_Poster.vbspuntava ancora aricerca-poster\, quindi l'app non sarebbe ripartita e il log sarebbe finito nella cartella sbagliata. Percorso corretto e provato davvero, non solo riscritto: fermata l'app, lanciato il .vbs come farebbe il logon, e 8801 e' tornata in ascolto e risponde 200 col titolo giusto sulle tre stanze, col log nella cartella nuova. (Romeo) - 2026-09-01 (sera) — «Lavorazione poster»: ogni immagine ha la sua scheda, con la sua origine e il suo processo (domanda di Ettore delle 15:34: «dove posso guardare le immagini lavorate, col loro processo e la loro origine?»). I dati c'erano gia' tutti in
dati\pulizia.json- classe, chi l'ha decisa, motivo del rifiuto, taglio, frazione d'area, nitidezza - e non li leggeva nessuno: raccolti e sprecati, che e' il modo peggiore. Ora ogni tessera del banco apre una scheda (https://mini-it12.tailc565d5.ts.net:8470/?stanza=lav&id=<id>, locale8801) che risponde a tre domande in quest'ordine. 1. Da dove viene: negozio, paese, piattaforma, prezzo, i formati in vendita col loro prezzo, e un bottone alto 48 px che apre la pagina del prodotto sul sito del negozio - era il pezzo che mancava del tutto, e senza il quale il poster resta un'immagine orfana. 2. Cosa le e' stato fatto: grezza e pulita affiancate; la classe in parole («l'opera piatta, fotografata da sola sul fondo di uno studio») e chi l'ha decisa, la geometria o il catalogo - e' la riga che dice quanto fidarsi; il rettangolo preso e quanta immagine e' rimasta; i gradi di raddrizzamento; il motivo per esteso se scartata; di quale poster e' il doppione, col link alla sua scheda; e quale delle foto del prodotto e' stata scelta, con le scartate e il perche' di ognuna (letto dadati\scelta_immagine.json, che pure era li' inutilizzato). 3. Quanto e' venuta bene: messa a fuoco, forma, frazione d'area con la barra, disegno e misura del ritaglio - ognuna col numero, la parola che lo traduce e la soglia che doveva superare, perche'0.5455non dice a nessuno se e' andata bene; in fondo il segno «ritaglio sbagliato», che resta l'ultimo cancello perche' non e' un numero. Frecce precedente/successiva che scorrono la lista filtrata: guardare di fila tutte le rifiutate di una classe e' il modo piu' rapido di accorgersi se il metodo sbaglia sempre sulla stessa famiglia, ed e' il motivo per cui i filtri per esito e per classe esistono. ⚠️ Scoperto misurando, non guardando: la pulizia v4 ha aggiunto un quarto esito,intera(208 immagini): non e' uno scarto - vuol dire che non c'era nessun rettangolo da cercare perche' l'immagine era gia' il poster - ma il banco lo trattava come «tutto cio' che non e' pulita», e quelle 208 finivano fra gli Scarti col motivo scritto in rosso, come un'accusa. Corretto: due esiti buoni (pulitaeintera), e il loro motivo e' una spiegazione, non una bocciatura. ⚠️ Secondo difetto vero, e cattivo: l'app non controllava se la porta era gia' presa. Su Windows il socket nasce conSO_REUSEADDRe tre processi si sono messi in ascolto sulla stessa 8801 senza che nessuno protestasse: le richieste andavano a uno dei tre a caso, e per un quarto d'ora la pagina ha risposto 200 col codice vecchio, facendo sembrare che le modifiche non funzionassero. Ora l'app rifiuta di partire e dice come chiudere quella accesa. Stessa trappola nella prova a schermo: un altro agente aveva un Chrome sulla stessa porta del debugger, e la prova misurava le pagine dell'app sbagliata («titolo servito: Ricerca poster») - ora la porta del debugger si cerca libera e dopo ogni navigazione si controlla di essere davvero arrivati. Provata con un browser vero a 390 px: 50 verdi, 0 rosse (node prova_lavorazione.mjs), fra cui che le due immagini restano affiancate - se si impilassero la pagina resterebbe valida e il confronto, che e' tutto il senso della scheda, sparirebbe. Potatura del travaso: l'app era nata copiando quella di ricerca e si portava dietro 1.100 righe morte - le quattro stanze del mercato, la stella dei preferiti col suo javascript e la rotta POST che scriveva `preferiti.json`, che nessuna pagina poteva piu' chiamare - piu' un cappello che dichiarava di scrivere un file che qui non si tocca. Tolte: da 4.066 a 2.679 righe, e ora l'unica scrittura e' davverodati\ritagli_sbagliati.json. AutostartLavorazione_Poster.vbscreato e provato davvero, non solo scritto: l'app in ascolto adesso e' partita da li'. Tessera nell'Hub verificata sulla pagina renderizzata con uno screenshot, non dall'API, e la tessera vecchia di «Ricerca poster» corretta - prometteva ancora la stanza DNA, che e' passata di qua (apps.json.bak.20260901-lavorazione-poster). ⚠️ Tailnet non verificata dal nome, come ieri e per lo stesso motivo: con NordVPN acceso su questo PC vanno in timeout tutte le porte tailnet, comprese Hub 8447 e CATPIT 8453 attive da settimane; in locale 8801 risponde 200 col titolo giusto. Va aperta dal telefono. (Romeo) - 2026-09-01 (sera) — Scorporo: «Ricerca poster» torna al mercato, nasce «Lavorazione poster» (ordine esplicito di Ettore). Nelle ore prima, dentro l'app di ricerca (8800) erano finite la lavorazione (l'interruttore grezze/pulite nella stanza Poster) e la stanza DNA. Ettore ha corretto: l'app di ricerca guarda il mercato e basta, la lavorazione sta in un'app separata; si accorperanno quando saranno mature, non ora. Ricerca poster (8800/8469) e' tornata alle quattro stanze originali — Concorrenti, Poster (immagini originali dei negozi, con filtri e il filtro «solo preferiti»), Prezzi, Stato — senza interruttore, senza DNA, senza la casella della pulizia nello Stato (rimozione chirurgica: i preferiti, i filtri, i link alle schede e le altre stanze non sono stati toccati; verificate tutte e quattro 200, e a 390 px nessuno scorrimento laterale). Lavorazione poster (nuova, 8801 → tailnet 8470): stessa stdlib pura, sola lettura, legge i dati dove sono senza duplicarli. Tre stanze: Lavorazione (per ogni immagine la grezza accanto al pulito — o il motivo se scartata —, provenienza col link alla scheda, classe e chi l'ha decisa, taglio e quanto e' rimasto, il segno «ritaglio sbagliato» che scrive in
dati\ritagli_sbagliati.json), Scarti (filtro per esito e classe) e DNA (spostata, non riscritta, dall'app di ricerca). ⚠️ La stanza DNA e' stata spostata fisicamente daricerca_poster.pyalavorazione_poster.py, con le miniature (passo8_miniature.py) e la fascia del costo. Provata con un browser vero a 390 e 1280 px: la coppia grezza\|pulita resta affiancata (169 px l'una a 390), il test che rende inutile la stanza se fallisce. ⚠️ Tailnet non verificabile da qui: con NordVPN acceso sul mini-PC nessuna porta tailnet risponde — nemmeno la 8469 di Ricerca poster attiva da ore (8469 e 8470 entrambe in timeout, mentre in locale 8800/8801 danno 200); va aperta dal telefono. ⚠️ Cartella condivisa con altri agenti in parallelo: nel frattempopulisci_poster.pye' passato alla v4 (nuovo esito `intera` — 299 immagini prese intere, non ritagliate, prima gonfiavano il conto delle «pulite») e ogni prodotto ha ora piu' foto con una scelta (scelta_immagine.json,record["originale"]= la foto scelta). Numeri veri dopo la pulizia finita: 6252 immagini lavorate → 3309 ritagliate + 299 prese intere = 3608 usabili, 189 doppioni, 2455 rifiutate (2326 «il catalogo dice che non e' un poster» — magliette, adesivi, tazze, biglietti d'auguri… —, 129 per geometria: 73 nessun rettangolo, 49 risoluzione troppo bassa, 3 senza disegno, 3 proporzione, 1 sfocata). Tessera Hub aggiornata (apps.json, backupapps.json.bak.20260901-scorporo-lavorazione). Difetto noto ereditato: la cornice sopravvive al ritaglio (~23 buoni su 40, il perche' nei commenti diritaglio_fine.py), e 8801 non ha ancora autostart. (Romeo) - 2026-09-01 — «Arte generativa»: le animazioni dei frattali rifatte da capo (Ettore, 15:18: «queste animazioni non mi piacciono»). Aveva ragione: erano una deriva impercettibile della costante dentro un fazzoletto e un respiro di tre gradi su un fiocco di neve — movimenti che non dicevano niente del frattale. Ora ognuna fa il movimento che le appartiene. Confine SCENDE: l'inquadratura si stringe sul punto di confine scelto dal seme e attraversa cinque ordini di grandezza in un minuto (il dettaglio si rigenera tre o quattro volte, e dentro un filamento ricompare l'insieme intero), poi risale — il fondo esiste ed e' la precisione dei numeri, oltre la quale il disegno si impasta in blocchi. Il coseno che governa la discesa annulla la velocita' ai due estremi: niente strappi alla partenza e all'inversione. Prigione CAMMINA SUL BORDO della cardioide principale, che ha una parametrizzazione esatta —
c(θ) = e^{iθ}/2 − e^{2iθ}/4— invece di girare in tondo a caso: ogni punto di quel bordo e' una creatura connessa per un soffio, e percorrendolo si attraversano le simmetrie una dopo l'altra (tre bracci, cinque, sette, una spirale, una collana). Piega SI FA GUARDARE MENTRE DISEGNA: la matita esegue la riga di istruzioni un pezzo alla volta, poi la regola si applica ancora e si riparte su una curva piu' fitta, fino al livello scelto — l'unico modo di vedere che a ogni giro la strada si moltiplica mentre lo spazio occupato resta lo stesso. Le stanze in movimento salgono a nove. Prove tutte verdi: 811 sul patto + 41 sul server + 64 sui frattali (i tre cicli sono chiusi: hash identico a un giro e a due giri, diverso a meta' strada; nessun salto di luce fra fotogrammi) + 104 + 23 a schermo. ⚠️ Durante il lavoro ho troncato `stanze/prigione.js` con una sostituzione sbagliata (indice di fine non trovato →slicea vuoto) e l'ho ricostruito per intero: il vault non e' sotto git, quindi li' non c'e' rete di sicurezza — le prove hanno confermato che il file ricostruito e' completo e corretto. (Romeo) - 2026-09-01 (10:28) — Il Segnapunti non chiede piu' il codice (richiesta di Ettore). Il container parte con
--senza-pin, la deroga esplicita gia' prevista dal codice, scritta neldocker-compose.yml: la guardia che impedisce di avviarlo senza accorgersene resta intatta, e il PIN resta nel.envper rimetterlo in un comando. L'app e' pubblica sulla 443, quindi ora chiunque abbia l'indirizzo gioca e puo' cancellare le partite: dentro ci sono punteggi, non dati personali. Dati verificati intatti dopo il riavvio. (Romeo) - 2026-09-01 (09:58) — Su internet restano solo tre app (decisione di Ettore, opzione A). Tolti dal funnel i 29 percorsi `/a/<id>` della porta 10000: restano pubblici il Segnapunti (443, con codice), CATPIT (8443) e la 10000 con Life OS all'ingresso piu' l'Hub su
/hub. Motivo: un percorso che si apre male non e' un percorso chiuso — i dodici programmi di terzi rispondevano lo stesso all'indirizzo pubblico, e dietro ci sono foto, database e automazioni con le chiavi. Le 28 porte tailnet84xxnon sono state toccate: dai dispositivi con Tailscale acceso si apre tutto come prima. Hub allineato (tasto 🌐 solo su quelle tre, backupapps.json.bak.20260901-solo-tre-pubbliche), stato precedente del funnel salvato inREGISTRO_SVILUPPO\serve_status_backup_2026-09-01_pre-taglio-pubblico.json. ⚠️ Resta aperto: Life OS pubblico senza password, la cosa piu' esposta rimasta. (Romeo) - 2026-09-01 (sera) — «Ricerca poster» ha una quinta stanza: 🧬 DNA (
https://mini-it12.tailc565d5.ts.net:8469/?stanza=dna, locale8800). Il DNA di un poster — la ricetta che una lettura multimodale tira fuori dall'immagine, e il prompt che la rifà — era una cartella di file sul PC: Ettore guarda dal telefono, e quello che non si apre dal telefono per lui non esiste. Ora è una stanza, con tre viste: i confronti (l'originale accanto al rifatto, scorribile, col punteggio sotto tradotto in parole — «lo stesso poster, rifatto» sopra 0,50, «parlano la stessa lingua» sopra 0,30, «non c'entra niente» sotto 0,15 — filtrabili per famiglia di stile e ordinabili dal migliore o dal peggiore); la scheda di un poster (le due immagini grandi, le tre versioni in fila col loro punteggio e si cambia con un tocco, poi soggetto, stile, tecnica, i colori mostrati davvero e non scritti in esadecimale, composizione, tipografia, le parole del poster, cosa evitare, e in fondo il prompt col bottone che lo copia); gli otto modelli per famiglia (il prompt col buco, copiabile, con i valori che quella famiglia usa davvero contati dai dati e non scritti a mano, e tutti i suoi poster dal più somigliante). Si apre sul v2, il giro buono: v1 e v3 restano a un tocco perché il confronto fra i tre è metà del valore. L'app non è stata riscritta: la stanza è un blocco in coda aricerca_poster.py, sola lettura come il resto, e i file del DNA stanno in un dizionario loro (FILE_DNA) e non dentroFILE— se finissero lì la stanza Stato segnalerebbe un DNA mai lanciato come un guasto della raccolta, che non è. Sedati\dna\è vuota la stanza lo dice e stampa le due righe da lanciare. ⚠️ Le miniature. Un'immagine generata pesa 730 KB e una pagina di confronti ne mostra 104: 76 MB sul telefono. Le copie da 27 KB le scrivedna\passo8_miniature.py(208 file, 5,5 MB, venti secondi) e l'app usa quelle; la scheda del singolo poster chiede l'intera con?piena=1. Le fa la catena del DNA e non l'app, perchéricerca_poster.pyè stdlib pura senza pip — è una regola scritta in cima al file — e ridimensionare un JPEG vuole Pillow. Provato con un browser vero a 390 e 1280 px (node prova_schermo.mjs): 62 verdi, 0 rosse. La prova che conta non è il typecheck ma quella che misura i rettangoli veri delle due figure e pretende che restino affiancate a 390 px (170 px l'una): è lì che queste pagine si rompono, e quando si rompono il confronto — che è tutto il senso della stanza — sparisce mentre la pagina resta valida. Quanto costerebbe allargare il DNA a tutto l'archivio pulito, misurato e non stimato (dna\costo_scala.pylegge dieci poster veri e somma quello che OpenRouter dichiara): $0,00137 a poster congoogle/gemini-3.1-flash-lite, cioè $4,69 per tutti e 3.426 i poster con ritaglio buono, un'ora e venti con quattro letture in parallelo. Generare anche una prova per ciascuno costerebbe $154 in più (a $0,045 l'immagine misurati sul saldo fal.ai) e altre 6 ore fra generazione e CLIP. La lettura costa cinque dollari, la generazione centocinquanta: la decisione se allargare è di Ettore, e il numero è nella fascia in cima alla stanza così sta davanti agli occhi quando serve. Tessera Hub aggiornata (apps.json.bak.20260901-stanza-dna). (Romeo) - 2026-09-01 — Nata «Ricerca poster», il cruscotto della ricerca di mercato del progetto poster (p24 ON-line Business): mini-app Python stdlib in
Agente Residente openclaw\ricerca-poster\, locale 8800 → tailnet 8469 (tailscale serve --bg --https=8469 http://127.0.0.1:8800; 8800 = prima porta libera della serie 88xx, 8469 = prima libera dopo la 8468). Costruita prima della macchina di raccolta, apposta: serve a impostare subito la visualizzazione e vedere man mano cosa entra. Quattro stanze (Concorrenti, Poster, Prezzi, Stato) e sola lettura per costruzione (POST/PUT/DELETE → 405): a scrivere è la raccolta, direttamente sui quattro JSON didati\, il cui contratto sta in `FORMATO_DATI.md` — nomi dei campi, tipi, un esempio per ciascuno dei quattro tipi di record, e la regola dei percorsi delle immagini (relativi adati\, serviti solo se stanno dentrodati\immagini\). L'app si ricarica da sola quando un file cambia sul disco: provato riscrivendo i JSON con il server acceso. Un poster senza immagine sul disco non mostra un riquadro rotto ma un segnaposto SVG generato dai suoi colori dominanti, con scritto sotto «immagine non ancora scaricata»: così si vede a colpo d'occhio quante ne mancano. Prove con un browser vero a 390 px (prova_schermo.mjs, 29 controlli): le quattro stanze rispondono col titolo giusto, nessuna sborda lateralmente (documento 390 px in una finestra da 390) e le 24 immagini della griglia si caricano tutte dopo lo scorrimento. Validati come XML anche tutti e 118 i segnaposto generati. ⚠️ La prova dal nome tailnet NON è stata fatta: con NordVPN acceso su questo PC nessuna porta tailnet risponde da qui — controllo fatto apposta sulla 8447 (Hub), 8453 (CATPIT) e 8467 (Arte generativa), attive da settimane: 000 tutte e tre, mentre le stesse app in locale danno 200. Ilserveè registrato e in ascolto (stesso processo delle altre 26 porte). Va aperta dal telefono. Tessera nell'Hub (apps.json, backupapps.json.bak.20260901-ricerca-poster, fascia 1 Gestionali) verificata sulla pagina renderizzata, non solo dall'API. ⚠️ Cartella condivisa con un secondo agente: mentre costruivo il cruscotto, un altro agente incaricato da Romeo scriveva nella stessa cartellascarica.py, che ha raccolto i due cataloghi pubblici veri (349 prodotti, di cui 224 poster, con 349 immagini sul disco). I due lavori si sono incastrati senza rifare niente, perché ha scritto seguendoFORMATO_DATI.md. A fine giornata le righe di prova sono state tolte conpython semina_dati.py --pulisci(progettato apposta: toglie solo le righe confinto: truee non tocca le altre), e ora l'archivio è tutto vero — 2 concorrenti, 349 prodotti di cui 224 poster con l'immagine sul disco, 125 non-poster (magliette, calzini, teli mare) tenuti fuori dalla galleria con un link per mostrarli. La fascia in cima a ogni stanza si scrive da sola contando le righe e adesso dice «tutti i dati sono veri». Il seminatore resta ed è deterministico (seed 20260901):python semina_dati.pyrimette i finti identici per una dimostrazione. ⚠️ Difetto vero trovato misurandolo, non guardandolo: 26 prodotti avevano un'emoji o una lettera accentata nell'id, e per quelliGET /img/<id>rispondeva 404 — un id che è insieme nome di file e pezzo di indirizzo deve essere ASCII. Corretto dall'altro agente; riprovato dopo, 349 id su 349 rispondono 200 con contenuto. (Romeo) - 2026-08-31 (mezzogiorno) — Nato lo «Sportello CLI» sulla 8899 (brainstorm r006, brief di Romeo). Un servizio locale che riceve una domanda via HTTP e la gira a
claude -p: serve a far usare l'abbonamento invece dell'API a consumo a tutto ciò che non è un agente OpenClaw (n8n, Life OS, CATPIT, script, pulsanti nelle app).POST /chiedi→ risposta sempre nella stessa forma (ok, risposta, modello, durata_ms, costo, errore) anche quando fallisce, così il ramo d'errore di n8n funziona. Solo `127.0.0.1`, parola d'ordine obbligatoria (x-parola, in cassaforte, mai nel codice), una domanda alla volta (1 in corso + 2 in attesa, poi «occupato»), timeout 180 s, e tetto all'85% sulla finestra 5 ore letto riusandoscripts\limiti.mjs: sopra, rifiuta invece di eseguire. Ogni chiamata lascia una riga insportello_cli\registro\. ⚠️ Deroga esplicita alla regola dell'Hub: NON va nell'Hub e NON va in tailnet — è un esecutore, non un'app da aprire dal telefono. Due cose verificate e non date per buone: dal container n8nhost.docker.internal:8899arriva come 127.0.0.1 (Docker Desktop fa da ponte: il loopback non è una barriera per i container, la parola d'ordine sì), eclaude.exelanciato da un servizio risponde «OAuth session expired» finché non gli si passa il token daHKCU\Environment, esattamente come faclaude-cli-auth.cmdper gli agenti. (Archimede) - 2026-08-31 (tarda mattina) — «Arte generativa»: galleria a barre e due frattali che si muovono (richiesta di Ettore delle 11:13). (1) La galleria non e' piu' un mosaico di quadrati ma una riga per stanza: l'opera di oggi a sinistra (96 px su telefono, 132 da PC), a destra nome, sommario e l'etichetta «si muove» dove serve. Con venticinque stanze un mosaico si guarda come un album di figurine, in fila si legge. (2) Animati due frattali: Prigione, dove la costante percorre un giro chiuso in un minuto e la creatura cambia specie mentre la si guarda (dopo il giro torna identica: e' una passeggiata dentro la famiglia, non la deformazione di una figura sola), e Piega, dove l'angolo oscilla attorno al valore canonico in venticinque secondi e la curva si apre e si richiude come un ventaglio. Le stanze in movimento salgono da sei a otto. Prove: 806 sul patto + 41 sul server + 59 sui frattali (dieci nuove: il moto esiste, si torna indietro nel tempo, dopo un giro completo l'immagine e' identica — confrontata a un giro e a due — e nessun salto di luce fra fotogrammi) + 104 + 23+23 a schermo, tutte verdi a 1280 e a 390 px. ⚠️ Difetti trovati e corretti strada facendo: in Attrattore certi semi davano un attrattore grande come un granello e la tessera restava bianca (ora i semi degeneri si rifiutano, fino a dodici tentativi); in Piega il tremito della mano si sommava alla direzione a ogni piega — un cammino a caso sull'angolo — e dopo qualche migliaio di segmenti la curva usciva dal riquadro, che era misurato sulla curva perfetta (ora il tremito e' locale al singolo tratto); e due prove avevano il numero di stanze scritto a mano («venti»), quindi sono cadute il giorno stesso in cui le stanze sono diventate venticinque pur essendo tutto a posto: ora lo chiedono al server, come faceva gia'
prova_schermo.mjs. Il tetto della «pazienza» di Prigione e' sceso a 400: da ferma calcola a piena risoluzione e li' ogni pixel paga tutte le ripetizioni. Porte e indirizzi invariati; tessera dell'Hub aggiornata. (Romeo) - 2026-08-31 (dalle 15:15) — Le app di casa non si aprono piu' vuote da internet (richiesta di Ettore delle 15:15: «Study System da internet non mostra nulla»). Il guasto non era Study System: era il modo in cui quattordici app chiedevano i propri dati. Sotto
.../:10000/a/<id>un indirizzo che comincia con/non torna all'app, torna alla radice della 10000 — cioe' a Life OS — e arriva il guscio della pagina senza dentro niente. Censimento prima di toccare: letto il documento servito da ogni porta ed estratta ogni stringa che comincia con/(documento inSviluppo_Sistema_Agentico\CENSIMENTO_2026-08-31_...md). Ne sono usciti quattro guasti diversi, non uno: (1) i dati — otto app; (2) la navigazione — Richieste mobile e Riferimenti+Mappe arrivavano piene, era il primo tasto a portare fuori, e al collaudo a occhio del 27/08 sembravano le piu' sane; (3) il rimbalzo del server — il Segnapunti rispondeva303 Location: /logine nessun prefisso lato pagina poteva salvarlo, il browser lo seguiva prima che l'app esistesse; (4) il relativo che sembra giusto — Imprese Vicentine chiamavafetch('api/data')senza barra, che da casa funziona e sotto/a/imprese_vicentinesenza barra finale diventa/a/api/data. Riparate 12 app col pattern diarte.py(prefisso dalocation.pathname, calcolato una volta): Study System, Pianificatore Pasti, Segnapunti, Richieste mobile, Riferimenti+Mappe, Ricerca Torrent, Manga, Site, Catalog, Imprese Vicentine, Life OS (che alla radice non cambia di una virgola) e Dashboard Creso (l'unica col programma dentro un pacchetto compilato: Vite a base relativa + una<base>che la pagina calcola da sola). Due erano gia' a posto e non sono state toccate (Social Hub, che dal 25/08 avvolgefetch, e Efesto, che non chiede niente al server): il censimento le dava rosse, il banco di prova le ha assolte — la prova batte la conta. Il banco e' la parte che vale:scripts/prova_sotto_prefisso.mjsapre l'app sotto/a/<id>con un browser vero attraversoprova_prefisso.py(il proxy che si comporta come il funnel), registra ogni richiesta di rete e va in rosso se anche una sola esce dal prefisso — anche se lo schermo e' perfetto. 16 app verdi a 390 px e a 1280, e tutte riverificate anche alla radice perche' gli indirizzi tailnet 84xx non si rompessero. Suite: Study System 111/111, Segnapunti 69/69 (una prova pretendeva il rimbalzo: ora ne pretende due piu' vere), Creso 32/32, Pasti verdi, Riferimenti 44/45 + 41/41 sicurezza (l'unico rosso c'era gia' prima, verificato rimettendo il file di ieri). ⚠️ Tolto il tasto 🌐 a Metabase e Kavita: la loro tessera prometteva un indirizzo pubblico che si apre vuoto — sono di terzi, si sistemano col loro «percorso base», secondo giro. ⚠️ Plancia Video Factory resta fuori: Next.js scrive gli indirizzi da solo ebasePathe' una costante di compilazione (o pubblica, o raggiungibile in casa) — richiesta aperta in CATPIT con tre opzioni. Tre app (Manga, Site, Catalog) e la dashboard Imprese non sono sotto git: per loro l'indietro e' una copia datata.bak.20260831-prefisso, e la riga diREGISTRO_SVILUPPO\APP.mdche dal 27/08 le dava tutte versionate va corretta. (Archimede) - 2026-08-31 (mattina) — Indirizzi dell'Hub rimessi in ordine (richiesta di Ettore delle 10:54). Il difetto che contava: la tessera OpenClaw Control aveva ancora l'indirizzo nudo (
https://…ts.net/), che dal 27/08 e' del Segnapunti ed e' pubblico — toccandola si finiva sul segnapunti; corretta in:8465. Aggiornata anche la tessera Segnapunti (url_pubblico = indirizzo nudo 443, verifica dall'esterno in sospeso) e messa una nota sulle 11 tessere Docker a indirizzo diretto (porta del container, nientetailscale serve, http semplice: e' voluto, non un errore — a chi legge l'elenco sembravano sbagliate). In questo documento: sistemate le righe stantie che davano la 443 al gateway e il Segnapunti «non attivo». Backup datati*-indirizzidi entrambi i file. ⚠️ Esposizioni NON toccate (sono di Ettore): la lista di quelle da spegnere/rivedere e' nel referto in #archimede-refine (8444 Organizza Viaggi dismessa;/a/videodlspenta;/a/catpite/a/munchkin_trackerridondanti; 8460→8831 Gestionale Business e 8464→8895 fucina Efesto senza tessera). (Archimede) - 2026-08-31 (sera) — Cinque frattali in «Arte generativa»: venticinque stanze (richiesta di Ettore delle 10:32 in #miniprogetti). Confine (insieme di Mandelbrot: una domanda sola per punto — resti o scappi — e il seme non atterra a caso, cerca un punto che scappi tardi, cioe' appiccicato al bordo), Prigione (insiemi di Julia: la costante la si pesca sul bordo dell'insieme dell'altra stanza, perche' e' li' che le figure sono connesse per un soffio; il cursore «carattere» la spinge fuori e la prigione si sbriciola in polvere), Radice (frattale di Newton: dove confinano due bacini confinano tutti, a ogni scala — ed e' la faccia visibile del perche' un calcolo numerico puo' dare risposte diverse cambiando una cifra insignificante), Foglia (sistemi di funzioni iterate col gioco del caos: coefficienti canonici della felce di Barnsley, piu' triangolo, albero e tappeto), Piega (grammatiche L-system: fiocco di Koch, drago, curva di Hilbert, punta di freccia di Sierpinski, pianta — regole verificate sulle fonti). Prove: 49 nuove con browser vero (
prova_frattali.mjs) che, oltre ai controlli soliti, verificano cio' che rende frattale un frattale invece di darlo per buono: il dettaglio non si esaurisce (si conta quante volte l'immagine passa da chiaro a scuro a tre ingrandimenti diversi: in un disegno normale crolla, qui resta alta), il dado non lascia traccia in Foglia (due semi diversi, stessi numeri: la felce e' la stessa all'86% — con la mutazione al massimo scende al 14%, e li' il seme cambia davvero specie) e il seme si puo' spegnere in Piega (con la mano ferma il disegno e' identico per chiunque). ⚠️ Tre difetti veri trovati e corretti: Radice confrontava il risultato con radici ruotate dal seme, che non sono soluzioni di niente — il metodo convergeva e il codice non se ne accorgeva, e la tela usciva nera; Confine e Prigione calcolavano le potenze in forma polare (pow,atan2, seno e coseno per ogni pixel e per ogni passo) e col dettaglio al massimo servivano oltre due minuti per un'immagine, ora sono moltiplicazioni ripetute; e il tetto della «pazienza» di Prigione e' stato riportato a 500 perche' li' quasi tutti i punti restano prigionieri e ogni pixel paga tutte le ripetizioni. Totale prove dell'app: 796 sul patto delle stanze + 41 sul server + 51 + 104 + 49 col browser. Porte e indirizzi invariati (8898 → tailnet 8467 → pubblico/a/arte); tessera dell'Hub aggiornata. (Romeo) - 2026-08-31 (pomeriggio) — «Arte generativa» arriva a venti stanze (richiesta di Ettore delle 09:41 in #miniprogetti: dieci nuove, sette cercate da internet — quattro ferme e tre in movimento — più tre di casa). Le sette dai fenomeni verificati su fonti esterne: Macchia (reazione-diffusione di Gray-Scott: due sostanze che si inseguono, e i due numeri feed/kill decidono se escono coralli, labirinti o mitosi), Passaggio (percolazione: alla densità critica 0,5927 compare di colpo una strada che attraversa la tela, e il nero la distingue dalle isole), Quasi (quasicristallo: cinque onde sovrapposte danno simmetria perfetta e nessuna ripetizione — con quattro o sei il disegno torna periodico), Attrattore (mappa iterata: il grigio è il conto dei passaggi, la figura si misura e si inquadra da sola), Stormo (boids: tre regole locali, nessuna che nomini il gruppo), Accordo (sincronizzazione alla Kuramoto: sotto una soglia d'ascolto restano sparsi, sopra si accordano tutti e le eccentriche restano fuori), Spirale (mezzo eccitabile / automa ciclico: dal rumore nascono fronti, e dove un fronte si spezza nasce una spirale che gira per sempre). Le tre di casa: Sedimento (strati che si posano ed erodono: il tempo si legge dal basso e i buchi si vedono come righe assenti), Crepa (fratture che si arrestano appena ne incontrano un'altra — per questo gli incroci sono a T e non a X), Sorgente (aste che guardano un punto invisibile in movimento). Nessuna riga toccata nel server né nella pagina: un file per stanza in
stanze\, più la voce della regola in chiaro inarte.js. Prove: 641 sul patto delle stanze + 41 sul server + 104 nuove con browser vero (prova_dieci.mjs), che sulle stanze in movimento verificano tre cose in più: che tornando a t=2 dopo essere arrivati a t=6 l'immagine sia identica (le tre nuove animate tengono uno stato fra un fotogramma e l'altro, e quello stato non può rompere il patto «stesso seme, stessa opera»), che il moto esista, e che la luminosità non salti fra fotogrammi vicini — il divieto di lampeggio smette di essere una dichiarazione e diventa una misura. ⚠️ Difetti veri trovati e corretti durante le prove: Macchia usciva completamente nera con certi semi (il conto divergeva in NaN → freno numerico) e moriva nel regime mitosi (gocce iniziali troppo grosse: raggio 3 vive, raggio 6 muore); Attrattore finiva decentrato con mezza tela vuota (ora misura la figura prima di inquadrarla); Stormo e Spirale a tela appena aperta mostravano rumore invece del fenomeno (innesco alla creazione, che non tocca l'orologio del mondo). Porte e indirizzi invariati (8898 → tailnet 8467 → pubblico/a/arte); tessera dell'Hub aggiornata. (Romeo) - 2026-08-31 — Cinque stanze nuove in «Arte generativa» (richiesta di Ettore delle 08:47 in #miniprogetti). Da cinque a dieci movimenti: Brina (aggregazione: granelli che camminano a caso e si fermano dove toccano — l'unica stanza in cui il tempo è irreversibile), Nodo (figure di Chladni: si annerisce dove la lastra sta ferma, e i modi sono interi perché una lastra accetta solo onde intere), Girasole (fillotassi: un solo angolo, quello aureo, e lo scarto di un centesimo di grado apre corridoi vuoti), Territorio (spartizione di Voronoi più rilassamento di Lloyd: dal caos a un favo, con le cicatrici a cinque e sette lati), Corrente (campo di flusso: si vedono solo le tracce, mai il campo). Nessuna riga toccata nel server né nella pagina: un file per stanza in
stanze\, più la voce della regola in chiaro inarte.js— dove è stata aggiunta anche quella di Ritorno, che dal 28/08 mancava e mostrava «—» nella pagina «chi disegna e come». Prove: 331 sul patto delle stanze + 41 sul server + 51 nuove con browser vero (prova_nuove.mjs: riproducibilità sull'hash del PNG, inchiostro sulla tela, ogni scalino dei parametri deve dare un'immagine diversa, tetto di 6 secondi coi parametri al massimo). ⚠️ Il banco ha trovato due difetti veri in Brina, corretti: con la partenza dal telaio e con i semi sparsi il cristallo non cresceva — i granelli nascevano lontano dal fronte e un cammino a caso non arriva mai così lontano; il solo inchiostro non li smascherava (0,57% passa qualunque soglia), quindi ora la prova misura la crescita. Porte e indirizzi invariati (8898 → tailnet 8467 → pubblico/a/arte), tessera dell'Hub invariata. (Romeo) - 2026-08-27 — Il Video Downloader entra nel Social Hub (richiesta di Ettore del 27/08, #romeo-brainstorm; brief di Romeo). Le due app condividevano gia' database e cartella: mancava solo il pezzo che avvia lo scaricamento. Il motore di
video_dl_app.pye' diventatoSocial_Hub\scarica.py(spostato, non riscritto) e la stanza «Scaricati» ha in cima il campo per il link: analizzo -> titolo/autore/durata/miniatura -> scelta del formato (migliore, 1080, 720, MP3) -> barra che avanza -> il video compare nell'elenco senza ricaricare. Un processo solo, porta 8850; la 8799 e' spenta e il suo.vbstolto da Startup. La cartellaVideo_scaricati\e' rimasta dov'era di proposito: nel database ci sono 40 percorsi assoluti.yt-dlp.exenon e' stato copiato, si punta dov'e' (con variabileVIDEO_DL_YTDLPper cambiarlo). Tesseravideodltolta dall'Hub (backupapps.json.bak.20260827-videodl-assorbito). Prima di tutto,Video_Downloadere' stato messo sotto git (era l'unica app di casa fuori). Tre difetti veri trovati e chiusi durante la prova: yt-dlp era fermo al 2026.07.04 e YouTube dava 403 a meta' scaricamento (aggiornato a 2026.08.19, binario vecchio in.bak.20260827); il percorso del file tornava storpiato perche' yt-dlp scriveva nella pipe in cp1252 (--encoding utf-8+ rete di sicurezza); e la barra non ha mai funzionato, nemmeno prima, perche'--printmette yt-dlp in modalita' silenziosa (--progress). Verificato dal browser: 20/20 prove verdi + scaricamento vero in 720p, file da 30 MB sul disco, database da 40 a 41 righe, screenshot inSocial_Hub\_shot\dl4_finito_pc.png. ⚠️ Tailscale non toccato: la :8443 che si libera la riassegna Ettore. (Archimede) - 2026-08-25 — Prowlarr aggiunto allo stack Docker ed esposto sulla tailnet (richiesta di Ettore). Immagine
lscr.io/linuxserver/prowlarr:latest, containerprowlarr, compose inC:\Users\Ettore\Docker\media\prowlarr\docker-compose.yml, dati su named volumeprowlarr_prowlarr-config,restart: unless-stopped(riparte da solo con Docker). Bind su `127.0.0.1:9696`, non su `0.0.0.0`: a differenza degli altri container non e' raggiungibile dalla LAN, si arriva solo via Tailscale —tailscale serve --bg --https=8463 http://127.0.0.1:9696(8463 = prima porta 84xx libera dopo la 8462 di Efesto). Verificato dal vivo: 200 in locale e dal nome tailnet, titolo servitoProwlarr(non un 200 di cortesia del proxy). Tessera aggiunta all'Hub Strumenti (apps.json, backupapps.json.bak.20260825-prowlarr) e verificata dall'API dell'Hub. ⚠️ Autenticazione da configurare al primo avvio dentro Prowlarr (Settings -> General -> Security): finche' non e' impostata, chiunque sia sul tailnet entra senza password. (Romeo) - 2026-08-21 — Study System in Docker (anello 7, task a90, p17). Immagine
python:3.12-slim, containerstudy-system(docker-compose.ymlinStudy_System\), dati (indice, carte FSRS, sessioni) su bind mount./app/data:/data— stessa cartella usata dapython study.pyin locale, così i dati veri già raccolti (indice reale da 4.787 file, 40,5 GB fra Università/WE Green/KnoBase) ci sono dal primo avvio, nessuna migrazione. Disco esternoF:e vaultMD_DB_v1montati in sola lettura (D5/D6): verificato con una scrittura vera dentro il container su entrambi i mount →OSError: Read-only file systemsu tutti e due. Healthcheck su/api/bootstrap(30s),restart: unless-stopped. Verificato dal vivo: creata una carta reale su una fonte reale,docker compose down && up(ricreazione completa, non solo restart) → carta e stato FSRS sopravvissuti, poi eliminata per non lasciare dati di test in produzione. Simulato anche il discoF:assente (container di prova conSTUDY_F_ROOTsu un percorso inesistente): l'app dichiaradisco_presente:falseinvece di rompersi, come da D5. Solo 127.0.0.1:8891 per ora: l'esposizione LAN/tailnet non è stata fatta, si propone a Ettore (regola della casa su azioni esterne). Tessera aggiunta all'Hub Strumenti (apps.json, backup datato). (Archimede, cronstudy-a7) - 2026-08-29 — Hermes Agent installato ed esposto (richiesta di Ettore delle 15:20 e delle 18:23). Sistema agentico esterno di Nous Research, v0.20.6, installazione per-utente in
%LOCALAPPDATA%\hermes(riga di comando; niente «computer use» e niente wizard automatico, esclusi di proposito). L'installer è stato scaricato e ispezionato prima di essere eseguito: solo domini attesi, nessun codice offuscato. Si è portato un Node 22 suo, isolato, invece di usare il Node 24 del sistema: OpenClaw non è stato toccato. Provider impostato su anthropic; il collegamento all'abbonamento Claude richiede unhermes auth add anthropic --type oauthinterattivo (chiede di incollare un codice) e non è ancora fatto. Dashboard web su 127.0.0.1:9119, esposta sulla tailnet come 8468 (tailscale serve --bg --https=8468 http://127.0.0.1:9119) e messa nell'Hub Strumenti (apps.json, backupapps.json.bak.20260829-hermes,sensibile: true, niente indirizzo pubblico). ⚠️ La prova dal nome tailnet NON è stata fatta: da questo PC il nomemini-it12...ts.netrisolve su 185.40.234.x invece che sull'IP tailnet — è la VPN che dirotta il DNS, e infatti nemmeno la 8443 e la 8447, esposte da settimane, rispondono da qui. Va aperta dal telefono. Verificato invece in locale: 200 e titoloHermes Agent - Dashboard, e la tessera si vede dall'API dell'Hub (39 app). (Romeo) - 2026-08-28 (sera) — «Ritorno»: la quinta stanza dell'Arte generativa, quella che si muove per necessità (richiesta di Ettore delle 15:07). Non un'immagine con l'animazione aggiunta: senza il tempo l'opera non esiste. N corde oscillano ognuna con un numero intero di giri dentro lo stesso tempo — partono insieme, si sfasano fino a sembrare disordine, e dopo un giro tornano identiche. File unico
stanze\ritorno.js(il patto della casa: una stanza = un file, manifesto in testa), nessuna riga toccata nel server, nella pagina o nell'elenco. Tre decisioni che stanno insieme nel manifesto e nel codice: le corde partono tutte in fase (con fasi seminate a caso il ritorno esisterebbe nei numeri, ma nessun occhio lo riconoscerebbe); la scia si misura in frazione di oscillazione, non in secondi (in secondi le corde veloci la saturano in una barra piena e l'onda sparisce); e il tetto di 2 oscillazioni al secondo allunga il giro invece di far correre qualcuno — il moto resta lontanissimo dai 3 Hz del rischio fotosensibile. Tre disposizioni della stessa legge: onda, anello, spirale. ⚠️ La promessa è provata a macchina, non a occhio:prova_ritorno.mjs(14 prove, nuovo) confronta gli hash del PNG —t=0et=Tstesso hash,t=2Tpure, mezzo giro diverso, e col tetto attivo il ritorno cade a 129 s e non ai 12 del cursore. Tutto il resto verde: patto delle stanze 176/176, server 41/41, schermo 23/23 da PC, 23/23 da telefono e 23/23 sotto il prefisso pubblico `/a/arte`. Due prove contavano le stanze a mano (4): ora le contano dal disco e dall'API. Nessuna nuova esposizione: viaggia sulle porte già aperte dell'app (8898 → tailnet 8467 → pubblico/a/arte). Tessera dell'Hub aggiornata (backupapps.json.bak.20260828-arte-ritorno). Commitb83f5c7. (Romeo) - 2026-08-28 — Nata «Arte generativa» (richiesta di Ettore delle 14:26, approvata nello stesso messaggio): app stdlib in
MD_DB_v1\01_SISTEMA_PERSONALE_homelab\Arte_Generativa\, locale 8898 → tailnet 8467 → pubblico `/a/arte` sulla 10000. Non è una galleria di immagini: una stanza è un movimento generativo (manifesto + generatore), un'opera è un seme più dei parametri, e c'è una pagina che spiega chi disegna e come. Quattro stanze: Interferenza (moiré), Soglia (café wall), Tassello (Truchet), Fronte d'onda (interferenza circolare). Metodo dalla skillalgorithmic-art(prima il manifesto, poi il codice); disegno in canvas scritto in casa, niente p5 e nessun CDN — un'app che vive sulla tailnet non può dipendere da internet per aprirsi. ⚠️ Tutto relativo, nessun indirizzo assoluto: stile e programma inline, prefisso calcolato dalocation.pathname, navigazione a#hash— è la riga che separa questa app dalle otto che sotto/a/<id>si aprono nude. Dal pubblico si guarda e si genera, non si salva (il tasto nasce spento, e il server risponde 403 col motivo). Prove: 41 sul server + 140 sul patto delle stanze + 23 a schermo con browser vero, ripetute sotto il prefisso `/a/arte` con un proxy che si comporta come il funnel. La riproducibilità è provata sull'hash del PNG: stesso seme = stessa immagine, seme diverso = immagine diversa. ⚠️ L'indirizzo pubblico vero non è stato aperto da qui: con NordVPN acceso sul mini-PC MagicDNS risolve il nome sull'IP tailnet e la strada è chiusa per tutte le app. Va aperto da fuori. (Archimede) - 2026-08-28 — Nata «Scambio file» (richiesta di Ettore del 28/08 ore 11:32, approvata alle 11:49): mini-app stdlib in
MD_DB_v1\01_SISTEMA_PERSONALE_homelab\Scambio_File\, locale 8897 → tailnet 8466. Due stanze: prendere un file dal PC (sfoglia + scarica a blocchi) e mandarne uno dal telefono (multipart scritto su disco a blocchi, temporaneo + rinomina a fine corsa). Bind su 127.0.0.1 e il codice si RIFIUTA di partire su altro (_host_ok): è la riga con0.0.0.0che aveva reso il Segnapunti raggiungibile da tutta la casa. ⚠️ Nessun funnel e nessun `url_pubblico`, per scelta: la tessera dell'Hub non ce l'ha (backupapps.json.bak.20260828-scambio-file,sensibile: true, fascia 2). Il modello dei percorsi sicuri è copiato dalla vista File diriferimenti_mappe.pye ristretto a una radice sola. Prove: 73 sulla sicurezza dei percorsi + 51 dal vivo sull'HTTP (compresi 40 MB nei due versi con la memoria del processo sotto il MB, e un caricamento interrotto a metà che non lascia file monchi) + 16 a schermo con browser vero a 390 px. AutostartScambio_File.vbsprovato lanciandolo davvero: 200 in locale, titoloScambio file, listener su 127.0.0.1. ⚠️ La prova dal nome tailnet NON è stata fatta: con NordVPN acceso sul mini-PC nessuna porta tailnet risponde da qui — nemmeno la 8462 e la 8458, esposte da settimane. Va aperta dal telefono. (Archimede) - 2026-08-25 — Autostart per "Efesto al lavoro" (Archimede, su richiesta di Ettore):
Efesto_Monitor.vbsnella cartella Startup lanciacmd /c python.exe app.py >> server.log 2>&1a finestra nascosta. python.exe, non pythonw: l'app stampa su stdout/stderr e conpythonwquegli handle sonoNone(il server crasherebbe a ogni richiesta); il redirect dicmdglieli ridà. Provato lanciando il.vbsdavvero: 200 in locale e dal nome tailnet (8462), titoloEfesto al lavoro, listener su 127.0.0.1. Chiuso il ⚠️ della riga in tabella. - 2026-08-25 — Study System ed Efesto al lavoro esposti sulla tailnet, su richiesta di Ettore.
tailscale serve --bg --https=8461 http://127.0.0.1:8891e--https=8462 http://127.0.0.1:8896(8461 e 8462 = prime due porte libere dopo la 8460). Verificato dal nome tailnet: 200 entrambe, e il titolo servito è quello giusto (Study System,Efesto al lavoro) — non un 200 di cortesia del proxy. Tessere dell'Hub aggiornate col link tailnet (apps.json, backup datato) e verificate dall'API dell'Hub dal vivo. Chiusa così la richiesta q084 (esporre Study System?). ⚠️ Efesto al lavoro non ha ancora l'autostart: dopo un riavvio del mini PC l'indirizzo 8462 risponderebbe a vuoto. (Romeo) - 2026-08-19 — Gestionale Business esposto sulla tailnet.
tailscale serve --bg --https=8460 http://127.0.0.1:8831(8460 = prima porta libera dopo la Plancia VF). Verificato: 200 sia in locale sia dal nome tailnet. App in beta, cartellaAgente Residente openclaw/business-os. ⚠️ Manca il launcher.vbsin autostart: dopo un riavvio del mini-PC non riparte da sola. (Romeo) - 2026-08-18 — Plancia Video Factory esposta sulla tailnet e messa in autostart.
tailscale serve --bg --https=8459 http://127.0.0.1:3020(8459 = prima porta tailnet libera dopo la 8458 di Life OS). Aggiunto il launcher di avvio automaticoVF_Plancia.vbsin Startup →vf-plancia\run-plancia.ps1(build se manca, poinext start -p 3020 -H 127.0.0.1), sullo stampo di CATPIT: senza questo, dopo un riavvio del mini-PC la 8459 avrebbe risposto a vuoto (stesso inciampo di Organizza Viaggi, vedi 03-08). Il server ora ascolta solo su 127.0.0.1 (prima era su tutte le interfacce): raggiungibile via Tailscale, non dalla LAN. Verificato riavviando davvero l'app dal launcher: locale 3020 → 200, tailnet 8459 → 200. Tessera dell'Hub (apps.json,url_tailnet) aggiornata da Archimede. (Romeo) - 2026-08-03 — Referto completo dell'Hub (task a72). Sondate una per una tutte le voci, tenendo separati i due piani: (a) servizio in locale (
127.0.0.1:porta) e (b) URL del bottone dell'Hub. Esito su 43 indirizzi sondati (16 locali dell'Hub + 15 tailnet dell'Hub + Hub 8447 + 10 Docker + Segnapunti via nome tailnet): 41/43 verdi in partenza, 43/43 dopo il fix, tutti 200 col titolo giusto; nessun bottone punta allo schema sbagliato (http/https e nome corto/completo sono corretti ovunque) — quindi il sospetto "link rotti" è infondato. Unico servizio davvero GIÙ: Organizza Viaggi (8810 non in ascolto → ilserve8444 rispondeva 502), causa: è l'unica app senza launcher `.vbs` in autostart, quindi non è ripartita dopo l'ultimo riavvio. Riavviata (pythonw windowless), ora 8810 e 8444 rispondono 200. Riconciliati 3 scostamenti doc↔realtà: (1) Pianificatore Pasti risulta di nuovo esposto (serve 8446 → 8820 attivo e 200), il doc lo dava "non esposto" dal 20-07; (2) aggiunta Segnapunti da tavolo (munchkin, 8890, Docker), che mancava del tutto; (3) annotata su Organizza Viaggi la mancanza di autostart. Verificati anche i 10 container Docker (docker ps: tutti Up) e i 16tailscale serveattivi. (Romeo) - 2026-07-30 — Claude Code Web: 3 correzioni chieste da Ettore. (1) Output che si perdeva sul telefono: l'altezza del terminale era legata alla pagina e non alla parte visibile, quindi con la tastiera aperta le ultime righe (risposta appena scritta + prompt) finivano dietro la tastiera senza modo di raggiungerle → ora l'altezza la detta
visualViewport(--vh) +interactive-widget=resizes-content; aggiunto il bottone ⤓ fondo e la vista resta incollata al fondo (un tocco che scrollava in su "congelava" l'output); il buffer di replay veniva tagliato a byte secchi spezzando le sequenze ANSI → ora taglia a fine riga, e sale a 512 KB. (2) Password richiesta a ogni riapertura di Chrome mobile: il percorso normale era HTTP Basic, che Chrome scarta alla chiusura dell'app (e un 401 su favicon o upgrade WebSocket ri-apriva il popup) → pagina di login con cookie a 180 giorni rinnovato a ogni apertura,Securequando la richiesta arriva in HTTPS, favicon che risponde 204 senza auth, nessunWWW-Authenticate, tasto Esci, throttle 5 tentativi → 60 s. Basic resta solo per curl/script. (3) Permessi: la allowlist stava in~\.claude\settings.local.json, che per Claude Code è il file project-local → valeva solo con cwd =C:\Users\Ettore, e appena si entrava in una cartella di progetto i permessi non contavano più. Spostata in~\.claude\settings.json(scope utente, vale in ogni cartella) + listadenysulle azioni distruttive. Verificato: 7/7 probe sul flusso di login sulla 7681 live, 8456 tailnet risponde, eclaude -pcon un comando Bash da cartella non-home passa senza chiedere. Backup:server.js.bak-20260730-pre-fix3,index.html.bak-20260730-pre-fix3,settings*.json.bak-20260730. Nota: il riavvio del server ha chiuso 4 sessioni pty ferme da ieri (recuperabili con Resume). (4, aggiunta a caldo) Barra dei tasti speciali: la tastiera del telefono non ha Esc né frecce e il touch non genera eventi mouse per la TUI, quindi le scelte a più opzioni di Claude erano inutilizzabili da mobile → barra in fondo conEsc ↑ ↓ ← → ⏎ Tab ⇧Tab ^C ⌫. Le frecce si adattano a DECCKM leggendoterm.modes.applicationCursorKeysMode, e i tasti usanopointerdown+preventDefaultper non chiudere la tastiera a ogni tocco. Solo lato pagina:index.htmlè riletto da disco a ogni richiesta, quindi nessun riavvio e sessioni intatte. Backupindex.html.bak-20260730-pre-keybar. (Romeo) - 2026-08-02 — Riferimenti + Mappe (8455→8860): terza vista "File" + nuovo riferimento a registro (
richiesta_riformulata_02_08_2026.md, ora 12 doc). La vista File è un browser di file in sola lettura pensato per il telefono: naviga le 3 radici in whitelist (workspace,Agente Residente openclaw,MD_DB_v1), ordina per data/nome, cerca per nome (indice in memoria, ~0,03 s) e per contenuto (documenti.md/.txt, ~3,4 s), rende i.mdcol renderer interno + indice dei paragrafi cliccabile, mostra.txt/.json/...monospazio. Sicurezza: whitelist di radici verificata dopoos.path.realpath(traversal.., symlink e junction respinti), blacklist su.env/keys.env/*.key/*.pem/.git/node_modules/secrets/, deny esplicito su.openclaw\secrets, solo path assoluti, limite 2 MB per file, nessuna route di scrittura (POST/PUT/DELETE/PATCH → 501). Verificato con 41 test di sicurezza + 45 test HTTP E2E, tutti verdi; layout controllato a 390 px (scrollWidth=390, nessuno scroll orizzontale). Backupriferimenti_mappe.py.bak-20260802. (Romeo) - 2026-07-29 — Claude Code Web: aggiunto il selettore Livello di autonomia nel pannello Sessioni (diventa
--permission-modediclaude: plan/manual/acceptEdits/auto/dontAsk/bypassPermissions, vuoto = default CLI). Si sceglie alla creazione della sessione, resta memorizzato nel browser, valore validato lato server. Verificato E2E: il flag arriva al processoclaudespawnato dal pty. (Romeo) - 2026-07-26 — Richieste (mini CATPIT mobile) costruita da Archimede su richiesta di Ettore (la vista CATPIT da cellulare non è usabile): app standalone Python stdlib monofile, mobile-first, mostra stanza Richieste + coda dei task; legge live da
CATPIT_vault, scrive solo viaPOST /api/richieste(così lo sblocco dei task "Bloccato su Ettore" resta all'API). Esposta su Tailscale (8457→8880), autostartRichieste_Mobile.vbs(14° launcher), tile nell'Hub. Verificato: test E2E di risposta con round-trip dello stato, percorso d'errore con API spenta, probe HTTPS 200. (Archimede, delega di Romeo) - 2026-07-24 (2) — Health probe flotta (Romeo, sessione autonoma p03). Verifica live
netstat+tailscale serve status+ probe title. Esito: tutte le 844x servite risolvono a porte locali UP. Riconciliati 3 scostamenti doc↔realtà: (1) Pianificatore Pasti UP in locale (8820, title ok) ma serve 8446 assente dal 20-07 → marcato "non esposto" (ri-esposizione = 1 comando, resta a Ettore perché cambia la postura di esposizione); (2) Claude Code Web (8456→7681, node-pty, app SENSIBILE creata da Archimede il 23-07) mancava dal doc → aggiunta; (3) autostart aggiornato a 13 launcher (mancavano Dashboard Creso, Claude Code Web, Video Downloader) + data header 21→24. (Romeo) - 2026-07-24 — Life OS: risolto conflitto porte — la v1 (Romeo, 2026-07-20) usava la 8860 come default, ma dal 21/07 la 8860 è di Riferimenti+Mappe (live+autostart). Default spostato a 8870 (libera), smoke test 38/38 ok; censita qui in 🚧 Sviluppo. Nota: anche la tailnet 8454 proposta per Life OS è occupata (Dashboard Creso) → serve porta tailnet nuova al momento dell'esposizione. (Archimede, loop T4)
- 2026-07-21 — Riferimenti + Mappe costruita da Archimede: app standalone (Python stdlib, fuori da CATPIT) con le viste "Riferimenti" (registro 11 doc) e "Mappe concettuali" (mermaid vendorizzato → SVG). Sola lettura, live dal disco (percorsi da env come CATPIT, sorgenti non toccati). Esposta su Tailscale (8455→8860, deviata da 8452/8850 = Social Hub, già occupata) e messa in autostart (
Riferimenti_Mappe.vbs). Tile aggiunta all'Hub Strumenti. Verificato serve+probe live. (Romeo, esposizione/autostart da Archimede su delega) - 2026-07-20 (2) — Dashboard Investimenti (Creso) esposta su Tailscale (8454→8010), tailnet-only → raggiungibile da fuori casa. Aggiunto autostart al login (
Dashboard_Creso.vbs, pythonw windowless) e agganciato il tasto nell'Hub Strumenti (apps.json:url_tailnetvalorizzato). Dash in sola lettura. (Romeo) - 2026-07-20 — CATPIT / Mission Control esposto su Tailscale (8453→3010), tailnet-only → raggiungibile da fuori casa. Spostato da "solo-localhost". Nota: la 8446 (Pianificatore Pasti nel doc) non risultava attiva nel
servelive → da riconciliare. (Romeo) - 2026-07-16 (3) — Social Hub costruito da Archimede (centro personale YouTube via feed RSS: canali seguiti + ultimi video + "in primo piano" aggregato, gestione visto/nascondi/pin, niente player), esposto su Tailscale (8452→8850) e messo in autostart. (Romeo)
- 2026-07-16 (2) — aggiunta sezione "Come scrivere l'URL": porte serve (443/844x) = https + nome completo (
http://mini-it12:8443fallisce di proposito), porte Docker = http + nome corto. Verificato live: tutte le app UP, Ricerca Torrent (8451→8840) attiva. (Romeo) - 2026-07-16 — Ricerca Torrent (fonti legali) costruita da Archimede (core legale: Internet Archive, Academic Torrents via dump, LinuxTracker, Gutenberg), esposta su Tailscale (8451→8840) e messa in autostart. Rimossa dalla sezione Sviluppo la vecchia "Torrent app" (sostituita). Fascia "meno legali/indicizzatori" non costruita (decisione di Ettore in sospeso). (Romeo)
- 2026-07-15 (2) — le 3 mini-app (Manga, Site, Catalog) esposte su Tailscale (8448/8449/8450) e messe in autostart al login. (Romeo)
- 2026-07-15 — inventario completo: aggiunte 10 app Docker (Homarr, Portainer, Jellyfin, Immich, Navidrome, Audiobookshelf, Calibre-Web, Kavita, NocoDB, Imprese Vicentine), le 3 mini-app locali funzionanti (Manga 8777, Site 8778, Catalog 8780), i servizi solo-localhost (n8n, Neo4j, Postgres, gateway) e la sezione Sviluppo. Nota NordVPN. (Romeo)
- 2026-07-14 (2) — aggiunto Hub Strumenti (8447→8830), punto d'ingresso. (Romeo)
- 2026-07-14 — creato il documento (Control, Video Downloader, Organizza Viaggi, Cassaforte, Pianificatore Pasti; locali CATPIT e Metabase). (Romeo)
📜 Changelog
- 2026-08-27 — Primo indirizzo pubblico della casa. Ettore ha abilitato Funnel sull'account Tailscale (bastava una spunta da browser, anche da telefono) e Life OS e' online su `https://mini-it12.tailc565d5.ts.net:10000/`, raggiungibile da qualsiasi PC senza installare niente — verificato dall'esterno,
HTTP 200. Due limiti da tenere a mente: le porte pubbliche concesse sono tre e due sono gia' prese, ma sulla stessa porta si affiancano piu' app sotto percorsi diversi (--set-path) — cosi' e' entrato anche l'Hub Strumenti su/hub, che pero' mostra tessere che puntano ancora al tailnet. E le app pubblicate non hanno serratura: chi ha il link entra. - 2026-08-16 — Life OS entra nell'Hub (8458→8870). Tre cose insieme: esposizione tailnet sulla 8458 (la 8457 proposta a luglio nel frattempo era stata presa dallo specchio Richieste), tessera nell'Hub Strumenti (
apps.json, 36 tessere, backup datato) e launcher di autostartLife_OS.vbs— era l'unica app di casa senza, quindi spariva a ogni riavvio. Trovata e fermata una seconda istanza duplicata (PID 31232) che non teneva la porta ma poteva scrivere sullo stesso store JSON. Verificato: 8870 locale 200, 8458 tailnet 200, tessera servita dall'API dell'Hub. ⚠️ Restano aperti il PIN d'ingresso (app sensibile) e il consenso Google del calendario. (Romeo) - 2026-08-19 — Cron notturno di chiusura sul refine Life OS: verificate dal vivo (test + curl + screenshot 390/desktop, hash MD5 di
app\datainvariati) le stanze consegnate il 18/08 (Settimana pasti, Stampabili, Film, Musica, riordino menu) — tutte reali, nessuna dichiarazione vuota. Aggiunta la sesta stanza Viaggi (sola lettura da Organizza Viaggi/8810, letta dal disco così funziona anche a 8810 spenta): riga qui sopra invariata, tessera Hub spostata in "Da assorbire" → Life OS. Ritirate le tessere Film a Caso (8900) e Musica a Caso (8901): pienamente superate dalle stanze omonime di Life OS (stessi dataset, in più cronologia/liste), container Docker fermati (docker stop, restart-policyunless-stopped→ restano spenti anche dopo un riavvio; immagine/cartella sorgente non toccate, si riaccendono condocker startse servono ancora). Chiuso anche il refine "tre fasce" dell'Hub Strumenti del 18/08, rimasto non committato:Docker (homelab)diviso in Docker (nostro) (Imprese Vicentine) e Docker (servizi terzi) (Jellyfin, Immich, Navidrome, Portainer, Homarr, Audiobookshelf, Calibre-Web, Kavita, NocoDB, Metabase, n8n, Neo4j) — Segnapunti resta in Strumenti, com'era deciso. Ritirato anche il PIN d'ingresso (pronto-ma-spento dal 16/08, mai acceso): un primo giro di questo stesso turno l'aveva letto come "già a posto, solo doc da sistemare", ma il controllo delle 06:18 (CONTROLLO_2026-08-19_notturno.md) e una rilettura più attenta del mandato hanno concordato che "niente PIN" significava toglierlo, non lasciarlo spento — corretto a metà turno: impalcatura rimossa dalife_os.py(routes, sessione, pagina di sblocco, card in Impostazioni), riga qui sopra aggiornata di conseguenza. L'app resta protetta solo dall'essere tailnet-only. Non toccato: la fonte-verità dei viaggi/pasti resta sulle app esterne (8810/8820), Life OS le legge soltanto. (Archimede, loop T4 notturno) - 2026-08-20 notte (anello 7 del refine Life OS) — Organizza Viaggi (8810) dismessa e trapiantata dentro Life OS. I viaggi erano in due posti (l'app che scriveva, la stanza che leggeva): da stanotte il posto è uno solo. Migrato 1 viaggio ("Sbiero"/Carcassone, 9 tappe di itinerario, 50 luoghi, budget 310 €) dai file
viaggio_*.jsonalla collezioneviaggidel Life OS — conti prima/dopo: 1 → 1, copia di sicurezza inOrganizza_Viaggi\data\_backup_2026-08-20_2149\, file originali non toccati. La stanza ora crea/modifica/cancella, porta dentro tutto (itinerario, luoghi, trasporti, alloggi, documenti, budget, valigia, dossier, note, Esplora, i tre tipi di viaggio, la scheda da stampare) e aggancia le date al Calendario. Esplora legge la chiave dalla Cassaforte Chiavi (keys.env:ANTHROPIC_API_KEYoTRAVEL_APP_ANTH_KEY), come faceva il.batdella vecchia app — il Life OS parte da un.vbssenza ambiente, quindi la legge dal file. Tessera Organizza Viaggi tolta dall'Hub (backupapps.json.bak), tessera Life OS aggiornata. Restano da decidere: ilservetailnet :8444, ancora acceso su un'app dismessa, e se cancellare i file originali (non fatto apposta). 611 test verdi,stanze_errvuoto. (Archimede)