[مقترح] إثبات مصدر البيانات الأصلي وتعيين الحقائق لـ Discourse

أهلاً بمجتمع Discourse،

أود أن أقدم نفسي—أنا مصمم أنظمة أستكشف حاليًا منظومة Discourse. بينما أعترف بأنني لست خبيرًا بعد في البنية الداخلية لـ Discourse، فقد اخترت هذه المنصة لمشروعي القادم بسبب إدارتها القوية للبيانات وهيكلها المجتمعي المتين.

أقوم حاليًا بإعداد مقترح لعرضه على مشرفي للحصول على موافقة التطوير. هدفي من المشاركة هنا هو جمع الملاحظات أو الرؤى أو النقد البناء من أولئك منكم الذين يعرفون المنصة بشكل أفضل. ستكون مدخلاتكم لا تقدر بثمن في مساعدتي على صقل هذا المفهوم، وضمان توافقه مع أفضل ممارسات Discourse، وفي نهاية المطاف زيادة فرص الموافقة على المشروع.

ملاحظة: المحتوى أدناه مفصل للغاية. شكرًا مقدمًا على أي نصيحة يمكنكم تقديمها.
قد لا أتمكن من الرد فورًا، ولكني سأحرص على قراءة والرد على كل تعليق في أقرب وقت ممكن.


المواصفات التقنية

عنوان المشروع: Discourse OriginGraph و Facto-Mapper
عنوان فرعي: نظام أصالة البيانات الأصلي وتتبع الموثوقية
الإصدار: 1.0.0 (مقترح)


1. الملخص التنفيذي

في عصر سرعة انتشار المعلومات، تتفوق منصات النقاش مثل Discourse في الحجج المنظمة ولكنها تفتقر إلى أدوات أصلية لـ تحليل أصالة البيانات و تصور التطور الهيكلي.

Discourse OriginGraph و Facto-Mapper هو إضافة (plugin) مصممة لتحويل Discourse من منتدى نقاش قياسي إلى طبقة استخبارات وتحقق منهجي من الحقائق. وهي تستفيد من نظرية الرسم البياني لتتبع سلالة المعلومات، وتصور العلاقات، وحساب مقاييس الموثوقية دون تعطيل تجربة المستخدم الأساسية.


2. الأهداف التقنية

  • التتبع: رسم بياني غير دوري موجه (DAG) للمصدر ← التوسع ← التحقق
  • التصور: خرائط حقائق تفاعلية في واجهة مستخدم Discourse
  • التحليل الاستدلالي: تسجيل قائم على الثقة الموزونة (لا يوجد تحقق ثنائي صحيح/خطأ)
  • الأداء: معالجة غير متزامنة عبر Sidekiq
  • التكامل: الالتزام الصارم بهيكلية إضافات Discourse

3. نطاق العمل

3.1 ضمن النطاق

  • رسم بياني للعلاقات داخل الموضوع (الرد، الاقتباس، الإشارة)
  • استخلاص الإشارات من HTML المطبوخ (cooked HTML)
  • تسجيل قابل للتكوين للأصالة / الاستقرار
  • الحوكمة عبر مستويات الثقة في Discourse

3.2 خارج النطاق

  • تحليل الدلالات باستخدام معالجة اللغة الطبيعية / النماذج اللغوية الكبيرة (المرحلة 1)
  • استبدال البحث الشامل
  • الاتحاد عبر المثيلات (Cross-instance federation)

4. بنية النظام

4.1 حزمة التقنيات

  • الواجهة الخلفية: Ruby on Rails (نواة Discourse)، Sidekiq
  • الواجهة الأمامية: Ember.js، D3.js أو Cytoscape.js
  • قاعدة البيانات: PostgreSQL 13+، Redis
  • تبادل البيانات: واجهة برمجة تطبيقات JSON داخلية

4.2 مخطط البنية المفاهيمي

[العميل: Ember.js]  <-- JSON -->  [المتحكم: Rails]
       |                                  |
(رسم بياني تفاعلي)              (التحقق من الطلب)
       |                                  |
       v                                  v
[مكتبة التصور]             [مجموعة عمال Sidekiq]
                                          |
                                 +--------+--------+
                                 |                 |
                          [محرك الرسم البياني]     [محرك التسجيل]
                                 |                 |
                                 +--------+--------+
                                          |
                                    [PostgreSQL]
                           (الحواف / اللقطات / السجلات)

5. نموذج البيانات (تصميم المخطط)

5.1 جدول: provenance_edges

العمود النوع الفهرس الوصف
id BigInt PK معرف الحافة الفريد
topic_id Integer IDX مرجع الموضوع
source_post_id Integer IDX عقدة المصدر
target_post_id Integer IDX عقدة الوجهة
relation_type Enum رد، اقتباس، مرجع، تصحيح، تناقض
weight Float قوة الحافة
metadata JSONB بيانات السياق

5.2 جدول: facto_graph_snapshots

العمود النوع الفهرس الوصف
id BigInt PK معرف اللقطة
topic_id Integer UNIQUE الموضوع المرتبط
version Integer إصدار الرسم البياني
graph_payload JSONB حمولة العقد والحواف
computed_at Datetime وقت الإنشاء
is_public Boolean علامة الرؤية

5.3 مفاتيح Redis

  • facto:quota:user:{id}:daily
  • facto:job:topic:{id}:status

6. مواصفات واجهة برمجة التطبيقات الداخلية

POST /facto/analyze

  • المصادقة: TL1+
  • المعلمات: topic_id، force_recalc
  • الاستجابة: 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. الخوارزميات والمنطق

7.1 منطق استخلاص الإشارة

  • تكرار جميع المشاركات في الموضوع
  • reply_to_post_number → حافة الرد
  • تحليل HTML المطبوخ → حافة الاقتباس
  • Regex @usernameusername → حافة الإشارة

7.2 خوارزمية التسجيل

المركزية الموزونة (على غرار PageRank):

Score(P) = (1 - d) + d × Σ((Score(Pi) × Weight(Ei,P)) / OutDegree(Pi))

حواف التناقض تطبق مضاعفات عقوبة.


8. تجربة المستخدم / واجهة المستخدم

  • نقطة الدخول: زر عرض الرسم البياني في خريطة الموضوع
  • رسم بياني في وضع ملء الشاشة
  • تمرير الماوس فوق العقدة: مقتطف المشاركة + المؤلف
  • النقر على العقدة: التمرير إلى المشاركة
  • المرشحات: تبديل أنواع الحواف

9. الأمان والحوكمة

  • تحديد المعدل عبر Discourse RateLimiter
  • تطهير JSONB لمنع هجمات XSS
  • المواضيع الخاصة ترث ضوابط الوصول في Discourse (ACL)

10. خارطة طريق التطوير

  • المرحلة 1: استخراج الرسم البياني الأساسي + العرض الأولي
  • المرحلة 2: التسجيل المتقدم + حوكمة اللقطات
  • المرحلة 3: شروحات المشرفين + واجهة برمجة تطبيقات خارجية
إعجاب واحد (1)