Skip to content

الغرف الجماعية

أدر جلسات توحيد المعايير والمعايرة الحية داخل Potato. تصويت أعمى، ثم كشف من المضيف، ثم نقاش، مع مقياس Krippendorff's α لحظي يبيّن ما أضافته الجلسة فعلاً.

جديد في الإصدار v2.7.0

تحوّل الغرف الجماعية (Multiplayer Rooms) التعليق التوضيحي من مهمة فردية إلى جلسة حية مشتركة. تعمل مجموعة من المعلّقين على العنصر نفسه في الوقت نفسه، مع قياس الديناميكيات الاجتماعية بدل الاكتفاء بإتاحتها. بلا LLM، وبلا خدمات خارجية، وبلا تبعيات جديدة.

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

ثلاثة أنواع من الغرف:

النوعما يحدث فيها
Norming (توحيد المعايير)يصوّت الجميع بشكل أعمى، ثم يكشف المضيف، وتناقش المجموعة، ولأي عضو أن يغيّر تصويته. ويعرض مقياس اتفاق حي قيمة α قبل الكشف مقابل α بعد النقاش.
Huddle (لقاء البتّ)يمرّ على العناصر التي يختلف عليها فريقك حالياً، مع عرض تعليقات الجميع الأصلية كسياق. جلسة بتّ حية.
Shadow (المتابعة)ينضم المتدربون كمراقبين ويشاهدون المضيف وهو يعلّق لحظياً، بما في ذلك الجزء الذي يظلّله من النص.

لماذا غرف توحيد المعايير

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

  • الأعمى أولاً. قبل الكشف، يرى الأعضاء من صوّت لكن لا يرون بماذا صوّت. وهذا مفروض على جانب الخادم، فتكون الانطباعات الأولى مستقلة فعلاً.
  • الكشف عملية قياس. تصبح الأصوات العمياء غير قابلة للتغيير بمجرد كشفها. ويُسجَّل كل تغيير بعد الكشف مع ما تحوّل عنه العضو وما تحوّل إليه وما كانت الأغلبية في تلك اللحظة، مما يعطيك سجل مسايرة لكل عضو.
  • مقياس α يجيب عن سؤال "هل كان ذلك يستحق؟" تُحسب Krippendorff's α مرتين على العناصر المكشوفة: على الأصوات العمياء، وعلى الأصوات الحالية. والفارق بينهما هو مكسب الجلسة من توحيد المعايير، معروضاً على الشاشة أثناء حدوثه.

التهيئة

yaml
rooms:
  enabled: true
  who_can_create: any      # "any" logged-in user, or "admin" only
  persist_votes: true      # final votes write into members' annotation state
  poll_interval_ms: 1500   # client sync cadence (500–30000)
  max_members: 12          # per room (2–100)
  schema: sarcasm          # optional; defaults to the first radio/likert scheme

تصوّت الغرف على مخطط واحد أحادي الاختيار (radio أو likert). وإن لم يُضبط schema، استُخدم أول مخطط من هذا النوع في annotation_schemes.

إدارة جلسة

  1. شغّل الخادم، وسجّل الدخول، وافتح /rooms.
  2. أنشئ غرفة (النوع وعدد العناصر). ستحصل على رمز من ستة أحرف مثل MKT4QP. وتتجنب الرموز المحارف الملتبسة كي تتمكن من قراءتها بصوت مسموع.
  3. ينضم الآخرون من قائمة الردهة، أو بفتح /rooms/<CODE>.
  4. صوّتوا، ثم يكشف المضيف، وناقشوا في الدردشة الجانبية، وغيّروا أصواتكم إن اقتنعتم، ثم يتقدّم المضيف. وبعد العنصر الأخير تُغلق الغرفة بملخص للجلسة، ويمكن للمضيف تنزيل سجل الأحداث الكامل.

لقاءات Huddle

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

جلسات Shadow

في غرفة Shadow، ينضم الجميع عدا المضيف كمراقبين. لا يستطيع المراقبون التصويت، لكنهم يرون أصوات المضيف وكشوفه وتحديداته للنص بتأخير نحو 1.5 ثانية. ويُظلَّل تحديد المضيف الحالي باللون الكهرماني على شاشات المراقبين.

الاستمرارية والتعافي من الأعطال

كل غرفة مبنية على مصدر الأحداث. ويُلحق كل تغيير (انضمام، تصويت، كشف، تبديل، رسالة، تقدّم، إغلاق) سطر JSON واحداً بالملف:

text
<output_annotation_dir>/rooms/room-<CODE>.jsonl

حالة الغرفة إعادة تشغيل خالصة لذلك السجل، فتنجو الغرف الحية من إعادة تشغيل الخادم. ويؤدي السجل أيضاً دور مسار التدقيق للجلسة: الأصوات العمياء، والطوابع الزمنية، والنقاش، وكل تغيير بعد الكشف مع سياق الأغلبية عنده. ويعيد GET /rooms/api/<CODE>/export (للمضيف أو المشرف) السجل مع المقاييس المحسوبة بصيغة JSON.

مع persist_votes: true (الافتراضي)، يُكتب تصويت كل عضو النهائي على عنصر مكشوف ضمن حالة تعليقه المعتادة عندما يتقدّم المضيف. فيُحتسب عمل الغرفة تعليقات توضيحية حقيقية ويتدفق إلى كل مسارات التصدير القائمة.

يتزامن العملاء باستقصاء /events دورياً مع مؤشر موضع. لا توجد WebSockets، فتعمل الغرف تحت خادم التطوير متعدد الخيوط وأي نشر WSGI على حد سواء.

ملخص واجهة برمجة التطبيقات

نقطة النهايةالطريقةلمن
/rooms، /rooms/<code>GETالمستخدمون المسجّلون (صفحات)
/rooms/api/list، /rooms/api/disagreementsGETالمستخدمون المسجّلون
/rooms/api/createPOSTبحسب who_can_create
/rooms/api/<code>/join، /leave، /vote، /message، /presencePOSTالأعضاء
/rooms/api/<code>/state، /events?since=NGETالأعضاء
/rooms/api/<code>/reveal، /advance، /closePOSTالمضيف
/rooms/api/<code>/exportGETالمضيف أو المشرف

قراءات إضافية