نموذج تشخيص خطأ برمجي وطلب إصلاحه محمد شرف الدين — mohamadcharafeddine.com/ar/resources/bug-report-fix-request/ ======================================== ── تقرير خطأ برمجي ── الملخّص: [ماذا يحدث وأين، في سطر واحد] الخطورة: [يمنع العمل / يعيق جزئيًا / شكلي] التكرار: [دائمًا / أحيانًا / مرة] خطوات إعادة الإنتاج: 1. [افتح الرابط .. بحساب بدور ..] 2. [..] 3. [..] المتوقّع: [..] الفعلي: [..] البيئة: الجهاز [..] | النظام [..] | المتصفح والإصدار [..] البيئة [تجريبية / حقيقية] | الدور [..] | الوقت والمنطقة الزمنية [..] بدأ بعد: [تغيير أو تحديث إن وُجد] الأدلة (بعد التنظيف): [لقطة / تسجيل / نص رسالة الخطأ / أسطر السجل] المثال الأدنى: [الملف أو الدالة + أقل بيانات تُظهر الخطأ] ما جرّبته: [الإجراء ← النتيجة] قيود الإصلاح: [ما لا يجوز تغييره] فحص عدم التراجع: [ما يجب أن يبقى يعمل بعد الإصلاح] ── برومبت طلب الإصلاح ── أنت مطوّر حذر. أمامك تقرير خطأ ومثال أدنى من الكود. المطلوب بالترتيب: 1) اشرح السبب الأرجح في 3 أسطر، واذكر إن كنت غير متأكد وما الذي يؤكّده. 2) اقترح أصغر تغيير يصلح الخطأ، في الملفات المذكورة فقط. 3) التزم بقيود الإصلاح حرفيًا. إن رأيت أن قيدًا يمنع الإصلاح، قل ذلك ولا تتجاوزه. 4) اكتب اختبارًا يفشل قبل الإصلاح وينجح بعده. 5) اذكر ما قد يتأثّر بالتغيير لأختبره يدويًا. لا تعِد كتابة ملفات كاملة، ولا تضف مكتبات، ولا تغيّر التنسيق أو الأسماء خارج الإصلاح. التقرير: [الصق التقرير] الكود: [الصق المثال الأدنى بعد استبدال أي مفتاح أو بيانات حقيقية بقيم وهمية] ── تقرير الخطأ كما أُرسل ── الملخّص: زر «تأكيد الطلب» لا يستجيب على آيفون في صفحة الدفع عند اختيار موعد توصيل. الخطورة: يمنع العمل (لا يمكن إتمام الطلب) التكرار: دائمًا على آيفون خطوات إعادة الإنتاج: 1. افتح المتجر من سفاري على آيفون، بلا تسجيل دخول. 2. أضف «صابون زيت الزيتون» إلى السلة واضغط «إتمام الشراء». 3. عبّئ الاسم والهاتف بقيم تجريبية، واختر موعد توصيل «غدًا 10:00». 4. اضغط «تأكيد الطلب». المتوقّع: تظهر صفحة «تمّ استلام طلبك» برقم الطلب. الفعلي: لا يحدث شيء. الزر لا يتغيّر ولا تظهر رسالة. البيئة: آيفون | iOS محدّث | سفاري | الموقع الحقيقي | زائر بلا حساب بدأ بعد إضافة حقل «موعد التوصيل» الأسبوع الماضي. الأدلة: تسجيل شاشة 15 ثانية. من لوحة المطوّر (بعد التنظيف): RangeError: Invalid time value at checkout.js:88 POST /api/orders لم يُرسَل Authorization: Bearer [محذوف] ما جرّبته: على كروم في الحاسوب وأندرويد يعمل. بلا اختيار موعد يعمل على آيفون. قيود الإصلاح: لا تغيّر منطق الدفع أو حساب المجموع. لا مكتبات جديدة. حافظ على الاتجاه من اليمين إلى اليسار في النموذج. فحص عدم التراجع: الطلب بلا موعد، الطلب بموعد على كروم وأندرويد، رسالة الخطأ حين يُترك الهاتف فارغًا. ── المثال الأدنى ── // checkout.js (excerpt) function buildOrder(form) { const slot = form.deliveryDate + ' ' + form.deliveryTime; // "2026-09-22 10:00" return { items: form.items, deliverAt: new Date(slot).toISOString(), // line 88 }; }