كيف تُصنع
مطوّر واحد، ومساعد برمجة بالذكاء الاصطناعي، وكثير من القواعد التي تتحقق منها الآلة.
بقلم نيك
أكتب Prison Life مع Claude Code (وكيل البرمجة من Anthropic). أنا أقرر ما هي اللعبة وأي الخيارات نسلك؛ والمساعد يتولى معظم الكتابة. ولأن أحدًا لا يراجع الشيفرة سواي ووكيل ذكاء اصطناعي للمراجعة، أعتمد على الأتمتة: القواعد تفرضها الفحوص الآلية والبناء، لا النوايا الحسنة.
التفويض
تخطط الجلسة الرئيسية في Claude Code للعمل، وتدير متتبع المهام والسجل المكتوب لقرارات التصميم وتاريخ التغييرات. لكنها لا تكتب الشيفرة: تسلّم كل تغيير، مهما صغر، إلى وكيل ذكاء اصطناعي متخصص. لكل وكيل تعريف مكتوب خاص به يحدد دوره ونموذجه.
| الدور | فئة النموذج | المهمة |
|---|---|---|
| البنية | Opus | نموذج البيانات، والنبضة، والخيوط، وإيجاد المسارات، والقرارات |
| شيفرة المحاكاة | Opus | أنظمة المحاكاة، وذكاء الشخصيات، والحلقات الحرجة |
| الأداء | Opus | التحليل، وتراجعات اختبار الأداء |
| المراجعة (قراءة فقط) | Opus | يراجع الفروق؛ لا يستطيع تعديل الملفات |
| العميل والأدوات | Sonnet | عميل Godot، والواجهة، والأدوات |
| الاختبارات | Sonnet | اختبارات من معايير القبول |
| بيانات المحتوى | Sonnet | تعريفات JSON وفق مخطط |
| البحث وتشغيل الفحوص | Haiku | البحث في الشيفرة؛ تشغيل الفحوص وتلخيص الإخفاقات |
العمل الصعب يذهب إلى أقوى نموذج، والعمل الروتيني إلى الأرخص. إذا أخفق وكيل أرخص في الفحوص مرتين، ترتفع المهمة فئةً؛ وإذا أخفقت الفئة العليا مرتين، تتوقف وتسألني.
خطافات تقول لا
الخطافات في Claude Code سكربتات تعمل حول أفعال المساعد. خطافاتي تفرض ثلاث قواعد:
- لا إنهاء على الأحمر. حين تحاول جلسة أو وكيل التوقف بعد تغيير الشيفرة، يشغّل خطاف الفحص السريع (البناء مع الاختبارات السريعة). إن فشل، يُرفض التوقف.
- الجلسة الرئيسية لا تستطيع تعديل الشيفرة. يرفض خطاف كتابة الجلسة الرئيسية إلى الشيفرة المصدرية والاختبارات والمحتوى والأدوات.
- المراجِع للقراءة فقط. أُزيلت أدوات التعديل لديه، ويرفض خطاف الأوامر التي تغيّر الملفات أو تاريخ المشروع.
تحمي هذه الخطافات من الأخطاء، لا من الالتفاف المتعمد: حيلة صدفة مُصرّة يمكنها تجاوزها، وأحد الخطافات يرى الفحص الأحمر لدى وكيل لكنه لا يستطيع إيقافه (خطاف التوقف في الجلسة الرئيسية يلتقطه مع ذلك). أفضّل أن أقول ذلك بوضوح.
قرارات مكتوبة وفحوص
- كل خيار غير بديهي يُدوَّن. المهام والمعالم وقرارات التصميم محفوظة نصًا عاديًا إلى جانب الشيفرة، في متتبع للمهام. وحين نختار بين بدائل تؤثر في أكثر من مهمة، يُدوَّن الاختيار مع سياقه وعواقبه.
- الفحوص تعمل على جهازي. لا تكامل مستمر سحابي. سكربت محلي واحد له أربعة أوضاع:
fastوtestوbenchوfull. السكربتات والخطافات مكتوبة بـ PowerShell 7 على Windows وmacOS معًا. - فحوص مع كل تغيير. ترفض الأتمتة المحلية التغيير الموصوف أو المنسّق بشكل سيئ. ومع تغييرات الشيفرة تشغّل أيضًا الفحص السريع؛ أما التغييرات التي تمس الملاحظات أو الموقع فقط فتتخطى البناء.
- الملفات المرجعية محمية. بصمات الحتمية المثبّتة وملفات الحفظ المرجعية وخط أساس اختبار الأداء لا تتغير إلا بموافقتي الصريحة، ولا تتغير بصمت أبدًا.
- المشروع نفسه هو مصدر الحقيقة. أداة ذاكرة محلية تفهرس المشروع والمحادثات السابقة للبحث، لكن كل ما يهم يكون أيضًا مهمة، أو قرارًا مدوّنًا، أو وثيقة.
النواة الحتمية
تعيش المحاكاة في مكتبة .NET خالصة بلا أي إشارة إلى Godot؛ وعميل Godot يقرأ حالتها ويرسل الأوامر فقط. تتبع النواة قواعد ثابتة: لا يتغير العالم إلا عبر الأوامر، والزمن نبضات بأعداد صحيحة، والعشوائية لا تأتي إلا من مولّدات العالم المبذورة. البذرة نفسها وسجل الأوامر نفسه يجب أن يعطيا العالم نفسه. هذه القواعد يتحقق منها المترجم والاختبارات، لا المراجعة وحدها؛ انظر اليوميات #1 لمعرفة الكيفية، واليوميات #2 عن العالم والحفظ وإعادات التشغيل.
- الأوامر هي المدخل الوحيد. لكل منها معرّف نوع ثابت وترميز ثنائي، ويُسجَّل كل أمر مع نتيجته، بما في ذلك المرفوض.
- النبضة لها ثلاث مراحل بترتيب ثابت. ترتيب الأنظمة محدد في مكان واحد في الشيفرة، وتغييره يغيّر كل بصمة.
- العشوائية تستخدم مولّداتنا الخاصة (SplitMix64 وxoshiro256**). التدفقات المسمّاة مشتقة من بذرة العالم ومخزنة في حالته. ومولّد عديم الحالة يعتمد على مفتاح، يحرّكه نطاق ومفتاح ونبضة، يخدم الأعمال التي لا يهمها الترتيب.
- بصمة الحالة بصمة 64 بت حساسة للترتيب لفحوص الحتمية. وهي ليست تشفيرية.
- العالم شبكة مربعات بحجم 1×1 م على مستويات منفصلة؛ الجدران والأبواب والأرضيات لا تتغير إلا بأوامر البناء.
- الحفظ وإعادات التشغيل تتشارك حاوية ملفات واحدة مفحوصة. إعادة التشغيل هي البذرة مع سجل الأوامر، مع بصمات تحكّم على طول الطريق، وتُفحص خطوة بخطوة عند التشغيل.
- اختبارات الأداء تأتي من مشغّل سيناريوهات بلا واجهة، بخط أساس لكل جهاز وبوابة صفر حجوزات في كل نبضة.
هدف التصميم ما يصل إلى 1000 سجين وموظف بمعدل 20 نبضة في الثانية. إنه هدف: لا شخصيات بعد، فمشغّل اختبارات الأداء موجود لكن لم يُقس شيء بهذا الحجم.