373,000 سطر مع وكيل: الأجزاء التي تصمد فعلًا
توليد الكود لم يعد الجزء الصعب منذ فترة. كل ما أفعله بشكل مختلف الآن يخص النصف الآخر: جعل اكتشاف ما إذا كان الكود خاطئًا رخيصًا.
TalosOps نحو 373,000 سطر من TypeScript وخلفها 424 ترحيل قاعدة بيانات و7,822 اختبارًا. أنا المهندس الوحيد عليها. ولم أكتب معظمها بيدي.
تُقرأ تلك الجملة بطريقتين، وكلتاهما خاطئة. ليست «الذكاء الاصطناعي كتب منصة» وليست «الكود رديء وصادف أنه يُترجَم». ما حدث فعلًا أكثر مللًا وأكثر فائدة: التوليد لم يعد عنق الزجاجة، فانتقل كل قيد إلى التحقق، وكان على طريقة بنائي أن تُعاد صياغتها حول ذلك.
نمط الفشل هو المعقولية، لا الأخطاء
الوكيل لا يعطيك تقريبًا أبدًا كودًا لا يُترجَم. يعطيك كودًا يُترجَم، ويُقرأ جيدًا، ويطابق الأسلوب المحيط، وخاطئ بمكر — فحص كان ينبغي أن يكون هناك، صلاحية أوسع بدرجة، تحقق يبدو كتحقق وليس كذلك.
مراجعة ذلك بالسرعة التي يصل بها ليست ممكنة بالقراءة وحدها. الانتباه هو المورد الشحيح، والنثر أغلى مكان لإنفاقه.
فيتوقف السؤال عن أن يكون «كيف أُخرج كودًا أفضل» ويصبح «كيف أجعل الخطأ صاخبًا؟»
ضع الثابت حيث لا يستطيع الكود نسيانه
القرار الأعلى أثرًا في كل منتج من منتجاتي هو أن القواعد الأهم تعيش في قاعدة البيانات وفي حدود منمَّطة، لا في كود تطبيق عليه أن يتذكرها.
العزل بين العملاء تفرضه قاعدة البيانات، فالفلتر المنسي ميزة معطوبة — أرخص فشل ممكن — بدل تسريب بيانات لا يلاحظه أحد ستة أشهر. الرؤية قيمة مشتقة واحدة تتشاركها كل مسارات القراءة، فلا توجد قاعدة ثانية يمكن أن تُخطأ. العواقب تأتي من سياسة مكتوبة، فتعديل prompt لا يستطيع أبدًا تغيير عقوبة.
لا شيء من هذه أفكار خاصة بالذكاء الاصطناعي. إنها تصميم دفاعي عادي. ما تغيّر هو العائد: حين يصل الكود أسرع عشر مرات، فالقيد الذي يلتقط صنفًا كاملًا من الأخطاء يصبح أكثر قيمة بالمعامل نفسه تقريبًا.
الترحيلات هي الذاكرة
مئات الترحيلات ليست فوضى، بل سجل. كل واحد بيان صغير مسمّى قابل للمراجعة عمّا تغيّر ومتى. المخطط الذي أستطيع قراءته مخطط يستطيع الوكيل قراءته، والمخطط هو القطعة الوحيدة التي لا تنحرف أبدًا عن الواقع.
وهي تسجّل الأخطاء بصدق أيضًا. حين يُضاف حدّ ولا تُوصَل به جداول لاحقة، فالترحيلات التي تغلق الفجوة هي السجل الصادق للخطأ مرة — وأي قارئ للمجلد يرى التصميم واليوم الذي انزلق فيه معًا.
في nat3alm تُشغِّل الاختبارات ملفات الترحيل الحقيقية على Postgres مضمَّن. لا قاعدة بيانات وهمية، لا عميل محاكى، لا مخطط اختبار منفصل يتقادم. إن كان ترحيل خاطئًا، فالمجموعة حمراء فورًا، على الجهاز الذي كُتب عليه.
التوثيق للوكيل أيضًا
كل مستودع من مستودعاتي فيه وثيقة طويلة تشرح ما هذا الشيء، وأي الأجزاء موجودة، وأي القرارات حاملة للأثقال — إحداها مكتوبة بنثر عربي مع الأسماء التقنية بالإنجليزية، تمامًا كما تظهر في الكود.
كتبتها لإنسان. يقرؤها وكيل كل جلسة. السياق ليس شيئًا تلصقه في بداية محادثة — إنه ناتج بناء تصونه، والنسخة في المستودع هي النسخة الصحيحة. ولازمة ذلك: الوثيقة المتقادمة صارت الآن خطأً بنطاق انفجار، لأن الجملة الخاطئة ستُصدَّق، بثقة، ويُبنى عليها.
اطلب قرارًا قبل diff
سير العمل الذي فشل طويلًا: صف ميزة، احصل على تنفيذ، راجعه، اكتشف أن التصميم كان خاطئًا قبل ثلاثة ملفات، ارمه.
الذي ينجح: ضع القرار على الطاولة أولًا. ما الطريقتان لفعل هذا؟ ما الذي ينكسر في كل منهما؟ أيهما يكلّف أكثر لاحقًا؟ ثم الـdiff — ويكون حينها صغيرًا، لأن معظم الجدال حدث بالفعل في فقرة بدل ستمئة سطر.
كل قسم «قرارات» في دراسات الحالة عندي موجود لأن تلك المحادثة حدثت قبل الكود. إن لم أستطع شرح لماذا البديل أسوأ، فأنا لا أفهم الكود في مستودعي، أيًّا كان من كتبه.
قِس بدل أن تجادل
أفضل مثال هو البحث. الكلمات المفتاحية أم التضمينات سؤال من النوع الذي يستطيع امتصاص أسبوع من الآراء. فقيس، على المستندات الحقيقية والأسئلة الحقيقية التي يطرحها العملاء بالطريقة التي يكتبون بها فعلًا. الكلمات المفتاحية فشلت؛ والبحث الدلالي وجد المقطع الصحيح في كل مرة تقريبًا. ظهيرة واحدة أنهت النقاش نهائيًا. الوكيل سيجادل بسرور في أي من الجانبين ما دمت تسمح له. الرقم لن يفعل.
ما زلت أفعله بيدي
- كل تغيير في المخطط. أقرؤها كلها.
- أي شيء يمس المال. تكاملات الدفع تُكتب ببطء، وترفض كل شيء حتى تستطيع التحقق منه. ذلك الرفض هو الميزة.
- الحذف والمنح. أي شيء يستطيع تدمير بيانات أو توسيع وصول.
- النثر. بما فيه هذا.
الملخص الصادق
قصة الإنتاجية حقيقية، وليست «أسرع عشر مرات في كل شيء». إنها: التوليد صار شبه مجاني، والمراجعة بقيت بالضبط بكلفتها التي كانت دائمًا، وانتقلت الحرفة إلى تصميم أنظمة يكون فيها الخطأ واضحًا ورخيصًا ومبكرًا.
هذا ما سأقضي الفترة القادمة في إظهاره بدل وصفه — جلسات حقيقية على هذه الأكواد، بما فيها تلك التي يشحن فيها الوكيل شيئًا معطوبًا بثقة وأضطر لالتقاطه. تلك هي المفيدة.
أيضًا
إذا كان حدّ في الترتيب غير محدود، فأوزانك زينة
درجة فيد بوزن صغير على التفاعل يمكن أن تظل تفاعلًا بالكامل تقريبًا. تحديد كل حدّ هو ما يجعل الأرقام في المعادلة تعني أي شيء على الإطلاق.
انشر أولًا، راجع بعدها
كل تصميم إشراف يبدأ بالسؤال نفسه، ويجيب عنه الجميع تقريبًا بالمقلوب: هل المراجعة تسمح بصعود المحتوى، أم تُنزله؟