اختصار «c» يسبب تعارضاً في المسودة عند إنشاء موضوع جديد من صفحة موضوع

يمكنني إعادة إنتاج تعارض مسودة على meta.discourse.org عند إنشاء مسودتي موضوع جديدتين باستخدام اختصار لوحة المفاتيح الأصلي c أثناء عرض موضوع موجود.

خطوات إعادة الإنتاج

  1. افتح موضوعًا عامًا موجودًا.
  2. اضغط على c لإنشاء موضوع جديد.
  3. أدخل عنوانًا ونصًا.
  4. انتظر حتى يتم حفظ المسودة، ثم انقر على زر حفظ وإغلاق (X) في المحرر.
  5. بينما لا تزال تعرض موضوعًا موجودًا، اضغط على c مرة أخرى لإنشاء موضوع جديد آخر.
  6. أدخل عنوانًا مختلفًا.
  7. اضغط على Tab للانتقال من حقل العنوان إلى نص الرسالة وانتظر حتى يتم الحفظ التلقائي.

يجب فتح كلا محرري الموضوع الجديد أثناء عرض موضوع موجود لإعادة الإنتاج الذي تأكدت منه على Meta.

النتيجة الفعلية

تظهر تحذير يقول إن المسودة قيد التحرير في نافذة أخرى ويطلب مني إعادة تحميل الصفحة.

يحدث هذا دون تحرير المسودة في نافذة أخرى.

على موقعي الخاص، يعيد طلب الحفظ التلقائي الفاشل إلى /drafts.json حالة HTTP 409.

النتيجة المتوقعة

يجب أن يحصل الموضوع الجديد الثاني على مسودته الخاصة، مع الحفاظ على المسودة المحفوظة الأولى دون تعارض.

أين أعدت إنتاج المشكلة

  • على meta.discourse.org، باتباع الخطوات المذكورة أعلاه.
  • على موقعي الخاص في الوضع الآمن، مع تعطيل السمات وتخصيصات الإضافات من جهة العميل بالكامل.
  • يعمل موقعي على Discourse 2026.10.0-latest، التراجع b28f2a44c.

السبب المحتمل

يشير فحص الكود إلى أن البديل (fallback) في KeyboardShortcuts#createTopic لا يزال يستخدم المفتاح الثابت Composer.NEW_TOPIC_KEY (new_topic) ولا يوفر draftSequence:

https://github.com/discourse/discourse/blob/ec4cea91ea81d926cedab5f0d61c9313f42aba24/frontend/discourse/app/services/keyboard-shortcuts.js#L565-L569

بالمقارنة، تولّد composer.openNewTopic() مفتاح مسودة فريدًا.

في إعادة الإنتاج المسجلة على موقعي، تم حفظ المسودة الأولى تحت new_topic ووصلت إلى الترتيب 1. حاول المحرر الثاني الحفظ تحت المفتاح نفسه دون ترتيب، مما أدى إلى HTTP 409 والتحذير.

هل يمكن لهذا البديل استخدام composer.openNewTopic() بحيث يحصل كل موضوع جديد على مسودة منفصلة؟

مع أطيب التحيات،
أ.د. كاجو