سنسورهای نگهداشتپذیری کد برای ایجنتهای هوش مصنوعی
خلاصهٔ کاملتر
نگهداشتپذیری کد — یا همون «کیفیت داخلی» — یعنی بشه آینده هم راحت و بیدردسر روی کدبیس تغییر ایجاد کرد. وقتی ایجنتهای کدنویسی بدون راهنمای کافی کار میکنن، اولین نشانهی مشکل اینه که یه تغییر کوچیک ناگهان به دهها فایل دست میزنه. نویسنده این مقاله، یه داشبورد آنالیتیکس با NextJS و TypeScript رو کاملاً با کمک هوش مصنوعی ساخته و روی سنسورهایی تمرکز کرده که بهش و به ایجنت کمک میکنن مشکلات نگهداشتپذیری رو زود شناسایی کنن.
ESLint و تحلیل استاتیک پایه اولین لایهی دفاعیه. قوانینی مثل حداکثر تعداد آرگومان تابع، طول فایل، طول تابع، و پیچیدگی cyclomatic (تعداد مسیرهای اجرایی ممکن در یه تابع) بهصورت پیشفرض در ESLint فعال نیستن و باید دستی تنظیم بشن. نویسنده برای بهتر کردن خودتصحیحی ایجنت، یه formatter سفارشی ESLint ساخته که پیامهای راهنما رو با خطاها همراه میکنه — مثلاً به ایجنت میگه وقتی با no-explicit-any مواجه شد، آیا باید type اضافه کنه یا با کامنت مشخصی suppress کنه.
dependency-cruiser برای اجرای لایهبندی ماژولها یه سطح بالاتره. نویسنده با کمک ایجنت، قوانین وابستگی بین لایههای اپلیکیشن (routes → services → clients + domain) رو تعریف کرده. مثلاً:
{
"name": "clients-no-services",
"severity": "error",
"from": { "path": "^server/clients/" },
"to": { "path": "^server/services/" }
}این قوانین هر بار که ایجنت ساختار لایهها رو نقض کرد، پیام خطا با توضیح کامل معماری نشون داد و ایجنت توانست خودش تصحیح کنه. بدون هوش مصنوعی، نوشتن این قوانین با syntax پیچیدهی dependency-cruiser خیلی وقتگیر بود.
آنالیز coupling (یعنی شمارش وابستگیهای ورودی و خروجی هر فایل) دادههای دقیقی تولید میکنه، ولی تفسیرش سخته. نویسنده یه CLI سفارشی ساخت و از Claude Opus خواست بر اساس خروجی اون گزارش بده. نتیجه؟ ابزار بعضی الگوهای معتبر مثل factory و shared schema رو بهاشتباه «god module» نامید. نتیجهگیری اینه که دادهی خام coupling بهتنهایی برای هوش مصنوعی مفید نیست، چون «خوب» یا «بد» بودن یه الگو به context کل پروژه بستگی داره.
بررسی ماژولاریتی با هوش مصنوعی — پروداکتیوترین بخش تجربه. نویسنده از مجموعه پرامپتهای «Modularity Skills» ولاد خونوف استفاده کرد و نتایج قابلتوجهی گرفت: سه endpoint بکاند کد route تقریباً یکسانی داشتن (تکرار کد)، صفحهی سوم اپلیکیشن بهجای استفاده از hook موجود، رفتار مشابه رو از صفر پیاده کرده بود، و تغییر نحوهی ارسال پارامترهای مشترک (مثل date range) به تغییر بیش از ۴۰ فایل نیاز داشت! این مسائل نشون میده که بدون بررسی فعال، ایجنتها «بدهی فنی ناخواسته» انباشت میکنن.
نکات کلیدی:
- قوانین ESLint برای محدودیتهایی مثل طول فایل و پیچیدگی cyclomatic بهصورت پیشفرض فعال نیستن و باید دستی تنظیم بشن
- پیامهای راهنمای سفارشی در lint errors کمک زیادی به خودتصحیحی ایجنت میکنن
- ابزارهایی مثل dependency-cruiser میتونن ساختار لایهبندی ماژولها رو بهصورت اتوماتیک اجرا کنن
- دادهی خام coupling بدون تفسیر معناشناختی برای هوش مصنوعی ارزش زیادی نداره
- بررسی ماژولاریتی با پرامپتهای قوی بهترین نتایج رو داد و مشکلات واقعی معماری رو پیدا کرد
- ابزارهای محاسباتی و inferential (هوش مصنوعی) باید مکمل هم باشن، نه جایگزین




