Trust is earned.
Make the AI prove it.
الثقة تُكتسب — فاجعله يُثبتها
صار الذكاء الاصطناعي يكتب في يوم واحد كوداً أكثر ممّا تستطيع مراجعته في أسبوع كامل. والفرق بين عرضٍ مبهر وبرمجيةٍ تنشرها فعلاً أمرٌ واحد: التحقّق. يحوّل هذا الفصل «يبدو صحيحاً» إلى «هو صحيح» — باختبارات، وحلقات تصحيح محكمة، ومراجعة تلقائية.
AI can write more code in an afternoon than you could review in a week. This chapter turns "it looks right" into "it is right" — with tests, tight debugging loops, and automated review.
Why verification is non-negotiable لماذا التحقّق غير قابل للنقاش
ليس لأن الذكاء الاصطناعي ضعيف في البرمجة، بل بسبب طبيعة الـLLM نفسها.
LLMs are probabilistic · نماذج احتمالية
يتنبّأ النموذج بالتكملة الأكثر معقولية، والمعقول ليس دائماً الصحيح. والسلاسة نفسها التي تجعل كود كلود سهل القراءة هي التي تجعل أخطاءه النادرة تبدو واثقة. واحتمال الخطأ لا يبلغ الصفر أبداً، فاهندس على هذا الأساس.
"Looks right" proves nothing · «يبدو صحيحاً» لا يُثبت شيئاً
تلتقط المراجعة البشرية الأسلوب والبنية والزلّات الواضحة، لكنها تفوّت بثبات أخطاء الـoff-by-one، والمعالجة الخاطئة للحالات الحدّية، والمنطق الخاطئ خفيةً — في كود الذكاء الاصطناعي وفي كود البشر. فالقراءة اختبار ضعيف، والتشغيل اختبار قويّ.
The fix is closing the loop · الحلّ: أغلِق الحلقة
ليس الجواب أن تمتنع عن الثقة، بل أن توفّر التغذية الراجعة. أعطِ كلود وسيلةً يفحص بها عمله (اختبارات، أو compiler، أو تطبيق يعمل) فيكرّر مقابل الواقع بدل أن يخمّن. والحلقات المتحقَّق منها هي ما يحوّل الذكاء الاصطناعي من autocomplete إلى مهندس.
TDD with an AI pair الاختبارات أولاً — مع شريك ذكي
اختُرع الـTDD للبشر، لكنه يصبح مع الذكاء الاصطناعي أقوى بكثير: إذ تتحوّل الاختبارات إلى مواصفة دقيقة قابلة للتنفيذ، يستطيع كلود أن يكرّر عليها دون أن تكون أنت داخل الحلقة.
Describe the behavior · صِف السلوك
قُل ما ينبغي أن يفعله الكود بلغة المدخلات والمخرجات، بما في ذلك الحالات الصعبة: إدخال فارغ، أو ضخم، أو unicode، أو تزامن، وأنماط الفشل. السلوك أوّلاً، والتنفيذ لاحقاً. فإن لم تستطع تحديد معنى «صحيح»، فلن يستطيع أحد التحقّق منه.
Have Claude write the failing tests FIRST · الاختبارات الفاشلة أوّلاً
اطلب ذلك صراحةً: «اكتب الاختبارات قبل أي تنفيذ». فالاختبارات المكتوبة أوّلاً تُرمّز المواصفة، أمّا المكتوبة لاحقاً فتُرمّز ما يصادف أن يفعله الكود — بأخطائه وكل شيء. وهذا الترتيب هو سرّ الأمر كلّه.
Watch them fail (red) · شاهدها تفشل (أحمر)
شغّل الاختبارات وتأكّد من فشل كل اختبار جديد. فالاختبار الذي ينجح قبل وجود الميزة أصلاً اختبارٌ لا يختبر شيئاً. والأحمر ليس مشكلة، بل دليل على أن اختباراتك قادرة فعلاً على كشف غياب السلوك الذي تريده.
Implement until green · نفّذ حتى الأخضر
الآن دع كلود يكتب التنفيذ ويشغّل الاختبارات بعد كل تغيير، مع قاعدة صارمة واحدة: لا تُعدَّل الاختبارات. فإن كان أحدها خاطئاً فعلاً، فتلك محادثة معك أنت لا تعديل صامت. والأخضر يعني أن المواصفة تحقّقت.
Refactor with a safety net · أعِد الهيكلة وتحتك شبكة أمان
مع اختبارات خضراء تصبح الـrefactoring بلا خوف: غيّر الأسماء، وأعِد الهيكلة، وحسّن الأداء، وشغّل الاختبارات بعد كل خطوة. وهنا تتّضح قيمة سرعة الذكاء الاصطناعي فعلاً: فالتنظيفات الجريئة التي كانت تبدو محفوفة بالخطر صارت روتيناً، لأن الشبكة تلتقط أي تراجع فوراً.
# Step 1–2: behavior first, tests first > I need slugify(title): lowercase, spaces → hyphens, strip punctuation, collapse repeated hyphens, trim to 60 chars without cutting a word mid-way. Write the FAILING tests first — include empty string, emoji, all-punctuation, and a 200-char title. Do not write the implementation yet. # Step 3: red — confirm the tests can fail $ pytest test_slugify.py 7 failed — perfect: the spec exists, the behavior doesn't. # Step 4: implement until green > Now implement slugify until every test passes. Do not modify the tests. Run pytest after each change. $ pytest test_slugify.py 7 passed — green. Step 5: refactor freely; the net is up.
The debugging loop حلقة تصحيح الأخطاء
لا تُصلَح الأخطاء بالحدس، بل بحلقة منضبطة. وكلود ممتاز في هذه الحلقة حين تُغذّيه أدلّة حقيقية بدل الملخّصات.
Reproduce — give Claude the error verbatim · أعِد الإنتاج
الصِق الأمر الذي شغّلته بالضبط، والمخرجات بالضبط، والخطأ كاملاً — منسوخاً لا معاد كتابته. والأفضل من ذلك في Claude Code: اطلب من كلود أن يشغّل الأمر الفاشل بنفسه، لتكون إعادة الإنتاج من المصدر مباشرةً. فالخطأ الذي تستطيع إعادة إنتاجه عند الطلب خطأٌ نصفه مُصلَح أصلاً.
Isolate — let it read and hypothesize · اعزِل وافترِض
دع كلود يقرأ الكود المعنيّ ويكوّن فرضيات مرتّبة قبل أن يعدّل أي شيء. واطلب ذلك صراحةً: «أعطني أقوى ثلاثة احتمالات وكيف ستؤكّد كلاً منها». فسطر log إضافي أو سكربت صغير لإعادة الإنتاج يتفوّق على الإصلاحات التخمينية في كل مرّة.
Fix — the smallest change that works · أصغر تغيير ينجح
بعد تأكّد السبب، اطلب الإصلاح الصغير الموجَّه، لا إعادة كتابة الملف الذي يصادف أن الخطأ يسكن فيه. فالفروقات الصغيرة تُراجَع ويُتراجَع عنها بسهولة، ولا تُهرّب أخطاءً جديدة مع الدواء. وإن كانت الـrefactor ضرورية فعلاً، فاجعلها خطوة منفصلة مختبَرة على حدة.
Regression-test — make it impossible to come back · اجعل عودته مستحيلة
قبل إغلاق الحلقة، دع كلود يضيف الاختبار الذي كان سيلتقط هذا الخطأ، وتأكّد من فشله على الكود القديم ونجاحه على الجديد. فكل جلسة تصحيح ينبغي أن تترك الاختبارات أقوى باختبار واحد على الأقلّ. وهكذا تزداد قواعد الكود موثوقيةً مع الوقت لا العكس.
Automated code review مراجعة كود تلقائية
يأتي Claude Code ومعه مراجعٌ جاهز. فالأمر /code-review يفحص الـdiff الحالي لديك، ويُتحقَّق من كل ملاحظة تحقّقاً عدائياً قبل الإبلاغ عنها، فما يصلك إشارة لا ضجيج.
Review your working diff · راجِع تعديلاتك
شغّله داخل الجلسة قبل الـcommit. يقرأ كلود تغييراتك غير المودَعة، ويصطاد العيوب الحقيقية — أخطاء منطق، وحالات حدّية، وهفوات أمنية — وكل ملاحظة مرشّحة تُختبَر ويُتحقَّق منها قبل أن تصلك. وهو سريع بما يكفي لتشغّله على كل تغيير.
استخدمه حين: تكون قد أنهيت للتوّ ميزة أو إصلاحاً وتريد نظرة ثانية صارمة على الـdiff أمامك. واجعلها عادة، كحفظ الملف.
Ultrareview — the multi-agent pass · جولة الوكلاء المتعدّدين
يُطلق Ultrareview مراجعةً سحابية متعدّدة الوكلاء لفرع كامل أو لـPR على GitHub؛ وهي فكرة Ultracode مطبَّقة على المراجعة. مراجعون متوازون يمشّطون التغيير من زوايا مختلفة، ومتحقّقون عدائيّون يؤكّدون كل ملاحظة قبل الإبلاغ عنها.
استخدمه حين: تستحقّ المخاطر إنفاق التوكنز — فرع كبير قبل الدمج، أو PR حسّاس أمنياً، أو كود ورثته عن غيرك، أو أي شيء يكلّف فيه الخطأ الفائت أكثر من المراجعة نفسها.
# Everyday: review the uncommitted diff in this session > /code-review # High stakes: multi-agent cloud review of the whole branch or PR > /code-review ultra
Verification beyond tests تحقّقٌ أبعد من الاختبارات
مجموعة الاختبارات شاهد واحد. أمّا التحقّق الجادّ فيستدعي عدّة شهود، يلتقط كلٌّ منهم صنفاً من الأخطاء يفوت على البقيّة.
Actually run it · شغّله فعلياً
شغّل التطبيق. واستدعِ الـendpoint بنفسك من الواجهة. واضغط الزرّ بيدك. فقد تنجح اختبارات الوحدات كلّها بينما يسقط التطبيق الحقيقي عند الإقلاع بسبب env var ناقص أو import معطوب. وجملة «شغّل الخادم واطلب /api/users، وأرِني الردّ» تُنهي الجدل.
Lint & typecheck · الفحص الثابت
التحليل الثابت تحقّقٌ شبه مجاني: يعمل في ثوانٍ ويلتقط أصنافاً كاملة من الأخطاء (أخطاء إملائية، وأنواع خاطئة، ومسارات ميتة) قبل أن ينفَّذ أي شيء أصلاً. فاطلب من كلود أن يشغّل الـlinter والـtypechecker بعد كل تغيير، وأن يصلح ما يشيران إليه، في كل مرّة.
Hooks: verification on autopilot · تحقّق تلقائي
تستطيع الـhooks في Claude Code أن تشغّل اختباراتك أو الـlinter أو المنسّق تلقائياً بعد كل تعديل ملف، فلا يبقى التحقّق خطوةً على أحدهم أن يتذكّرها، بل يصير قانوناً من قوانين المشروع. ويرى كلود الفشل فوراً فيصلحه قبل أن يمضي.
Screenshots for UI work · لقطات شاشة للواجهات
في أي عمل بصري لا تعني عبارة «الكود يبدو صحيحاً» شيئاً. فدع كلود يشغّل الصفحة أو التطبيق ويلتقط screenshot، ثم يحكم على البكسلات نفسها: التخطيط، والمسافات، والوضع الداكن، وعرض الهاتف. فكلود يقرأ الصور، ويستطيع نقد ناتجه بنفسه ثم يكرّر.
Second-model review · مراجعة بعيون أخرى
للكود الحرج استعِن بعيون مستقلّة: جلسة جديدة، أو نموذج مختلف، يراجع دون أي ذاكرة بأنه هو من كتبه. فلا تنتقل معه النقاط العمياء للمؤلّف. وهذا بالضبط هو النمط الذي يُؤتمته Ultrareview بوكلاء تحقّق عدائيّين.
Adversarial self-review · مراجعة ذاتية عدائية
اقلِب دور كلود: «أنت الآن مراجع عدائي. جِد لي مدخلات تكسر هذا الكود». فحين تطلب من النموذج أن يهاجم عمله، تظهر حالات حدّية ما كانت أي قراءة ودّية لتُظهرها: race conditions، وترميزات غريبة، وقيم عند الحدود. حيلة رخيصة وفعّالة إلى حدٍّ بعيد.
The shipping checklist قائمة فحص النشر
ثماني بوّابات بين «كلود يقول انتهيت» و«نُشر فعلاً». امضِ عليها كلّها، أو الأفضل: دع كلود نفسه يمرّ على القائمة ويعرض عليك الدليل عند كل بند.
✅ Ready to ship when… · جاهز للنشر حين…
- تنجح مجموعة الاختبارات كاملةً، مُشغَّلةً من جديد وفي حالة نظيفة، لا من ذاكرة آخر مرّة كانت فيها خضراء.
- لكل سلوك جديد اختبار، ولكل خطأ مُصلَح اختبارُ انحدار كان سيلتقطه.
- قرأتَ الـdiff كاملاً سطراً سطراً، وتستطيع شرح سبب وجود كل تغيير.
- فُحصت الحالات الحدّية عن قصد: إدخال فارغ، أو ضخم، أو مشوّه، أو متزامن، أو unicode، أو غير مصرَّح به.
- الـlinter والـtypechecker نظيفان تماماً: صفر تحذيرات جديدة، لا «نظيف تقريباً».
- لا أسرار في الكود: لا API keys، ولا tokens، ولا كلمات مرور، ولا روابط خاصة في أي موضع من الـdiff.
- شُغّل
/code-reviewعلى الـdiff النهائي — وUltrareview على كل ما هو عالي المخاطر — وعولجت الملاحظات ولم تُتجاهل. - الوثائق والتعليقات وملف CLAUDE.md تعكس الواقع الجديد، فلا تُضلَّل الجلسة القادمة، بشرية كانت أم آلية.
Fix a bug the right way · أصلِح خطأً بالطريقة الصحيحة
اختر أي خطأ صغير في مشروعك، أو اطلب من كلود أن يزرع واحداً في سكربت تجريبي. ثم شغّل الحلقة كاملةً كما في هذا الفصل:
1. أعِد إنتاجه، والصِق الخطأ الحرفي بالضبط.
2. اطلب من كلود ثلاث فرضيات مرتّبة قبل أي تعديل.
3. طبّق أصغر إصلاح يجعله ينجح.
4. أضِف اختبار الانحدار، وتأكّد من فشله على الكود القديم.
5. اختم بـ/code-review على الـdiff.
وحين تصبح هذه الحلقة تلقائية لديك، تكون قد استوعبت الفصل فعلاً.
You made it — six chapters down · قطعتَ معظم الطريق
من التثبيت الأوّل، إلى اختيار النماذج، إلى ضبط الجهد، إلى سير عمل برمجيّ حقيقي، والآن التحقّق. صارت العُدّة كاملةً بين يديك: لم تعد تستخدم الذكاء الاصطناعي فحسب، بل صرت توجّهه، وتجعله يُثبت صحّة عمله.
ومشروع تخرّج يليق بك: عُد إلى الفصل الرابع وأطلِق Ultracode في تدقيق حقيقي على أحد مشاريعك، ثم تحقّق من نتائجه بكل ما تعلّمته هنا. وبعدها ينتظرك الفصل السابع: سير العمل المهنيّ كاملاً.