Olá Comunidade Discourse,
Gostaria de me apresentar: sou um designer de sistemas explorando atualmente o ecossistema Discourse. Embora admita que ainda não sou um especialista na arquitetura interna do Discourse, escolhi esta plataforma para o meu próximo projeto devido à sua robusta gestão de dados e forte estrutura comunitária.
Atualmente, estou preparando uma proposta para apresentar à minha supervisora para aprovação do desenvolvimento. Meu objetivo ao compartilhar isto aqui é coletar feedback, percepções ou críticas construtivas daqueles que conhecem melhor a plataforma. Sua contribuição seria inestimável para me ajudar a refinar este conceito, garantir que ele se alinhe com as melhores práticas do Discourse e, finalmente, aumentar as chances de aprovação do projeto.
Nota: O conteúdo abaixo é bastante detalhado. Agradeço antecipadamente por qualquer conselho que possam oferecer.
Pode ser que eu não consiga responder imediatamente, mas farei questão de ler e responder a todos os comentários o mais breve possível.
Especificação Técnica
Título do Projeto: Discourse OriginGraph & Facto-Mapper
Subtítulo: Sistema Nativo de Rastreamento de Proveniência de Dados e Análise de Confiabilidade
Versão: 1.0.0 (Proposta)
1. Resumo Executivo
Em uma era de rápida disseminação de informações, plataformas de discussão como o Discourse se destacam na argumentação estruturada, mas carecem de ferramentas nativas para Análise de Proveniência de Dados e Visualização da Evolução Estrutural.
Discourse OriginGraph & Facto-Mapper é um plugin projetado para transformar o Discourse de um fórum de discussão padrão em uma Camada Sistemática de Verificação de Fatos e Inteligência. Ele utiliza a teoria dos grafos para rastrear a linhagem da informação, visualizar relacionamentos e calcular métricas de confiabilidade sem interromper a experiência central do usuário.
2. Objetivos Técnicos
- Rastreabilidade: Grafo Acíclico Direcionado (DAG) para Fonte → Expansão → Verificação
- Visualização: Mapas de Fatos Interativos na Interface do Usuário do Discourse
- Análise Heurística: Pontuação baseada em confiança ponderada (sem verdadeiro/falso binário)
- Desempenho: Processamento assíncrono via Sidekiq
- Integração: Adesão estrita à arquitetura de plugins do Discourse
3. Escopo do Trabalho
3.1 No Escopo
- Criação de grafos de relacionamento intra-tópico (resposta, citação, menção)
- Extração de sinais do HTML cozido (cooked HTML)
- Pontuação configurável de Origem / Estabilidade
- Governança via Níveis de Confiança (Trust Levels) do Discourse
3.2 Fora do Escopo
- Análise semântica de PNL / LLM (Fase 1)
- Substituição da busca global
- Federação entre instâncias
4. Arquitetura do Sistema
4.1 Pilha de Tecnologia (Technology Stack)
- Backend: Ruby on Rails (Núcleo do Discourse), Sidekiq
- Frontend: Ember.js, D3.js ou Cytoscape.js
- Banco de Dados: PostgreSQL 13+, Redis
- Intercâmbio de Dados: API JSON Interna
4.2 Diagrama de Arquitetura Conceitual
[Cliente: Ember.js] <-- JSON --> [Controlador: Rails]
| |
(Gráfico Interativo) (Validação de Requisição)
| |
v v
[Biblioteca de Visualização] [Pool de Workers Sidekiq]
|
+--------+--------+
| |
[Motor de Grafo] [Motor de Pontuação]
| |
+--------+--------+
|
[PostgreSQL]
(Arestas / Snapshots / Logs)
5. Modelo de Dados (Design de Esquema)
5.1 Tabela: provenance_edges
| Coluna | Tipo | Índice | Descrição |
|---|---|---|---|
| id | BigInt | PK | ID da Aresta Única |
| topic_id | Integer | IDX | Referência do Tópico |
| source_post_id | Integer | IDX | Nó de Origem |
| target_post_id | Integer | IDX | Nó de Destino |
| relation_type | Enum | resposta, citação, referência, correção, contradição | |
| weight | Float | Força da Aresta | |
| metadata | JSONB | Dados de Contexto |
5.2 Tabela: facto_graph_snapshots
| Coluna | Tipo | Índice | Descrição |
|---|---|---|---|
| id | BigInt | PK | ID do Snapshot |
| topic_id | Integer | UNIQUE | Tópico Associado |
| version | Integer | Versão do Grafo | |
| graph_payload | JSONB | Nós e Arestas | |
| computed_at | Datetime | Tempo de Geração | |
| is_public | Boolean | Sinalizador de Visibilidade |
5.3 Chaves Redis
- facto:quota:user:{id}:daily
- facto:job:topic:{id}:status
6. Especificação da API Interna
POST /facto/analyze
- Auth: TL1+
- Parâmetros: topic_id, force_recalc
- Resposta: 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. Algoritmos & Lógica
7.1 Lógica de Extração de Sinal
- Iterar todas as postagens no tópico
- reply_to_post_number → Aresta de Resposta (Reply edge)
- Analisar HTML cozido → Aresta de Citação (Quote edge)
- Regex @usernameusername → Aresta de Menção (Mention edge)
7.2 Algoritmo de Pontuação
Centralidade ponderada (estilo PageRank):
Score(P) = (1 - d) + d × Σ((Score(Pi) × Weight(Ei,P)) / OutDegree(Pi))
Arestas de contradição aplicam multiplicadores de penalidade.
8. UX / UI
- Ponto de entrada: Botão de Visualização de Grafo no mapa do tópico
- Gráfico em modal de tela cheia
- Passar o mouse sobre o nó: trecho da postagem + autor
- Clicar no nó: rolar até a postagem
- Filtros: alternar tipos de arestas
9. Segurança & Governança
- Limitação de taxa (Rate limiting) via Discourse RateLimiter
- Sanitização de JSONB para prevenir XSS
- Tópicos privados herdam o ACL do Discourse
10. Roteiro de Desenvolvimento
- Fase 1: Extração de grafo MVP + renderização básica
- Fase 2: Pontuação avançada + governança de snapshots
- Fase 3: Anotações de moderador + API externa