17 KiB
ThothII / Omics — preflight server del 26 settembre 2026
Stato: rilascio fermo al gate di isolamento del proxy. Nessuna finestra
richiesta o autorizzata; nessun servizio fermato, ricreato o aggiornato, nessuna
migrazione e nessuna modifica di proxy, descrittore, credenziali, DWH o IdP.
Questo documento è un inventario e piano parziale, non un piano eseguibile
di rilascio approvato. Applicare il runbook docs/operations/server-codex-handoff.md.
Blocco verificato
Senza cookie/sessione Omics:
| Ingresso | Richiesta | Risultato |
|---|---|---|
| Nginx Omics, localhost:8080 con Host pubblico | /datamart-builder/api/me |
403 |
| Stesso ingresso, principal normalizzato inventato | /datamart-builder/api/me |
403 |
Stesso ingresso, header X-Thoth-Trusted-* sintetici |
/datamart-builder/assets/api/me |
200, JSON /me con identità sintetica e permesso |
| Nginx TLS host, HTTPS con CA verificata e DNS locale | API canonica / percorso alternativo | 403 / 200 |
Il soggetto di prova era release-probe-nonexistent, con flag admin falso;
non sono stati usati utenti reali o richieste di scrittura. La risposta alternativa
conteneva issuer/subject, ruoli, permessi e session/CSRF null: non era il fallback HTML.
Causa circoscritta: la location pubblica /datamart-builder/assets/ inoltra
qualsiasi suffisso alla radice del frontend. Il suffisso api/me raggiunge quindi
/api/me del frontend, che converte gli header Trusted in principal del core.
Quel percorso non attraversa auth_request. La configurazione Omics operativa e
quella della consegna mantengono questo percorso; la nuova immagine frontend
conserva l'endpoint /api/. Un aggiornamento di ThothII da solo non corregge il difetto.
Riproduzione non mutante, exit 1 sul difetto:
python3 /tmp/thothii-release-20260926/evidence/check-proxy.py
Serve una revisione candidata Omics del proxy che impedisca l'accesso alle API
attraverso gli asset e rimuova gli header di fiducia dai percorsi pubblici.
Va preparata dal codice server 1cf7ea90…, collaudata in isolamento includendo
varianti dei percorsi, asset/manifest/config e dinieghi, quindi inclusa nel piano
da approvare prima del reload operativo. Nessuna correzione è stata applicata.
Non indebolire auth o Origin, né cambiare le identità degli utenti.
L'origine pubblica via DNS, dal server, va in timeout (HTTP 000, curl exit 28).
Il probe TLS con --resolve …:443:127.0.0.1 è invece riuscito. Resta da verificare
il percorso completo dal client esterno/bilanciatore; non è attestato dal probe locale.
Revisioni e conservazione delle modifiche
- Checkout di consegna
/home/chirone/Thoth: branchmain, HEAD eorigin/main497ab84031e285464fdbb73e6e0ce9252687e3ab, fetch Gitea eseguito, divergenza0 0; entrambi gli ancestor richiesti (497ab840…,0d2e573e) presenti. - All'inizio non era pulito: solo
docs/reports/2026-09-14-server-embedded-omics-release.mdnon tracciato. Quel file è stato conservato. Questo report è un ulteriore output locale. - Copia pulita per test
/tmp/thothii-release-20260926/source, branchmain, stesso SHA; clone locale senza hardlink e senza importare il report non tracciato. - Checkout ThothII operativo
/srv/thothii-v2/source/ThothII: branchmain, HEADb1723c34c467980d007094af078d966d460cde2b, 30 file modificati e due file non tracciati. Nessun aggiornamento/reset/stash eseguito in questo checkout. Dei 32 file locali, 29 sono identici alla main approvata; le differenze negli altri tre sono le nuove correzioni di main aAppShell.tsx, al suo test di gestione sessioni e al test visuale dello scroll. Non occorre ricostruirle a mano. - Omics
/home/chirone/omics_portal:master, pulito e coincidente col riferimento localeorigin/master, HEAD1cf7ea90a669a26bf3bc51749eab4d07981da472. Non è stato eseguito fetch di master: questa coincidenza non attesta il master remoto attuale. - Fetch esplicito del branch GitHub
codex/thothii-embedded-shell: esattamentefca10901a73666ca257d8f4cc4b77066295c400a; contiene95154e179144e2453b37ef2a63a65d6f377e4cf8ed è già antenato di HEAD Omics. Non ripetere il merge e non tornare a fca10901. Il commit successivo corregge la risoluzione delle dashboard Superset rispetto alla lingua. Gli 11 file verificati nel container (shell/auth e correzione Superset) hanno hash uguali al checkout operativo. - Il branch incompleto
codex/guided-standalone-installnon è stato usato;tht setup --completenon è stato eseguito.
Immagini effettivamente operative, non candidate
| Servizio | Tag | Image ID |
|---|---|---|
| core | thothii-v2-core:49333a2d-session-memory-fix |
sha256:ff4c435abd67c57e1e91e6e560dae73e67350ca499a5aedca3ffa517b9f59ee0 |
| frontend | thothii-v2-frontend:b1723c34-session-dialogs-20260914 |
sha256:d2ed3dec42f8a56536ebbc8d74f13892d4c42c9a7f2fb67c476ff39f43fe7af9 |
| Omics web | omics_portal-web |
sha256:27aa100690b110bf596322b1b0a31acc178ca9d1c709bc10382cbeecbfb5aeca |
| Omics nginx | nginx:alpine |
sha256:b3c656d55d7ad751196f21b7fd2e8d4da9cb430e32f646adcf92441b72f82b14 |
| catalog-db | PostgreSQL 17.6 bookworm | sha256:f3bd19c606e442c3d7bdfa8002e03fe260a1023351e0ea4598032022b68dd6e3 |
| qdrant | v1.18.2 | sha256:75eab8c4ba42096724fdcfde8b4de0b5713d529dde32f285a1f86fdcb2c9e50c |
| embedding | Ollama 0.32.0 | sha256:57f573b47f1f71ebb445789f279fe3e596a8beab182f7cf486db9205bad87c5a |
Il frontend dichiara revision b1723c34-working-tree; core e Omics non hanno
label OCI revision. Perciò lo SHA esatto del sorgente baked del core non può
essere certificato dalla sola immagine: tag, ID e checkout sono evidenze distinte.
CLI operativo /usr/local/bin/tht, binario root:root 0755; non sostituito.
Installazione, Compose e persistenza
Descrittore invariato:
/srv/thothii-v2/source/ThothII/deploy/psd-server-v2/thothii-installation.yaml.
Schema 2, profile server, file 0600 owner UID/GID 10001, projectDirectory
/srv/thothii-v2/source/ThothII, envFile /srv/thothii-v2/operator/operator.env.
Shell già embedded/en/omics-portal. Project Compose thothii-7f901b48fe35.
Ordine dei file applicativi, ricavato dalle label dei container:
/srv/thothii-v2/source/ThothII/compose.yaml/srv/thothii-v2/source/ThothII/deploy/compose.server.yaml/srv/thothii-v2/source/ThothII/deploy/compose.git-ssh.yaml/srv/thothii-v2/operator/compose.portal-upstream.yaml/srv/thothii-v2/source/ThothII/deploy/psd-server-v2/generated/compose.models.yaml
I supporti sono stati creati con i primi quattro file. Il percorso del descrittore
determina l'identità Compose nel CLI: mantenerlo anche usando in futuro una
directory sorgente pulita distinta. Non spostare il descrittore in un nuovo checkout.
L'override contiene un tag frontend letterale: il solo cambio di
THTII_RELEASE_IMAGE_TAG non aggiorna entrambe le immagini.
Core: AUTH_MODE=upstream, THT_AUTH_CONFIG_FILE=/run/thothii-auth/upstream-disabled.yaml,
nessuno dei due file auth (auth.yaml, upstream-disabled.yaml) presente;
directory host /srv/thothii-v2/operator/auth, nessuna runtime auth projection.
THOTH_PUBLIC_EXPOSURE=false, THT_SESSION_STORAGE=local: configurazione
preesistente, non modificata. Non è una prova di isolamento: il gate proxy è fallito.
Se si decide di impostare public exposure true, serve prima un piano separato
per storage sessioni PostgreSQL; non attivare l'overlay come falsa migrazione automatica.
Bind e archivi:
/srv/thothii-v2/data→/data: settings, sessioni, artifact, indici e workspace secrets.- Sessioni PSD:
/data/sessions/psd-clinical/{sessions,artifacts,indexes,memory}; snapshot catalogo/data/sessions/psd-clinical/preprocessing/catalog-metadata.json. /srv/thothii-v2/workspace-registry→/data/workspace-registry; workspacepsd-clinical, installation IDpsd-server-v2. Evidence local archive/data/workspace-registry/repo/psd-clinical./srv/thothii-v2/pi-state→/home/thoth/.pi; auth provider read-only/srv/thothii-v2/secrets/pi-auth.json→/home/thoth/.pi/agent/auth.json.- Bundle
/srv/thothii-v2/secrets/thothii.secrets; chiavi workspace SSH, known-hosts e password catalogo in/srv/thothii-v2/secrets/, valori mai riportati. - Generated catalog/Pi/frontend sotto il descrittore;
config.jsmontato read-only. - Catalogo e Memory autorevoli PostgreSQL nel volume
thothii-7f901b48fe35_catalog-data; indici derivatithothii-7f901b48fe35_qdrant-data; modellithothii-7f901b48fe35_embedding-models. - Binding DWH diretto già operativo verso
host.docker.internal:5438, utente read-onlythoth_dwh_reader. Nessuna query DWH o sincronizzazione avviata.
Omics: project omics_portal, file ordinati
/home/chirone/omics_portal/docker-compose.yml,
/home/chirone/omics_portal/docker-compose.override.yml, env .env.docker.
Volumi omics_portal_static_volume e omics_portal_media_volume; mount CA
/etc/nginx/ssl/policlinicosandonato.it.fullchain.crt read-only.
Database portale: supabase-db, database postgres, search_path kokoro,public,
endpoint host 5438. Non confonderlo con il DWH o col catalogo ThothII.
Il server PostgreSQL è condiviso: un eventuale restore dell'intero database
non è un rollback ordinario di Omics e richiede un piano separato.
Reti: core su thothii-7f901b48fe35_thothii, omics_portal_omics_network
(alias thothii-core) e localllm_default; frontend su prime due reti (alias
thothii-frontend). Nessuna porta host core; frontend 127.0.0.1:18020.
Omics web solo porta interna 8000; nginx 0.0.0.0:8080. TLS host nginx su 443
per https://aritmolab.policlinicosandonato.it, poi localhost:8080.
File host /etc/nginx/sites-available/policlinicosandonato, collegato in sites-enabled;
SSE canonico con buffering disabilitato e timeout 86400 su entrambi gli nginx.
La mappa Origin esatta HTTPS→HTTP è presente. Il tratto esterno non è verificato.
Inventario JSON filtrato completo (label, mount, reti, porte):
/tmp/thothii-release-20260926/inventory.json.
Verifiche eseguite e candidati
- ThothII frontend: 782/782 test, build/typecheck riusciti.
- Browser isolato: 31/31 scenari visuali Playwright riusciti. Il primo
tentativo non aveva il binario Chromium; installato soltanto nello staging
/tmp/thothii-release-20260926/browsers, quindi suite rieseguita con successo. - Backend: build/typecheck riusciti; 152/152 test mirati su Node 24.16 in
container senza rete o dati operativi. I tentativi host Node 23 fallivano
per Argon2 non disponibile; i primi container di test avevano UID/mount
incompleti. Il risultato valido è
backend-node24-tests.log. - Omics shell/auth/nginx isolati: 15/15; regressioni Superset: 12/12,
entrambe le esecuzioni con
--network none, SQLite in-memory, nessun volume operativo. - Omics operativo:
migrate --checkexit 0, catalogo Superset valido (32 dashboard),nginx -texit 0. Warning allauth deprecati presenti. - CLI corrente: status exit 0, doctor 13/13, maintenance
active=false, admissions 0. Il primo tentativo con sudo/root era rifiutato dal controllo ownership dei segreti. Con UID 10001 e gruppi 1014,988, più DOCKER_CONFIG leggibile, nessun errore: non mancavano credenziali e non sono stati cambiati permessi. - CLI aggiornato costruito in
/tmp/thothii-release-20260926/cli/tht-linux-amd64; generazione riuscita su copie root:root 0600 in directory 0700/tmp/thothii-release-20260926/generation(contiene copie sensibili, non pubblicare). Proiezione frontend/api, shell embedded/en/omics-portal corretta. - Immagine core candidata
thothii-v2-core:497ab840-preflight:sha256:182f4e0d63404cb7ed6a0e272441e9c55ed27e2bb16fdbf4d7162f892ac76dc7. - Immagine frontend candidata
thothii-v2-frontend:497ab840-preflight:sha256:5f5a4f81139432d0ac41025c3006edaf1258b623ce388242700b1b20fcce6421. Entrambe portano la revision OCI497ab84031e285464fdbb73e6e0ce9252687e3ab. Costruite, non distribuite. Non è stata costruita una nuova immagine Omics operativa.
Log dei test e build in /tmp/thothii-release-20260926/; log Omics
/tmp/omics-release-tests-20260926.log e /tmp/omics-release-superset-tests-20260926.log.
Log browser: /tmp/thothii-release-20260926/browser-tests.log.
Backup e rollback: stato e vincoli
Backup storico /srv/thothii-v2/backups/20260914-pre-embedded-release:
directory root:root 0700, file 0600. Verificati 14 checksum, leggibilità di
sette archivi tar.gz e indice dei due dump con pg_restore --list: tutto exit 0.
Non è stata eseguita una prova di restore e non è un backup dello stato odierno.
Contiene anche dati condivisi/sensibili: accesso protetto, nessun contenuto mostrato.
Altri backup presenti: 20260914-session-memory-fix, 20260914-session-dialogs,
memory-evidence-20260910; non attestati dai controlli del primo backup.
Il nuovo punto di rollback andrà creato nella finestra, dopo gestione delle
sessioni in corso e quiescenza delle scritture dei due applicativi. Percorso
previsto /srv/thothii-v2/backups/20260926-coordinated-release (non creato).
Deve includere:
- Binario CLI, descriptor/env/override/generated, checkout operativo dirty completo o bundle Git + patch + file non tracciati, configurazioni Omics, catalogo Superset runtime e configurazione nginx host; proprietari/permessi preservati.
- Immagini attuali core/frontend/web/nginx per ID e checksum dell'archivio.
- Bind data, registry, Evidence, Pi, secrets/settings e volumi static/media Omics.
- Dump coerente del catalogo e backup portale con ambito esplicito rispetto al database PostgreSQL condiviso; snapshot Qdrant/Ollama e, se richiesto, snapshot raw catalogo solo a database fermo. Non archiviare un PGDATA live come se fosse un backup consistente.
- SHA256SUMS, elenco integrale archivi senza errori,
pg_restore --liste restore isolato prima di eventuali migrazioni non reversibili.
Fra il riferimento operativo core 49333a2d e la main approvata non risultano
nuove migrazioni catalogo/sessioni; Omics migrate --check non segnala pendenti.
Rivalutare dopo l'eventuale nuova revisione proxy: nessuna migrazione autorizzata ora.
L'entrypoint Omics esegue anche makemigrations, migrate, creazione superuser,
compilemessages, collectstatic: non usarlo come test preliminare su dati operativi.
Il .dockerignore Omics è minimale: preparare un contesto di build pulito che
includa il catalogo valido ed escluda env/backup/segreti prima della build operativa.
Rollback applicativo previsto: ripristino della coppia core/frontend e Omics
sopra registrata, del CLI e dei file di configurazione/proiezione salvati,
con gli stessi project name, bind e volumi; ricreazione mirata delle sole app,
nginx -t, aggiornamento DNS/reload del proxy e collaudo accesso/manifest/SSE.
Non fare downgrade dati, restore dell'intero Supabase o cancellazioni di volumi.
Il ritorno alla vecchia configurazione proxy ripristinerebbe il bypass noto:
il rollback approvato deve conservare una chiusura di sicurezza verificata,
oppure mantenere indisponibile Datamart Builder fino alla correzione.
Comandi ricostruiti e piano da completare
Queste funzioni ricostruiscono il lifecycle corrente; non sono state usate per mutazioni:
thoth_compose() {
sudo -n docker compose --project-name thothii-7f901b48fe35 \
--project-directory /srv/thothii-v2/source/ThothII \
--env-file /srv/thothii-v2/operator/operator.env \
-f /srv/thothii-v2/source/ThothII/compose.yaml \
-f /srv/thothii-v2/source/ThothII/deploy/compose.server.yaml \
-f /srv/thothii-v2/source/ThothII/deploy/compose.git-ssh.yaml \
-f /srv/thothii-v2/operator/compose.portal-upstream.yaml \
-f /srv/thothii-v2/source/ThothII/deploy/psd-server-v2/generated/compose.models.yaml "$@"
}
omics_compose() {
docker compose --project-name omics_portal \
--project-directory /home/chirone/omics_portal \
-f /home/chirone/omics_portal/docker-compose.yml \
-f /home/chirone/omics_portal/docker-compose.override.yml "$@"
}
# Sola diagnostica, con identità del proprietario dei file protetti:
sudo -n setpriv --reuid=10001 --regid=10001 --groups=1014,988 \
env DOCKER_CONFIG=/tmp/thothii-release-20260926/docker-config \
/usr/local/bin/tht \
--installation /srv/thothii-v2/source/ThothII/deploy/psd-server-v2/thothii-installation.yaml \
doctor --json
Prima di chiedere la finestra occorre risolvere il gate proxy, selezionare la
nuova revisione Omics, completare il contesto di build e il backup odierno,
e verificare il rollback che non riapra il bypass. La revisione ThothII pulita
può essere collocata in /srv/thothii-v2/releases/497ab84031e285464fdbb73e6e0ce9252687e3ab
senza modificare il checkout dirty; mantenendo invariato il percorso del
descrittore, il project name CLI resta uguale. Questo trasferimento e gli
aggiornamenti del descriptor/override non sono stati eseguiti.
Solo dopo questi prerequisiti presentare comandi finali risolti (nuovo CLI, generazione, build/up mirati, proxy, verifiche e rollback) e chiedere conferma della finestra. La sospensione attuale deriva dall'istruzione dell'operatore e dal runbook: «Ferma il passaggio interessato se manca … un prerequisito; non aggirare i controlli» e «Nessuna route diretta aggira il proxy».
Restano aperti tutti i gate reali con account Omics autorizzati: login unico, ruoli/capability, tema/IT-EN/fullscreen, logout e seconda scheda, sessione di prova e SSE/ripresa, rifiuto cross-origin autenticato, lettura amministrazione e accesso HTTPS da client esterno. I test isolati non li sostituiscono.