docs: record server release and hand off remaining acceptance checks
Publish documentation / publish (push) Successful in 32s

This commit is contained in:
User
2026-09-27 00:41:37 +02:00
parent 497ab84031
commit 2f53512e4d
7 changed files with 1119 additions and 1 deletions
@@ -0,0 +1,246 @@
# 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.