ریویو یه PR با ۷۴ هزار خط حذف
خلاصهٔ کاملتر
نویسنده — که خودش تو ابتدای پست شفاف گفته این مطلب اسپانسری CodeRabbit هست ولی روی یه PR و کدبیس واقعی اجرا شده — رفته سراغ بدترین ورودی ممکن برای یه ریویوئر خودکار: حذف کامل یه فیچر بزرگ از یه بازی استراتژی مرورگری با بکاند Go و Echo، فرانتاند Svelte 5، پستگرس و ردیس. آمار PR: ۲۱۸ فایل تغییریافته، ۱٬۴۵۳ خط اضافه و ۷۴٬۰۹۶ خط حذف، تو پنج فاز و با یه مهاجرت SQL.
سختترین بخش یه تله اسمی بوده. کلمهٔ corruption تو این کدبیس دو مکانیزم کاملاً بیربط رو پوشش میداد: «جنگ فساد» که قرار بود حذف بشه، و «فساد نود» که یه مکانیزم نگهداری باتنت و ماندنی بود. به گفتهٔ نویسنده هر ریویوئری، آدم یا هوش مصنوعی، که این دوتا رو قاطی کنه یا کد اشتباه رو حذف میکنه یا آدمو زیر کامنتهای غلط دفن میکنه.
حذف متدهای مربوط به جنگ ساده بود؛ کار ظریف جای دیگهای بود: متدهایی که میموندن ولی SQL خامشون به حالتهای جنگ اشاره میکرد. اینجا کامپایلر هیچ کمکی نمیکنه، چون کوئری فقط یه رشتهست:
rows, err := conn.Query(ctx, `
DELETE FROM player_nodes
WHERE id = ANY($1)
AND botnet_id = (SELECT id FROM botnets WHERE player_id = $2)
AND state NOT IN ('locked', 'committed', 'raid_committed', 'war_committed')
RETURNING id
`, nodeIDs, playerID)تو همین لیست، دو حالت مربوط به جنگ باید در میاومدن و بقیه سر جاشون میموندن. نویسنده میگه ابزار همهٔ رشتههای وابسته به جنگ رو درست پیدا کرد و به هیچ حالت مشروعی گیر نداد؛ یعنی از روی زمینه فهمید کدوم واژه به مکانیزم ماندنی مربوطه. همینجا بوده که دیگه بهش به چشم یه لینتر نگاه نکرده.
نمونهٔ دوم یه کوئری reaper شصتخطی بوده با چند شاخهٔ UNION برای نودهایی که تو حالتهای موقت گیر کردن. یه شاخه باید حذف میشد و بقیه دستنخورده میموندن — و سختترین بخش، اطمینان از نبود وابستگی پنهان تو چهار شاخهٔ باقیمونده بود. ابزار همین خوندن رو انجام داد و یه ایراد Major هم گرفت: reaper موقع آزاد کردن نودها یه شناسهٔ نشست رو پاک نمیکرد. نویسنده در نهایت این پیشنهادو نپذیرفت.
فیچری که به گفتهٔ نویسنده واقعاً فروخته، «پرامپت برای ایجنتها» بوده: هر کامنت یه نسخهٔ ماشینخوان داره که فایل، محدودهٔ خط، هدف و شرط اعتبارسنجی رو مشخص میکنه. یعنی به جای خوندن کامنت و کپی کردنش، پرامپت رو میدی دست ایجنت کدنویس تا هر مورد رو با کد فعلی بسنجه و فقط موارد هنوز معتبر رو درست کنه. ریویو از چیزی که میخونی تبدیل میشه به چیزی که اجرا میکنی.
جمعبندی نویسنده برای تیمهای Go صادقانهست: Go با تایپ سیستم قوی، go vet و staticcheck خیلی از چیزهایی رو که هوش مصنوعی تو زبانهای داینامیک میگیره، سر کامپایل میگیره. چیزی که میمونه دقیقاً همین موارده: SQL خام داخل رشتهها، سازگاری اینترفیس تو یه ریفکتور بزرگ و ثابتهای بینفایلی. مدل ذهنی پیشنهادیش: یه ریویوئر جونیورِ خیلی سریع که هیچوقت خسته نمیشه ولی همیشه یه نظری داره — کار شما از پیدا کردن ایراد به داوری کردن تغییر میکنه.
نکات کلیدی:
- تست میدانی روی یه PR واقعی با ۲۱۸ فایل و ۷۴ هزار خط حذف انجام شده
- ارزش اصلی ابزار تو Go، خوندن SQL خام داخل رشتههاست که هیچ لینتری نمیبینه
- تشخیص درست بین دو مکانیزم هماسم، مهمترین آزمون این ریویو بود
- هر کامنت یه پرامپت ماشینخوان داره که مستقیم به ایجنت کدنویس داده میشه
- سه پروفایل ریویو (Quiet، Chill، Assertive) شدت بازخورد رو تنظیم میکنن
- پست اسپانسریه، ولی نویسنده مواردی که نپذیرفته رو هم گزارش کرده




