MathTrail

للجمهور التقني

كيف تعمل الخدمة

يقف MathTrail بين الدردشة التي تستخدمها الأسرة أصلًا وGoogle Drive الخاص بولي الأمر. يكتب نموذج الدردشة كل مسألة، وتقرر الخدمة ما إذا كانت ستصل إلى الطفل. إنه برنامج واحد: لا يستدعي أي نموذج خاص به، ولا يحتفظ بشيء بين الطلبات.

  • ملف تنفيذي واحد بلغة Go على Cloud Run
  • بلا حالة
  • بلا قاعدة بيانات
  • بلا استدعاءات LLM خاصة به
  • MCP 2026-07-28 · MCP Apps

عميل الدردشة1 · العميل

  • Claude
  • ChatGPT
  • مضيفو MCP Apps الآخرون

يكتب نموذج الدردشة المسألة، وتعرضها البطاقة على الطفل.

MCP · استدعاءات الأدوات عبر HTTPS

MathTrail على Google Cloud2 · بيئة التشغيل

Cloud Run · ملف تنفيذي واحد بلغة Go · بلا حالة

النواة: حسابات بحتة

  • القاعدة
  • التصنيفات
  • الفحوص
  • برنامج الحل
  • المحتوى

من حولها: OAuth، وخادم MCP، والبطاقة، والختم، والحدود.

Drive API v3 · بالرمز المميز لولي الأمر نفسه

Google Drive3 · التخزين

MathTrail/mathtrail-profile.json

ملف واحد لكل طفل، في Drive الخاص بولي الأمر نفسه، وهو وحده ما يُحفظ طويلًا.

01

الخريطة

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

أجزاء الخدمة

دردشة الأسرة

Claude في المتصفح، وعلى الحاسوب، وعلى الهاتف · ChatGPT

الأشخاص

مضيف الدردشة

MathTrail

ملف تنفيذي واحد بلغة Go · Cloud Run · نطاق خاص به

بين الأجزاء، استدعاءات دوال عادية

المدخل

الأدوات: قراءة الملف الشخصي، والحساب، وإعادة كتابته

حسابات بحتة، بلا شبكة

حول النواة

Google وGitHub

الخدمات الوحيدة خارج الملف التنفيذي

حساب Google لولي الأمر

Google Cloud

GitHub

اختاروا جزءًا من الخريطة: يبقى كل ما يرتبط به ساطعًا، ويخفت الباقي.

دردشة الأسرة

الشخص البالغ

أحد الوالدين أو معلم. يملك حساب الدردشة وحساب Google كليهما: يربط MathTrail، ويسجّل الدخول مرة واحدة، وينشئ الملف الشخصي، ويدير الدرس في الدردشة، ويتابع التقدّم. وهو وحده من يسجّل الدخول، ووحده من يكتب.

دردشة الأسرة

الطفل

الصفوف 1–6. تُحلّ المسائل على البطاقة، في دردشة الشخص البالغ. وليس للطفل تسجيل دخول خاص.

مضيف الدردشة

نموذج المضيف

Claude أو ChatGPT. يكتب المسألة، وبرنامج حل بلغة Starlark، وشرحًا لكل خيار خاطئ، وتحققًا ذاتيًا؛ ويدير الدرس بالكلمات حيثما لا تُرسم البطاقات. أما MathTrail نفسه فلا يستدعي أي نموذج.

مضيف الدردشة

بيئة تشغيل MCP Apps

ترسم البطاقة في إطار معزول، وتمرر إليها اللغة والمنصة والحجم، وتحيل استدعاءات البطاقة الخاصة مع الرمز المميز للمضيف. أما البطاقة نفسها فلا ترى هذا الرمز أبدًا.

مضيف الدردشة

مستند البيانات الوصفية للعميل

يعرّف المضيف نفسه بعنوان HTTPS. ويجلب MathTrail المستند من ذلك العنوان، مع حماية من SSRF، بدلًا من الاحتفاظ بسجل للعملاء.

MathTrail · المدخل

موجّه HTTP

المدخل الوحيد: /health، و/mcp، ونقاط نهاية OAuth، والمسار .well-known. مهلات، وحد لحجم جسم الطلب، وتحقق من Origin؛ والمُصدِر هو نطاقه الخاص، وأي Host آخر يتلقى 404.

MathTrail · المدخل

خادم التفويض

يؤدي MathTrail دور خادم OAuth 2.1 لنفسه، مع PKCE: البيانات الوصفية، وشاشة موافقة خاصة به، وتسجيل الدخول باستخدام حساب Google، والرموز المميزة، والتجديد، والإبطال. وكل ما كان خادم ذو حالة سيحتفظ به يُختم داخل الرموز المميزة وملفات تعريف الارتباط.

MathTrail · المدخل

خادم MCP

البروتوكول: Streamable HTTP 2026-07-28، بلا حالة، مبني على SDK الرسمي للغة Go. يسرد الأدوات ويستدعيها، ويقدّم البطاقة كمورد ui://، ويسلّم النموذج تعليماته مع إصدارها.

MathTrail · المدخل

الحدود

وتيرة لكل عنوان قبل تسجيل الدخول ولكل حساب بعده، وسقف عام، وكل ذلك في الذاكرة، ثم الأسقف اليومية، التي تُحتسب في الملف الشخصي. وعند تجاوز أي حد، جملة بسيطة ينقلها النموذج.

MathTrail · الأدوات

الأدوات

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

MathTrail · حسابات بحتة

القاعدة

تختار التكليف بطريقة حتمية: بعد الخطأ، الموضوع نفسه لتثبيته؛ وإلا فالموضوع الذي لم يظهر منذ أطول مدة؛ والصعوبة من الممر الذي يبلغ فيه احتمال النجاح 70–85%. ويأتي الموضوع الذي يتأخر فيه الطفل ضعف المرات. أما الموضوعات الصعبة جدًا في الوقت الحالي فتتوقف مؤقتًا، وحين يبلغ المستوى العام للطفل أحدها، يمكن لمسألة من كل ست أن تعيده فحصًا للموضوع.

MathTrail · حسابات بحتة

التصنيفات

P = 0.2 + 0.8·σ(θ + δ − β). لا يتحرك Elo إلا بحسب صحة الإجابة، بخطوة تتناقص؛ ومقياس الشطرنج وإحدى عشرة مرحلة؛ ويُعدّ الموضوع متقنًا وفق تقدير حذر.

MathTrail · حسابات بحتة

الفحوص

ما يجب أن تجتازه المسألة عند تسليمها: بنيتها وخمسة خيارات مختلفة، وحروف لغة الدرس، وشروح متمايزة، وبرنامج الحل، والتحقق الذاتي، وسهولة القراءة، والمسائل شبه المكررة، والرسم: صيغته، وتسمياته مقارنة بالسؤال، وخلوّه من الإجابة. ويُبلَّغ عن كل إخفاق دفعة واحدة.

MathTrail · حسابات بحتة

برنامج الحل

يشغّل برنامج النموذج المكتوب بلغة Starlark، الذي يجرّب الخيارات؛ ويجب أن يكون خيار واحد بالضبط هو الصحيح. حدود للخطوات وللوقت، بلا شبكة وبلا ملفات.

MathTrail · حسابات بحتة

المحتوى

كل ما هو مدمج في الملف التنفيذي وليس شيفرة: فهارس المواضيع والفخاخ والمهارات، والمسائل المرجعية، والمخططات، وقوالب برامج الحل، ومثال لكل نوع من الرسوم، وتعليمات النموذج مع إصدارها.

MathTrail · حول النواة

الويدجت

البطاقة: شيفرة Preact مجمّعة في ملف HTML واحد لا يحمّل شيئًا من الخارج، وفيه قواميس اللغات. يعمل التخطيط بدءًا من 320 px، والأزرار بحجم يناسب الإصبع.

MathTrail · حول النواة

المخزن

يجد الملف الشخصي بعلامة مخفية، ويقارن قبل أن يكتب، ويوفّق بين علامتي تبويب، ويستعيد الملف من النُسخ المثبّتة في Drive عندما يطلب ولي الأمر ذلك، ويبقى ضمن ميزانية صغيرة من استدعاءات Drive.

MathTrail · حول النواة

الختم

آلية واحدة لمهمتين: تختم تسجيل الدخول ورموز Google المميزة داخل الرموز المميزة التي يحملها المضيف، وتختم داخل الملف الشخصي إجابة المسألة الحالية وإجابة المسألة المكتوبة مسبقًا. وتأتي المفاتيح من Secret Manager وتُدوَّر بحسب معرّف المفتاح.

MathTrail · حول النواة

التسجيل

ملخص منظّم واحد لكل استدعاء: الأداة، والنتيجة، والمدة، وإصدار التعليمات؛ والمحاولات وأسباب الرفض بوصفها أحداثًا للمسألة. بلا بيانات شخصية، ولا نصوص مسائل، ولا إجابات.

MathTrail · حول النواة

الحاوية والتهيئة

تربط الأجزاء بعضها ببعض وتغلقها بترتيب عكسي، وتعمل بمهلات وبإيقاف منظّم، وتقرأ تهيئتها كلها من البيئة، وترفض البدء على Cloud Run إذا فُعّل أي خيار من خيارات التطوير.

حساب Google لولي الأمر

Google OAuth

تسجيل دخول ولي الأمر بنطاق drive.file وحده، والتجديد، والإبطال. وإبطال أي رمز مميز ينهي كل وصول.

حساب Google لولي الأمر

Drive API v3

التخزين الوحيد طويل الأمد: ملف شخصي واحد بصيغة JSON في مجلد MathTrail ظاهر على Drive الخاص بولي الأمر، يُقرأ ويُكتب بالرمز المميز لولي الأمر نفسه.

Google Cloud

Secret Manager

مفاتيح الختم وسر العميل من Google: إصدارات مثبّتة، تُقرأ مرة واحدة عند بدء تشغيل المثيل.

Google Cloud

Artifact Registry

صورة الحاوية لكل نسخة، بحسب ملخصها؛ وتُحذف الصور القديمة.

Google Cloud

Cloud Logging

وجهة stdout الخاصة بالخدمة. والأسطر التي يُحتسب بها الأطفال تُحفظ 62 يومًا في حزمة (bucket) خاصة بها.

Google Cloud

BigQuery → Data Studio

تُحفظ إحصاءات الاستخدام لسنوات ويُعاد حسابها كل ليلة؛ ولا يحمل أي جدول الاسم الذي يُحتسب به الطفل. تقرير خاص وآخر عام، لا يُظهر أي مجموعة تضم أقل من عشرة أطفال.

GitHub

Actions

البناء، والفحوص، ورفع صورة الحاوية، والنشر عبر Workload Identity Federation، بلا مفاتيح لحسابات الخدمة.

GitHub

Pages

هذا الموقع: صفحات المواضيع، وسياسة الخصوصية وشروط الاستخدام التي تحيل إليها شاشة الموافقة.

02

الدرس، استدعاء تلو الآخر

يستدعي النموذج والبطاقة الأدوات نفسها، ويستندان إلى مصدر واحد للحقيقة: ملف الملف الشخصي على Drive الخاص بولي الأمر. ولا يحتاج أحدهما إلى إخبار الآخر بشيء كي يستمر الدرس.

السيناريو
  • استدعاء
  • الرد عليه
  • داخل المضيف

المسألة

  • الشخص البالغ
  • البطاقة
  • نموذج المضيف
  • MathTrail
  • Drive
  1. 1الشخص البالغ → نموذج المضيف: «مسألة جديدة، من فضلك»

  2. 2نموذج المضيف → MathTrail: next_task

  3. يرسم المضيف البطاقة فور بدء الاستدعاء: «جار إعداد المسألة التالية…»

  4. الحدود · تختار القاعدة الموضوع والمستوى والصعوبة

  5. 3MathTrail → Drive: كتابة الطلب المفتوح

  6. 4MathTrail → نموذج المضيف: الطلب مفتوح: اجلب الحزمة

  7. 5نموذج المضيف → MathTrail: get_package

  8. 6MathTrail → نموذج المضيف: التكليف · 3 مسائل مرجعية · الفخاخ · القوالب · أمثلة الرسوم

  9. يكتب النموذج المسألة، وبرنامج حل بلغة Starlark، وتحققًا ذاتيًا

  10. 7نموذج المضيف → MathTrail: submit_task — حتى 3 محاولات

  11. الفحوص · يجب أن يجد برنامج الحل خيارًا صحيحًا واحدًا بالضبط

  12. 8MathTrail → Drive: تصبح المسألة هي الحالية، وإجابتها مختومة

  13. 9البطاقة → MathTrail: read_task — تسأل البطاقة كل 4 ث

  14. 10MathTrail → البطاقة: النص · الرسم · خمسة خيارات · التلميح — دون الإجابة

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

الإجابة

  • الشخص البالغ
  • الطفل
  • البطاقة
  • نموذج المضيف
  • MathTrail
  • Drive
  1. 1الطفل → البطاقة: الضغط على C

  2. 2البطاقة → MathTrail: submit_answer — لا يُستهلك أي دور في الدردشة

  3. الإجابة الأولى وحدها · يُفتح الختم الآن · لا يتحرك θ و δ إلا بحسب صحتها

  4. 3MathTrail → Drive: كتابة التصنيفات وسجلّها

  5. 4MathTrail → البطاقة: صحيحة أم لا · الفخ وراء C · رسم الحل · الخطوات · التصنيف قبل ← بعد

  6. تتحول البطاقة إلى مراجعة الإجابة، في مكان المسألة

  7. 5البطاقة → نموذج المضيف: ui/update-model-context — سطر واحد، يُقرأ مع الرسالة التالية من الشخص البالغ

  8. 6الشخص البالغ → نموذج المضيف: «لماذا عمود إضافي؟»

  9. 7نموذج المضيف → الشخص البالغ: يجيب عن هذه المسألة بعينها، مكمّلًا البطاقة

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

الدخول

  • متصفح ولي الأمر
  • المضيف
  • MathTrail
  • Google
  • Drive
  1. 1المضيف → MathTrail: POST /mcp، بلا رمز مميز

  2. 2MathTrail → المضيف: 401 · مكان البيانات الوصفية

  3. 3المضيف → متصفح ولي الأمر: فتح /oauth/authorize · PKCE S256

  4. 4متصفح ولي الأمر → MathTrail: authorize

  5. شاشة موافقة خاصة بالخدمة: أي عميل هذا، وإلى أين سيُعاد ولي الأمر

  6. 5متصفح ولي الأمر → Google: تسجيل الدخول باستخدام حساب Google · نطاق drive.file وحده

  7. 6Google → متصفح ولي الأمر: العودة، مع رمز التفويض من Google

  8. 7متصفح ولي الأمر → MathTrail: /oauth/callback

  9. 8MathTrail → Google: استبدال رمز التفويض

  10. 9MathTrail → Drive: /about — لمن هذا الحساب على Drive؟

  11. معرّف المستخدم = HMAC لحساب Drive · رموز Google المميزة مختومة داخل رمز التفويض الخاص بنا

  12. 10MathTrail → متصفح ولي الأمر: 302 · code = mt1.c.…

  13. 11متصفح ولي الأمر → المضيف: إعادة رمز التفويض

  14. 12المضيف → MathTrail: /oauth/token · رمز التفويض + أداة التحقق

  15. 13MathTrail → المضيف: الدخول 15 د · إعادة التحميل 30 يومًا

يسجّل ولي الأمر الدخول مرة واحدة. ولا تحتفظ الخدمة بشيء من هذا التبادل: فالطلب ينتقل مختومًا في المعامل state، ورموز Google المميزة في رمز تفويض مختوم.

المسألة الحالية بوصفها آلة حالات

كل قاعدة من نوع «مرة واحدة فقط» حقل في الملف الشخصي، يُفحص ضمن القراءة والحساب والكتابة نفسها. ولا شيء آخر يتذكر أي شيء.

nonenext_taskالتكليف جاهزrequestedsubmit_task ✓خُتمت وأُعطيتissuedsubmit_answerسُجّلت مرة واحدةanswered

  • requested ↺رفض مع بقاء محاولات، ولا أكثر من ثلاث لكل طلب
  • requested → noneثلاث حالات رفض، أو 15 دقيقة منذ فتح الطلب؛ لا تُستهلك مسائل اليوم، وتُحتسب حالات الرفض الثلاث طلبًا فاشلًا من طلبات اليوم
  • issued → requested«مسألة أخرى» قبل الإجابة: يُسجَّل التخطي، ولا يتغير التصنيف
  • answered ↺أي إجابة لاحقة، من علامة تبويب ثانية أو من النموذج، تتلقى النتيجة الأولى ولا تكتب شيئًا
  • answered → requestedالمسألة التالية، على بطاقة جديدة؛ والمسألة التي أُجيب عنها لم تعد الحالية
  • answered → issuedالمسألة التالية مكتوبة مسبقًا: يضعها next_task على بطاقة جديدة فورًا، متجاوزًا الحالة requested
  • issued → noneلم يعد ممكنًا فتح الختم، فقد دُوّر المفتاح مرتين؛ ولا يُسجَّل شيء

03

أين تقيم الحالة

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

MathTrail نفسه

لا شيء

لا حسابات، ولا جلسات، ولا تسجيلات للعملاء، ولا رموز مميزة من Google. كل طلب يحمل كل ما يحتاج إليه.

مخزن الرموز المميزة في الدردشة

رموز مميزة مختومة، معتمة على المضيف

رمز الدخول
15 د
رمز إعادة التحميل
30 يومًا، ≤ 90

تُختم بداخلها رموز Google المميزة، ومعرّف مستخدم معتم للحدود، والبلد الذي سجّل منه ولي الأمر الدخول.

متصفح ولي الأمر

ملفا تعريف ارتباط، بلا جلسة

العملاء الموافق عليهم
180 يومًا
حماية تسجيل الدخول (CSRF)
10 د

فقدانهما يكلّف شاشة موافقة إضافية، أو تسجيل دخول جديدًا.

Drive الخاص بولي الأمر

الشيء الوحيد الذي يُحفظ طويلًا

mathtrail-profile.json
حتى الحذف

الملف الشخصي، والتصنيفات، والمسألة الحالية بإجابتها المختومة. يمكن لولي الأمر فتح الملف، ويحتفظ Drive بنُسخه السابقة.

Secret Manager

تُقرأ مرة واحدة، عند بدء تشغيل مثيل

مفاتيح الختمبعد التدوير، يبقى المفتاح السابق مقبولًا
90 يومًا
سر العميل من Google
مثبّت

ذاكرة المثيل

ذاكرة تخزين مؤقت فقط: تضيع عند إعادة التشغيل، ولا يتعطل شيء

عدّادات وتيرة الطلبات
دقائق
مكان ملف الملف الشخصي
10 د
مستندات العملاء
من 5 د إلى 24 س

ما استُبعد عمدًا من v1

  • قاعدة بيانات
  • قوائم انتظار
  • مخزن جلسات
  • ذاكرة تخزين مؤقت مشتركة
  • بنك مسائل جاهزة
  • عميل API لنموذج LLM
  • REST وOpenAPI

04

ملف الملف الشخصي

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

حجم الملف

≈ 61 KB / ≈ 79 KB

أي حجم يُعرض
القسمما يحتويهمن يكتبهالحجم
البصماتحتى 200 رسم تقريبي للمسائل التي أُعطيت، لفحص المسائل شبه المكررة، دون نص أو موضوع أو تاريخnext_tasksubmit_task27 KB / 29 KB
سجل التصنيفقيمة θ وقيمة δ للموضوع قبل كل إجابة حديثة، وقيمة θ وقيم كل المواضيع في بداية كل يوم من آخر 7 أيام فيها إجاباتsubmit_answer14 KB / 15 KB
التصنيفات والمواضيعθ ونقطة انطلاق الطفل؛ ولكل موضوع: δ، والإجابات، والفخاخ التي سبق الوقوع فيها، والإتقان ومستواهnext_tasksubmit_tasksubmit_answer8 KB / 14 KB
الإجابات الأخيرةآخر 20 من الإجابات وحالات التخطي، ولا يقل ما فيها عن 5 إجابات أبدًا، فهي ما تقرؤه القاعدةnext_tasksubmit_answer4 KB / 5 KB
المسألة الحالية، مختومةالإجابة، والفخ وراء كل خيار خاطئ، والحل، وبرنامج الحل، في سلسلة واحدة معتمةnext_tasksubmit_tasksubmit_answer4 KB / 8 KB
المسألة الحالية، مكشوفةما تعرضه البطاقة: النص، والرسم، وخمسة خيارات، والتلميح، وبعد الإجابة، الإجابة نفسهاnext_tasksubmit_tasksubmit_answer2 KB / 4 KB
الطلب المفتوحفي أثناء كتابة المسألة: معرّفها، والتكليف، والمحاولات المستخدمة، ومن اختار الموضوعnext_taskprepare_tasksubmit_task1.5 KB / 2 KB
الخدمة والطفلإصدار المخطط، وUUID عشوائي، والنسخة؛ والاسم المستعار، والصف، والاهتمامات، والملاحظات؛ وعدّادات اليومsave_profileedit_profileكل كتابة0.6 KB / 1.5 KB

تُحفظ المسألة المكتوبة مسبقًا بجانب الحالية، ويقارب حجمها حجم الحالية. ما لا يحتويه الملف: نصوص المسائل السابقة، والإجابة مكشوفة قبل إجابة الطفل، وأي شيء يسمّي ولي الأمر، والمرحلة، إذ تُحسب المراحل عند عرضها. ولا يدعم Drive الكتابة المشروطة، لذا يُقرأ الملف مرة أخرى قبل الحفظ، وتُرفض الكتابة إن كان قد تغيّر: فلا تمحو علامة تبويب ما كتبته الأخرى بصمت أبدًا.

05

ما يُختم، ولأي مدة

آلية واحدة تؤدي مهمتين: تختم تسجيل الدخول داخل الرموز المميزة التي تحملها الدردشة، وتختم داخل الملف الشخصي إجابة المسألة الحالية وإجابة المسألة المكتوبة مسبقًا. ويحمل كل ختم غرضه، فلا يمكن أن يُقدَّم رمز الدخول على أنه رمز إعادة تحميل، ولا أن تُقدَّم إجابة مختومة على أنها أي شيء آخر.

تشريح رمز مميز

mt1.a.kQ7fWx.5rJ0Yb2mQ8vK1nT4pXc9…

mt1
إصدار الصيغة
الغرض
c رمز التفويض · a الدخول · r إعادة التحميل · d العميل · s الحالة · k الموافقة · t إجابة مسألة
معرّف المفتاح
مأخوذ من المفتاح نفسه، فيمر التدوير دون أن يُلاحظ
النص المشفر
XChaCha20-Poly1305، وnonce عشوائي بطول 192 بت

ليس JWT: لا يقرؤه أحد غير الخدمة، ولا يمكن أن تتسرّب أي مطالبة إلى السجل من سلسلة معتمة.

مدد الصلاحية، على مقياس لوغاريتمي

  • رمز التفويض
    60 ث
  • تسجيل الدخول قيد التنفيذ
    10 د
  • رمز الدخول
    15 د
  • رمز إعادة التحميل
    30 يومًا بنافذة منزلقة، 90 على الأكثر
  • مفتاح الختم
    يُدوَّر كل 90 يومًا
  • العملاء الموافق عليهم
    180 يومًا

لا يستطيع خادم بلا حالة أن يعلّم رمز التفويض بأنه استُخدم، لذا تُبقى نافذة الرمز صغيرة. وبعد التدوير يبقى المفتاح السابق مقبولًا، فلا يضيع رمز مميز ولا إجابة مختومة عند تغيّر المفتاح.