Projects, Experiments e Sessions

GX-TXT usa tre livelli distinti ma collegati per organizzare il lavoro scientifico. Un Project raggruppa logicamente più Experiments; un Experiment possiede una propria identità persistente e il notebook scientifico; una Session è il record operativo e portabile che contiene Dataset, analisi, script, grafici, viewer state e provenance.

Versione verificata

FrameworkGX-TXT 0.9.8.10-dev-031
Project contractPROJECT_API_v1
Session manifestManifest Format 2 con sezione [project_link]
Data verifica3 ottobre 2026

1. I tre livelli in una frase

LivelloDomanda a cui rispondeIdentità principale
ProjectQuale programma di lavoro o tema raccoglie questi Experiments?project_id
ExperimentQuale esperimento/studio scientifico sto descrivendo?experiment_id
SessionDove vive il record operativo riproducibile di questo lavoro?Session directory + manifest e risorse interne
Relazione fra Project Experiment e Session
Il Project organizza gli Experiments; l'Experiment possiede identità scientifica e metadati; la Session conserva il record operativo. Il path della Session è informazione di localizzazione, non l'identità dell'Experiment.

2. Project: il contenitore organizzativo persistente

Un Project è una entità persistente sopra gli Experiments. Ha un project_id stabile indipendente dal nome modificabile e può contenere metadata come nome, descrizione, tags, autore, data di creazione e aggiornamento.

Il registry autorevole dei Projects è user-local e segue la configurazione XDG/home del framework. La dev-031 mantiene anche uno storage stabile del Project con un piccolo project.ini e una directory Sessions/.

Il Project non è un Dataset container
Associare un Experiment a un Project non duplica RAW, Dataset, analisi, plot o viewer state. Il Project conserva organizzazione e membership, non una seconda copia dei contenuti scientifici della Session.

3. Experiment: identità scientifica e notebook

L'Experiment rappresenta lo studio/esperimento descritto nella Session. Il Manifest Format 2 conserva campi come:

name
date
operator
tags
notes
objective
procedure
observations

La dev-031 assegna inoltre un experiment_id stabile. Il Project membership usa questo ID, non il nome visibile e non il path della Session.

Informazioni specifiche degli strumenti appartengono agli Instrument Module instances; le variabili scientifiche appartengono ai Dataset/Variable Schema. L'Experiment rimane il livello descrittivo del lavoro.

4. Session: il record operativo e portabile

La Session conserva configurazione, Dataset, source files, note, script registrati, output Analysis, plots, Viewer state e provenance. Il suo metadata/manifest.ini contiene sia la sezione [experiment] sia il collegamento persistente al Project.

[project_link]
api_version=1
experiment_id=experiment-...
project_id=project-...
legacy_project=

Il path della Session viene registrato anche nel Project membership per consentire la navigazione. Non sostituisce però experiment_id.

5. Perché il Session path non è l'identità dell'Experiment

Una Session può essere spostata. Quando una Session collegata a un Project viene riaperta, GX-TXT può aggiornare il “last known Session path” nel membership index usando l'experiment_id stabile.

Questo permette di distinguere:

6. Creare una nuova Session dentro un Project

Nella dev-031 la creazione di una nuova Session può ricevere direttamente un projectId. In questo caso la Session viene creata sotto lo storage stabile del Project:

<Session/Project root>/
└── <project_id>/
    ├── project.ini
    └── Sessions/
        └── <session_name>/
            ├── metadata/
            ├── analysis/
            ├── raw/
            └── ...

GX-TXT genera contestualmente un nuovo experiment_id, imposta il project_id nel manifest e registra l'Experiment nel membership del Project.

7. Associare una Session esistente a un Project

È un'operazione diversa dalla creazione “dentro” il Project. Quando la Session esiste già, Associate current Session... crea/aggiorna il collegamento logico fra l'Experiment corrente e il Project scelto.

La directory esistente non viene spostata e i dati non vengono copiati. Il membership registra il path corrente per consentire di riaprire la Session dal Project.

8. GUI corrente: Experiment e Projects

Ricostruzione delle interfacce Experiment e Projects
Ricostruzione documentativa della GUI dev-031 basata sull'implementazione corrente e sulla guida Projects GUI. La riga Project nella scheda Experiment e il tab Projects sono due proiezioni dello stesso Project API v1.

8.1 Nella scheda Experiment

La riga Project espone:

8.2 Nel tab Projects

Il tab Projects è una proiezione dello stesso backend persistente. Mostra la lista dei Projects, metadata del Project selezionato, gli Experiments associati e consente di navigare alle Session quando il path registrato è disponibile.

9. Detach è non distruttivo

Detach Session rimuove il collegamento fra l'experiment_id e il Project. Non cancella:

La GUI chiede esplicitamente conferma specificando che nessun dato scientifico verrà eliminato.

10. Modificare il nome del Project non ne cambia l'identità

Il nome è metadata editabile. La membership usa project_id. Rinominare un Project non richiede di rinominare gli Experiments né le Session e non cambia le identità scientifiche.

Analogamente, la lista degli Experiments usa experiment_id come autorità; nome e Session path servono alla presentazione e alla navigazione.

11. Legacy Project text

I manifest storici potevano contenere soltanto experiment.project come testo libero. La dev-031 non interpreta automaticamente quel testo come una identità Project persistente.

Quando l'utente associa esplicitamente l'Experiment a un Project moderno, il vecchio testo può essere conservato in legacy_project. In questo modo una semplice coincidenza di nomi non crea una membership non richiesta.

12. Registry Project e manifest Session devono restare allineati

La relazione è registrata in due punti con ruoli diversi:

PosizioneCosa conserva
Project registry user-localProject metadata e membership per experiment_id, incluso l'ultimo Session path noto.
Session metadata/manifest.iniexperiment_id, project_id e legacy text della Session aperta.

Il salvataggio e l'apertura della Session sincronizzano il collegamento attraverso le API di Project. Non è necessario modificare manualmente nessuno dei due file.

13. Esempio: progetto con più Experiments

Project: Catalytic mesh reactor
project_id = project-...

├── Experiment A
│   experiment_id = experiment-A...
│   Session = CFD_simple_mesh
│   Datasets = mesh + pressure + velocity
│
├── Experiment B
│   experiment_id = experiment-B...
│   Session = CFD_SEM_reference
│   Datasets = detailed geometry + CFD results
│
└── Experiment C
    experiment_id = experiment-C...
    Session = laboratory_measurements
    Datasets = chromatography + UV + pH + temperature

Le tre Session possono essere navigate dallo stesso Project senza mescolare i loro Dataset registry o la loro provenance.

14. Project, Dataset e risorse Session: cosa appartiene a cosa

OggettoProjectExperiment / Session
Project metadata✓ autorevolesolo riferimento project_id
Experiment identitymembership via experiment_id✓ autorevole nel manifest
Datasetnon duplicato✓ Session
RAWnon duplicato✓ Session
Analysis / plotsnon duplicati✓ Session
Script snapshotsnon duplicati✓ Session
Session pathultimo path noto per navigazionedirectory fisica corrente

15. Cosa succede con Portable Session

Una Session esportata mantiene le proprie identità scientifiche e il link Project presente nel manifest. Il package portabile conserva il record Session; il Project registry user-local non viene trasformato in un secondo contenitore dati dentro ogni archivio.

Dopo la relocazione, aprire la Session permette al framework di aggiornare le informazioni di navigazione legate all'experiment_id quando il relativo Project è disponibile.

16. Regole pratiche

17. Guide collegate