From d4843bb81c7b0a64e88dd21fd3b05d8d9f13699f Mon Sep 17 00:00:00 2001 From: Jodson Graves Date: Mon, 5 Oct 2026 23:00:39 -0400 Subject: [PATCH] docs(l10n): add missing P2-002 translations (7 files) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine-assisted community drafts, pending regional maintainer review per P2-002 §3.1. - CONFORMANCE.ar.md (from CONFORMANCE.md @ baa4632) - CONFORMANCE.es.md (from CONFORMANCE.md @ baa4632) - CONFORMANCE.fr.md (from CONFORMANCE.md @ baa4632) - CONFORMANCE.hi.md (from CONFORMANCE.md @ baa4632) - CONFORMANCE.pt.md (from CONFORMANCE.md @ baa4632) - CONFORMANCE.tok.md (from CONFORMANCE.md @ baa4632) - CONFORMANCE.zh.md (from CONFORMANCE.md @ baa4632) Co-Authored-By: Claude Opus 5.5 --- CONFORMANCE.ar.md | 52 ++++++++++++++++++++++++++++++++++++++++++ CONFORMANCE.es.md | 52 ++++++++++++++++++++++++++++++++++++++++++ CONFORMANCE.fr.md | 53 +++++++++++++++++++++++++++++++++++++++++++ CONFORMANCE.hi.md | 53 +++++++++++++++++++++++++++++++++++++++++++ CONFORMANCE.pt.md | 52 ++++++++++++++++++++++++++++++++++++++++++ CONFORMANCE.tok.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++ CONFORMANCE.zh.md | 51 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 369 insertions(+) create mode 100644 CONFORMANCE.ar.md create mode 100644 CONFORMANCE.es.md create mode 100644 CONFORMANCE.fr.md create mode 100644 CONFORMANCE.hi.md create mode 100644 CONFORMANCE.pt.md create mode 100644 CONFORMANCE.tok.md create mode 100644 CONFORMANCE.zh.md diff --git a/CONFORMANCE.ar.md b/CONFORMANCE.ar.md new file mode 100644 index 0000000..7eee47e --- /dev/null +++ b/CONFORMANCE.ar.md @@ -0,0 +1,52 @@ +> ترجمة مجتمعية (مسوّدة) — سياسة NTARI رقم P2-002، البث العالمي المتعدد اللغات. المصدر: CONFORMANCE.md (الأصل الإنجليزي، لقطة بتاريخ 2026-10-05). مسوّدة مجتمعية بمساعدة آلية، في انتظار مراجعة المشرف الإقليمي وفق §3.1 من P2-002. تبقى المواصفات التقنية الأساسية بالإنجليزية وفق §2.2. +> +> تصحيحات الترجمة مساهمات نرحّب بها ونقدّرها كسائر المساهمات، فإذا لاحظت خطأً +> في هذه الترجمة فيمكنك إصلاحه بنفسك عبر إنشاء fork للمستودع وفتح pull +> request: https://github.com/NTARI-RAND/SoHoLINK + +> الأصل الإنجليزي هو النص المعياري. تُقدَّم هذه الترجمة للقراءة لا للتفسير: فحيثما اختلفت عن `CONFORMANCE.md`، فالحُكم للنص الإنجليزي. وتبقى الكلمات المفتاحية المعيارية (MUST، MUST NOT، SHOULD، SHOULD NOT، MAY) وأسماء الحقول والوسوم والمعرّفات بالإنجليزية لأنها تمثّل عقد المطابقة. + +# المطابقة — العمارة ذات الوجهين (Janus-Facing Architecture) + +وصف المستودع لنفسه بمصطلحات العمارة ذاتها، مذكورًا **قبل** أي شيء خاص بالمنتج أو بالنشر، وفقًا لقاعدة الترتيب في العمارة. وكل ادّعاء مطابقة مربوط بالآلية والفحص اللذين يفرضانه، وإلا وُسِم بأنه بديل مؤقت. فالنثر غير المربوط تسويق. + +العمارة هي **العمارة ذات الوجهين (Janus-Facing Architecture, JFA)** — وثيقة العمارة الموحّدة لـ NTARI، وهي توثيق حرّ ضمن مشاع المشروع المرخّص بـ AGPL-3.0. وهي تُسمّي الأدوار، ولا تُسمّي المنتجات أبدًا؛ وهذا المستودع يُعلن الدور الذي يشغله. + +## إعلان الدور + +SoHoLINK هو **المنسّق** لـ**ركيزة** في JFA: التنسيق (orchestration) من جهة العقدة — التعرّف على العقد عبر قوائم القدرات، والمطابقة والجدولة، ودورة حياة التشغيل (employment lifecycle)، وإعلانات الرسوم، والتسوية بالعملة النظامية (fiat)، ومعالجة النزاعات — واتحاد الواجهات الأمامية. والمنسّق **دور قابل للتبديل (pluggable)**: يمكن لأي تنفيذ مطابق أن يحلّ محلّه، ويمكن للواجهة الأمامية أن تشغّل منسّقها الخاص أو أن تطابق مباشرةً مع العقد. وضمان الركيزة الذي يخدمه: **التنسيق على بنية تحتية يستطيع المشاركون امتلاكها — بلا نقطة اختناق في الاستضافة لا يمكن إزالتها.** + +| مصطلح هذا المستودع | الدور في العمارة | +|---|---| +| Coordinator (هذا المستودع) | المنسّق: التنسيق من جهة العقدة، قابل للتبديل (pluggable)، وقابل للاستبدال | +| Frontend (Cloudy وغيره) | واجهة أمامية: التطبيق الموجَّه للأعضاء؛ حيث يوجد الأعضاء ويعيش اقتصاد الأعضاء | +| Node | بنية تحتية مملوكة للمشاركين | +| جدول `participants`، والبوابة (portal)، والوكيل (agent) | **أسطح أعضاء انتقالية** — قدرات تملكها الواجهة الأمامية، مستضافة هنا ريثما تُرحَّل، وموسومة بذلك في CLAUDE.md | + +## الثوابت وروابطها + +| الثابت (في العمارة) | الآلية هنا | الفحص | +|---|---|---| +| **لا يظهر الأشخاص أبدًا على خط الاتصال** | على المدى البعيد لا يمثّل المنسّق أي أشخاص: فالأطراف المقابلة هي الواجهات الأمامية والعقد؛ وهوية خط الاتصال هي هوية عبء العمل (workload identity) (SPIFFE NodeID) عبر `sohocloud-protocol` | يُستهلَك البروتوكول عند الوسم المنشور؛ وأسطح الأشخاص الانتقالية موسومة، لا مُنكَرة | +| **هوية مشارك واحدة** | جدول `participants` واحد (الترحيل 011) — لا يوجد فصل بين المزوّد والمستهلك في المخطط أو في الشيفرة | المخطط؛ البحث بـ grep عن `providers`/`consumers` لا يُرجع إلا تاريخ الترحيلات | +| **مقروئية الرسوم** | لا توجد الرسوم إلا في صورة رسائل `FeeDeclaration` يوقّعها المنسّق — منسوبة إلى مُحرِّرها، ومقروءة، وقابلة للطعن | حزمة `fees/` في البروتوكول + SPEC | +| **العملة النظامية تبقى عملة نظامية؛ والائتمان يبقى في موطنه** | التسوية بالعملة النظامية خالصةً (Stripe Connect)؛ لا رموز (tokens)، ولا محافظ؛ ومنفصلة انفصالًا تامًّا عن الائتمان الذي يُصدره أعضاء أي واجهة أمامية | ثابت في CLAUDE.md؛ حزمة الدفع لا تتعامل إلا مع Stripe | +| **لا عدم تماثل في المعلومات** | التسعير والقياس (metering) والأرباح مرئية لجميع المشاركين | أسطح البوابة؛ جداول القياس | +| **فصل سطح الحَكامة** | بوابة الإدارة على منفذ منفصل محلي فقط، لا تُعرَض للعموم أبدًا، وليست أعلام أدوار (role-flags) على البوابة العامة | إعدادات النشر | +| **المنشأ: الوارد = الصادر** | AGPL-3.0؛ DCO (`Signed-off-by` لكل إيداع (commit))، بلا CLA | الرخصة؛ سير عمل DCO (انظر البدائل المؤقتة: الإنفاذ معلّق بوصفه إجراءً مؤقتًا مُسمّى) | + +## البدائل المؤقتة والمتبقّيات المفتوحة + +- **أسطح الأعضاء الانتقالية.** وكيل العقدة، وبوابة الأعضاء، وجدول `participants`، والمُثبِّت قدراتٌ تملكها الواجهة الأمامية، مستضافة هنا منذ حقبة الدور المزدوج، ريثما تُرحَّل. وهي موسومة، ومُبقاة عاملة، ولا تُوصَف أبدًا بأنها الدور البعيد المدى للمنسّق. +- **اتحاد المنسّقين هدف تصميمي، غير مبني.** نقاط التحقّق المشهودة (نموذج شفافية الشهادات (certificate-transparency) المحجوز في طبقة السجل، والهيكل الأولي (stub) `anchor/` في البروتوكول) هي الهدف المُسمّى لعدم الازدواجية (non-equivocation) عبر المنسّقين. وإلى ذلك الحين، هذا نشر بمنسّق واحد: فالمسألة المفتوحة 7 في العمارة — الحوسبة السيادية تشتري مغادرةً آلية، لا اقتصادية — تنطبق كاملةً، وهي مُسمّاة، غير محلولة. +- **مصادقة الواجهة الأمامية بوصفها مشغّلًا — مبنية (BUILT) على خط اتصال التنسيق.** يقبل الآن سطح `/v0` من جهة العقدة وتسجيل المفاتيح العامة للعقد (node-pubkey enrollment) إرسالًا من المشغّل بنظام 2 من 7 (مجموعة من سبعة مفاتيح متناوبة، وترويسة `X-SohoCloud-Operator`، ونافذة لمنع إعادة الإرسال (replay window) لكل `(operator,coordinator)`) عبر مُحدِّد operator-or-SPIFFE: فالترويسة تختار مسار المشغّل؛ وغيابها يُبقي مسار SPIFFE القائم للعقد المباشرة/التابعة (satellite). وتأتي أصالة العقدة في كلا المسارين من توقيع ed25519 الخاص بكل رسالة (المُتحقَّق منه مقابل `node_protocol_keys`)، لذا لا يضيف مسار التمرير عبر المشغّل (operator-relay) SVID لكل عقدة. الفحص: اختبارات الوحدة `OperatorAuth`/`OperatorOrSPIFFE`؛ والمجموعة B (Suite B) في أداة اختبار المطابقة. المتبقّي: لم يُكمل أي مشغّل التسجيل من البداية إلى النهاية بعد (فهو متوقّف على ناقل البريد الخاص بالمصادقة الثنائية (2FA))، لذا فالمسار متحقَّق منه في الاختبار، لا في الإنتاج بعد. +- **الطرف المقابل في التسوية بالعملة النظامية** (هوية العضو لتلقّي المدفوعات في مقابل الواجهة الأمامية) مسألة مفتوحة عن قصد؛ وأيًّا كان الجواب فإنه يبقى في جانب العملة النظامية، ولا يُخلَط أبدًا بائتمان الأعضاء. +- **إنفاذ DCO معلّق بوصفه إجراءً مؤقتًا مُسمّى (2026-07-12).** سير العمل `dco.yml` مُعطَّل — لا محذوف — من أجل دفعة تأسيس المكدّس، بقرار من القيّم (steward). ووفقًا لمعيار المنشأ في العمارة: فالعهد نفسه لا يُعلَّق أبدًا (فالمساهمات ما زالت تدخل مشاع AGPL بمبدأ الوارد = الصادر، وContributor Covenant غير متأثر)؛ وإعادة التفعيل مُلتزَم بها وهي إجراء واحد (`gh workflow enable DCO`)؛ والفجوة مُعلَنة بصدق — فالإيداعات التي تُجرى خلال النافذة لا يمكن التصديق عليها بأثر رجعي، لذا تُبقى النافذة قصيرة، وبدايتها ونهايتها أمران مسجّلان. وتستمرّ الإيداعات التي يحرّرها الوكلاء في حمل `Signed-off-by` طوال النافذة في كل الأحوال. + +## إعلان الاعتماديات + +يستهلك `sohocloud-protocol` عند وسم إصدار منشور — وهو الورقة في شجرة الاعتماديات (dependency leaf) الذي يتشاركه هذا المنسّق والواجهات الأمامية. ولا يعتمد على أي واجهة أمامية ولا على أي شيفرة لاقتصاد الأعضاء؛ فاقتصاد الأعضاء يعيش فوق هذه الطبقة، ويجب ألّا ينتقل نزولًا إليها. + +## ملاحظات خاصة بالمنتج (في الأخير، وفقًا لقاعدة الترتيب) + +النشر المرجعي على soholink.org؛ ونطاق الثقة `spiffe://soholink.org`. وCloudy هو الواجهة الأمامية المرجعية. ولا يُميّز البروتوكول أيًّا منهما. diff --git a/CONFORMANCE.es.md b/CONFORMANCE.es.md new file mode 100644 index 0000000..5f87a23 --- /dev/null +++ b/CONFORMANCE.es.md @@ -0,0 +1,52 @@ +> Traducción comunitaria (borrador) — Política P2-002 de NTARI, Difusión Multilingüe Global. Fuente: CONFORMANCE.md (original en inglés, instantánea del 2026-10-05). Borrador comunitario asistido por máquina, pendiente de revisión por mantenedores regionales conforme a P2-002 §3.1. Las especificaciones técnicas centrales permanecen en inglés conforme a §2.2. +> +> ¿Encontraste un error en esta traducción? Tu corrección es una contribución +> bienvenida y valorada: haz un fork del repositorio y abre un pull request en +> https://github.com/NTARI-RAND/SoHoLINK. + +> **El original en inglés es normativo.** Esta traducción se ofrece para lectura, no para interpretación: donde difiera de `CONFORMANCE.md`, rige el inglés. Las palabras clave normativas (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY), los nombres de campos, las etiquetas y los identificadores se mantienen en inglés porque constituyen el contrato de conformidad. + +# Conformidad — Janus-Facing Architecture + +La autodescripción del repositorio en los propios términos de la arquitectura, expuesta **antes** de cualquier cosa específica del producto o del despliegue, según la regla de orden de la arquitectura. Cada afirmación de conformidad está vinculada al mecanismo y a la verificación que la hacen cumplir; de lo contrario, se etiqueta como suplencia. La prosa no vinculada es marketing. + +La arquitectura es **Janus-Facing Architecture (JFA)**: el documento de arquitectura unificada de NTARI, documentación libre bajo el bien común AGPL-3.0 del proyecto. Nombra roles, nunca productos; este repositorio declara qué rol ocupa. + +## Declaración de rol + +SoHoLINK es el **coordinador** de un **sustrato** de JFA: orquestación del lado de los nodos — reconocimiento de nodos mediante listados de capacidad, emparejamiento y programación, el ciclo de vida del empleo, declaraciones de tarifas, liquidación en dinero fiat, gestión de disputas — y federación de frontends. El coordinador es un **rol intercambiable**: cualquier implementación conforme puede reemplazarlo, y un frontend puede ejecutar el suyo propio o emparejar directamente con los nodos. La garantía del sustrato a la que sirve: **coordinación sobre infraestructura que los participantes pueden poseer — sin un punto de estrangulamiento de alojamiento imposible de eliminar.** + +| Término de este repositorio | Rol en la arquitectura | +|---|---| +| Coordinator (este repositorio) | el coordinador: orquestación del lado de los nodos, intercambiable, reemplazable | +| Frontend (Cloudy y otros) | un frontend: la aplicación de cara a los miembros; donde viven los miembros y la economía de miembros | +| Node | infraestructura propiedad de los participantes | +| Tabla `participants`, portal, agente | **superficies de miembros transitorias** — capacidades propiedad de los frontends alojadas aquí a la espera de su migración, etiquetadas como tales en CLAUDE.md | + +## Invariantes y sus vínculos + +| Invariante (arquitectura) | Mecanismo aquí | Verificación | +|---|---|---| +| **Las personas nunca aparecen en el canal** | A largo plazo, el coordinador no modela personas: las contrapartes son frontends y nodos; la identidad en el canal es identidad de carga de trabajo (NodeID de SPIFFE) mediante `sohocloud-protocol` | Protocolo consumido en una etiqueta publicada; las superficies transitorias con personas están etiquetadas, no negadas | +| **Identidad única de participante** | Una sola tabla `participants` (migración 011) — no existe ninguna separación proveedor/consumidor en el esquema ni en el código | Esquema; una búsqueda con grep de `providers`/`consumers` solo devuelve el historial de migraciones | +| **Legibilidad de las tarifas** | Las tarifas existen solo como mensajes `FeeDeclaration` firmados por el coordinador — con autoría, legibles, impugnables | Paquete `fees/` del protocolo + SPEC | +| **El fiat sigue siendo fiat; el crédito se queda en casa** | La liquidación es puramente en dinero fiat (Stripe Connect); sin tokens, sin billeteras; estrictamente separada del crédito emitido por los miembros de cualquier frontend | Invariante de CLAUDE.md; el paquete de pagos solo interactúa con Stripe | +| **Sin asimetría de información** | Precios, medición y ganancias visibles para todos los participantes | Superficies del portal; tablas de medición | +| **Superficie de gobernanza separada** | Portal de administración en un puerto separado solo local, nunca expuesto públicamente, no como indicadores de rol en el portal público | Configuración del despliegue | +| **Procedencia de entrada = de salida** | AGPL-3.0; DCO (`Signed-off-by` en cada commit), sin CLA | Licencia; flujo de trabajo de DCO (véanse las suplencias: aplicación suspendida como medida provisional declarada) | + +## Suplencias y cuestiones residuales abiertas + +- **Superficies de miembros transitorias.** El agente de nodo, el portal de miembros, la tabla `participants` y el instalador son capacidades propiedad de los frontends alojadas aquí desde la era de doble rol, a la espera de su migración. Están etiquetadas, se mantienen en funcionamiento y nunca se describen como el rol a largo plazo del coordinador. +- **La federación de coordinadores es un objetivo de diseño, no está construida.** Los checkpoints atestiguados (el modelo de transparencia de certificados reservado en la capa de registro y el stub `anchor/` del protocolo) son el objetivo nombrado para la no equivocación entre coordinadores. Hasta entonces, este es un despliegue de un solo coordinador: el problema abierto 7 de la arquitectura — el cómputo soberano otorga una salida mecánica, no económica — se aplica plenamente y está nombrado, no resuelto. +- **Autenticación de frontend-como-operador — CONSTRUIDA sobre el canal de coordinación.** La superficie `/v0` del lado de los nodos y la inscripción de claves públicas de nodos ahora aceptan una transmisión de operador 2-de-7 (conjunto rotativo de siete claves, encabezado `X-SohoCloud-Operator`, ventana de repetición por `(operator,coordinator)`) mediante un selector de operador-o-SPIFFE: el encabezado selecciona la ruta del operador; su ausencia mantiene la ruta SPIFFE existente para nodos directos/satélite. La autenticidad de los nodos en ambas rutas proviene de la propia firma ed25519 de cada mensaje (verificada contra `node_protocol_keys`), por lo que la ruta de relevo del operador no añade ningún SVID por nodo. Verificación: pruebas unitarias de `OperatorAuth`/`OperatorOrSPIFFE`; Suite B del arnés de conformidad. Cuestión residual: ningún operador ha completado todavía la inscripción de extremo a extremo (bloqueada por el transporte de correo de 2FA), por lo que la ruta está verificada en pruebas, aún no en producción. +- **La contraparte de la liquidación en fiat** (identidad de cobro del miembro frente al frontend) es una cuestión deliberadamente abierta; cualquiera de las dos respuestas permanece del lado del fiat, nunca confundida con el crédito de los miembros. +- **La aplicación del DCO está suspendida como medida provisional declarada (2026-07-12).** El flujo de trabajo `dco.yml` está deshabilitado — no eliminado — para el impulso de establecimiento de la pila, por decisión del custodio (steward). Según el estándar de procedencia de la arquitectura: el pacto en sí nunca se suspende (las contribuciones siguen entrando en el bien común AGPL con entrada = salida, el Contributor Covenant no se ve afectado); la reinstauración es un compromiso firme y consiste en una sola acción (`gh workflow enable DCO`); y la brecha es honesta — los commits realizados durante la ventana no pueden certificarse retroactivamente, por lo que la ventana se mantiene corta y su inicio y su fin constan en el registro. Los commits creados por agentes siguen llevando `Signed-off-by` durante toda la ventana, en cualquier caso. + +## Declaración de dependencias + +Consume `sohocloud-protocol` en una etiqueta de versión publicada — la dependencia hoja que comparten tanto este coordinador como los frontends. No depende de ningún frontend ni de ningún código de la economía de miembros; la economía de miembros vive por encima de esta capa y no debe migrar hacia abajo dentro de ella. + +## Notas específicas del producto (al final, según la regla de orden) + +Despliegue de referencia en soholink.org; dominio de confianza `spiffe://soholink.org`. Cloudy es el frontend de referencia. Ninguno de los dos es privilegiado por el protocolo. diff --git a/CONFORMANCE.fr.md b/CONFORMANCE.fr.md new file mode 100644 index 0000000..101e6aa --- /dev/null +++ b/CONFORMANCE.fr.md @@ -0,0 +1,53 @@ +> Traduction communautaire (brouillon) — politique NTARI P2-002, Diffusion multilingue mondiale. Source : CONFORMANCE.md (original anglais, instantané du 2026-10-05). Brouillon communautaire assisté par machine, en attente de relecture par le mainteneur régional conformément à P2-002 §3.1. Les spécifications techniques essentielles restent en anglais conformément au §2.2. +> +> Vous avez remarqué une erreur de traduction ? N'hésitez pas à la corriger +> vous-même : forkez le dépôt https://github.com/NTARI-RAND/SoHoLINK et +> ouvrez une pull request. Les corrections de traduction sont des +> contributions précieuses, tout autant que le code. + +> L'original anglais fait foi. Cette traduction est proposée pour la lecture, non pour l'interprétation : là où elle diverge de `CONFORMANCE.md`, c'est l'anglais qui prévaut. Les mots-clés normatifs (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY), les noms de champs, les étiquettes et les identifiants restent en anglais, car ils constituent le contrat de conformité. + +# Conformité — Janus-Facing Architecture + +L'autodescription du dépôt dans les termes propres à l'architecture, énoncée **avant** tout élément propre au produit ou au déploiement, conformément à la règle d'ordonnancement de l'architecture. Chaque affirmation de conformité est rattachée au mécanisme et à la vérification qui la font respecter ; à défaut, elle est étiquetée comme substitution. Une prose non rattachée relève du marketing. + +L'architecture est **Janus-Facing Architecture (JFA)** — le document d'architecture unifié de NTARI, documentation libre placée sous les communs AGPL-3.0 du projet. Elle nomme des rôles, jamais des produits ; ce dépôt déclare le rôle qu'il remplit. + +## Déclaration de rôle + +SoHoLINK est le **coordinateur** d'un **substrat** JFA : l'orchestration côté nœud — la reconnaissance des nœuds au moyen des annonces de capacités, l'appariement et la planification, le cycle de vie de l'emploi, les déclarations de frais, le règlement en monnaie fiat, le traitement des litiges — et la fédération des frontends. Le coordinateur est un **rôle interchangeable** : toute implémentation conforme peut le remplacer, et un frontend peut exécuter son propre coordinateur ou s'apparier directement avec des nœuds. La garantie du substrat qu'il sert : **une coordination sur une infrastructure que les participants peuvent détenir — aucun point d'étranglement d'hébergement inamovible.** + +| Terme de ce dépôt | Rôle dans l'architecture | +|---|---| +| Coordinator (ce dépôt) | le coordinateur : l'orchestration côté nœud, interchangeable, remplaçable | +| Frontend (Cloudy et autres) | un frontend : l'application destinée aux membres ; là où vivent les membres et l'économie des membres | +| Node | l'infrastructure détenue par les participants | +| Table `participants`, portail, agent | **surfaces transitoires destinées aux membres** — des capacités appartenant au frontend, hébergées ici en attendant leur migration, étiquetées comme telles dans CLAUDE.md | + +## Invariants et leurs rattachements + +| Invariant (architecture) | Mécanisme ici | Vérification | +|---|---|---| +| **Les personnes n'apparaissent jamais sur le fil** | À long terme, le coordinateur ne modélise aucune personne : ses contreparties sont des frontends et des nœuds ; l'identité sur le fil est l'identité de charge de travail (NodeID SPIFFE) via `sohocloud-protocol` | Protocole consommé à une étiquette publiée ; les surfaces transitoires relatives aux personnes sont étiquetées, non niées | +| **Identité unique du participant** | Une seule table `participants` (migration 011) — aucune séparation fournisseur/consommateur n'existe dans le schéma ni dans le code | Schéma ; une recherche grep de `providers`/`consumers` ne renvoie que l'historique des migrations | +| **Lisibilité des frais** | Les frais n'existent que sous la forme de messages `FeeDeclaration` signés par le coordinateur — dotés d'un auteur, lisibles, contestables | Paquet `fees/` du protocole + SPEC | +| **Le fiat reste fiat ; le crédit reste chez lui** | Le règlement se fait uniquement en monnaie fiat (Stripe Connect) ; aucun jeton, aucun portefeuille ; strictement séparé du crédit émis par les membres de tout frontend | Invariant de CLAUDE.md ; le paquet de paiement ne touche qu'à Stripe | +| **Aucune asymétrie d'information** | Les prix, le comptage de la consommation et les gains sont visibles par tous les participants | Surfaces du portail ; tables de comptage | +| **Surface de gouvernance séparée** | Portail d'administration sur un port distinct, uniquement local, jamais exposé publiquement, et non des indicateurs de rôle sur le portail public | Configuration de déploiement | +| **Provenance entrant = sortant** | AGPL-3.0 ; DCO (`Signed-off-by` à chaque commit), aucun CLA | Licence ; workflow DCO (voir les substitutions : application suspendue à titre de mesure provisoire désignée) | + +## Substitutions et résidus ouverts + +- **Surfaces transitoires destinées aux membres.** L'agent de nœud, le portail des membres, la table `participants` et l'installateur sont des capacités appartenant au frontend, hébergées ici depuis l'époque du double rôle, en attendant leur migration. Elles sont étiquetées, maintenues en état de fonctionnement, et jamais décrites comme le rôle à long terme du coordinateur. +- **La fédération des coordinateurs est une cible de conception, non construite.** Les points de contrôle attestés par témoins (le modèle de transparence des certificats réservé dans la couche registre et l'ébauche `anchor/` du protocole) sont la cible désignée pour la non-équivocation entre coordinateurs. D'ici là, il s'agit d'un déploiement à coordinateur unique : le problème ouvert 7 de l'architecture — le calcul souverain offre une sortie mécanique, non économique — s'applique pleinement et est nommé, non résolu. +- **Authentification du frontend en tant qu'opérateur — CONSTRUITE sur le fil de coordination.** La surface `/v0` côté nœud et l'enrôlement des clés publiques de nœud acceptent désormais une transmission d'opérateur 2-sur-7 (jeu de sept clés en rotation, en-tête `X-SohoCloud-Operator`, fenêtre anti-rejeu par `(operator,coordinator)`) via un sélecteur opérateur-ou-SPIFFE : la présence de l'en-tête sélectionne le chemin opérateur ; son absence conserve le chemin SPIFFE existant pour les nœuds directs/satellites. Dans les deux chemins, l'authenticité du nœud provient de la propre signature ed25519 de chaque message (vérifiée par rapport à `node_protocol_keys`), de sorte que le chemin de relais par opérateur n'ajoute aucun SVID par nœud. Vérification : tests unitaires `OperatorAuth`/`OperatorOrSPIFFE` ; suite B du harnais de conformité. Résidu : aucun opérateur n'a encore mené l'enrôlement à son terme de bout en bout (bloqué par le transport des e-mails de 2FA) ; le chemin est donc vérifié en test, mais pas encore en production. +- **La contrepartie du règlement en monnaie fiat** (identité de versement du membre ou frontend) est une question délibérément laissée ouverte ; quelle que soit la réponse, elle reste du côté fiat, sans jamais être confondue avec le crédit des membres. +- **L'application du DCO est suspendue à titre de mesure provisoire désignée (2026-07-12).** Le workflow `dco.yml` est désactivé — non supprimé — pour la phase de mise en place de la pile, par décision de l'intendant. Conformément à la norme de provenance de l'architecture : le pacte lui-même n'est jamais suspendu (les contributions entrent toujours dans les communs AGPL selon le principe entrant = sortant, et le Contributor Covenant n'est pas affecté) ; le rétablissement fait l'objet d'un engagement et tient en une seule action (`gh workflow enable DCO`) ; et la lacune est assumée honnêtement — les commits effectués pendant cette fenêtre ne peuvent pas être certifiés rétroactivement, c'est pourquoi la fenêtre est maintenue courte, et son début comme sa fin sont consignés. Les commits rédigés par des agents continuent quoi qu'il en soit de porter `Signed-off-by` pendant toute la fenêtre. + +## Déclaration de dépendances + +Consomme `sohocloud-protocol` à une étiquette de version publiée — la feuille de dépendances que partagent ce coordinateur et les frontends. Ne dépend d'aucun frontend ni d'aucun code de l'économie des membres ; l'économie des membres vit au-dessus de cette couche et ne doit pas migrer vers le bas, dans celle-ci. + +## Notes propres au produit (en dernier, conformément à la règle d'ordonnancement) + +Déploiement de référence sur soholink.org ; domaine de confiance `spiffe://soholink.org`. Cloudy est le frontend de référence. Aucun des deux n'est privilégié par le protocole. diff --git a/CONFORMANCE.hi.md b/CONFORMANCE.hi.md new file mode 100644 index 0000000..711f192 --- /dev/null +++ b/CONFORMANCE.hi.md @@ -0,0 +1,53 @@ +> सामुदायिक अनुवाद (मसौदा) — NTARI नीति P2-002, Global Multilingual Broadcast (वैश्विक बहुभाषी प्रसारण)। स्रोत: CONFORMANCE.md (अंग्रेज़ी मूल, स्नैपशॉट 2026-10-05)। P2-002 §3.1 के अनुसार क्षेत्रीय अनुरक्षक की समीक्षा हेतु लंबित, मशीन-सहायता से तैयार सामुदायिक मसौदा। §2.2 के अनुसार मूल तकनीकी विनिर्देश अंग्रेज़ी में ही रहते हैं। +> +> अनुवाद में कोई त्रुटि दिखे तो कृपया उसे स्वयं सुधारने में मदद करें: +> रिपॉज़िटरी को फ़ॉर्क (fork) करें और अपना सुधार पुल रिक्वेस्ट (pull request) +> के रूप में भेजें — https://github.com/NTARI-RAND/SoHoLINK। अनुवाद-सुधार +> हमारे लिए किसी भी अन्य योगदान जितने ही मूल्यवान हैं, और उनका सदा स्वागत है। + +> **प्राथमिकता-सूचना।** अंग्रेज़ी मूल ही मानकीय (normative) है। यह अनुवाद पढ़ने के लिए प्रस्तुत है, व्याख्या के लिए नहीं: जहाँ यह `CONFORMANCE.md` से भिन्न हो, वहाँ अंग्रेज़ी पाठ ही मान्य होगा। मानकीय कुंजीशब्द (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY), फ़ील्ड नाम, लेबल और पहचानकर्ता अंग्रेज़ी में ही रखे गए हैं, क्योंकि वही अनुरूपता का अनुबंध हैं। + +# अनुरूपता — Janus-Facing Architecture + +संरचना की अपनी शब्दावली में इस रिपॉज़िटरी का आत्म-विवरण, संरचना के क्रम-नियम के अनुसार किसी भी उत्पाद- या परिनियोजन-विशिष्ट बात से **पहले** प्रस्तुत। अनुरूपता का हर दावा उसे प्रवर्तित करने वाले तंत्र और जाँच से आबद्ध है, अन्यथा उसे स्टैंड-इन (stand-in) के रूप में लेबल किया जाता है। आबद्धता-रहित गद्य केवल विपणन है। + +यह संरचना **द्विमुखी संरचना — Janus-Facing Architecture (JFA)** है — NTARI का एकीकृत संरचना-दस्तावेज़, जो परियोजना के AGPL-3.0 साझा कोष (commons) के अंतर्गत मुक्त प्रलेखन है। यह भूमिकाओं का नाम लेता है, उत्पादों का कभी नहीं; यह रिपॉज़िटरी घोषित करती है कि वह कौन-सी भूमिका भरती है। + +## भूमिका-घोषणा + +SoHoLINK एक JFA **आधार (substrate)** का **समन्वयक (coordinator)** है: नोड-पक्षीय संयोजन (orchestration) — क्षमता-सूचियों के माध्यम से नोड-पहचान, मिलान और शेड्यूलिंग, रोज़गार-जीवनचक्र, शुल्क-घोषणाएँ, फ़िएट निपटान (settlement), विवाद-निपटारा — और फ़्रंटएंडों का संघ (federation)। समन्वयक एक **प्लग-योग्य भूमिका** है: कोई भी अनुरूप कार्यान्वयन इसका स्थान ले सकता है, और कोई फ़्रंटएंड अपना स्वयं का समन्वयक चला सकता है या सीधे नोडों के विरुद्ध मिलान कर सकता है। यह आधार की जिस गारंटी की सेवा करता है: **ऐसे बुनियादी ढाँचे पर समन्वय जिसका स्वामित्व प्रतिभागी रख सकें — कोई न हटाया जा सकने वाला होस्टिंग अवरोध-बिंदु (chokepoint) नहीं।** + +| इस रिपॉज़िटरी का शब्द | संरचना में भूमिका | +|---|---| +| समन्वयक (Coordinator) (यह रिपॉज़िटरी) | समन्वयक: नोड-पक्षीय संयोजन, प्लग-योग्य, प्रतिस्थापन-योग्य | +| फ़्रंटएंड (Frontend) (Cloudy आदि) | एक फ़्रंटएंड: सदस्य-मुखी अनुप्रयोग; जहाँ सदस्य और सदस्य-अर्थव्यवस्था रहते हैं | +| नोड (Node) | प्रतिभागी-स्वामित्व वाला बुनियादी ढाँचा | +| `participants` तालिका, पोर्टल, एजेंट | **संक्रमणकालीन सदस्य-सतहें** — फ़्रंटएंड के स्वामित्व वाली क्षमताएँ, जो माइग्रेशन लंबित रहने तक यहाँ होस्ट की जा रही हैं, और CLAUDE.md में इसी रूप में लेबल की गई हैं | + +## अपरिवर्तनीय नियम (invariants) और उनके बंधन + +| अपरिवर्तनीय नियम (संरचना) | यहाँ तंत्र | जाँच | +|---|---|---| +| **व्यक्ति वायर पर कभी प्रकट नहीं होते** | दीर्घकाल में समन्वयक किसी व्यक्ति का मॉडल नहीं रखता: प्रतिपक्ष (counterparties) फ़्रंटएंड और नोड हैं; वायर-पहचान `sohocloud-protocol` के माध्यम से वर्कलोड पहचान (workload identity) (SPIFFE NodeID) है | प्रोटोकॉल का उपभोग प्रकाशित टैग पर; संक्रमणकालीन व्यक्ति-सतहें लेबल की गई हैं, नकारी नहीं गईं | +| **एकल प्रतिभागी पहचान** | एक ही `participants` तालिका (migration 011) — स्कीमा या कोड में कोई प्रदाता/उपभोक्ता विभाजन मौजूद नहीं | स्कीमा; `providers`/`consumers` के लिए grep केवल माइग्रेशन-इतिहास लौटाता है | +| **शुल्क-पठनीयता** | शुल्क केवल समन्वयक द्वारा हस्ताक्षरित `FeeDeclaration` संदेशों के रूप में मौजूद होते हैं — रचित, पठनीय, चुनौती-योग्य (contestable) | प्रोटोकॉल का `fees/` पैकेज + SPEC | +| **फ़िएट फ़िएट ही रहता है; ऋण अपने घर में रहता है** | निपटान विशुद्ध फ़िएट है (Stripe Connect); न कोई टोकन, न कोई वॉलेट; किसी भी फ़्रंटएंड के सदस्य-निर्गमित ऋण से पूर्णतः पृथक | CLAUDE.md अपरिवर्तनीय नियम; भुगतान पैकेज केवल Stripe को छूता है | +| **कोई सूचना-विषमता नहीं** | मूल्य-निर्धारण, मीटरिंग और कमाई सभी प्रतिभागियों को दिखाई देती है | पोर्टल सतहें; मीटरिंग तालिकाएँ | +| **शासन-सतह पृथक** | एडमिन पोर्टल एक अलग, केवल-स्थानीय पोर्ट पर है, कभी सार्वजनिक रूप से उजागर नहीं होता, और सार्वजनिक पोर्टल पर भूमिका-फ़्लैग (role-flags) के रूप में नहीं है | परिनियोजन विन्यास | +| **उद्गम (provenance): अंदर आना = बाहर जाना** | AGPL-3.0; DCO (हर कमिट पर `Signed-off-by`), कोई CLA नहीं | लाइसेंस; DCO वर्कफ़्लो (स्टैंड-इन देखें: प्रवर्तन एक नामित अंतरिम व्यवस्था के रूप में निलंबित) | + +## स्टैंड-इन और खुले अवशेष + +- **संक्रमणकालीन सदस्य-सतहें।** नोड एजेंट, सदस्य पोर्टल, `participants` तालिका और इंस्टॉलर फ़्रंटएंड के स्वामित्व वाली क्षमताएँ हैं, जो द्वैध-भूमिका युग से यहाँ होस्ट की जा रही हैं और जिनका माइग्रेशन लंबित है। वे लेबल की गई हैं, चालू रखी गई हैं, और उन्हें कभी समन्वयक की दीर्घकालिक भूमिका के रूप में वर्णित नहीं किया जाता। +- **समन्वयक-संघ एक डिज़ाइन-लक्ष्य है, निर्मित नहीं।** साक्षीकृत चेकपॉइंट (अभिलेख स्तर में आरक्षित सर्टिफ़िकेट-पारदर्शिता मॉडल और प्रोटोकॉल का `anchor/` स्टब) समन्वयकों के आर-पार अद्विवाचिता (non-equivocation) के लिए नामित लक्ष्य हैं। तब तक यह एकल-समन्वयक परिनियोजन है: संरचना की खुली समस्या 7 — संप्रभु कंप्यूट यांत्रिक निकास दिलाता है, आर्थिक नहीं — पूरी तरह लागू होती है और नामित है, हल नहीं। +- **संचालक के रूप में फ़्रंटएंड का प्रमाणीकरण — समन्वय वायर पर निर्मित (BUILT)।** `/v0` नोड-पक्षीय सतह और नोड-pubkey नामांकन अब एक संचालक-या-SPIFFE चयनकर्ता (selector) के माध्यम से 2-of-7 संचालक प्रेषण (घूर्णनशील सात-कुंजी समुच्चय, `X-SohoCloud-Operator` हेडर, प्रति-`(operator,coordinator)` पुनःप्रेषण (replay) विंडो) स्वीकार करते हैं: हेडर संचालक-पथ का चयन करता है; उसकी अनुपस्थिति प्रत्यक्ष/उपग्रह (direct/satellite) नोडों के लिए मौजूदा SPIFFE पथ को बनाए रखती है। दोनों पथों में नोड की प्रामाणिकता हर संदेश के अपने ed25519 हस्ताक्षर से आती है (`node_protocol_keys` के विरुद्ध सत्यापित), इसलिए संचालक-रिले पथ कोई प्रति-नोड SVID नहीं जोड़ता। जाँच: `OperatorAuth`/`OperatorOrSPIFFE` यूनिट परीक्षण; अनुरूपता हार्नेस Suite B। अवशेष: अभी तक किसी संचालक ने आरंभ से अंत तक नामांकन पूरा नहीं किया है (2FA मेल ट्रांसपोर्ट पर अवरुद्ध), इसलिए यह पथ परीक्षण में सत्यापित है, अभी उत्पादन (production) में नहीं। +- **फ़िएट निपटान का प्रतिपक्ष** (सदस्य की भुगतान-पहचान बनाम फ़्रंटएंड) एक जान-बूझकर खुला छोड़ा गया प्रश्न है; उत्तर जो भी हो, वह फ़िएट-पक्ष में ही रहता है, सदस्य-ऋण के साथ कभी मिश्रित नहीं होता। +- **DCO प्रवर्तन एक नामित अंतरिम व्यवस्था के रूप में निलंबित है (2026-07-12)।** `dco.yml` वर्कफ़्लो स्टैक-स्थापना अभियान (push) के लिए, संरक्षक (steward) के निर्णय से, अक्षम किया गया है — हटाया नहीं गया। संरचना के उद्गम-मानक के अनुसार: प्रतिज्ञा (covenant) स्वयं कभी निलंबित नहीं होती (योगदान अब भी अंदर आना = बाहर जाना के आधार पर AGPL साझा कोष में प्रवेश करते हैं, Contributor Covenant अप्रभावित है); पुनर्बहाली प्रतिबद्ध है और एक ही क्रिया है (`gh workflow enable DCO`); और यह अंतराल ईमानदारी से बताया गया है — इस अवधि में किए गए कमिट पूर्वव्यापी रूप से प्रमाणित नहीं किए जा सकते, इसलिए यह अवधि छोटी रखी जाती है और इसका आरंभ और अंत अभिलेख का विषय हैं। एजेंट-रचित कमिट इस पूरी अवधि में, फिर भी, `Signed-off-by` वहन करते रहते हैं। + +## निर्भरता-घोषणा + +`sohocloud-protocol` का एक प्रकाशित संस्करण-टैग पर उपभोग करता है — वह निर्भरता-पत्ती (dependency leaf) जिसे यह समन्वयक और फ़्रंटएंड दोनों साझा करते हैं। किसी फ़्रंटएंड पर और किसी सदस्य-अर्थव्यवस्था कोड पर निर्भर नहीं है; सदस्य-अर्थव्यवस्था इस स्तर के ऊपर रहती है और उसे नीचे इस स्तर में स्थानांतरित होने की अनुमति नहीं है। + +## उत्पाद-विशिष्ट टिप्पणियाँ (अंत में, क्रम-नियम के अनुसार) + +संदर्भ परिनियोजन soholink.org पर है; ट्रस्ट डोमेन `spiffe://soholink.org`। Cloudy संदर्भ फ़्रंटएंड है। प्रोटोकॉल इनमें से किसी को भी विशेषाधिकार नहीं देता। diff --git a/CONFORMANCE.pt.md b/CONFORMANCE.pt.md new file mode 100644 index 0000000..cc75a3b --- /dev/null +++ b/CONFORMANCE.pt.md @@ -0,0 +1,52 @@ +> Tradução comunitária (rascunho) — Política NTARI P2-002, Transmissão Multilíngue Global (Global Multilingual Broadcast). Fonte: CONFORMANCE.md (original em inglês, snapshot de 2026-10-05). Rascunho comunitário assistido por máquina, pendente de revisão por mantenedor regional conforme P2-002 §3.1. As especificações técnicas centrais permanecem em inglês conforme §2.2. +> +> Notou algum erro nesta tradução? Correções de tradução são contribuições +> valiosas e muito bem-vindas: faça um fork do repositório e abra um pull +> request em https://github.com/NTARI-RAND/SoHoLINK. + +> O original em inglês é normativo. Esta tradução é oferecida para leitura, não para interpretação: onde ela divergir de `CONFORMANCE.md`, prevalece o inglês. As palavras-chave normativas (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY), os nomes de campos, os rótulos e os identificadores são mantidos em inglês porque constituem o contrato de conformidade. + +# Conformidade — Arquitetura de Dupla Face + +A autodescrição do repositório nos próprios termos da arquitetura, declarada **antes** de qualquer coisa específica de produto ou de implantação, conforme a regra de ordenação da arquitetura. Toda alegação de conformidade está vinculada ao mecanismo e à verificação que a fazem cumprir, ou é rotulada como provisória (stand-in). Prosa não vinculada é marketing. + +A arquitetura é a **Arquitetura de Dupla Face (Janus-Facing Architecture, JFA)** — o documento unificado de arquitetura da NTARI, documentação livre sob o comum AGPL-3.0 do projeto. Ela nomeia papéis, nunca produtos; este repositório declara qual papel preenche. + +## Declaração de papel + +O SoHoLINK é o **coordenador** de um **substrato** da JFA: orquestração do lado dos nós — reconhecimento de nós por meio de listagens de capacidades, pareamento e agendamento, o ciclo de vida da contratação, declarações de taxas, liquidação em moeda fiduciária, tratamento de disputas — e federação de frontends. O coordenador é um **papel plugável**: qualquer implementação conforme pode substituí-lo, e um frontend pode executar o seu próprio ou fazer o pareamento diretamente com os nós. A garantia do substrato a que ele serve: **coordenação sobre infraestrutura que os participantes podem possuir — nenhum ponto de estrangulamento de hospedagem impossível de remover.** + +| Termo deste repositório | Papel na arquitetura | +|---|---| +| Coordinator (este repositório) | o coordenador: orquestração do lado dos nós, plugável, substituível | +| Frontend (Cloudy e outros) | um frontend: o aplicativo voltado aos membros; onde vivem os membros e a economia dos membros | +| Node | infraestrutura de propriedade dos participantes | +| Tabela `participants`, portal, agente | **superfícies de membros transitórias** — capacidades de propriedade do frontend hospedadas aqui enquanto aguardam migração, rotuladas como tal no CLAUDE.md | + +## Invariantes e seus vínculos + +| Invariante (arquitetura) | Mecanismo aqui | Verificação | +|---|---|---| +| **Pessoas nunca aparecem na rede** | A longo prazo, o coordenador não modela pessoas: as contrapartes são frontends e nós; a identidade na rede é a identidade da carga de trabalho (SPIFFE NodeID) via `sohocloud-protocol` | Protocolo consumido na tag publicada; superfícies de pessoas transitórias rotuladas, não negadas | +| **Identidade única de participante** | Uma única tabela `participants` (migração 011) — não existe divisão entre provedor e consumidor no esquema nem no código | Esquema; um grep por `providers`/`consumers` retorna apenas o histórico de migrações | +| **Legibilidade das taxas** | As taxas existem apenas como mensagens `FeeDeclaration` assinadas pelo coordenador — com autoria, legíveis, contestáveis | Pacote `fees/` do protocolo + SPEC | +| **Moeda fiduciária permanece fiduciária; o crédito permanece em casa** | A liquidação é puramente em moeda fiduciária (Stripe Connect); sem tokens, sem carteiras; estritamente separada de qualquer crédito emitido por membros de um frontend | Invariante do CLAUDE.md; o pacote de pagamento lida apenas com o Stripe | +| **Nenhuma assimetria de informação** | Preços, medição e ganhos visíveis a todos os participantes | Superfícies do portal; tabelas de medição | +| **Superfície de governança separada** | Portal de administração em uma porta separada, somente local, nunca exposta publicamente, e não como flags de papel no portal público | Configuração de implantação | +| **Proveniência: entrada = saída** | AGPL-3.0; DCO (`Signed-off-by` em cada commit), sem CLA | Licença; workflow de DCO (ver rótulos provisórios: aplicação suspensa como interinidade nomeada) | + +## Rótulos provisórios e resíduos em aberto + +- **Superfícies de membros transitórias.** O agente de nó, o portal de membros, a tabela `participants` e o instalador são capacidades de propriedade do frontend hospedadas aqui, herdadas da era de papel duplo, enquanto aguardam migração. Elas são rotuladas, mantidas em funcionamento e nunca descritas como o papel de longo prazo do coordenador. +- **A federação de coordenadores é uma meta de projeto, não está construída.** Checkpoints testemunhados (o modelo de transparência de certificados reservado na camada de registro e o stub `anchor/` do protocolo) são a meta nomeada para a não equivocação entre coordenadores. Até lá, esta é uma implantação de coordenador único: o problema em aberto 7 da arquitetura — a computação soberana compra uma saída mecânica, não econômica — aplica-se integralmente e é nomeado, não resolvido. +- **Autenticação do frontend como operador — CONSTRUÍDA na rede de coordenação.** A superfície `/v0` do lado dos nós e o cadastro de chave pública de nó agora aceitam uma transmissão de operador 2-de-7 (conjunto rotativo de sete chaves, cabeçalho `X-SohoCloud-Operator`, janela de replay por `(operator,coordinator)`) por meio de um seletor operador-ou-SPIFFE: o cabeçalho seleciona o caminho do operador; sua ausência mantém o caminho SPIFFE existente para nós diretos/satélites. A autenticidade do nó em ambos os caminhos vem da própria assinatura ed25519 de cada mensagem (verificada em relação a `node_protocol_keys`), de modo que o caminho de retransmissão pelo operador não acrescenta nenhum SVID por nó. Verificação: testes unitários de `OperatorAuth`/`OperatorOrSPIFFE`; Suite B do harness de conformidade. Resíduo: nenhum operador concluiu ainda o cadastro de ponta a ponta (bloqueado no transporte de e-mail do 2FA), portanto o caminho está verificado em teste, mas ainda não em produção. +- **Contraparte da liquidação em moeda fiduciária** (a identidade de recebimento do membro vs. o frontend) é uma questão deliberadamente em aberto; qualquer que seja a resposta, ela permanece do lado da moeda fiduciária, nunca confundida com o crédito dos membros. +- **A aplicação do DCO está suspensa como interinidade nomeada (2026-07-12).** O workflow `dco.yml` está desativado — não excluído — durante o esforço de estabelecimento da pilha, por decisão do administrador responsável (steward). Conforme o padrão de proveniência da arquitetura: o pacto em si nunca é suspenso (as contribuições continuam entrando no comum AGPL com entrada = saída, sem efeito sobre o Contributor Covenant); a reativação está assumida como compromisso e é uma única ação (`gh workflow enable DCO`); e a lacuna é honesta — commits feitos durante a janela não podem ser certificados retroativamente, por isso a janela é mantida curta e seu início e seu fim são matéria de registro. Commits de autoria de agentes continuam a levar `Signed-off-by` durante toda a janela, independentemente disso. + +## Declaração de dependências + +Consome `sohocloud-protocol` em uma tag de versão publicada — a folha de dependência compartilhada tanto por este coordenador quanto pelos frontends. Não depende de nenhum frontend nem de nenhum código da economia dos membros; a economia dos membros vive acima desta camada e não deve migrar para baixo, para dentro dela. + +## Notas específicas do produto (por último, conforme a regra de ordenação) + +Implantação de referência em soholink.org; domínio de confiança `spiffe://soholink.org`. O Cloudy é o frontend de referência. Nenhum dos dois é privilegiado pelo protocolo. diff --git a/CONFORMANCE.tok.md b/CONFORMANCE.tok.md new file mode 100644 index 0000000..3e04e80 --- /dev/null +++ b/CONFORMANCE.tok.md @@ -0,0 +1,56 @@ +# lipu pi nasin sama — Janus-Facing Architecture (toki pona) + +> **toki lili pi lipu ni:** lipu ni li lipu pi kulupu, li tan nasin NTARI "P2-002". lipu suli li lipu Inli "CONFORMANCE.md" (tenpo pi 2026-10-05). ilo sona li pali e lipu ni; kulupu li wile lukin e ona kepeken nasin "P2-002" kipisi "3.1". +> +> **Note:** This is a community rendering under NTARI policy P2-002. The complete document is the English original CONFORMANCE.md (snapshot 2026-10-05). Machine-assisted draft pending community review per P2-002 section 3.1. +> +> sina lukin e pakala lon toki ni la o pona e ona: o pali e "fork" lon +> https://github.com/NTARI-RAND/SoHoLINK, o pana e "pull request". pana sina +> li pona tawa mi mute. +> +> **lipu Inli li lawa.** lipu ni li tawa lukin, li tawa ala sona pi nasin lawa: lipu ni li ante tan `CONFORMANCE.md` la lipu Inli li lawa. nimi lawa (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY), nimi pi poki sona, nimi sitelen en nimi ilo li awen lon toki Inli, tan ni: ona li lipu lawa pi nasin sama. + +--- + +poki lipu ni li toki e ona kepeken nimi pi nasin JFA. ona li toki e ni **lon open**, li toki e ijo pi ilo esun anu pi kepeken lon ma lon monsi, tan nasin pi nanpa toki pi nasin JFA. toki ale pi nasin sama li linja tawa ilo en lukin ni: ilo en lukin li wawa e toki ni. linja li lon ala la sitelen li toki e ni: toki ni li ijo pi tenpo lili (stand-in). toki pi linja ala li toki esun taso. + +nasin ni li **Janus-Facing Architecture (JFA)** — lipu wan pi nasin ilo pi kulupu NTARI. ona li lipu pi jan ale (free documentation), li lon poki pi jan ale pi pali ni (nasin "AGPL-3.0"). ona li toki e nimi pi pali, li toki ala e nimi pi ilo esun lon tenpo ale; poki lipu ni li toki e pali ni: ona li pali e seme. + +## toki pi pali + +ilo SoHoLINK li **ilo insa** (coordinator) pi **kipisi ilo** (substrate) JFA: ona li lawa e pali lon poka pi ilo Node — ona li sona e ilo Node kepeken lipu pi ken pali ona, li alasa e ilo pona tawa pali, li pana e tenpo pali, li lawa e nasin pali tan open tawa pini, li toki e mani pana (fee), li pini e esun kepeken mani pi ma suli (fiat), li lawa e utala — en ona li wan e lupa lukin mute (federation). ilo insa li **pali pi ken ante** (pluggable role): ilo ale pi nasin sama li ken kama lon ma ona, en lupa lukin li ken pali e ilo insa ona, anu ona li ken alasa e ilo Node pona lon nasin poka. ilo insa ni li pali tawa toki awen ni pi kipisi ilo: **lawa pali li lon ilo ni: jan pali jo li ken jo e ilo ni — lupa lili wan pi tomo ilo (hosting chokepoint) pi ken ala weka li lon ala.** + +| nimi pi poki lipu ni | pali lon nasin JFA | +|---|---| +| Coordinator (poki lipu ni) | ilo insa: ona li lawa e pali lon poka pi ilo Node; ona li pali pi ken ante (pluggable); ilo ante li ken kama lon ma ona (replaceable) | +| Frontend (ilo Cloudy en ilo ante) | lupa lukin: ilo tawa jan kulupu; jan kulupu en esun pi jan kulupu li lon ni | +| Node | ilo pi jan pali jo — jan pali jo li jo e ilo ni | +| poki leko `participants`, lupa (portal), ilo pali (agent) | **selo pi jan kulupu pi tenpo tawa** (transitional member surfaces) — ken ni li ken pi lupa lukin, taso ona li lon ni lon tenpo lili, li awen e tawa ona; lipu CLAUDE.md li sitelen e ona sama ni | + +## nasin awen en linja ona + +| nasin awen (nasin JFA) | ilo lon ni | lukin | +|---|---|---| +| **jan li lon ala linja lon tenpo ale** | lon tenpo kama suli la ilo insa li sitelen ala e jan: ona li esun lon poka pi lupa lukin en ilo Node taso; nimi lon linja li nimi pi pali ilo (workload identity) (SPIFFE NodeID) kepeken `sohocloud-protocol` | ona li kepeken nasin insa lon nimi nanpa open (published tag); selo pi jan pi tenpo tawa li jo e sitelen, jan li toki ala e ni: "ona li lon ala" | +| **nimi wan taso pi jan pali jo** | poki leko `participants` wan taso (tawa nanpa 011) — tu pi jan pana en jan kama jo (provider/consumer) li lon ala, lon nasin ilo (schema) anu lon sitelen ilo | nasin ilo (schema); ilo grep li alasa e `providers`/`consumers` la ona li pana e lipu pi tawa pini taso | +| **jan ale li ken lukin e mani pana (fee)** | mani pana li lon nasin wan taso: toki `FeeDeclaration` (ilo insa li sitelen e nimi ona lon ona) — jan li sitelen e ona, jan ale li ken lukin e ona, li ken utala e ona | poki ilo `fees/` pi nasin insa + SPEC | +| **mani pi ma suli li awen mani pi ma suli; mani pi kulupu li awen lon tomo ona** | pini esun li kepeken mani pi ma suli taso (Stripe Connect); sitelen mani (tokens) li lon ala, poki mani (wallets) li lon ala; ona li weka wawa tan mani pi jan kulupu (jan kulupu li pana e ona) pi lupa lukin ale | nasin awen lon lipu CLAUDE.md; poki ilo pi pana mani li toki tawa Stripe taso | +| **sona pi sama ala li lon ala** | jan pali jo ale li ken lukin e nanpa mani pi esun, e nanpa pi kepeken ilo, e mani kama | selo pi lupa (portal); poki leko pi nanpa kepeken | +| **selo lawa li lon poka ante** | lupa pi jan lawa (admin portal) li lon lupa nanpa (port) ante, li ken kama tan poka taso (local-only); ona li open ala tawa jan ale lon tenpo ale; ona li sitelen pali (role-flags) ala lon lupa pi jan ale | nasin pi pana ilo lon ma (deploy configuration) | +| **ma tan: pana insa = pana weka** (inbound = outbound) | AGPL-3.0; DCO (`Signed-off-by` lon pana ale (commit)), lipu CLA ala | lipu ken (license); nasin pali DCO (o lukin e ijo pi tenpo lili: lawa wawa li lape, li jo e nimi "tenpo lili") | + +## ijo pi tenpo lili en ijo pi pini ala + +- **selo pi jan kulupu pi tenpo tawa.** ilo pali pi ilo Node (node agent), lupa pi jan kulupu (member portal), poki leko `participants`, en ilo pi pana ilo (installer) li ken pi lupa lukin; ona li lon ni tan tenpo pini pi pali tu, li awen e tawa ona. ona li jo e sitelen, li awen pali; jan li toki ala e ni lon tenpo ale: "ona li pali pi tenpo kama suli pi ilo insa." +- **kulupu pi ilo insa mute (federation) li wile pi lipu nasin; jan li pali ala e ona.** sitelen awen pi jan lukin (witnessed checkpoints) (nasin pi lukin open pi lipu lon (certificate-transparency): ona li awen lon kipisi sona, en ijo open `anchor/` pi nasin insa) li wile pi nimi tawa ni: ilo insa wan li ken ala toki tu ante tawa ilo insa ante (non-equivocation). tenpo ni li pini ala la ilo insa wan taso li lon ma: wile sona nanpa 7 pi pini ala pi nasin JFA — ilo sona pi lawa sama (sovereign compute) li pana e ken pi weka kepeken ilo, li pana ala e ken pi weka kepeken mani — li lawa ale, li jo e nimi, li pini ala. +- **lupa lukin li jan pi ilo suli (operator), en ilo li lukin e lon ona (authentication) — pali li pini (BUILT) lon linja pi ilo insa.** tenpo ni la selo `/v0` lon poka pi ilo Node en kama sin pi nimi open pi ilo Node (node-pubkey enrollment) li kama jo e toki pi jan pi ilo suli kepeken nimi open 2 tan 7 (2-of-7) (kulupu pi nimi open luka tu li kama sin lon tenpo, lipu lawa `X-SohoCloud-Operator`, tenpo pi pana sin (replay window) tawa `(operator,coordinator)` ale) kepeken ilo pi wile ni: nasin pi jan pi ilo suli anu nasin SPIFFE. lipu lawa li lon la ona li wile e nasin pi jan pi ilo suli; ona li lon ala la nasin SPIFFE pi tenpo ni li awen tawa ilo Node pi linja poka anu pi poka weka (direct/satellite). lon nasin tu la lon pi ilo Node li kama tan sitelen nimi ed25519 pi toki wan wan (ilo li lukin e ona kepeken `node_protocol_keys`); tan ni la nasin pi pana tawa kepeken jan pi ilo suli (operator-relay) li pana ala e SVID sin tawa ilo Node wan wan. lukin: ilo lukin lili (unit tests) `OperatorAuth`/`OperatorOrSPIFFE`; ilo lukin pi nasin sama (conformance harness) kulupu lukin B (Suite B). ijo pi pini ala: tenpo ni la jan pi ilo suli ala li pini e kama sin tan open tawa pini (ni li ken ala tan ni: nasin pi pana lipu (mail transport) tawa 2FA li pali ala lon tenpo ni); tan ni la nasin li pona lon ilo lukin, taso lon tenpo ni la ona li lon ala pali lon (production). +- **jan ante pi pini esun kepeken mani pi ma suli** (nimi pi jan kulupu tawa kama jo mani, anu lupa lukin) li wile sona open; jan li wile e ni. toki pi pini tu ale li awen lon poka pi mani pi ma suli, li kama ala wan tawa mani pi jan kulupu lon tenpo ale. +- **lawa wawa DCO li lape lon tenpo lili pi nimi (2026-07-12).** nasin pali `dco.yml` li lape — jan li weka ala e ona — tawa pali wawa pi open pi kulupu ilo (stack-establishment push), tan wile pi jan awen (steward). tan nasin pi ma tan pi nasin JFA: toki awen li lape ala lon tenpo ale (pana li awen tawa poki pi jan ale AGPL kepeken nasin pana insa = pana weka (inbound = outbound); Contributor Covenant li ante ala); jan li toki awen e ni: lawa wawa li kama sin, li pali wan taso (`gh workflow enable DCO`); en lupa ni li toki lon — pana (commits) lon tenpo lupa li ken ala kama jo e sitelen lon tan tenpo kama; tan ni la tenpo lupa li awen lili, en open ona en pini ona li lon lipu awen. pana (commits) tan ilo pali (agent) li awen jo e `Signed-off-by` lon tenpo lupa ale, li awen sama ni. + +## toki pi ijo wile + +ona li kepeken `sohocloud-protocol` lon nimi nanpa open (version tag) — ona li lipu lili pi ijo wile ala (dependency leaf); ilo insa ni en lupa lukin li kepeken ona sama. ona li wile ala e lupa lukin, li wile ala e sitelen ilo pi esun pi jan kulupu; esun pi jan kulupu li lon sewi pi kipisi ni; ona o tawa ala anpa, insa kipisi ni. + +## toki pi ilo esun taso (lon pini, tan nasin pi nanpa toki) + +ilo SoHoLINK pi kepeken nanpa wan (reference deployment) li lon soholink.org; ma pi pilin awen (trust domain) li `spiffe://soholink.org`. ilo Cloudy li lupa lukin pi kepeken nanpa wan. nasin insa li pana ala e ken suli tawa ona tu. diff --git a/CONFORMANCE.zh.md b/CONFORMANCE.zh.md new file mode 100644 index 0000000..dbc0944 --- /dev/null +++ b/CONFORMANCE.zh.md @@ -0,0 +1,51 @@ +> 社区翻译(草稿)——NTARI 政策 P2-002《全球多语言广播》。来源:CONFORMANCE.md(英文原文,2026-10-05 快照)。本文为机器辅助的社区翻译草稿,依照 P2-002 §3.1 待区域维护者审校。根据 §2.2,核心技术规范仍以英文为准。 +> +> 如发现译文有误,欢迎 fork 仓库并提交 Pull Request +> 来改进翻译:https://github.com/NTARI-RAND/SoHoLINK。翻译修正与代码贡献同样宝贵,我们诚挚欢迎。 + +> 英文原文具有规范效力。本译文仅供阅读,不作解释之用:凡与 `CONFORMANCE.md` 存在分歧之处,以英文为准。规范性关键词(MUST、MUST NOT、SHOULD、SHOULD NOT、MAY)、字段名、标签与标识符均保留英文,因为它们构成符合性契约。 + +# 符合性——雅努斯双面架构 + +本仓库以该架构自身的术语所作的自我描述,依照架构的顺序规则,在任何产品或部署特定内容**之前**陈述。每一项符合性声明都绑定到执行它的机制与检查,否则即被标注为暂代。未经绑定的文字只是营销。 + +该架构即**雅努斯双面架构(Janus-Facing Architecture,JFA)**——NTARI 的统一架构文档,是本项目 AGPL-3.0 公域下的自由文档。它只命名角色,绝不命名产品;本仓库声明自己承担哪一个角色。 + +## 角色声明 + +SoHoLINK 是 JFA **基质**的**协调者**:负责节点侧的编排——通过能力清单识别节点、匹配与调度、雇佣生命周期、费用声明、法币结算、争议处理——以及前端的联邦。协调者是一个**可插拔的角色**:任何符合规范的实现都可以取代它,前端也可以运行自己的协调者,或直接与节点匹配。它所服务的基质保证是:**在参与者可以拥有的基础设施上进行协调——不存在无法移除的托管咽喉点。** + +| 本仓库术语 | 架构角色 | +|---|---| +| Coordinator(协调者,即本仓库) | 协调者:节点侧的编排,可插拔、可替换 | +| Frontend(前端,如 Cloudy 等) | 一个前端:面向成员的应用;成员与成员经济的所在 | +| Node(节点) | 参与者所拥有的基础设施 | +| `participants` 表、门户、代理程序 | **过渡性成员界面**——归属前端的能力,在迁移完成前暂时托管于此,并已在 CLAUDE.md 中如此标注 | + +## 不变式及其绑定 + +| 不变式(架构) | 此处的机制 | 检查 | +|---|---|---| +| **个人绝不出现在线路上** | 从长远看,协调者不对任何个人建模:其交易对手是前端与节点;线路身份是通过 `sohocloud-protocol` 实现的工作负载身份(SPIFFE NodeID) | 以已发布的标签使用协议;过渡性的个人界面予以标注,而非否认其存在 | +| **单一参与者身份** | 只有一张 `participants` 表(迁移 011)——模式(schema)与代码中都不存在提供者/消费者之分 | 模式;用 grep 搜索 `providers`/`consumers` 只会返回迁移历史 | +| **费用可理解性** | 费用只以协调者签名的 `FeeDeclaration` 消息形式存在——由其撰写、可理解、可质疑 | 协议的 `fees/` 包 + SPEC | +| **法币仍是法币;信用留在本地** | 结算是纯法币结算(Stripe Connect);没有代币,没有钱包;与任何前端的成员发行信用严格分离 | CLAUDE.md 不变式;支付包只与 Stripe 交互 | +| **不存在信息不对称** | 定价、计量与收益对所有参与者可见 | 门户界面;计量表 | +| **治理界面相互分离** | 管理门户位于单独的、仅限本地的端口上,从不公开暴露,而不是公共门户上的角色标志 | 部署配置 | +| **溯源:入即是出(inbound = outbound)** | AGPL-3.0;DCO(每次提交附 `Signed-off-by`),无 CLA | 许可证;DCO 工作流(见暂代部分:执行已作为已命名的临时措施暂停) | + +## 暂代与未决残余问题 + +- **过渡性成员界面。** 节点代理程序、成员门户、`participants` 表与安装程序,是双重角色时代遗留下来、托管于此的归属前端的能力,尚待迁移。它们已被标注、保持可用,并且从不被描述为协调者的长期角色。 +- **协调者联邦是设计目标,尚未构建。** 经见证的检查点(记录层中预留的证书透明度模型,以及协议的 `anchor/` 桩)是实现跨协调者不可双重陈述(non-equivocation)的已命名目标。在此之前,这是一个单协调者部署:架构的开放问题 7——主权计算换来的是机械意义上的退出,而非经济意义上的退出——完全适用,已命名,尚未解决。 +- **前端即运营者认证——已在协调线路上构建(BUILT)。** `/v0` 节点侧界面与节点公钥注册现已通过一个"运营者或 SPIFFE"选择器接受 2-of-7 运营者传输(轮换的七密钥集、`X-SohoCloud-Operator` 请求头、按 `(operator,coordinator)` 划分的重放窗口):该请求头选择运营者路径;没有该请求头时,直连/卫星节点继续使用现有的 SPIFFE 路径。两条路径中的节点真实性都来自每条消息自身的 ed25519 签名(依据 `node_protocol_keys` 验证),因此运营者中继路径不需要为每个节点增加 SVID。检查:`OperatorAuth`/`OperatorOrSPIFFE` 单元测试;符合性测试套件 Suite B。残余问题:尚无任何运营者端到端完成注册(受阻于双因素认证(2FA)邮件传输),因此该路径已在测试中验证,尚未在生产环境中验证。 +- **法币结算的交易对手**(成员的收款身份,还是前端)是一个刻意保持开放的问题;无论答案如何,都留在法币一侧,绝不与成员信用混为一谈。 +- **DCO 执行已作为已命名的临时措施暂停(2026-07-12)。** `dco.yml` 工作流已被禁用——而非删除——以服务于技术栈建立阶段的推进,这是管理者(steward)的决定。依照架构的溯源标准:约定本身从不暂停(贡献仍以入即是出(inbound = outbound)的方式进入 AGPL 公域,Contributor Covenant 不受影响);恢复执行已作出承诺,且只需一个操作(`gh workflow enable DCO`);这一缺口也如实呈现——在该窗口期内所作的提交无法被追溯认证,因此窗口期保持短暂,其开始与结束均记录在案。无论如何,由代理撰写的提交在整个窗口期内仍继续附带 `Signed-off-by`。 + +## 依赖声明 + +以已发布的版本标签使用 `sohocloud-protocol`——这是本协调者与各前端共享的依赖叶子。不依赖任何前端,也不依赖任何成员经济代码;成员经济存在于本层之上,并且不得向下迁移到本层之中。 + +## 产品特定说明(依照顺序规则,置于最后) + +参考部署位于 soholink.org;信任域为 `spiffe://soholink.org`。Cloudy 是参考前端。协议不赋予二者中任何一方特权。