الخلاصة بدقيقة
ليش التطبيق بيوقع بعد الإطلاق
الكل بفكر المشكلة بالأداة. بغيّر الأداة… وبرجع يوقع بنفس الحفرة. السبب الحقيقي إنه الـ AI بيكتب الكود للسيناريو السعيد بس:
- بيانات ما توقعها: حقل فاضي، رقم بدل نص، اسم فيه رموز… وأول مستخدم حقيقي بيجيب واحدة منها.
- تعديل بيكسر شي قديم: بتطلب ميزة جديدة، فبيعدّل دالة بتستخدمها ثلاث شاشات تانية. ما حدا بيعرف إلا المستخدم.
- «خلصت» بدون دليل: هو بيقول خلصت لأنه كتب الكود، مش لأنه شافه بيشتغل.
انسخه زي ما هو وحطّه بأول رسالة بالجلسة. بيشتغل مع Claude Code و Cursor و Codex وأي أداة بتكتب كود.
البرومت الكامل
النسخة العربية — اللي بستخدمها بشغلي:
قبل ما تكتب أي كود: اكتب لي اختبارات (tests) تغطي كل وظيفة طلبتها، واعرضها عليّ.
بعد موافقتي اكتب الكود، وشغّل الاختبارات بنفسك، وما تقول "خلصت" إلا لما تنجح كلها.
إذا فشل اختبار، صلّح الكود مش الاختبار، وخبّرني شو كان الغلط.
English version — نفس القاعدة، لو أداتك بتفهم الإنجليزي أحسن:
Before writing any code: write tests that cover every feature I asked for, and show them to me first.
After I approve, write the code, run the tests yourself, and do not say "done" until all of them pass.
If a test fails, fix the code, not the test, and tell me what was wrong.
ليش كل جملة فيه مهمة
| الجملة | شو بتمنع |
|---|---|
| «قبل ما تكتب أي كود» | إنه يبلّش بالكود وينسى الاختبارات أو يكتبها شكلياً بالآخر |
| «اعرضها عليّ» | اختبارات ما بتعكس اللي بدك إياه. هون بتصحّح الفهم قبل ما يصير كود |
| «شغّل الاختبارات بنفسك» | «خلصت» النظرية. لازم يشوفها خضرا فعلاً |
| «صلّح الكود مش الاختبار» | أسهل غشّ: يعدّل الاختبار عشان يمرّ. هاي الجملة بتسكّر الباب |
| «خبّرني شو كان الغلط» | بتتعلّم وين بيغلط، وبتكتشف إذا الطلب الأصلي كان ناقص |
خلّيه قاعدة ثابتة بكل مشروع
بدل ما تلصقه بكل جلسة، حطّه بملف القواعد تبع المشروع وبيتطبّق لحاله:
Claude Code — أضف لملف CLAUDE.md بجذر المشروع:
## Testing rule (non-negotiable)
- Before implementing any feature or fix: write the tests first and show them to me.
- Only after I approve the tests, implement the code.
- Run the full test suite yourself before reporting. Never say "done" with a failing or skipped test.
- If a test fails, fix the code, never weaken or delete the test. Explain the root cause in one line.
Cursor — نفس النص بملف .cursor/rules/testing.mdc أو بـ Rules من الإعدادات.
خلّي الاختبارات تشتغل لحالها بعد كل تعديل
بـ Claude Code في شي اسمه hooks: أوامر بتنفّذ تلقائياً بعد أي أداة. هاد الـ hook بيشغّل الاختبارات بعد كل تعديل ملف، ولو فشلت Claude بيعرف قبلك:
الملف .claude/settings.json بمجلد المشروع (بدّل أمر الاختبار حسب مشروعك):
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "npm test --silent" }
]
}
]
}
}
مشروع Python؟ بدّل الأمر لـ pytest -q. مشروع Go؟ go test ./....
التوثيق الرسمي — Claude Code hooksالدورة الصح بتاخد خمس خطوات. لو شفت غيرها، في شي غلط.
شو تتوقع تشوف
مثال طلب
«بدي صفحة تسجيل: إيميل وكلمة سر، ورسالة خطأ واضحة لو الإيميل مستخدم.» مع البرومت، أول رد بيكون اختبارات زي: إيميل صحيح بينشئ حساب · إيميل مكرر بيرجع الرسالة · كلمة سر قصيرة بتنرفض · حقل فاضي بينرفض. هون بتكتشف إنك نسيت تحدّد «كلمة سر قصيرة» قديش — قبل ما ينكتب سطر كود.
علامات إنه بيتحايل على القاعدة
- قال «خلصت» وما ظهر أمر تشغيل الاختبارات ولا نتيجتها.
- الاختبارات كلها مرّت من أول مرة بدون ولا تعديل (غالباً شكلية).
- عدّل ملف الاختبار بعد ما فشل — اسأله فوراً: «ليش غيّرت الاختبار مش الكود؟»