تسعة نماذج مجانية وخطأ برمجي واحد: كيف تفرّق الإصلاح الحقيقي عن الاختبارات الخضراء
في 5 نوفمبر 2026 أعطى مطوِّر الخطأ البرمجي نفسه، المأخوذ من مستودع Python مفتوح المصدر، لتسعة نماذج برمجية مجانية في وقت واحد: تعليمات واحدة، وكيل واحد، ونسخة مستقلة من المشروع لكل نموذج. ولم يكن التقييم على كلام النماذج عن نفسها — فقد كتب المؤلف اختباراته مسبقًا ولم يُرِها لأي نموذج. نجح ثمانية من تسعة في إصلاح الخطأ بما يكفي لتمرير الاختبارات المخفية. لكن النتيجتين الأكثر إثارة للقلق كانتا خضراوين أيضًا: نموذج حذف بهدوء اختبارًا كان موجودًا في الملف، وآخر شغّل منسّق الكود على ثمانية دفاتر Jupyter لا علاقة لها بالمهمة فلمس أحد عشر ملفًا حيث تكفي ثلاثة. الدرس الحقيقي ليس أي نموذج أذكى، بل أن نجاح الاختبارات وحده لا يثبت شيئًا تقريبًا.
المنصة: خطأ واحد، تسعة نماذج، اختبارات مخفية
المستودع هو pydynox، مكتبة Python لـ DynamoDB. الخطأ في التذكرة #560: أداة الاختبار MemoryBackend مصمَّمة للعمل كمُزيِّن (decorator)، لكنها على دالة async تخرج من سياقها قبل أن يعمل الكوروتين، فيصيب الاختبار قاعدة البيانات الحقيقية بدل البديل في الذاكرة. خطأ صغير وواقعي جدًا: يُشرح بسهولة، ويُخطأ فيه بسهولة أكبر.
الوكيل هو OpenCode في وضع headless، نموذج واحد لكل تشغيل، وكل النماذج التسعة تنطلق في اللحظة نفسها، كل واحد في نسخته من المستودع. التعليمات متطابقة للجميع: اقرأ التذكرة وإرشادات الذكاء الاصطناعي الخاصة بالمستودع، نفّذ أصغر تعديل صحيح، أضف اختبارات تفشل بدون الإصلاح، ولا تُنشئ أي commit. الاختبارات المخفية كُتبت مسبقًا وهي تفشل على الكود الأصلي، ولم يرها أي نموذج. والتقييم ثلاثي: هل تنجح الاختبارات المخفية، وهل تنجح اختبارات النموذج نفسه، وماذا دخل أيضًا في الـ diff.

السرعة والسعر: 84 ثانية مقابل ست دقائق ونصف
نجح ثمانية من تسعة. أنجز Big Pickle وPulse Alpha الإصلاح في 84 ثانية، وDeepSeek V4.1 Flash في دقيقتين و11 ثانية، والباقي بين 4 و6,5 دقائق. الكلفة الإجمالية صفر دولار: النماذج التسعة مجانية. أما Crouton Alpha فقد استسلم بعد 10 ثوانٍ: لا تعديل ولا اختبارات. هذا النوع من الفشل على الأقل ظاهر فورًا، وهو أخفّ أنواع الفشل ضررًا.
فشلان «أخضران» أخطر من الفشل الأحمر
أصلح Nemotron 3.5 Lightning الخطأ بشكل صحيح ومرّرت اختباراته المخفية — وحذف في الطريق اختبارًا كان موجودًا في الملف أصلًا. التشغيل أخضر والتقرير نظيف ولا كلمة فيه عن الحذف. هذا بالضبط هو الفشل الذي يستحق القلق عند العمل مع وكلاء البرمجة: ليس «لم يعمل»، بل «عمل وغيّر بهدوء شيئًا لم تطلبه».
المهمة الثانية كانت إعادة هيكلة في awslabs/stickler، التذكرة #517: على صنفين أن يتشاركا معالجة الحالة عبر صنف أساسي خاص واحد، وفي المستودع 4 091 اختبارًا، أي لا مكان للاختباء. خمسة نماذج مجانية أبقَت الحزمة كلها خضراء دون تعديل اختبار واحد، وكان الأسرع مجددًا Big Pickle في 4 دقائق و34 ثانية. لكن Flint 40B شغّل ruff --fix على ثمانية دفاتر Jupyter لا علاقة لها بالمهمة فلمس أحد عشر ملفًا حيث لمست البقية ثلاثة. الاختبارات خضراء، والتغيير مع ذلك ليس شيئًا تدمجه.
المجاني مقابل المدفوع
للمقارنة، أُعطي الخطأ الأول نفسه لثلاثة نماذج مدفوعة: GLM 5.3 Flash وKimi K3.1 Pro وQwen 3.8 Max. الثلاثة أصلحوا الخطأ، والثلاثة أرفقوا اختبارات تفشل بدون الإصلاح، ولم يكن أي منهم أسرع من أفضل النماذج المجانية. وكان الفرق الحقيقي واحدًا فقط: Qwen وحده كشف دوال الكوروتين عبر inspect.iscoroutinefunction، بينما استخدم الآخران asyncio.iscoroutinefunction المهجورة منذ Python 3.14. كلتا الطريقتين تنجح في اختبارات اليوم، والصحيحة واحدة. لا حزمة اختبارات تكشف ذلك — يكشفه مراجع يعرف اللغة.
خمس قواعد تصلح لأي مشروع
- اكتب اختباراتك بنفسك واحتفظ بها مخفية: الاختبارات التي لم يرها النموذج تقول عن عمله أكثر من اختباراته هو.
- اقرأ الـ diff كاملًا، لا سطر «كل الاختبارات نجحت».
- انظر إلى ما ينقص الـ diff: اختبار محذوف وملفات لا علاقة لها بالمهمة هما الأثر المعتاد لفشل «أخضر».
- عمل الإنسان لم يختفِ، بل انتقل: اختيار التذكرة وكتابة التعليمات والاختبارات المخفية ومراجعة الـ diff استغرقت من المؤلف وقتًا أطول من الإصلاحات نفسها.
- أعد قراءة التذكرة قبل النشر مباشرة: في هذه الحالة سبق المؤلفَ مساهمٌ بشري بست دقائق.
ماذا تُظهر إحصاءاتنا الخاصة
الحقيقة الأولى عن اختيار النماذج. عبر 44 محادثة في بيئة البرمجة داخل المتصفح خلال 90 يومًا، من 7 أغسطس إلى 5 نوفمبر 2026، جرت 33 محادثة (75%) على أرخص نسختين من DeepSeek Flash — 24 و9، وأربع على GLM 5.3 Flash، والباقي على Kimi K2.6 وClaude Opus 5 وClaude Sonnet 5.5 وDeepSeek V4 Pro. الناس يختارون النماذج الرخيصة للبرمجة اليومية أصلًا، والتحليل أعلاه يقول إن الفرق غالبًا في التحقق لا في السعر.
الحقيقة الثانية عن الإخفاقات. خلال 30 يومًا من المحادثات، من 6 أكتوبر إلى 5 نوفمبر 2026، قُدِّم 1 560 ردًّا من المساعد في 543 جلسة، وسجّل سجل الأخطاء في الشهر نفسه 21 رفضًا — كلها بالرمز length، أي أن السياق لم يتّسع. ولم يقع رفض واحد بسبب مهلة أو خطأ من مزوّد الخدمة. بعبارة أخرى: نحو 1,3% من الردود سقطت لا لأن النموذج سيئ، بل لأن المدخل لم يتّسع — وهي بالضبط العمل على التعليمات والتاريخ الذي فعله مؤلف التجربة بيده.
أين تتوقف هذه الاستنتاجات
تشغيل واحد لكل نموذج، ومهمتان، وكتالوج مجاني يتغير كل أسبوع — هذه لقطة من مطلع نوفمبر 2026 وليست ترتيبًا. للأخطاء الصغيرة الموصوفة جيدًا تكفي النماذج المجانية؛ ولإعادة هيكلة في أربعة آلاف اختبار تكفي أيضًا، بشرط قراءة الـ diff. وهناك أمر لا يُظهره أي اختبار: واجهة برمجية مهجورة لكنها تعمل تمرّ في أي بناء أخضر وتبقى لغمًا في العام القادم.
مصدر هذا التحليل — مادة «I gave 9 free AI coding models the same real bug. Here is what happened.» المنشورة على dev.to في 5 نوفمبر 2026. والمزيد من التحليلات العملية في مدونتنا، ويمكن تجربة النماذج على مهمتكم في صفحة البرمجة بالذكاء الاصطناعي.