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
69 changes: 69 additions & 0 deletions CONFORMANCE.ar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
> ترجمة مجتمعية (مسوّدة) — سياسة NTARI رقم P2-002، البث العالمي المتعدد اللغات. المصدر: CONFORMANCE.md (الأصل الإنجليزي، لقطة بتاريخ 2026-10-05). مسوّدة مجتمعية بمساعدة آلية، في انتظار مراجعة المشرف الإقليمي وفق §3.1 من P2-002. تبقى المواصفات التقنية الأساسية بالإنجليزية وفق §2.2.
>
> تصحيحات الترجمة مساهمات نرحّب بها ونقدّرها كسائر المساهمات، فإذا لاحظت خطأً
> في هذه الترجمة فيمكنك إصلاحه بنفسك عبر إنشاء fork للمستودع وفتح pull
> request: https://github.com/NTARI-RAND/Cloudy

> الأصل الإنجليزي هو النص المعياري. تُقدَّم هذه الترجمة للقراءة لا للتفسير: فحيثما اختلفت عن `CONFORMANCE.md`، فالحُكم للنص الإنجليزي. وتبقى الكلمات المفتاحية المعيارية (MUST، MUST NOT، SHOULD، SHOULD NOT، MAY) وأسماء الحقول والوسوم والمعرّفات بالإنجليزية لأنها تمثّل عقد المطابقة.

# المطابقة — العمارة ذات الوجهين (Janus-Facing Architecture)

وصف المستودع لنفسه بمصطلحات العمارة ذاتها، مذكورًا **قبل** أي شيء خاص بالمنتج، وفقًا لقاعدة الترتيب في العمارة. وكل ادّعاء مطابقة مربوط بالآلية والفحص اللذين يفرضانه، وإلا وُسِم بأنه بديل مؤقت أو هيكل أولي (stub). فالنثر غير المربوط تسويق.

العمارة هي **العمارة ذات الوجهين (Janus-Facing Architecture, JFA)** — وثيقة العمارة الموحّدة لـ NTARI، وهي توثيق حرّ ضمن مشاع المشروع المرخّص بـ AGPL-3.0.

## إعلان الدور

Cloudy **واجهة أمامية** لركيزة JFA — أي التطبيق الموجَّه للأعضاء — وهو موطن **طبقات اقتصاد الأعضاء** التي لا يعرّفها بروتوكول التنسيق في الركيزة عن قصد: سجل الحوار الخاص بكل مشغّل، وعهد السمعة، والائتمان الذي يُصدره الأعضاء. فالأعضاء موجودون هنا وهنا فقط؛ وخطّ التنسيق الذي يقع تحت هذا المستودع لا يعرف أشخاصًا. وCloudy منتج مستقل قابل للتفرّع (fork): يتحدّث البروتوكول المنشور، ويمكن لأي منسّق مطابق أن يخدمه.

| مصطلح هذا المستودع | الدور في العمارة |
|---|---|
| `internal/record` | **دفتر الحوار الخاص بكل مشغّل** — إضافيّ فقط، مختوم بالحوار، مشهود |
| `internal/covenant` | تطبيق **مقياس التقييم** (سمعة الأعضاء بوصفها عهدًا) |
| `internal/economy` | **الائتمان الذي يُصدره الأعضاء** (اقتصاد الأعضاء) |
| `internal/coord` | استهلاك **بروتوكول التنسيق** في الركيزة |
| `internal/enroll` | **تسجيل الواجهة الأمامية بوصفها مشغّلًا** لدى منسّق (apply → keys → verify → conformance → active) |
| العضو (Member) | شخص، محدود النطاق بالمنصّة؛ وتبقى بيانات التعريف الشخصية (PII) محلية لدى العضو وقابلة للمحو |

## الثوابت وارتباطاتها — بحسب `main`

تُذكَر الحالات وفقًا لقاعدة الصراحة في العمارة. وما بُني من عمل طبقة الأعضاء بعد ذلك موجود في مجموعة طلبات الدمج (PR) المفتوحة، ويُحدِّث هذا الجدول عند دمجه.

| الثابت (في العمارة) | الحالة على main | الآلية / الفحص |
|---|---|---|
| السجل **إضافيّ فقط**؛ والتصحيحات قيود جديدة | **مبني (Built)** | `internal/record`: لا يكشف Store/Log إلا Append — فالتحديث والحذف فعلان غائبان؛ وتوثيق الحزمة ينصّ على القواعد البنيوية؛ واختبارات |
| السجل **مختوم بالحوار** — ما اتفق عليه عضوان، لا ما يدّعيه أحدهما | **مبني (Built)** | تحقّق من الختم المزدوج على بايتات قانونية (canonical)؛ ويُرفَض الحوار مع الذات عند الإنشاء |
| **لا بيانات تعريف شخصية (PII) في المشاع**؛ ويبقى السرد محليًا لدى العضو وقابلًا للمحو | **مبني (Built)** | لا تحمل أنواع المشاع إلا قيم التجزئة والمفاتيح واللحظات الزمنية؛ ويقيم المحتوى القابل للمحو في مخزن محلي لدى العضو منفصل عنها من حيث النوع |
| **الشهادة** مع الاستقلالية البنيوية؛ والنشر ذو الشاهد الواحد بديل مؤقت موسوم | **مبني (بديل مؤقت) (Built (stand-in))** | توقيعات مصادقة من الشهود مع تحقّق من الاستقلالية بين كل زوج منهم؛ ووسم StandIn يُحسَب ولا يُدّعى |
| العهد: **لا متوسطات أبدًا**؛ توزيع كامل؛ متماثل؛ يحدّد ما إذا كان الشيء يحدث، لا مقداره أبدًا | **هيكل أولي، موسوم (Stub, labeled)** | يُعلن توثيق حزمة `internal/covenant` الثوابت غير القابلة للتفاوض التي يجب أن يستوفيها عند بنائه؛ والتطبيق المبني قيد المراجعة |
| الاقتصاد: الأرصدة **دالّة حتمية للسجل المختوم**؛ صفري المجموع؛ الضمان أولًا؛ يُكتسَب ولا يُشترى أبدًا | **هيكل أولي، موسوم (Stub, labeled)** | يُعلن توثيق حزمة `internal/economy` الثوابت؛ والتطبيق المبني قيد المراجعة |
| **هوية مشارك واحدة** — عضو واحد، مساهم ومستهلك في آنٍ معًا | مُلزِم بالتصميم (Design-binding) | لا يوجد فصل بين المنتج والمستهلك في أي مخطط أو نوع؛ ويُلزِم كل سطح للأعضاء عند دمجه |
| **قابلية التفرّع** | مبني (Built) | يستهلك بروتوكول التنسيق عند وسم إصدار منشور؛ ولا يتمتّع أي منسّق بامتياز |

## ارتباطات سجلّ القيد في JFA

الاختبارات التي تربط معرّفًا من سجلّ قيد الثوابت في Janus (`jfa-conformance-suite.py` في NTARI-RAND/Janus) تُسمّى `TestInvariant_<ID>_<Name>`، مع كتابة أي `-` في المعرّف على هيئة `_` (فيصبح `REC-six-holders` على هيئة `TestInvariant_REC_six_holders_…`). ويسرد الأمر `go test -run TestInvariant_ -v ./...` كل ارتباط ونتيجته.

| معرّف سجلّ القيد | الاختبار | ما يضيفه زيادةً على الاختبارات القائمة في الحزمة |
|---|---|---|
| **L1** — كل تبادل يحرّك رصيدين يتصافيان إلى الصفر | `internal/economy` `TestInvariant_L1_ZeroSumBalance` | دافعون متزامنون عبر دفترين يتشاركان مخزنًا واحدًا؛ وتصافٍ لكل سجل؛ وإعادة التشغيل تُعيد إنتاج كل رصيد |
| **L6** — لا تحديث في الموضع، ولا حذف؛ والإسقاط تعليق | `internal/record` `TestInvariant_L6_AppendOnly` (نصف الإسقاط: `internal/covenant` `TestAnswersCloseTheSymmetryBreach`) | التصحيح يُضاف ويترك القيد المصحَّح وكل الإثباتات السابقة سليمة؛ وإعادة الكتابة في الموضع التي تُجرى مباشرةً على التخزين تفشل في الاتساق مقارنةً بنقطة تحقّق أُخذت قبلها؛ ومسح للشيفرة المصدرية على مستوى الوحدة كلها لا يجد فعل تحديث أو حذف على أي نوع إضافيّ فقط — يُتتبَّع بالاسم (Store/Log/Ledger/Book) أو بتعليق توثيقي "append-only"، مع تثبيت `market.Catalog` و`techtree.Tree` كي لا يخرجا من النطاق |
| **L7** — لا يحمل المشاع إلا قيم التجزئة والأنواع والأوسمة الزمنية والمراجع | `internal/record` `TestInvariant_L7_CommonsSchema` | كل نوع من أنواع المشاع، حقلًا حقلًا، لا يقبل إلا مصفوفات البايتات، والأعداد الصحيحة غير المؤشَّرة، و`time.Time`، وحقول `[]byte` المسمّاة في قائمة سماح صريحة لمفاتيح ed25519 وتوقيعاتها — لا سلاسل نصية، ولا خرائط، ولا واجهات، ولا أعداد عشرية، ولا `[]byte` غير مدرجة؛ وكل حقل مدرج في قائمة السماح، إذا حُشي بملاحظة، يفشل في التحقّق مقارنةً بعيّنة ضابطة غير محشوّة ناجحة، ولا يدخل أي سجل أبدًا |
| **L8** — يُحمَل التوزيع الكامل؛ ولا نتيجة رقمية مفردة في أي مكان | `internal/covenant` `TestInvariant_L8_NoScalarAggregation` | عضوان لهما المتوسط نفسه وشكلان مختلفان يبقيان قابلَين للتمييز؛ ومسح للشيفرة المصدرية على مستوى الوحدة كلها بحثًا عن الدوال المُصدَّرة المسمّاة بالنتيجة (score) أو التي تُعيد أعدادًا عشرية، ووسوم JSON الشبيهة بالنتيجة، والحقول العشرية في حزم السمعة |

## البدائل المؤقتة والمسائل المتبقية المفتوحة

- **البديل المؤقت ذو الشاهد الواحد (StandIn).** كل نقطة تحقّق مشهودة اليوم لديها أقلّ من شاهدين مستقلّين؛ وطبقة السجل تحسب هذا الوسم وتُبلغ عنه بنيويًا. والاتحاد الحيّ هو المسألة المفتوحة 2 في العمارة — البناء المحوري.
- **العهد والاقتصاد هيكلان أوّليان على main.** يحمل توثيق حزمتيهما الثوابت المُلزِمة؛ والتطبيقات المبنية موجودة في طلبات الدمج (PR) المفتوحة المتراكبة، ويجب أن تستوفي ذلك التوثيق كي تُدمَج.
- **إعادة تسمية وسم نطاق السجل** (تسمية المنتج) معلّقة، ويجب أن تُدمَج **قبل أي حفظ دائم** — فإعادة الوسم بعد وجود سجلات دائمة ستكون إعادة كتابة.
- **المسائل المتبقية المسمّاة في السجل** (الحدّ الأدنى لإخفاء المعلومات (steganographic floor)، والقناة الخفية للأوسمة الزمنية، وفقدان ذاكرة الشاهد، وفجوة الحيوية) موثّقة في توثيق حزمة السجل بدلًا من التظاهر بعدم وجودها.
- **عقدة المساهم — فاصل Executor مبني؛ وتطبيقات وقت التشغيل معلّقة.** تثبّت `internal/contribute` عقد مساهمة العقدة (Executor / ServiceExecutor / Registry / NodeContract) مع ثابتين تفرضهما الاختبارات: العقدة المستغَلّة من الموارد الفائضة لا تقبل إلا المنفّذين القابلين للإيقاف الاستباقي (المالك لا يُقاطَع أبدًا)، وعبء عمل Service يتطلّب تموضعًا مثبّتًا. ويشغّلها `cmd/cloudy-agent` من البداية إلى النهاية مع منفّذ Storage **حقيقي** (أجزاء مختومة معتمة + إثبات الحيازة في `internal/storage`) ومنفّذَي Compute/Service **مؤقّتين (placeholder)**. أما النقل الثقيل لوقت التشغيل من `internal/agent` الانتقالية لدى المنسّق — منفّذ Docker، وأخذ عيّنات العتاد عبر gopsutil، والانسحاب/قائمة السماح/الطابعات، والترحيل agent→cloudyd→`/v0` — فهو الخطوة التالية المسمّاة، ويُدمَج *خلف* هذا الفاصل دون تغييره.
- **أداة تسجيل المشغّلين (driver) — مبني ومُتحقَّق منه حيًّا.** يقود `internal/enroll` + `cmd/cloudy-enroll` دورة حياة انضمام المشغّل لدى المنسّق من البداية إلى النهاية (التقديم → تسجيل مجموعة المفاتيح السبعة → التحقّق عبر البريد الإلكتروني → مجموعتا المطابقة A/B → التفعيل التلقائي)، مع إعادة استخدام `internal/opcred` لحفظ المفاتيح ولحساب إجابات المطابقة عبر الصيغة القانونية (canon) الفعلية للبروتوكول. وتُقيَّم المجموعة C لدى المنسّق ولا تحتاج إلى استجابة من المشغّل، لذا لا توجد خطوة للمجموعة C. والعميل منفصل عن قصد عن `internal/coord`: فالتسجيل JSON عادي على سطح **البوابة (portal)** لدى المنسّق، لا على خطّ `/v0` من جهة العقد. ويُقدَّم رمز البريد الإلكتروني خارج النطاق عبر `CodeSource` مُحقَن. وقد تُحقِّق منه أمام منسّق SoHoLINK حيّ — فبلغ المشغّل المسجَّل الحالة `active`، ثم صادقت بيانات اعتماده على `/v0`.

## إعلان الاعتماديات

يستهلك `sohocloud-protocol` عند وسم إصدار منشور — ولا شيء آخر من الحزمة. وتشير طبقات الأعضاء إلى التبادلات المختومة بمعرّف ورقة معتم، بالقيمة، ولا تستورد أبدًا أنواع السجل إلى طبقات أخرى؛ ولا يحدث التحويل إلا عند جذر التركيب.

## ملاحظات خاصة بالمنتج (أخيرًا، وفقًا لقاعدة الترتيب)

يُشحَن Cloudy منتجًا استهلاكيًا مستقلًا (بواجهة برمجية للأعضاء وأسطح تطبيق خاصة به، قيد المراجعة). وSoHoLINK هو المنسّق المرجعي الذي يتحدّث إليه؛ ويمكن لأي منسّق مطابق أن يحلّ محلّه.
Loading
Loading