21 KiB
Consegna a Codex sul server: ThothII e Omics Portal
Revisione: 14 settembre 2026. Destinazione: Datamart Builder nel portale
Omics esistente, non un nuovo sito standalone. Questo documento è la procedura
di riferimento per questa consegna e sostituisce le precedenti istruzioni di
trasporto/pubblicazione del codice Omics. La distribuzione parte dai sorgenti
ThothII aggiornati su main e dal branch Omics disponibile su GitHub; nessuna
replica del repository Omics ad altri servizi fa parte dell'intervento.
Risultato da ottenere e limiti
- L'utente entra in Omics come oggi, sceglie Datamart Builder e trova ThothII già autenticato, senza un secondo login.
- Omics mantiene header, navigazione sinistra, lingua, tema, fullscreen, nome utente e logout. ThothII occupa soltanto la zona centrale: embedded/upstream.
- I dati e le identità esistenti, i workspace, i modelli approvati e le credenziali del server restano quelli del server. Il Mac rimane full/local, default EN.
- L'intervento comprende il codice e la configurazione di entrambi gli applicativi, la rigenerazione delle proiezioni, le immagini e il collaudo. Un pull da solo non conclude l'installazione.
Codex può fare l'inventario, preparare modifiche e test isolati. Prima del fermo, delle migrazioni, della modifica del proxy o della ricreazione di servizi operativi, presenta i comandi risolti, backup e rollback e ottieni conferma della finestra di rilascio. Ferma il passaggio interessato se manca una credenziale, una decisione sulla migrazione o un prerequisito; non aggirare i controlli. Non modificare Authentik o il DWH per correggere la UI. Il DWH resta read-only. Non cancellare volumi, dati o modifiche locali e non stampare segreti nei report.
1. Identificare l'installazione realmente in uso
Leggi AGENTS.md e PROJECT_STATE.md nel checkout ThothII aggiornato. Individua
il checkout operativo Omics, normalmente /home/chirone/omics_portal; conferma
il percorso prima di usarlo. Registra per entrambi i progetti:
- Percorso, branch, SHA, stato della working tree e revisioni delle immagini effettivamente in esecuzione. Il checkout appena aggiornato può non coincidere con quello da cui sono stati creati i container.
- Nomi progetto Compose, file Compose/override ordinati, env file, servizi, mount, porte e reti. Leggi le label Compose dei container per ricostruire l'avvio; filtra gli inspect, evitando dump di variabili segrete.
- Percorso assoluto del
thothii-installation.yaml, suo schema/profile,projectDirectory,envFile,overrides,authentication,shelle modello dei dati persistenti. Usa solo percorsi Linux reali e file che esistono. - Configurazione effettiva del core: modalità auth,
THOTH_PUBLIC_EXPOSURE,THT_SESSION_STORAGE, binding workspace/database, percorsi degli archivi Evidence e Memory e delle credenziali Pi/provider. - Origine HTTPS pubblica del portale, punto di terminazione TLS, percorso autenticato delle API, alias di rete e possibilità di accesso diretto al core.
Completato quando: esiste un inventario senza segreti e ogni comando di
avvio è ricostruibile con percorsi/progetti effettivi. Non usare gli script
temporanei /private/tmp/… o i percorsi /Users/mp/… del Mac. Gli override vanno
conservati in un percorso operativo stabile sul server.
2. Verificare le revisioni dei due applicativi
ThothII
Il checkout aggiornato deve essere su main e includere almeno
bdcd8fcd28f3011471d77224db9c3f5baf227995 e questo documento. Registra anche lo
SHA effettivo di main, che include il commit di consegna e il merge successivi:
git status --short --branch
git rev-parse HEAD
git merge-base --is-ancestor bdcd8fcd28f3011471d77224db9c3f5baf227995 HEAD
Se il controllo fallisce, completa l'acquisizione della revisione approvata prima di toccare l'installazione. Non ricostruire a mano le singole modifiche UI: questa revisione contiene shell, autenticazione, i18n, workflow bilingue, amministrazione, typography e navigazione aggiornate.
Omics Portal
Il pull di ThothII non aggiorna Omics. Consegna Omics verificata su GitHub:
- Repository:
https://github.com/Dallavilla-Tiziano/omics_portal.git. - Branch:
codex/thothii-embedded-shell. - SHA della consegna:
fca10901a73666ca257d8f4cc4b77066295c400a. - Commit funzionale della shell:
95154e179144e2453b37ef2a63a65d6f377e4cf8.
Nel checkout Omics confermato, acquisisci senza fare un pull/merge implicito:
cd /home/chirone/omics_portal
git status --short --branch
git rev-parse HEAD
git fetch --no-tags https://github.com/Dallavilla-Tiziano/omics_portal.git \
refs/heads/codex/thothii-embedded-shell:refs/remotes/thothii-delivery/omics-shell
git rev-parse refs/remotes/thothii-delivery/omics-shell
git merge-base --is-ancestor 95154e179144e2453b37ef2a63a65d6f377e4cf8 \
refs/remotes/thothii-delivery/omics-shell
git diff --stat HEAD...refs/remotes/thothii-delivery/omics-shell
Confronta lo SHA acquisito con quello sopra. In caso di consegna diversa chiedi quale revisione usare. Confronta inoltre le modifiche con i progressi del server: non sostituire l'intero portale con un checkout più vecchio. Se la consegna è già integrata verifica i file, senza ripetere il merge; altrimenti prepara la sua integrazione in un branch/worktree di revisione dal codice operativo. Risolvi eventuali conflitti preservando i cambiamenti del server, testa, quindi applica la revisione concordata nel rilascio. Non fare reset o force push.
I dettagli tecnici locali in docs/thothii-integration.md di Omics sono utili,
ma il percorso operativo di questa consegna è quello di questo documento.
La pubblicazione del codice Omics su altri remote non è un prerequisito.
Completato quando: una revisione integrata Omics conserva le funzionalità del server e soddisfa tutti i controlli dei file nella sezione 4.
3. Adeguare ThothII senza importare la configurazione del Mac
CLI, descrittore e proiezioni
Aggiorna il CLI nativo host dal checkout ThothII approvato, conservando il vecchio binario per rollback. Non confonderlo con il CLI Python interno al core:
./scripts/install-tht.sh
command -v tht
tht --help
Il comando installa normalmente in /usr/local/bin e verifica la risoluzione
su PATH. Se il server usa un'altra directory, mantieni quella usando
THT_INSTALL_DIRECTORY con un percorso assoluto. Conserva proprietario e
permessi protetti del descrittore (0600 o 0400). Nel descrittore esistente
schema v2 modifica la sezione seguente, preservando gli altri valori:
shell:
mode: embedded
defaultLocale: en
adapter: omics-portal
en è il fallback UI, non forza l'inglese sul portale: in embedded prevale la
lingua renderizzata da Django. Mantieni il profile server approvato e i percorsi,
la project/installation identity, lo storage e gli override del server. Se il
descrittore manca o è legacy, prepara una migrazione separata dopo l'inventario;
non rilanciare il setup locale e non copiare il descrittore Mac.
Usa una variabile di lavoro dedicata, valorizzata con il percorso confermato:
THTII_INSTALLATION=/percorso/reale/thothii-installation.yaml
tht --installation "$THTII_INSTALLATION" installation generate
La generazione non avvia i servizi. Controlla generated/frontend/config.js e
il suo mount read-only nel Compose generato; prima dell'override Omics deve
contenere backendBaseUrl: "/api" e la shell embedded completa. Conserva anche
le proiezioni generate di modelli/settings/Pi. Non mantenere copie manuali dei
file generati: thothii-installation.yaml resta la sorgente authored.
Autenticazione già fornita dal portale
Nell'override Compose persistente dell'installazione deve esserci:
services:
core:
environment:
AUTH_MODE: upstream
Aggiungi il percorso dell'override all'elenco overrides del descrittore se non
è già caricato. Controlla il Compose risolto: scrivere AUTH_MODE nel solo file
env non garantisce che la variabile arrivi al container.
authentication.configDirectoryeTHT_AUTH_CONFIG_ROOTdevono indicare la directory protetta prevista, senza unauth.yamllocal/OIDC letto dal core. Non cancellare un file esistente: se trovato, fermati e prepara il cambio auth con backup e una directory dedicata.AUTH_MODEinsieme al file è rifiutato.- Per Omics non usare
authentication.runtimeProjectionnéTHT_AUTH_RUNTIME_PROJECTION_ROOT: appartengono all'accesso local/OIDC diretto. - Non creare utenti/password ThothII, nuovi client OIDC o callback per questo
embedding. Non esiste
tht auth configure --mode upstream. - Preserva la coppia stabile
(issuer, subject)degli utenti (portal, ID Django); cambiarla può rendere invisibili le sessioni dei proprietari esistenti.
Dati, storage e prerequisiti non grafici
La release corrente usa catalogo metadati interno PostgreSQL, workspace schema v4, Installation Model Catalog v2, Qdrant e Ollama per embedding; Pi gira nel core. Mantieni i provider e i binding reali del server, incluse credenziali e CA. I default del Mac non sono una richiesta di cambiare modello o database.
Il catalogo metadati e l'eventuale database delle sessioni sono due funzioni
distinte. Con THOTH_PUBLIC_EXPOSURE=true, il core rifiuta
THT_SESSION_STORAGE=local: verifica che il percorso PostgreSQL delle sessioni
sia già configurato e validato. Se manca, presenta il piano di provisioning e
migrazione; non disabilitare il controllo public-exposure per ottenere l'avvio.
L'overlay session-server è opt-in e non migra automaticamente i vecchi archivi.
Se la versione operativa precede questi contratti, risolvi prima la migrazione
dei dati con backup verificati. Le migrazioni del catalogo si eseguono tramite
il job esplicito catalog-migrate; quelle delle sessioni, quando necessarie e
approvate, tramite session-migrate. Nessuna riguarda il DWH o è sostituita da
una sincronizzazione di schema dall'interfaccia.
Completato quando: il descrittore genera correttamente; la configurazione risolta contiene shell embedded, upstream senza doppia auth, storage compatibile, mount e reti corretti; ogni differenza infrastrutturale ha un piano approvato.
4. Verificare e integrare i file Omics
| File nel repository Omics | Risultato obbligatorio |
|---|---|
templates/kokoro/datamart_builder.html |
Mount #root nello stesso documento Django, senza iframe; altezza contenuta sotto la topbar e layout centrale responsive. Carica config, override limitato e asset in quest'ordine. |
templates/base.html |
{% get_current_language as CURRENT_LANGUAGE %} e <html lang="{{ CURRENT_LANGUAGE }}">, preservando i block del template. |
templates/partials/topbar.html |
select.omics-language-select[data-lang] con lingua Django, form set_language POST/CSRF/next; pulsante fullscreen con label ingresso/uscita e stato accessibile. Mantieni nome/logout Omics. |
static/js/app.js |
Fullscreen reale del documento con requestFullscreen/exitFullscreen; ascolta gli eventi del browser, inclusa uscita con Esc, aggiorna icona/stato/label e gestisce rifiuti senza simulare successo. |
locale/it/LC_MESSAGES/django.po |
Traduzioni dei nuovi controlli fullscreen; compilazione del catalogo distribuito. |
kokoro/datamart_catalog_views.py e routing |
La pagina richiede datamart_builder.access; l'endpoint /datamart-builder/api-auth verifica la sessione Django e restituisce identità verificata o 403. Conserva questa parte già esistente. |
nginx/nginx.conf |
API protette verso il core, asset/config verso il frontend, origine e SSE coerenti. Conserva anche le altre route del portale. |
kokoro/templatetags/vite.py |
Manifest da http://thothii-frontend:8080/.vite/manifest.json, asset dal manifest, cache di 30 secondi. |
kokoro/test_thothii_shell.py, test_support/thothii/ |
Test isolati della pagina e dei controlli, da eseguire prima del rilascio. |
Il template deve fare questo prima di {% vite_assets %}:
<script src="/datamart-builder/config.js"></script>
<script>
window.__THOTHII_CONFIG__ = Object.assign({}, window.__THOTHII_CONFIG__ || {}, {
backendBaseUrl: '/datamart-builder/api'
});
</script>
L'override non deve sostituire l'intero oggetto perdendo shell. Nel browser il
risultato deve avere /datamart-builder/api e shell.mode === "embedded".
config.js deve avere Cache-Control: no-store; gli asset con hash possono
avere cache lunga. Non codificare a mano i nomi dei bundle Vite.
Il tema deve essere espresso come data-bs-theme="light" o "dark" su html.
OmicsPortalAdapter in ThothII osserva quel dato, legge il data-lang renderizzato
dal selettore e lo stato fullscreen. Non richiede nuovi eventi, handshake o
token JavaScript. Se il contesto manca va corretto il template, non aggirato
l'errore con un header full. I dettagli del portale restano nel solo adapter.
Proxy e identità: controllo obbligatorio
Il flusso è browser → Nginx Omics → controllo Django → core ThothII:
/datamart-builder/api/…usaauth_request /_thothii_auth.- La location interna interroga
/datamart-builder/api-authusando il cookie Omics. Django risponde 200 se autorizzato, 403 senza sessione/capability. - Nginx usa solo gli header della risposta Django e sovrascrive gli eventuali
valori client:
X-Thoth-Principal-Issuer: portal,X-Thoth-Principal-Subject: <user.pk>,X-Thoth-Principal-Display-NameeX-Thoth-Is-Admin: true|falsesecondois_authentik_admin(user). - Il proxy rimuove
Cookie,AuthorizationeX-Authenticated-Userprima del core, toglie il prefisso API e inoltra athothii-core:8787. Non usare qui gli headerX-Thoth-Trusted-*dell'esempio generico a due hop. - Config/asset e manifest arrivano da
thothii-frontend:8080. Omics web deve raggiungere il manifest; Nginx deve raggiungere entrambi gli alias privati.
Integra i servizi nella rete effettiva del portale, con alias non ambigui; non collegare due core candidati con lo stesso alias. Il core upstream deve essere irraggiungibile direttamente da browser/client non fidati, inclusi percorsi alternativi attraverso un frontend o proxy non protetto.
Conserva buffering/cache disattivati e timeout lunghi per SSE anche nel proxy
a monte. Verifica l'Origin delle scritture: il codice Omics contiene la mappa
esatta da https://aritmolab.policlinicosandonato.it a
http://aritmolab.policlinicosandonato.it per la terminazione TLS esterna.
Conferma che la topologia sia ancora quella. Se differisce, correggi Host,
protocollo e mappa esatta con un test di rifiuto cross-origin; non cancellare
Origin, non usare wildcard né rendere fidati gli header forniti dal browser.
Riferimento per errori 401/403 e contratto completo: autenticazione upstream.
5. Test, backup e rilascio coordinato
Dal checkout Omics integrato, senza database operativo o volumi collegati:
docker build -f test_support/thothii/Dockerfile -t omics-portal:thothii-shell-tests .
docker run --rm --network none omics-portal:thothii-shell-tests
In ThothII verifica la build di frontend/core, i test auth e shell e la generazione del descrittore con il CLI aggiornato. I test locali alla consegna includono 768 test frontend, 20 scenari browser e build documentale strict; non certificano il portale/IdP né i dati del server.
Prima del rilascio prepara un piano con i comandi esatti risolti. Per
installazioni già governate dal CLI usa tht --installation …; per launcher
server personalizzati conserva progetto, ordine di tutti gli override e bind.
Non alternare i due lifecycle se cambiano la project identity o i volumi.
Ordine da applicare nella finestra confermata:
-
Metti al sicuro revisioni, binario host, descrittore/env/override, immagini e backup consistenti di catalogo, sessioni, registry/Evidence/Memory, settings, Pi e indici. Proteggi i backup che contengono segreti. Verifica il ripristino prima di una migrazione non reversibile e gestisci le sessioni in corso.
-
Genera le proiezioni dell'installazione; costruisci core e frontend dai sorgenti approvati. Avvia i servizi di supporto necessari e, se richiesto dal salto di versione, esegui le migrazioni esplicite con exit 0 prima del core. Il normale
tht start --buildcoordina il lifecycle, non è frontend-only. -
Ricrea i servizi applicativi ThothII con configurazione embedded/upstream e conserva il progetto/dati approvati. Controlla health e diagnostica:
tht --installation "$THTII_INSTALLATION" status tht --installation "$THTII_INSTALLATION" doctor --json -
Distribuisci la revisione Omics integrata tramite il suo normale rilascio, includendo
web, statici/cataloghi e configurazionenginx. Il suo entrypoint eseguemigrate,compilemessagesecollectstatic: le modifiche della shell non aggiungono migrazioni Django, ma controlla quelle pendenti del server prima del riavvio. Verifica anche il catalogo Superset richiesto dalla build Omics. -
Esegui
nginx -tnel servizio candidato e applica il reload/riavvio secondo la topologia registrata. Dopo la ricreazione dei container verifica che il proxy risolva gli alias ai nuovi indirizzi, non a IP Docker precedenti. -
Attendi almeno 30 secondi per la cache manifest Django o invalidala con il meccanismo del portale. Verifica asset/config e svolgi il collaudo seguente.
Se uno step fallisce non marcare l'installazione conclusa. Un core healthy non prova che auth, UI embedded o scritture attraverso il proxy funzionino.
6. Accettazione prima di dichiarare completato
Usa account di prova autorizzati e dati non operativi per i test che scrivono. Le verifiche che richiedono login interattivo possono essere svolte dall'operatore: riporta esplicitamente quelle ancora da fare, senza spuntarle per deduzione.
- Accesso: login Omics, apertura da menu, nessun login/header ThothII.
/mesu/datamart-builder/api/merestituisce identità e permessi corretti;session/csrfTokensono null in upstream. - Dinieghi: senza sessione o capability il proxy nega; header principal falsificati non danno accesso. Utente normale senza controlli admin; admin autorizzato con controlli coerenti. Nessuna route diretta aggira il proxy.
- Lingua e continuità: IT/EN prima e dopo l'apertura, cambio attraverso Omics,
ripristino della selezione dopo reload senza generazione automatica. Nuove
sessioni ricevono la lingua UI; sessioni riprese mantengono
interaction_language. Per quelle legacy la prima ripresa fissa la lingua del workspace in modo idempotente. SQL e contenuti authored non sono tradotti. - Tema/fullscreen: light/dark cambia anche ThothII, incluse finestre e menu; fullscreen nasconde il bordo browser, sostituisce l'icona e torna normale con Esc. Header/sidebar Omics mantengono il proprio aspetto.
- Logout: il logout è soltanto quello Omics. Ritorno alla pagina e riconnessione ricontrollano l'accesso; non promettere revoca istantanea di uno stream già aperto in un'altra scheda.
- Workflow: una sessione di prova autorizzata può essere creata, ricevere eventi SSE e domande/scelte nella lingua corretta, salvare e riprendere senza perdere proprietà. Le scritture same-origin funzionano, quelle cross-origin non autorizzate vengono negate.
- Amministrazione/UI: Database, Memory ed Evidence leggibili, font/layout aggiornati e nessuna propagazione del reset CSS alla topbar Omics. Le memory FAKE sono solo esempi UI isolati, non da importare nel catalogo o nel recall. Puntino readiness Workspace, unico bottone Sessione, tab con bordi uniformi; accordion inizialmente chiuso, un solo pannello aperto, selezione per lista, scroll interno e nessuna frase “Inizia con Sessione”.
- Operatività: nessun errore di config/auth nei log, mount e permessi corretti, indici/cataloghi e dati precedenti disponibili, nessuna modifica al DWH/IdP.
Compila il report con SHA ThothII/Omics, immagini, percorsi configurazione, comandi eseguiti, risultati e prove manuali pendenti, senza cookie o token. La matrice auth completa approfondisce i casi di sicurezza.
7. Rollback
Ripristina la coppia compatibile di codice/immagini Omics e ThothII, il CLI,
descrittore e proiezioni registrati, seguendo il lifecycle approvato. Riavvia il
proxy se necessario per DNS/config e ricontrolla manifest, accesso e SSE.
I dati restano preservati: nessun down --volumes, cancellazione di archivi o
reset distruttivo. Se il rilascio ha migrato uno schema o scritto dati non
compatibili con la versione precedente, usa il piano di ripristino dati approvato,
non un semplice downgrade d'immagine. Il rollback termina solo dopo il collaudo
della versione ripristinata.