Synapse 1.3.6 — Diagnostics, Real-time & Stability¶
Release di correzione e osservabilità: sei workstream di bug-fix e verifica su Home dashboard,
coda Revisione, ingest, wiki viewer e automazioni pianificate. Nessuna nuova feature di rilievo;
nessuna modifica al contratto API tranne l'aggiunta di GET /vault/meta (WS-D8, read-only).
WS-E (wizard Domani/Gruppi) e WS-F (ristrutturazione Settings) rimandati a v1.3.7.
WS-A — Aggiornamento in tempo reale (Home + Grafo) [F16, F4, F18]¶
Home dashboard e Graph viewer erano aggiornati solo al mount. Aggiunto polling leggero di
dataVersion tramite GET /status a intervallo (10 s Home, 5 s Grafo):
- I dati vengono ri-fetchati solo se
data_versioncambia rispetto all'ultima lettura. - Il tick di polling non causa re-render se la versione non cambia (guardia Zustand shallow-equality, I3).
- Nessun WebSocket, nessun endpoint nuovo, nessun ricalcolo layout client-side (I2).
- Home ri-fetcha
GET /stats/overvieweGET /stats/sections; Grafo ri-fetchaGET /graph(coords pre-calcolate lato server, I2 preservato).
WS-B — Coda Revisione: card resolved/dismissed distinte [F9]¶
I tab "In attesa" e "Risolti" restituivano dati corretti dal backend (confermato in Phase 0) ma le card resolved/dismissed erano visivamente identiche a quelle pending:
- Rimosso il prompt "Proposte dell'AI — crea una pagina…" dalle card già risolte.
- Rimossi i pulsanti Crea / Salta / Ignora / Ricerca Profonda dalle card resolved/dismissed (offrirli su item già risolti era un bug logico — nessuna re-creazione accidentale).
- Aggiunto badge di stato risoluzione (es. "auto-risolto") + timestamp + link alla pagina creata quando disponibile.
- Card resolved/dismissed ora mostrano un'affordance read-only / "riapri" al posto delle azioni.
WS-C — Visibilità progresso ingest (% + ETA) [F3, F16]¶
Il widget "Lavori attivi" in Home mostrava solo il conteggio processing. Ora espone i campi
già presenti nel payload ADR-0046 GET /ingest/queue:
- Barra di progresso CSS:
(batch.done / batch.total) × 100, arrotondata all'intero. - ETA: "ETA ~Xs" dal campo
batch.eta_seconds; nascosta senull. - Etichetta fase per ogni task attivo (
phase/progressdal campotasks[]) con chiavi i18n IT/EN (chiavi nuove aggiunte ai file di traduzione per le fasi mancanti). - Nessun endpoint nuovo, nessuna modifica allo schema ADR-0046 (AC-WS-C-4 — OpenAPI drift zero
su
/ingest/queue). Il polling è quello esistente dell'ActivityBar.
WS-D7 — NoteView: scroll singolo, header che scorre col testo [K1, K6, I5]¶
Phase 0 ha confermato che su ogni pagina il body scorreva in un contenitore annidato separato rispetto all'header metadati (titolo, tipo, SORGENTI, CORRELATE), causando collisione visiva del testo con il blocco SORGENTI/CORRELATE:
- Collassato a un singolo contenitore di scroll per la nota.
- L'header metadati scorre insieme al body come un normale blocco in cima: non è sticky e non è collassabile — esce dalla vista verso l'alto man mano che si legge.
- Rimossa la doppia coppia
overflow: autoannidata (root cause confermata dal DOM). - Compatibilità I5 preservata: nessuna modifica al rendering del frontmatter o al body Markdown.
WS-D8 — Nodo albero "Vault / Meta" (schema.md + purpose.md) [K1, K6, I5]¶
schema.md e purpose.md sono scritti al bootstrap ma non erano mai indicizzati come Page
record, quindi non comparivano nell'albero:
- Nuova sezione "Vault / Meta" in fondo all'albero wiki, sempre presente, con due voci
fisse:
schema.mdepurpose.md. - Clic sulla voce → contenuto del file nel pannello editor/preview tramite il path di lettura esistente.
- Nuovo endpoint
GET /vault/meta?vault_id=defaultche legge i due file direttamente da disco (nessuna query Postgres, nessun upsert Qdrant, nessuna pipeline ingest — I1 preservato). - Se uno dei file è assente (fresh install prima del bootstrap), la voce mostra "Not yet generated" senza crash (AC-WS-D8-6).
- I file rimangono Markdown Obsidian-valid con frontmatter YAML (I5); il drawer è read-only dall'albero.
MetaFileViewusa la classe condivisasynapse-markdown__body prose(allineamento CSS).- Il proxy Vite dev (
frontend/vite.config.ts) ora instrada correttamente/vaultverso il backend (il path mancava, causando 404 in sviluppo).
WS-G — Verifica automazioni pianificate [K2, F3, F16, F18]¶
Verificata la funzionalità delle quattro operazioni pianificate (lint, backfill-domains,
schema_review, reclassify) dopo le modifiche di formato di v1.3.5 (log.md narrativo,
frontmatter timestamps, schema.md completo). Nessuna regressione rilevata; eventuali fix
applicati sono stati circoscritti al ripristino del comportamento pre-v1.3.5.
Artefatti documentazione (I8)¶
docs/api/openapi.json— rigenerato viamake openapi:GET /vault/metaora presente (83 path totali, +1 rispetto a v1.3.5).docs/er/schema.mmd— invariato (nessuna migration in v1.3.6; verificagit diffvuota).- Diagrammi di sequenza — invariati (nessun nuovo loop multi-attore).
Note¶
- WS-E (wizard Domani/Gruppi) e WS-F (ristrutturazione Settings) rimandati a v1.3.7.
Richiedono ciascuno un ADR (filtro
/searchper WS-E; IA Settings per WS-F) che non è stato avviato in questo sprint. - L'endpoint
GET /vault/metaaccetta il paramvault_idper compatibilità futura con il modello multi-vault (v2.0), ma attualmente lo ignora — path risolto sempre dasettings.vault_root.