Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
156 changes: 156 additions & 0 deletions README.ar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
> ترجمة مجتمعية (مسوّدة) — سياسة NTARI رقم P2-002، البثّ العالمي المتعدد اللغات. المصدر: README.md (الأصل الإنجليزي، لقطة بتاريخ 2026-07-29). مسوّدة مجتمعية بمساعدة آلية، في انتظار مراجعة مشرف الصيانة الإقليمي وفق P2-002 §3.1. تبقى المواصفات التقنية الأساسية بالإنجليزية وفق §2.2.
>
> تصحيحات الترجمة مساهمات نرحّب بها ونقدّرها كسائر المساهمات، فإذا لاحظت خطأً
> في هذه الترجمة فيمكنك إصلاحه بنفسك عبر إنشاء fork للمستودع وفتح pull
> request: https://github.com/NTARI-RAND/Cloudy

# Cloudy

واجهة أمامية على شبكة التنسيق SoHoLINK / sohocloud. Cloudy هو المكان الذي
يتبادل فيه الأعضاء؛ وهو يستهلك تنسيق الركيزة (substrate) عبر الوحدة المشتركة
`sohocloud-protocol`، ويملك فوقها اقتصاد أعضاء JFA الخاص به.

## الحالة (بصدق)

طبقات اقتصاد أعضاء JFA الثلاث التي يملكها Cloudy — والتي لا يملكها البروتوكول
عن قصد — أصبحت الآن **مبنية، ومعها اختبارات**. ولا تزال لا توجد حلقة تنسيق حيّة
ولا أي سطح مواجه للأعضاء.

- **`internal/record` — مبنية.** سجل مختوم بالحوار، لا يقبل إلا الإضافة،
ومُشهَد عليه: كل Entry يحمل ختمَي الطرفين على بايتات قانونية (canonical)
مفصولة النطاق، بحيث لا يمكن أبدًا أن يدخل السجل عهدٌ نصف مختوم أو مُبرَم مع
الذات؛ والسجلات المتسلسلة بالهاش لكل مُشغِّل تُعاد التحقق منها كاملةً عند
`OpenLog`؛ ونقاط تحقّق المُشغِّل مع التوقيعات المضادة من شهود مستقلين تجعل أي
إعادة كتابة للتاريخ المُثبَّت بنقاط تحقّق قابلةً للكشف تشفيريًا (التحليل على
نمط CT)، أمّا النشر بشاهد واحد فيُوصف صراحةً بأنه البديل المؤقت الذي هو عليه.
لا يوجد أي شكل لمعلومات التعريف الشخصية (PII) في المشاعات — فالمحتوى المُعرِّف
للهوية يقيم فقط في الـ Locker المحلي للعضو والقابل للمحو. و`Entry.ID()`، أي
هاش الورقة، هو المرجع الوحيد للتبادل بين الطبقات.
- **`internal/economy` — مبنية.** ائتمان متبادل سيادي لكل منصة: يُصدَر الائتمان
في لحظة الإنفاق، داخل سقف مدين واحد موحّد ومحكوم، ومجموع كل الأرصدة يساوي
صفرًا دائمًا وبالضبط. لا يمكن تمثيل أي سكّ للعملة، ولا حقل للعملة الورقية
(fiat)، ولا استرداد، ولا حقل ملاحظة؛ والانتقال من الضمان-الآن إلى
الائتمان-لاحقًا هو بالضبط عملية PolicyChange واحدة موقَّعة بنصاب على المخزن
نفسه الذي لا يقبل إلا الإضافة؛ و`Open` يعيد تشغيل كل سجل ويعيد التحقق منه
بالكامل. و`Spend.ExchangeHash` يحمل معرّف ورقة مدخل السجل، لكنه معتم عن قصد
وغير مُتحقَّق منه عند Post — فالتثبيت شأن يخصّ جذر التركيب.
- **`internal/covenant` — مبنية.** السمعة على مقياس NTARI لتقييم التبادل المبني
على ليفيسون (Leveson-Based Trade Assessment Scale، أو LBTAS): ستة مستويات
محمّلة بالمعنى، من -1 «لا ثقة» (No Trust) إلى +4 «إسعاد» (Delight)، ثنائية
الاتجاه (كلا طرفَي التبادل المختوم يقيّم الآخر)، تُعرَض لكل فئة على مفردات
مغلقة (الافتراضية: الموثوقية، وقابلية الاستخدام، والأداء، والدعم)، ولا تُقرأ
إلا كتوزيعات كاملة للعدد في كل مستوى — لكل فئة، ومجمّعة إجماليًا، مع عدّاد ضرر
يُظهر كل -1 — **ولا تُحسَب متوسطاتها أبدًا**، بلا أي نتيجة رقمية، ولا تصدير،
ولا تعديل، ولا تراجع، ولا مقارنة بين الأعضاء في أي مكان (اختباران كاشفان —
مسحٌ لمجموعة الدوال عبر reflection، ومسحٌ للدوال المُصدَّرة عبر go/ast —
يحافظان على ذلك). ويستلزم الحكم بـ -1 تعليقًا مُبرِّرًا؛ ونصّ التعليق يقيم في
الـ Locker المحلي للعضو والقابل للمحو، بينما لا يسافر في المشاعات إلا هاشه. كل
تقييم موقَّع من المُقيِّم ومُسعَّر بتبادل مختوم واحد عبر بوابة Anchors؛
ومعرّفات الأعضاء هي هاشات مفاتيح محدودة النطاق بالمنصة، والمعرّفات التي
يختارها البشر مرفوضة رفضًا تامًا. وتقيم المواصفة المُلزِمة والتنفيذ المرجعي في
`Development/Covenant/Leveson-Based-Trade-Assessment-Scale`.
- **قائم لكنه رقيق:** `internal/coord` — عميل رقيق فوق نقل HTTP+JSON المرجعي
الخاص بالبروتوكول، يثبت أن Cloudy يستهلك `sohocloud-protocol`. و`cmd/cloudy`
يبنيه ويُبلِّغ عن بدء التشغيل؛ ولا توجد بعد أي حلقة تنسيق حيّة.

يبني `cmd/cloudy` الآن الطبقات الثلاث كلها في الذاكرة عند بدء التشغيل (نشأة
ModeEscrow، وسجل مُشغِّل فارغ، ودفتر عهود فارغ فوق دليل أعضاء مشترك فارغ)،
ويسجّل سطرًا صادقًا واحدًا لكل طبقة. وكل حزمة تسمّي ثوابتها غير القابلة للتفاوض
في توثيق الحزمة الخاص بها.

## ما يملكه Cloudy (البنية المعمارية)

في ظل البنية المعمارية المستقرّة، يملك Cloudy — الواجهة الأمامية — عالم العضو
بأكمله. ثلاث قدرات، ومالك واحد:

- **اقتصاد أعضاء JFA — مبني.** `internal/economy` (ائتمان يُصدره الأعضاء)،
و`internal/covenant` (سمعة LBTAS)، و`internal/record` (سجل مختوم بالحوار)،
بالضبط كما وُثِّق أعلاه. هذه ملكٌ لـ Cloudy وليست للبروتوكول عن قصد: فالأشخاص
لا يظهرون أبدًا على الشبكة.
- **وكيل العقدة — يملكه Cloudy، ويستضيفه حاليًا مستودع المنسّق في انتظار
الترحيل.** كشف العتاد، وملفّات الموارد، وتوليد قوائم القدرات، ونبضة الحياة
(heartbeat)، ومُنفِّذ المهام، وفرض الانسحاب/قوائم السماح محليًا، والقياس
البعدي (telemetry)، ومُثبِّت جهاز العضو. هذا الكود (`internal/agent`
و`cmd/agent` ومُثبِّت MSI) يقيم اليوم في مستودع SoHoLINK ويظل يعمل هناك — وهو
من مخلّفات العهد الذي كان فيه SoHoLINK واجهةً أمامية ومنسّقًا في الوقت نفسه،
لا من دور SoHoLINK على المدى الطويل. الوكيل هو حضور العضو على جهازه الخاص،
ولذلك ينتمي إلى الواجهة الأمامية؛ فالمنسّق الذي يشحن وكلاء إلى عتاد الأعضاء هو
منسّق يلمس عتاد الأعضاء، وهو ما يجب ألّا يفعله SoHoLINK أبدًا.
- **بوّابة الأعضاء — يملكها Cloudy، ويستضيفها حاليًا مستودع المنسّق في انتظار
الترحيل.** التسجيل، وتسجيل الدخول، ولوحة المعلومات، وإرسال المهام، والانسحاب.
السطح الذي كان يُسمّى سابقًا «بوّابة المشاركين» (`internal/portal`
و`cmd/portal` و`web/` في مستودع SoHoLINK) هو من الآن فصاعدًا بوّابة أعضاء
تابعة لـ Cloudy — فهوية العضو شأن يخصّ الواجهة الأمامية، ولذلك يجب أن يكون
البابُ الذي يعبره الأعضاء هو باب الواجهة الأمامية.

وكيل العقدة وبوّابة الأعضاء هما معلَما البناء التاليان، بعد أن أصبحت الطبقات
الثلاث مكتملةً كمكتبات. وكما تقول الحالة أعلاه بصدق: لا مدخل هنا بعد لأي منهما،
ولا شيء في هذا المستودع يتظاهر بأن الترحيل قد حدث فعلًا.

### مسرد المصطلحات

- **العضو (Member)** — شخص، دائمًا بالنسبة إلى واجهة أمامية/منصة. الهوية
(MemberID محدود النطاق بالمنصة)، والائتمان، والمكانة على LBTAS، والسجلات
المختومة، ومعلومات التعريف الشخصية (PII) (قابلة للمحو، ومحلية للعضو)، والأجهزة
المُساهَم بها — كلها وقائع عضوية. والعضوية لغةُ عهد — التزام متبادل تجاه منصة
معيّنة؛ فالإنسان نفسه يكون عضوًا مختلفًا على كل منصة بالبناء التشفيري.
- **المشارك (Participant)** — دور، لا كِيان: عضو يعمل داخل الاقتصاد المنسَّق،
مساهمًا بعُقَد و/أو مُرسِلًا مهامًا — هوية موحّدة واحدة، لا تُقسَّم أبدًا إلى
مُنتِج ومُستهلِك. أمّا سجلات الأشخاص على جانب المنسّق (جدول participants في
SoHoLINK وحسابات البوّابة) فهي أسطح انتقالية من العهد المزدوج.
- **العقدة (Node)** — جهاز يساهم به عضو، يُعرَّف بـ NodeID مع ربط SPIFFE
`/node/<id>` (حزمة `identity/` الخاصة بالبروتوكول).

### الهوية تجاه المنسّق

هويّتان تعبران الحدّ بين الواجهة الأمامية والمنسّق، ويجب ألّا تُخلطا. أجهزة
الأعضاء تحمل **هوية حِمل العمل** (workload identity): شهادة SPIFFE SVID تحت
`/node/<id>`، مُصرَّح بها على جانب المنسّق بما يطابق تمامًا SPEC البروتوكول —
هوية آلة، بلا تغيير. أمّا Cloudy نفسه فيستوثق بوصفه **مُشغِّلًا** مُسجَّلًا:
نموذج «الواجهة الأمامية كمُشغِّل»، وهو **هدف تصميمي** مصوغ على نمط مخطط
المُشغِّلين في المرحلة 5 من Agrinet (سجل operators + operator-keys؛ ومجموعة
مفاتيح Ed25519 دوّارة من سبعة مفاتيح، كل إرسال موقَّع باثنين منها؛ وإعادة
الإرسال (replay) مقيَّدة بنافذة زمنية إضافةً إلى مخزن nonce — انظر
`Development/Economy/Agrinet backend/lib/operatorKeys.js` و
`backend/middleware/operatorAuth.js`). التدوير هو المقصود: فالمفتاح المشترك
الثابت الذي لا يُدوَّر أبدًا هو بالضبط النمط المضاد الذي يحذّر المرجع من توريثه.
ولا تكون أيٌّ من الهويّتين شخصًا أبدًا: فهوية العضو تبقى داخل Cloudy.

## ثابت مخطَّط الاستيراد

يستورد Cloudy الوحدة `sohocloud-protocol`؛ و**لا شيء يستورد Cloudy**. يعتمد
Cloudy على نواة البروتوكول وعلى نقله المرجعي، ولا يتجاوز أيًّا منهما. اتجاه
التبعية هو ما يُبقي الواجهة الأمامية والمنسّق قابلين للفصل: فيمكن استبدال واجهة
أمامية دون المساس بالركيزة، والركيزة لا تعرف شيئًا عن أي واجهة أمامية بعينها.

وداخل Cloudy، لا تستورد حزم JFA الثلاث بعضها بعضًا أبدًا؛ فكل واحدة لا ترى إلا
المكتبة القياسية وحزمة `canon` الخاصة بالبروتوكول، وكل الاستيرادات تبقى أحادية
الاتجاه. وهي لا تتلاقى إلا عند جذر التركيب: `test/composition` هو اختبار جذر
التركيب الوحيد — وفيه يقيم دليل الأعضاء المشترك الواحد، ومُسند Anchors الذي يصل
العهد بالسجل عبر `Entry.ID()`، وقصة العضو الكاملة — و`cmd/cloudy` ينفّذ التركيب
نفسه عند بدء التشغيل.

## البناء

وحدة البروتوكول خاصة وغير موسومة حاليًا. وهذا الهيكل يحلّها عبر توجيه `replace`
يشير إلى **نسخة محلية مجاورة**:

```
replace github.com/NTARI-RAND/sohocloud-protocol => ../sohocloud-protocol
```

لذلك يجب استنساخ `sohocloud-protocol` بجانب `Cloudy` (كلاهما تحت المجلد الأب
نفسه). وهذا الـ `replace` تسهيلٌ للتطوير المحلي — وهو غير قابل للبناء من قِبَل
الآخرين كما هو. وسيتطلب نشر Cloudy للبناء الخارجي وسمَ وحدة البروتوكول (أو إعداد
`GOPRIVATE` مع جلب موثَّق) وإسقاط الـ `replace`.

```
go build ./...
go test ./...
```

## الترخيص

AGPL-3.0-or-later.

*Network Theory Applied Research Institute, Inc. — 501(c)(3) — EIN 92-3047136 — info@ntari.org*
Loading
Loading