Bonjour à la communauté Discourse,
Je voudrais me présenter : je suis un concepteur de systèmes explorant actuellement l’écosystème Discourse. Bien que je doive admettre ne pas être encore un expert de l’architecture interne de Discourse, j’ai choisi cette plateforme pour mon projet à venir en raison de sa gestion de données robuste et de sa solide structure communautaire.
Je prépare actuellement une proposition à présenter à mon superviseur pour approbation du développement. Mon objectif en partageant ceci ici est de recueillir des commentaires, des aperçus ou des critiques constructives de la part de ceux d’entre vous qui connaissent le mieux la plateforme. Votre contribution serait inestimable pour m’aider à affiner ce concept, à garantir qu’il s’aligne sur les meilleures pratiques de Discourse et, finalement, à augmenter les chances d’approbation du projet.
Note : Le contenu ci-dessous est assez détaillé. Merci d’avance pour tous les conseils que vous pourrez offrir.
Il se peut que je ne puisse pas répondre immédiatement, mais je veillerai à lire et à répondre à chaque commentaire dès que possible.
Spécification Technique
Titre du Projet : Discourse OriginGraph & Facto-Mapper
Sous-titre : Système Natif de Suivi de Provenance des Données et d’Analyse de Fiabilité
Version : 1.0.0 (Proposition)
1. Résumé Exécutif
À une époque de diffusion rapide de l’information, les plateformes de discussion comme Discourse excellent dans l’argumentation structurée mais manquent d’outils natifs pour l’Analyse de Provenance des Données et la Visualisation de l’Évolution Structurelle.
Discourse OriginGraph & Facto-Mapper est un plugin conçu pour transformer Discourse d’un forum de discussion standard en une Couche Systématique de Vérification des Faits et de Renseignement. Il exploite la théorie des graphes pour tracer l’ascendance de l’information, visualiser les relations et calculer des métriques de fiabilité sans perturber l’expérience utilisateur de base.
2. Objectifs Techniques
- Traçabilité : Graphe Acyclique Dirigé (DAG) pour Source → Expansion → Vérification
- Visualisation : Cartes de Faits interactives dans l’interface utilisateur de Discourse
- Analyse Heuristique : Notation basée sur la confiance pondérée (pas de vrai/faux binaire)
- Performance : Traitement asynchrone via Sidekiq
- Intégration : Adhésion stricte à l’architecture des plugins Discourse
3. Périmètre des Travaux
3.1 Dans le Périmètre (In-Scope)
- Graphique des relations intra-sujets (réponse, citation, mention)
- Extraction de signaux à partir du HTML cuit (cooked HTML)
- Notation de l’Origine / Stabilité configurable
- Gouvernance via les Niveaux de Confiance (Trust Levels) de Discourse
3.2 Hors Périmètre (Out-of-Scope)
- Analyse sémantique NLP / LLM (Phase 1)
- Remplacement de la recherche globale
- Fédérations inter-instances
4. Architecture Système
4.1 Pile Technologique
- Backend : Ruby on Rails (Noyau Discourse), Sidekiq
- Frontend : Ember.js, D3.js ou Cytoscape.js
- Base de données : PostgreSQL 13+, Redis
- Échange de données : API JSON interne
4.2 Diagramme d’Architecture Conceptuel
[Client: Ember.js] <-- JSON --> [Contrôleur : Rails]
| |
(Graphique Interactif) (Validation des Requêtes)
| |
v v
[Bibliothèque de Visualisation] [Pool de Travailleurs Sidekiq]
|
+--------+--------+
| |
[Moteur de Graphe] [Moteur de Notation]
| |
+--------+--------+
|
[PostgreSQL]
(Arêtes / Instantanés / Journaux)
5. Modèle de Données (Conception du Schéma)
5.1 Table : provenance_edges
| Colonne | Type | Index | Description |
|---|---|---|---|
| id | BigInt | PK | ID d’Arête Unique |
| topic_id | Integer | IDX | Référence du Sujet |
| source_post_id | Integer | IDX | Nœud Source |
| target_post_id | Integer | IDX | Nœud Destination |
| relation_type | Enum | réponse, citation, référence, correction, contradiction | |
| weight | Float | Force de l’Arête | |
| metadata | JSONB | Données de Contexte |
5.2 Table : facto_graph_snapshots
| Colonne | Type | Index | Description |
|---|---|---|---|
| id | BigInt | PK | ID de l’Instantané |
| topic_id | Integer | UNIQUE | Sujet Associé |
| version | Integer | Version du Graphe | |
| graph_payload | JSONB | Nœuds et Arêtes | |
| computed_at | Datetime | Heure de Génération | |
| is_public | Boolean | Indicateur de Visibilité |
5.3 Clés Redis
- facto:quota:user:{id}:daily
- facto:job:topic:{id}:status
6. Spécification de l’API Interne
POST /facto/analyze
- Auth : TL1+
- Params : topic_id, force_recalc
- Réponse : 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. Algorithmes & Logique
7.1 Logique d’Extraction de Signal
- Itérer sur tous les messages du sujet
- reply_to_post_number → Arête de Réponse (Reply edge)
- Analyser le HTML cuit → Arête de Citation (Quote edge)
- Regex @nomutilisateur → Arête de Mention (Mention edge)
7.2 Algorithme de Notation
Centralité pondérée (style PageRank) :
Score(P) = (1 - d) + d × Σ((Score(Pi) × Weight(Ei,P)) / OutDegree(Pi))
Les arêtes de contradiction appliquent des multiplicateurs de pénalité.
8. UX / UI
- Point d’entrée : Bouton Vue Graphique dans la carte du sujet
- Graphique modal plein écran
- Survol du nœud : extrait du message + auteur
- Clic sur le nœud : défilement vers le message
- Filtres : basculer les types d’arêtes
9. Sécurité & Gouvernance
- Limitation de débit via Discourse RateLimiter
- Assainissement JSONB pour prévenir le XSS
- Les sujets privés héritent de l’ACL de Discourse
10. Feuille de Route de Développement
- Phase 1 : Extraction du graphe MVP + rendu de base
- Phase 2 : Notation avancée + gouvernance des instantanés
- Phase 3 : Annotations de modérateur + API externe