Publish documentation / publish (push) Successful in 1m27s
Add PostgreSQL-backed memory, editable evidence with source review and activation, and human-approved archive repairs across the harness, API, and UI. Include migrations, deployment support, regression coverage, and validation documentation. Refresh permissions from validated session roles so existing administrator logins can access newly deployed archive management features.
104 lines
5.3 KiB
Markdown
104 lines
5.3 KiB
Markdown
# M1 — Implementazione e verifica
|
|
|
|
Data: 2026-09-08. Implementazione locale della
|
|
[specifica approvata](2026-09-08-memory-m1-spec.md), associata all'
|
|
[issue 27](https://git.tylconsulting.it/mptyl/ThothII/issues/27).
|
|
|
|
## Risultato
|
|
|
|
La pagina **Memory management** è disponibile nell'Administration dopo Database
|
|
management. Gestisce le quattro famiglie di card, elenco completo, ricerca e filtri,
|
|
ordinamento, dettaglio, creazione, modifica, cancellazione, collegamenti e dipendenze.
|
|
Richiede un amministratore autenticato e una selezione esplicita del workspace;
|
|
non richiede una sessione o un database DWH configurato.
|
|
|
|
Il harness possiede l'archivio PostgreSQL `thoth_memory`. Card, collegamenti,
|
|
dipendenze e lavoro di propagazione sono salvati nella stessa transazione.
|
|
La pagina distingue salvataggio fallito e contenuto salvato con indice incompleto,
|
|
offrendo retry anche per le cancellazioni. Recall Memory ed exemplar verificano
|
|
esistenza, workspace e proiezione corrente nell'archivio prima di restituire contenuto.
|
|
|
|
Promozione, salvataggio singolo e finalizzazione corrente passano dal servizio
|
|
autorevole. Le ricevute della sorgente impediscono duplicati e ricreazione di card
|
|
cancellate. Reindicizzazione e preprocessing non importano vecchi payload o sessioni.
|
|
L'errore Memory non annulla una sessione già finalizzata; il gate segnala anche
|
|
una promozione salvata con indicizzazione incompleta.
|
|
|
|
Le migrazioni sono versionate, controllate tramite checksum e incluse nel wheel
|
|
e nell'immagine core. Il servizio di preparazione `catalog-migrate` le esegue dopo
|
|
quelle del Catalog. Il runtime assume il ruolo limitato `thoth_memory_runtime`,
|
|
con isolamento del workspace tramite RLS e senza privilegi DDL.
|
|
|
|
## Verifiche eseguite
|
|
|
|
| Confine | Esito |
|
|
| --- | --- |
|
|
| Harness, test senza L0/L2 | 1.134 passati; i 9 test dei percorsi portabili sono stati eseguiti separatamente e sono passati. |
|
|
| Servizio Memory, PostgreSQL e Qdrant reali | 17 passati, inclusi CLI, migrazioni, ruolo runtime, isolamento, transazioni, outage, retry, cancellazioni, cambio famiglia e rebuild. |
|
|
| Gate Pi | 190 passati, inclusi identità UUID e avviso dopo salvataggio con indice incompleto. |
|
|
| Backend | 1.345 passati nella suite completa, 40 esclusi dalle condizioni previste dai test; un test di autenticazione ha superato il timeout sotto carico. Il relativo file è stato rieseguito isolato: tutti i 17 test passati. |
|
|
| Frontend | 632 passati, inclusi ingresso dall'AppShell, form, filtri, collegamenti, dipendenze e retry delle cancellazioni. |
|
|
| Browser integrato | Passato: autenticazione amministratore, creazione, modifica, riavvio del backend, rilettura, cancellazione e assenza nel recall. |
|
|
| Build e tipi | Build backend e frontend, typecheck TypeScript e build documentale strict superati. |
|
|
| Lint e diff | Ruff sui file Python modificati e `git diff --check` superati. Il lint globale segnala tre rilievi in file non modificati, elencati sotto. |
|
|
|
|
Il browser utilizza autenticamente frontend, login locale, Fastify, ThtRunner,
|
|
CLI Python, PostgreSQL e Qdrant. Gli embedding sono deterministici e le attività
|
|
Pi/sessione estranee al percorso Memory usano le fixture esistenti. Non sono state
|
|
intercettate le API Memory. Sono stati usati container temporanei PostgreSQL 16 e
|
|
Qdrant 1.18.2, senza accesso a un DWH remoto o a un modello generativo.
|
|
|
|
Il test browser ha consentito di correggere etichette accessibili instabili nei
|
|
campi compilati e la sovrapposizione del pannello di recupero ai comandi del dettaglio.
|
|
La selezione del workspace e l'uscita dalla pagina sono bloccate durante le operazioni.
|
|
|
|
Il lint globale preesistente riguarda soltanto:
|
|
|
|
- ordinamento import in `harness/tests/test_effective_relationships.py`;
|
|
- ordinamento import in `harness/tests/test_p3_dwh_binding.py`;
|
|
- uso di `datetime.UTC` in `harness/tht/mschema/catalog_snapshot.py`.
|
|
|
|
## Riproduzione
|
|
|
|
Usare Node 24 e le dipendenze installate dei tre layer. Per eseguire il harness
|
|
in un ambiente con home non scrivibile si può impostare `THT_HOME` su una directory
|
|
di prova. I test dei percorsi portabili devono essere eseguiti senza questo override,
|
|
perché verificano deliberatamente la risoluzione dell'home e di `THT_DATA_ROOT`.
|
|
|
|
```sh
|
|
cd harness
|
|
THT_HOME=/private/tmp/thothii-m1-test-home .venv/bin/pytest -m 'not l0 and not l2' --ignore=tests/test_portable_paths.py -q
|
|
.venv/bin/pytest tests/test_portable_paths.py -q
|
|
.venv/bin/pytest tests/memory/test_administration.py -q
|
|
npm test
|
|
```
|
|
|
|
```sh
|
|
cd backend
|
|
npx vitest run
|
|
npx tsc --noEmit -p .
|
|
npm run build
|
|
```
|
|
|
|
```sh
|
|
cd frontend
|
|
npx vitest run
|
|
npx tsc -b
|
|
npm run build
|
|
THT_MEMORY_BROWSER_E2E=1 npx playwright test e2e/memory-real.spec.ts
|
|
```
|
|
|
|
Il percorso browser richiede Docker, Python del harness, Go per il bridge di
|
|
autenticazione e Chromium di Playwright. Avvia risorse isolate e le rimuove alla
|
|
fine. Su macOS il browser deve poter avviare i processi Chromium fuori dalle
|
|
restrizioni della sandbox. La build documentale si esegue dalla radice con
|
|
`./scripts/build-docs.sh`.
|
|
|
|
## Stato della consegna
|
|
|
|
Le modifiche sono nel worktree locale. Nessuno stack già attivo è stato aggiornato
|
|
e nessun dato esistente è stato migrato o eliminato. Prima di usare M1 su
|
|
un'installazione occorrono il nuovo core e la preparazione `catalog-migrate`.
|
|
M2 (retrieval ibrido ed espansione dei collegamenti), M3 (integrazione estesa nel
|
|
workflow) ed Evidence management restano incrementi successivi.
|