166 lines
7.9 KiB
Markdown
166 lines
7.9 KiB
Markdown
# 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.
|