Skip to content

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_version cambia 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/overview e GET /stats/sections; Grafo ri-fetcha GET /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 se null.
  • Etichetta fase per ogni task attivo (phase/progress dal campo tasks[]) 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: auto annidata (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.md e purpose.md.
  • Clic sulla voce → contenuto del file nel pannello editor/preview tramite il path di lettura esistente.
  • Nuovo endpoint GET /vault/meta?vault_id=default che 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.
  • MetaFileView usa la classe condivisa synapse-markdown__body prose (allineamento CSS).
  • Il proxy Vite dev (frontend/vite.config.ts) ora instrada correttamente /vault verso 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 via make openapi: GET /vault/meta ora presente (83 path totali, +1 rispetto a v1.3.5).
  • docs/er/schema.mmd — invariato (nessuna migration in v1.3.6; verifica git diff vuota).
  • 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 /search per WS-E; IA Settings per WS-F) che non è stato avviato in questo sprint.
  • L'endpoint GET /vault/meta accetta il param vault_id per compatibilità futura con il modello multi-vault (v2.0), ma attualmente lo ignora — path risolto sempre da settings.vault_root.