Ciao Community di Discourse,
Vorrei presentarmi: sono un system designer che sta esplorando l’ecosistema di Discourse. Ammetto di non essere ancora un esperto dell’architettura interna di Discourse, ma ho scelto questa piattaforma per il mio prossimo progetto grazie alla sua robusta gestione dei dati e alla forte struttura comunitaria.
Attualmente sto preparando una proposta da presentare al mio supervisore per l’approvazione dello sviluppo. Il mio obiettivo nel condividerla qui è raccogliere feedback, approfondimenti o critiche costruttive da parte di coloro che conoscono meglio la piattaforma. Il vostro contributo sarebbe prezioso per aiutarmi a perfezionare questo concetto, assicurarmi che sia allineato con le best practice di Discourse e, in definitiva, aumentare le probabilità di approvazione del progetto.
Nota: Il contenuto seguente è piuttosto dettagliato. Grazie in anticipo per qualsiasi consiglio possiate offrire.
Potrei non essere in grado di rispondere immediatamente, ma mi assicurerò di leggere e rispondere a ogni commento il prima possibile.
Specifiche Tecniche
Titolo del Progetto: Discourse OriginGraph & Facto-Mapper
Sottotitolo: Sistema Nativo per il Tracciamento della Provenienza dei Dati e l’Analisi di Affidabilità
Versione: 1.0.0 (Proposta)
1. Sommario Esecutivo
In un’era di rapida diffusione delle informazioni, piattaforme di discussione come Discourse eccellono nell’argomentazione strutturata ma mancano di strumenti nativi per l’Analisi della Provenienza dei Dati e la Visualizzazione dell’Evoluzione Strutturale.
Discourse OriginGraph & Facto-Mapper è un plugin progettato per trasformare Discourse da un forum di discussione standard a un Livello Sistematico di Verifica dei Fatti e di Intelligence. Sfrutta la teoria dei grafi per tracciare la filiera delle informazioni, visualizzare le relazioni e calcolare metriche di affidabilità senza interrompere l’esperienza utente principale.
2. Obiettivi Tecnici
- Tracciabilità: Grafo Aciclico Diretto (DAG) per Sorgente → Espansione → Verifica
- Visualizzazione: Mappe dei Fatti interattive nell’interfaccia utente di Discourse
- Analisi Euristica: Punteggio basato sulla confidenza ponderata (nessun vero/falso binario)
- Prestazioni: Elaborazione asincrona tramite Sidekiq
- Integrazione: Rigorosa aderenza all’architettura dei plugin di Discourse
3. Ambito di Lavoro
3.1 Incluso nell’Ambito (In-Scope)
- Rappresentazione grafica delle relazioni intra-argomento (risposta, citazione, menzione)
- Estrazione di segnali dall’HTML “cotto” (cooked HTML)
- Punteggio di Origine / Stabilità configurabile
- Governance tramite Livelli di Fiducia (Trust Levels) di Discourse
3.2 Escluso dall’Ambito (Out-of-Scope)
- Analisi semantica NLP / LLM (Fase 1)
- Sostituzione della ricerca globale
- Federazione tra istanze
4. Architettura del Sistema
4.1 Stack Tecnologico
- Backend: Ruby on Rails (Core di Discourse), Sidekiq
- Frontend: Ember.js, D3.js o Cytoscape.js
- Database: PostgreSQL 13+, Redis
- Interscambio Dati: API JSON interna
4.2 Diagramma Architetturale Concettuale
[Client: Ember.js] <-- JSON --> [Controller: Rails]
| |
(Grafo Interattivo) (Validazione Richieste)
| |
v v
[Libreria di Visualizzazione] [Pool di Lavoratori Sidekiq]
|
+--------+--------+
| |
[Motore Grafi] [Motore di Punteggio]
| |
+--------+--------+
|
[PostgreSQL]
(Archi / Snapshot / Log)
5. Modello Dati (Progettazione Schema)
5.1 Tabella: provenance_edges
| Colonna | Tipo | Indice | Descrizione |
|---|---|---|---|
| id | BigInt | PK | ID Arco Univoco |
| topic_id | Integer | IDX | Riferimento Argomento |
| source_post_id | Integer | IDX | Nodo di Origine |
| target_post_id | Integer | IDX | Nodo Destinazione |
| relation_type | Enum | reply, quote, ref, correction, contradiction | |
| weight | Float | Forza dell’Arco | |
| metadata | JSONB | Dati di Contesto |
5.2 Tabella: facto_graph_snapshots
| Colonna | Tipo | Indice | Descrizione |
|---|---|---|---|
| id | BigInt | PK | ID Snapshot |
| topic_id | Integer | UNIQUE | Argomento Associato |
| version | Integer | Versione del Grafo | |
| graph_payload | JSONB | Nodi e archi | |
| computed_at | Datetime | Tempo di Generazione | |
| is_public | Boolean | Flag di Visibilità |
5.3 Chiavi Redis
- facto:quota:user:{id}:daily
- facto:job:topic:{id}:status
6. Specifiche API Interna
POST /facto/analyze
- Auth: TL1+
- Parametri: topic_id, force_recalc
- Risposta: job_id, status = queued
GET /facto/graph/:topic_id
version: 5
nodes:
- id: 101
group: source
score: 0.8
edges:
- source: 101
target: 105
type: verification
7. Algoritmi e Logica
7.1 Logica di Estrazione del Segnale
- Iterare tutti i post nell’argomento
- reply_to_post_number → Arco di Risposta (Reply edge)
- Analizzare l’HTML cotto → Arco di Citazione (Quote edge)
- Regex @usernameusername → Arco di Menzione (Mention edge)
7.2 Algoritmo di Punteggio
Centralità ponderata (stile PageRank):
Score(P) = (1 - d) + d × Σ((Score(Pi) × Weight(Ei,P)) / OutDegree(Pi))
Gli archi di contraddizione applicano moltiplicatori di penalità.
8. UX / UI
- Punto di ingresso: Pulsante “Vista Grafo” nella mappa dell’argomento
- Grafo modale a schermo intero
- Passando il mouse sul nodo: snippet del post + autore
- Clic sul nodo: scorrimento al post
- Filtri: attivazione/disattivazione tipi di arco
9. Sicurezza e Governance
- Limitazione della frequenza tramite Discourse RateLimiter
- Sanitizzazione JSONB per prevenire XSS
- Gli argomenti privati ereditano l’ACL di Discourse
10. Roadmap di Sviluppo
- Fase 1: Estrazione MVP del grafo + rendering di base
- Fase 2: Punteggio avanzato + governance degli snapshot
- Fase 3: Annotazioni del moderatore + API esterna