قبل عام تقريبًا، نشرت منشورًا على مثيل Discourse التابعة لـ GitHub يتضمن مجموعة من الروابط على النحو التالي: “https://github.com/OWNER/REPO/tree/BRANCH/path” لمناقشة كيفية معالجة GitHub.com لمثل هذه الروابط. تلقى منشوري على الفور تعديلاً تلقائيًا من النظام برسالة “تم استبدال رابط GitHub برابط دائم”، والذي يبدو أنه صادر عن إضافة discourse-github. بينما قد يكون استبدال اسم الفرع برابط دائم إلى معرف التضمين الحالي ميزة مفيدة في الحالة الشائعة لمنشور يستشهد بجزء محدد من الكود، فإن التعديل في الحالة الخاصة لمناقشة معالجة عناوين URL الخاصة بـ GitHub قد أفسد معنى منشوري. لحسن الحظ، لاحظت تعديل البوت فورًا، وبعد عدة جولات من المواجهة مع البوت، وجدت أخيرًا حلاً بديلاً بإضافة وسم لمنع نمط البوت من المطابقة، على النحو التالي:
لكن قد لا يلاحظ مؤلفون آخرون تعديل البوت وقد ينتهي بهم الأمر بمنشور يربك القراء.
ما هو الحل الأمثل لتجنب تعديلات الروابط الدائمة غير المرغوب فيها من GitHub على منشور معين؟ بشكل عام، أشعر بأنه من الخطأ أن تقوم البوتات بإجراء تعديلات تلقائية قد تفسد المنشور. سيكون أكثر أمانًا (1) سؤال المؤلف عند حفظ المنشور عما إذا كان يجب تعديل الروابط، أو (2) أن تقوم البوت بإضافة رابط دائم دون إزالة الرابط الأصلي. (يبدو أنني أتذكر رؤية بعض البوتات على مواقع ويب أخرى، ربما Reddit، تضيف معلومات دون حذف المعلومات الموجودة.) إذا اعتبر مطورو Discourse هذه الخيارات قبيحة جدًا أو تتطلب جهدًا كبيرًا لاستيعاب حالة استخدام نادرة، فقد تكون بعض الخيارات الأخرى هي (3) إظهار إشعار بعد حفظ المنشور مع رابط إلى معلومات حول كيفية تجنب المؤلف للتعديلات إذا لزم الأمر، إما (أ) كراية مخصصة في واجهة المستخدم أو (ب) مجرد سطر نصي تضيفه البوت في نهاية المنشور.
لا أعرف ما هو التصميم الأكثر معقولية لتمكين المؤلف من الاختيار من التعديلات. تبدو إعدادات الاستبعاد على مستوى الموقع الخاصة بإضافة discourse-github بناءً على هدف الرابط غير مناسبة لهذا الغرض. ربما يكون الحل البديل الحالي باستخدام وسم كافياً. حتى إذا لم يتم إجراء أي تغيير على Discourse، فإنني آمل أن يجعل هذا المنشور من السهل اكتشاف الحل البديل للمؤلفين الذين يلاحظون المشكلة.
ملاحظة: لقد أثارْتُ هذه المشكلة سابقًا على منتدى GitHub لأنني افترضت أن بوت “الرابط الدائم” خاص بمثيل GitHub، لكن أحد المعلقين هناك أبلغني بأنه ميزة عامة في Discourse، لذا فإنني أثير هذه المشكلة هنا.
أعتقد أن هذه ميزة جيدة، لأن الناس غالبًا ما ينشرون روابط إلى master، وهذه الروابط تصبح قديمة مع مرور الوقت في الغالب. ومع ذلك، يجب أن يكون من الممكن عمدًا نشر رابط إلى فرع معين، فهناك العديد من الأسباب الصالحة للقيام بذلك. كما أن هذه الميزة تبدو بشكل عام معطلة بعض الشيء؛ فهي تعيد كتابة أشياء لا ينبغي إعادة كتابتها، ولا تحلل أشياء كان من المرجح أن تحللها.
إليك بعض الأمثلة التي يمكن استخدامها كحالات اختبار لإصلاحها:
عنوان URL محاط بعلامات اقتباس خلفية. هذا ليس رابطًا ولا ينبغي إعادة كتابته، لكنه يُعاد كتابته: https://github.com/ClassicPress/subdomain-static/blob/master/forums-enhancements.js
عنوان URL في كتلة كود ثلاثية علامات الاقتباس الخلفية. هذا ليس رابطًا ولا ينبغي إعادة كتابته، لكنه يُعاد كتابته:
أعتقد أنه يجب إعادة كتابة (1) فقط أعلاه. هذا سيجعل السلوك أكثر قابلية للتنبؤ، ويعيد كتابة الروابط “العادية” فقط. الروابط التي تم استخدام هيكل Markdown محدد فيها (يمكن اعتباره طريقة للتعبير عن نية محددة) يجب تركها كما هي.
على أي حال، أنا أختلف: أعتقد أنه في الحالة العامة لـ [text](URL) (نسميها (2أ))، يجب إعادة كتابة عنوان URL للرابط بنفس الطريقة التي تتم بها (1). (أتفق على أن السلوك الحالي لإعادة كتابة النص وليس عنوان URL معطل تمامًا.) أتخذ القرار بين كتابة (1) و (2أ) بناءً على ما إذا كنت أعتقد أنه من المفيد أو المشتت للقارئ رؤية عنوان URL، وليس بناءً على أي نية حول ما إذا كان الرابط يجب أن يشير إلى إصدار التعليمات البرمجية وقت الكتابة أو وقت القراءة. بالطبع، أنا على دراية بمشكلة الرابط الدائم، لذا أقوم بإنشاء رابط دائم بنفسي كلما أردت ذلك. ولكن بشكل عام، إذا قرر مسؤول Discourse تمكين روبوت الرابط الدائم، فمن المفترض أن يكون ذلك لأنه يعتقد أن معظم مستخدميه ليسوا على دراية بخطر أن الروابط المستندة إلى أسماء الفروع يمكن أن تتلف، ولا أعتقد أن استخدام صيغة رابط Markdown هو إشارة كبيرة إلى أن مستخدمًا معينًا على دراية بالمشكلة ولكنه يريد إلغاء الاشتراك في إعادة كتابة هذا الرابط المحدد.
لكنني أعتقد أننا نتكهن هنا. كمستخدم متقدم، لا يهمني كثيرًا ما هو الإعداد الافتراضي طالما يمكنني تجاوزه حسب الحاجة.
نعم، بالضبط. حاليًا لا توجد طريقة لتجاوزه. كتابة [url](url) (نص الرابط وعنوان URL متطابقان تمامًا) ستكون بالتأكيد طريقة للإشارة إلى الروبوت بأنه لا ينبغي إعادة كتابة هذا الرابط، لأنه لا يوجد سبب آخر لكتابته بهذه الطريقة.
هناك سبب إذا كنت تريد أن تعطي الرابط عنوانًا خاصًا به بدلاً من استنتاجه من عنوان URL المستهدف، أي [title](url). إعطاء الرابط عنوانًا لن يشير إلى أي تفضيل لإعادة كتابة عنوان URL، لذلك أتفق مع @mattmccutchen على أن 1 و 2 يجب أن يتصرفا بشكل متسق لإعادة كتابة عنوان URL.
قد تكون هناك حجة مفادها أن العنوان الذي يطابق عنوان URL بالضبط هو مؤشر على أنه لا ينبغي إعادة كتابته، ولكن ماذا لو أراد المستخدم تقديم عنوان ويريد ألا تتم إعادة كتابة عنوان URL؟ يجب أن تكون هناك طريقة أخرى لتحديد ذلك.
شيء يتبادر إلى الذهن هو لاحقة عنوان مشابهة لتغيير حجم الصورة المضمنة، على الرغم من أنني لست متأكدًا من كيفية اكتشاف المستخدم لذلك.
يمكن تغيير حجم الصورة المضمنة بهذا الشكل: 
لذلك يمكن (يفترض) جعل المكون الإضافي discourse-github يبحث عن شيء كهذا: [title|github-no-rewrite](url)
آه، لم يكن واضحًا لي أن (2) الخاص بك يشير فقط إلى الحالة الخاصة حيث يكون النص وعنوان URL متماثلين. كان بياني للحالة العامة حيث قد لا يكون النص وعنوان URL متماثلين؛ دعنا نسمي ذلك (2أ) الآن.
في الحالة (2)، أتفق على أنه من الغريب إعادة كتابة عنوان URL وليس النص، مما يتركهما غير متناسقين، ولكن يبدو لي أنه يمكن للمرء أن يجادل بنفس القدر بأنه إذا أردنا تجنب عدم الاتساق، فإن أفضل طريقة للقيام بذلك هي إعادة كتابة كل من عنوان URL والنص بدلاً من عدم إعادة كتابة أي منهما. لذلك لا أجد الحجة لمعاملة (2) كخيار استبعاد مقنعة. نظرًا لأنه يجب أن يكون لدينا خيار استبعاد يعمل لـ (2أ)، فسأكون أميل إلى السماح للمستخدمين باستخدام نفس خيار الاستبعاد لـ (2) وعدم تعقيد التصميم. (أعتقد أن هذه قد تكون فكرة سيمون مانينغ أيضًا؟)
لست متأكدًا مما إذا كنت أتبع هذا بشكل صحيح (أو ما إذا كان ذلك ممكنًا)، ولكن هل يمكنك استخدام الهروب من المسافة كما في Inline PDF Previews - #45 by Johani لذا فإن [ text]( url) لن يعيد كتابة النص أو الرابط، وسيتم تغيير أي شيء آخر تلقائيًا؟
ليس اختبارًا صالحًا لأن إعادة كتابة روابط GitHub الدائمة معطلة تمامًا في هذه النسخة من Discourse. (أتساءل عما يقوله ذلك عن هذه الميزة إذا تم تعطيلها في النسخة “الرسمية” )