Files
ThothII/docs/reports/2026-09-26-server-release-handoff.md
T
User 2f53512e4d
Publish documentation / publish (push) Successful in 32s
docs: record server release and hand off remaining acceptance checks
2026-09-27 00:41:37 +02:00

247 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Handoff — rilascio coordinato ThothII / Omics
**Rilasciato il 26 settembre 2026; accettazione automatica superata alle 19:35 Europe/Rome.**
Per riprendere, leggere il [report di esecuzione](2026-09-26-server-release-execution.md):
servizi avviati, maintenance inattiva, backup verificato e rollback disponibile.
La finestra era stata confermata esplicitamente dall’utente; non richiederla di
nuovo per completare il collaudo già autorizzato. Il 27 settembre l’utente ha
confermato accesso, controlli dell’interfaccia e avvio/interruzione/ripresa di una
sessione: collaudo funzionale positivo. Per le verifiche residue usare il
[nuovo handoff del 27 settembre](2026-09-27-server-acceptance-handoff.md), con
passi e registro delle prove. L’utente le ha affidate a un’attività successiva.
Usare lo script corretto documentato nel report: durante il rilascio è stata
corretta soltanto la lettura degli header Cache-Control ripetuti nel controllo.
Non rieseguire le fasi pre-deploy sullo stato già rilasciato.
## Snapshot storico della sospensione delle 17:40
Il resto di questo file conserva lo stato precedente alla ripresa e al rilascio.
Il report di esecuzione sostituisce le indicazioni operative e le attività residue
qui sotto; il [piano approvato](2026-09-26-server-release-plan.md) descrive le scelte.
## Prima azione alla ripresa
Leggere questo handoff, quindi `AGENTS.md`, `PROJECT_STATE.md`,
`docs/operations/server-codex-handoff.md`, `docs/install/authentication-upstream.md`
e `docs/testing/authentication-manual-acceptance.md`. Per l'inventario completo
e i digest delle immagini operative, leggere
`docs/reports/2026-09-26-server-release-preflight.md`.
Quel preflight è storico: la correzione proxy allora mancante è ora preparata e
testata **soltanto in isolamento**, come descritto sotto.
La prossima attività è **revisionare e completare lo script di rilascio in bozza**,
validare il piano senza mutazioni operative e presentarlo all'utente con backup
e rollback. Solo dopo la sua conferma eseguire le fasi operative e il collaudo.
## Richiesta dell'utente e confini
- Aggiornare ThothII e Omics secondo il runbook, preservando dati, workspace,
Pi, provider, modelli e credenziali già presenti sul server.
- Usare main ThothII includente `497ab84031e285464fdbb73e6e0ce9252687e3ab`;
conservare i progressi server Omics successivi alla consegna GitHub `fca10901…`.
- Conservare checkout sporchi e file locali. Nessun reset, force push, rimozione
volumi o `tht setup --complete`; non usare `codex/guided-standalone-install`.
- L'utente ha autorizzato preparazione, correzione e test isolati. Prima del
fermo/proxy/migrazioni/recreate operativi vuole vedere il piano risolto e
confermare la finestra. Il suo «procediamo, fai la tua parte» ha avviato la
preparazione, non approvato uno script ancora inesistente/incompleto.
- L'utente può fare il collaudo da browser: avvisarlo quando sarà il momento
e fornire prove precise. Non chiedergli password in chat.
- Ha autorizzato a cercare credenziali di `akadmin` / `mpancotti`: trovata solo
la presenza di `AUTHENTIK_BOOTSTRAP_PASSWORD` in
`/home/chirone/chirone-authentik/docker/.env`. Valore non mostrato, non copiato,
**nessun login tentato e validità attuale non verificata**. Nessuna password
mpancotti trovata. I due utenti sono locali Authentik, non LDAP.
## Stato operativo, invariato
- Checkout di lavoro `/home/chirone/Thoth`: main `497ab840…`, allineata Gitea;
il report `2026-09-14-server-embedded-omics-release.md` era già non tracciato.
Sono stati aggiunti solo i report locali di questa attività.
- Checkout ThothII operativo `/srv/thothii-v2/source/ThothII`: main
`b1723c34c467980d007094af078d966d460cde2b`, 30 file modificati + due non tracciati,
preservato integralmente. Le modifiche sono già recepite dalla nuova main,
che contiene anche le correzioni successive.
- Omics operativo `/home/chirone/omics_portal`: master pulito
`1cf7ea90a669a26bf3bc51749eab4d07981da472`. Comprende la consegna shell GitHub
`fca10901a73666ca257d8f4cc4b77066295c400a` e la correzione Superset successiva.
**Non ripetere l'integrazione e non tornare a fca10901.**
- Core ancora `thothii-v2-core:49333a2d-session-memory-fix`; frontend ancora
`thothii-v2-frontend:b1723c34-session-dialogs-20260914`; Omics web ancora
`omics_portal-web` image ID `sha256:27aa100690b110bf596322b1b0a31acc178ca9d1c709bc10382cbeecbfb5aeca`.
- Ultimo controllo: zero processi Pi RPC, maintenance `active=false`, admissions 0.
Ricontrollare alla ripresa e prima del fermo.
- Backup nuovo `/srv/thothii-v2/backups/20260926-coordinated-release` **non esiste**.
Backup storico 14 settembre verificato (14 checksum, tar e indici dump), non
un backup dello stato odierno, nessuna prova di restore eseguita.
## Installazione e preservazione comprovata
Descrittore effettivo, il cui **percorso va mantenuto** per preservare project identity:
`/srv/thothii-v2/source/ThothII/deploy/psd-server-v2/thothii-installation.yaml`.
Project `thothii-7f901b48fe35`, schema 2, profile server, embedded/en/omics-portal,
upstream, session storage local, `THOTH_PUBLIC_EXPOSURE=false` già preesistente.
Non cambiare modalità auth o disattivare controlli per far partire l'app.
Preservati e confrontati:
- default interaction `zai/glm-5.3`;
- `deepseek/deepseek-v4-pro`, `deepseek/deepseek-v4-flash`;
- `local-qwen/qwen3.6-35b-a3b`;
- embedding `ollama/qwen3-embedding:0.6b`, dimensione 1024;
- `catalog.json`, `pi/models.json`, `pi/settings.json`, `frontend/config.js`:
proiezioni nuove **identiche byte per byte** a quelle operative;
- Compose candidato: environment, reti, porte, secret/config mount e mount
persistenti uguali. Solo due bind di script versionati identici cambiano
percorso seguendo il nuovo checkout (`catalog-db-init.sql`, `embedding-model-init.sh`).
Il CLI rifiuta correttamente i segreti se eseguito da UID diverso da 10001.
Per diagnostica usare UID 10001 con gruppi operator/Docker e DOCKER_CONFIG
leggibile; non cambiare ownership dei segreti. Esempio verificato:
```bash
sudo -n setpriv --reuid=10001 --regid=10001 --groups=1014,988 \
env DOCKER_CONFIG=/srv/thothii-v2/operator/releases/20260926-coordinated/docker-config \
/usr/local/bin/tht \
--installation /srv/thothii-v2/source/ThothII/deploy/psd-server-v2/thothii-installation.yaml \
doctor --json
```
## Correzione proxy pronta, non applicata
Il proxy operativo è ancora vulnerabile: senza cookie,
`/datamart-builder/assets/api/me` con header `X-Thoth-Trusted-*` inventati
restituisce 200 e principal sintetico. API canonica restituisce 403.
Confermato anche via nginx HTTPS host con CA verificata e DNS locale.
Il test ha usato un soggetto inesistente, nessun dato reale o scrittura.
Causa: il prefisso pubblico degli asset inoltra alla radice del frontend,
che espone `/api/` e converte gli header Trusted in principal del core.
Correzione candidata Omics:
- branch `codex/thothii-assets-proxy-isolation`;
- commit locale **`928f7e9fff2aba895416776fecf5668ee957d237`**;
- parte da `1cf7ea90…`, nessun push eseguito;
- checkout stabile pulito:
`/srv/thothii-v2/releases/omics-928f7e9fff2aba895416776fecf5668ee957d237`;
- clone di lavoro: `/tmp/thothii-release-20260926/omics-source`;
- sei file cambiati: nginx, test statico, tre file di test dinamico, docs integrazione.
Il filtro accetta solo file Vite con hash ed estensioni previste, alla radice
o sotto `assets/` per compatibilità. Le route pubbliche config/asset rimuovono
Cookie, Authorization e tutte le famiglie di header identità; solo GET/HEAD.
Il frontend attuale emette file alla **radice**, non tutti in `assets/`:
il primo filtro eccessivamente stretto è stato corretto grazie al test reale.
Test completati:
- test dinamico nuovo riproduceva il difetto prima della correzione;
- **6/6** test della catena nginx Omics → nginx frontend reale → core/Django
sintetici, rete Docker interna, senza porte host o volumi operativi;
- verificati traversal codificati, canonical auth, Origin esatta, config,
tutti i file del manifest reale, diniego scritture alle route statiche;
- gli stessi **6/6** passano anche con l'immagine frontend precedente:
il rollback può e deve mantenere la correzione del proxy;
- suite Omics shell/auth/nginx/Superset **28/28** dopo la modifica;
- nessun container/rete `omics-proxy-check-*` rimasto al momento della sospensione.
Esecuzione test ripetibile, solo se necessaria per nuove modifiche:
```bash
cd /srv/thothii-v2/releases/omics-928f7e9fff2aba895416776fecf5668ee957d237
THOTHII_TEST_FRONTEND_IMAGE=thothii-v2-frontend:497ab840-preflight \
OMICS_TEST_IMAGE=omics-portal:proxy-isolation-tests \
OMICS_TEST_NGINX_IMAGE=sha256:b3c656d55d7ad751196f21b7fd2e8d4da9cb430e32f646adcf92441b72f82b14 \
python3 test_support/thothii/run_proxy_integration.py
```
## Artefatti pronti e bozza da revisionare
Directory stabile: `/srv/thothii-v2/operator/releases/20260926-coordinated`.
Contiene:
- `descriptor.next.yaml`: cambia soltanto projectDirectory verso la nuova main
e il percorso del suo overlay git-ssh; modelCatalog/auth/shell/workspace invariati.
- `operator.next.env`: cambia soltanto tag immagini in `497ab840-preflight`.
- `compose.portal-upstream.next.yaml`: aggiorna anche il tag frontend letterale,
che non seguiva la variabile del core.
- `baseline.json`: hash protetti dei file operativi per rilevare drift prima
della finestra; non contiene valori segreti.
- `compose-preservation.json`: esito positivo del confronto Compose candidato.
- `tht.next`: nuovo binario non installato; SHA256
`0d39a93fb0a3b2147541a746c75832db20302f3a604bf6510da69d3731bcd783`.
- `nginx.safe.conf`: copia della configurazione candidata testata.
- `proxy-green.log`, `proxy-rollback-test.log`, `omics-proxy-tests.log`.
- **`release.DRAFT.py`**: bozza appena scritta, **non revisionata, non compilata,
non eseguita neppure in modalità check**. Non lanciarla prima di una revisione
completa e della conferma della finestra per le fasi mutanti.
Originale della bozza: `/tmp/thothii-release-20260926/release.py`.
Non trattare il flag `--window-confirmed` come un'approvazione dell'utente.
Sorgenti ThothII pronti, main pulita e fetch Gitea con divergenza 0/0:
`/srv/thothii-v2/releases/497ab84031e285464fdbb73e6e0ce9252687e3ab`.
Vecchio checkout dirty lasciato al suo posto per rollback.
Immagini candidate già costruite, non distribuite:
- core `thothii-v2-core:497ab840-preflight`,
`sha256:182f4e0d63404cb7ed6a0e272441e9c55ed27e2bb16fdbf4d7162f892ac76dc7`;
- frontend `thothii-v2-frontend:497ab840-preflight`,
`sha256:5f5a4f81139432d0ac41025c3006edaf1258b623ce388242700b1b20fcce6421`.
Test ThothII già superati: 782 frontend, 152 backend su Node 24.16, 31 browser,
build/typecheck core/frontend, build CLI e generazione isolata, doctor attuale 13/13.
Log in `/tmp/thothii-release-20260926`. La sottodirectory `generation` contiene
copie sensibili protette root:root 0600 sotto directory 0700: non pubblicarla.
## Lavoro residuo e criteri per avanzare
1. **Revalidare solo ciò che può essere cambiato** durante la pausa: immagini,
SHA/stato checkout operativo, configurazioni contro baseline, processi Pi,
migrazioni Omics pendenti e raggiungibilità. Se c'è drift, preservarlo e
aggiornare il piano prima di proseguire.
2. **Revisionare lo script DRAFT**, inclusi escaping del controllo processi Pi,
gestione errori/parzialità backup, health/readiness reale Omics (il suo
healthcheck verifica solo catalogo, non Gunicorn), generazione con UID corretto,
digest image vs container, conservazione proprietari e dati, rollout/rollback
della correzione proxy. Validare sintassi e fase read-only solo dopo revisione.
Aggiungere prove HTTPS locali, risoluzione alias dopo recreate e controllo
log redatto: la bozza non copre ancora integralmente il runbook.
3. **Finalizzare scelta lifecycle Omics.** La bozza mantiene l'esatta immagine
web operativa perché l'unica modifica applicabile è nginx (shell/Superset
già presenti); fa fast-forward del checkout al fix, stop/start web per backup
consistente e recreate nginx. Lo start riesegue il suo entrypoint, compresi
migrate/compilemessages/collectstatic. Spiegare questa scelta nel piano finale.
Se si decide di ricostruire web, il suo `.dockerignore` è minimale: creare un
contesto pulito, aggiungere il catalogo Superset reale valido, escludere segreti.
4. **Finalizzare backup odierno.** La bozza salva immagini/code/config, ferma
ingressi e applicativi dopo maintenance e controllo Pi, crea dump catalogo
e PostgreSQL Omics condiviso, ferma supporti ThothII per snapshot raw coerenti,
archivia bind/volumi e verifica checksum/tar/indici dump. Valutare spazio e
interruzioni; il vecchio backup verificato non basta. Il DB Omics è condiviso
(`postgres` su `supabase-db`, app in `kokoro`, metadata in `chirone_meta`):
un restore dell'intero DB non fa parte del rollback ordinario.
5. **Presentare piano risolto, comandi, backup e rollback all'utente**, chiedendo
conferma della finestra. Solo allora installare CLI/config, generare proiezioni,
ricreare le app e applicare nginx. Nessuna migrazione nuova rilevata finora.
6. **Collaudare e poi coinvolgere l'utente.** Login unico, `/me` e ruoli,
IT/EN, tema/fullscreen, logout/seconda scheda, sessione fittizia con Pi/SSE,
stop/save/ripresa e lingua immutabile, diniego cross-origin autenticato,
Database/Memory/Evidence e accesso HTTPS da postazione esterna.
Rollback: ripristinare immagini ThothII, CLI, descriptor/env/override e
proiezioni salvati; preservare dati e **mantenere il fix proxy**, già testato
col frontend precedente. Ripristinare il vecchio nginx riaprirebbe il bypass.
Nessun restore dati automatico, reset Git o eliminazione volumi.
## Ambiente strumenti
La sandbox exec fallisce prima dell'avvio (`bwrap: loopback … Operation not
permitted`): i comandi sono stati eseguiti con `require_escalated` e motivazione.
Auto-review li ha consentiti; nessun rifiuto pendente. Non sono stati usati
subagenti. Skill applicate: `diagnosing-bugs`, `writing-for-agents` per questo handoff.
Nessun goal formale attivo. Per lo stato successivo alla ripresa, usare il piano revisionato collegato in apertura.