# Rilascio server ThothII embedded in Omics — 2026-09-14 ## Esito Il rilascio tecnico è stato eseguito il 2026-09-14 e i controlli automatici e server-side descritti sotto sono superati. L'accettazione funzionale non è ancora chiusa: lingua, tema, fullscreen, logout, ruoli e continuità SSE devono essere provati da browser con account Omics autorizzati. Finestra autorizzata dall'operatore e conclusa alle 16:17 CEST. Le ammissioni ThothII sono state riaperte dopo il collaudo (`active: false`, `admissions: 0`). ## Revisioni e immagini distribuite - ThothII, checkout operativo `/srv/thothii-v2/source/ThothII`: `49333a2d35664b7237c3ddc2a9f10a605dcc84ce`, branch `main`, pulito e allineato a `origin/main`. - Omics Portal, checkout `/home/chirone/omics_portal`: `fca10901a73666ca257d8f4cc4b77066295c400a`, branch `master`, pulito e due commit avanti a `origin/master`. Include la consegna funzionale `95154e179144e2453b37ef2a63a65d6f377e4cf8`. - CLI nativo `/usr/local/bin/tht`: commit `49333a2d35664b7237c3ddc2a9f10a605dcc84ce`, build `2026-09-14T15:08:47+02:00`, `linux/amd64`. - Core: `thothii-v2-core:49333a2d`, image ID `sha256:d62bf17dd1345e6a459edabe4b559333b396ef30c523dedf1b842506c147efbd`. - Frontend: `thothii-v2-frontend:49333a2d`, image ID `sha256:dd57745143fc282562ec6d4c2cd8fc493eb2078494eeb17099d49bea8eae218b`. - Omics web: `omics_portal-web`, image ID `sha256:11e99905c41b38cd68d0e726f25a4174b8eb65db27fb1d887238a7bd255074da`. - Nginx: image invariata `sha256:b3c656d55d7ad751196f21b7fd2e8d4da9cb430e32f646adcf92441b72f82b14`. ## Configurazioni modificate - `deploy/psd-server-v2/thothii-installation.yaml`: Installation Model Catalog schema v2; shell `embedded`, locale predefinito `en`, adapter `omics-portal`; provider DeepSeek unificato e default interaction `zai/glm-5.3`. Percorsi, profilo server, workspace, DWH e provider reali del server sono stati preservati. - `/srv/thothii-v2/operator/compose.portal-upstream.yaml`: `AUTH_MODE=upstream`, alias `thothii-core` e `thothii-frontend` sulla rete Omics; eliminato il mount della copia manuale di `config.js`. Nessun `auth.yaml` e nessuna runtime auth projection. - `/srv/thothii-v2/operator/operator.env`: tag applicativo aggiornato a `49333a2d`; nessun valore segreto copiato dal Mac o riportato in questo report. - `deploy/psd-server-v2/generated/`: proiezioni rigenerate dal descriptor. Il frontend riceve in sola lettura `generated/frontend/config.js`, che espone soltanto `backendBaseUrl: /api` e il contratto shell embedded. - Omics: integrati template embedded, lingua Django, topbar/fullscreen, adapter JavaScript, traduzioni e test della consegna GitHub. - `nginx/nginx.conf`: non modificato. La configurazione già presente conteneva l'`auth_request` Django, derivazione server-side degli header `X-Thoth-*`, rimozione di cookie/Authorization/header client, origin esatta e SSE senza buffering. Configurazione risolta verificata: - core e frontend usano le immagini `49333a2d`; - `AUTH_MODE=upstream`; - core senza porta host pubblicata; - frontend pubblicato soltanto su `127.0.0.1:18020`; - alias Omics risolti rispettivamente a `thothii-core` e `thothii-frontend`; - `config.js` generated montato read-only; - `THOTH_PUBLIC_EXPOSURE=false` e storage sessioni locale, preservando la topologia server già approvata. ## Backup e rollback Backup protetto: `/srv/thothii-v2/backups/20260914-pre-embedded-release`, directory `0700`, tutti i file `0600` e owner `root:root`. Contiene: - immagini applicative precedenti core/frontend/Omics; - binario CLI precedente; - descriptor, override, config manuale e proiezioni precedenti; - bind `data`, `workspace-registry`, `pi-state`, `operator` e `secrets`; - snapshot raw dei volumi catalogo, Qdrant ed embedding; - dump logico PostgreSQL del catalogo ThothII; - dump logico PostgreSQL del database usato da Omics; - snapshot dei volumi statici e media Omics; - `SHA256SUMS`. Tutti i checksum sono risultati validi. Gli archivi tar sono stati elencati integralmente senza errori e i due dump sono stati validati con `pg_restore --list`. Le vecchie immagini restano disponibili; Omics precedente è inoltre etichettata `omics_portal-web:pre-fca1090-aff75817`. Non sono state eseguite migrazioni ThothII: tra `82e2c91f` e `49333a2d` non esistono nuove migrazioni catalogo, Memory o sessioni. L'entrypoint Omics ha eseguito `migrate` con risultato `No migrations to apply`. Il rollback normale è quindi applicativo e non richiede ripristino dati; dump e snapshot raw sono conservati per un recupero separato solo in presenza di corruzione accertata. ## Verifiche superate ### Prima del rilascio - frontend ThothII: 768/768 test; - backend auth/config/session/model: 205/205 test mirati; - estensione Pi, lingua e ripresa: 7/7; - harness lingua sessione e repository PostgreSQL: 24/24; - CLI Go: tutte le package superate; - Omics embedded shell isolata: 15/15; - build delle tre immagini candidate completata; - generazione delle proiezioni validata prima in staging isolato; - build documentale strict completata dopo la scrittura di questo report. ### Sul server distribuito - `tht status`: exit 0; - `tht doctor --json`: `ok: true`, 13/13 controlli superati, inclusi descriptor, proiezioni, permessi, Docker/Compose, autenticazione, health, HTTP, registry, workflow e Pi; - core, frontend, catalog-db, Qdrant, embedding e Omics web in stato healthy; - `nginx -t` superato prima e dopo la ricreazione; - catalogo Superset Omics valido: 32 dashboard; - `migrate --check` post-rilascio: exit 0; - nessun traceback, fatal, panic, HTTP 500 o errore nginx nei log recenti; - pagina senza sessione: `302` verso `/accounts/login/`; - `/datamart-builder/api/me` senza sessione: `403`; - richiesta pubblica con header principal/admin falsificati: ancora `403`; - `config.js`: `200`, `Cache-Control: no-store`, contenuto embedded corretto; - manifest Vite risolto da Django: 368 entry; entrypoint corrente `index-ktEFlKPi.js` e stylesheet `index-BtNkA4QL.css`; - asset JavaScript attraverso `/datamart-builder/assets/`: `200` e cache `public, immutable`; - il core non ascolta sulla porta host 8787; dalla rete interna senza principal risponde `401`; - nginx risolve i nuovi indirizzi degli alias, senza dipendere dai precedenti IP Docker. Il probe HTTPS verso l'hostname pubblico, eseguito dal server stesso, è andato in timeout prima della connessione (`HTTP 000`): è un limite di raggiungibilità hairpin/rete e non viene contato come verifica superata. I probe equivalenti attraverso nginx locale con Host e forwarded protocol reali sono invece passati. È rimasto intenzionalmente intatto il container orphan storico `omics_portal-web-run-a0bc36025e52`, creato circa tre mesi prima del rilascio ed exited da due settimane; non è stato rimosso perché estraneo alla consegna. ## Prove manuali ancora necessarie Usare account di prova autorizzati e dati non operativi: 1. utente Omics autorizzato apre Datamart Builder senza secondo login e vede un solo header, quello Omics; 2. `/datamart-builder/api/me` restituisce issuer `portal`, subject Django stabile, ruoli corretti e `session`/`csrfToken` null; 3. confronto utente normale/amministratore e rifiuto utente senza capability; 4. IT/EN prima dell'apertura e cambio tramite form Omics, senza tradurre SQL o contenuti authored; 5. light/dark con popup, menu e griglia aperti; 6. ingresso/uscita fullscreen, compresa uscita con Esc e rifiuto browser; 7. logout Omics, seconda scheda e nuova verifica `/me`; 8. nuova sessione, flusso SSE, riconnessione dopo scadenza, reload senza avvio automatico e ripresa con `interaction_language` invariata; 9. richiesta cross-origin autenticata su operazione fittizia e comportamento distinto di un singolo `403` operativo; 10. accesso HTTPS reale da una postazione client, perché il server non raggiunge l'hostname pubblico in hairpin. L'installazione non va dichiarata funzionalmente accettata finché questa matrice manuale non è stata eseguita e registrata.