یک اجرای موفق تصادفی از ابزاری که هوش مصنوعی نوشته، پیروزی نیست؛ بلکه یک تله است. برای مقابله با چرخهٔ کدنویسی بر اساس حس (Vibe Coding) — یعنی حالتی که برنامهنویس تنها چون خروجی مدل «زیبا» به نظر میرسد آن را میپذیرد — متدولوژی جدیدی در ۹ اکتبر ۲۰۲۶ معرفی شد که هر قطعه کد را پیش از خروج از شاخهٔ آزمایشی، به یک دروازهٔ سختگیرانهٔ مبتنی بر شواهد میفرستد. این رویکرد در واقع پاسخی به چالشهای مدیریت محیطهای پراکنده در پروژههای Vibe Coding است تا از هرجومرج در توسعه جلوگیری شود. به نقل از راهنمای منتشر شده در dev.to، این رویکرد بهجای تکیه بر امید و شانس، یک «کارت رسید» اجباری را جایگزین کرده است.
بسیاری از توسعهدهندگان اکنون برای طراحی رابطهای خط فرمان (CLI) به مدلهای رایگان تکیه میکنند. خطر زمانی آغاز میشود که ابزار یک بار جدولی مرتب چاپ میکند و برنامهنویس بدون تست «مسیرهای خطا» (Unhappy Path)، کد را ادغام میکند. این فرهنگ باعث میشود خروجیهای زیبا با محصول نهایی اشتباه گرفته شوند. شکست در این مسیر رایج است: کاربر دستوری برای نمایش وضعیت (status) میخواهد، پیشنویس مدل سه ردیف چاپ میکند و با کد خروجی صفر (exit zero) بسته میشود؛ توسعهدهنده چون نام شاخه wip-ok است، آن را ادغام میکند، بدون اینکه بداند ابزار در شرایط واقعی شکست میخورد.
برای حل این مشکل، این چارچوب یک «کارت رسید» معرفی میکند؛ مجموعهای از هفت فایل مشخص که باید وجود داشته باشند و حاوی دادههای معتبر باشند تا اجازه ادغام (Merge) صادر شود. این فرآیند برای پروژههای تکنفره و آزمایشی (scratch projects) طراحی شده و از ابزارهایی مثل MonkeyCode برای پیشنویس اولیه و میزبانی استفاده میکند. طبق گزارش dev.to، هدف ایجاد سیستمی است که در صورت نبود شواهد، بلافاصله شاخهٔ کد را حذف کند (fail-closed).
زمینه و ابزارها
این گردشکار بهطور خاص برای «مسیر رایگان» (free lane) طراحی شده است. در این بافت، از دسترسی رایگان مدلهای MonkeyCode برای پیشنویس متن CLI و از گزینه سرور رایگان آن برای میزبانی اجرای آزمایشی استفاده میشود. اینها به عنوان یک مسیر ارزان در نظر گرفته میشوند، نه وعدهای برای پایداری در محیط تولید (production).
توسعهدهندگان هشدار یافتهاند که هرگز کلیدهای امنیتی واقعی را در این مسیر قرار ندهند. سرور رایگان تنها یک جعبهٔ آزمایشی (scratch box) است و مدل رایگان فقط یک پیشنویسکننده. مالکیت رسید، فرآیند بازگشت (Rollback) و خط تخلیه (abandon line) همچنان بر عهده برنامهنویس است. کل این فرآیند بهطور سختگیرانه به ۴۵ دقیقه محدود شده و تنها در مسیر رایگان مجاز است؛ اگر هر یک از این جعبهها یا سرویسها خراب شوند، شاخهٔ کد میمیرد. این سختگیری در مدیریت منابع، یادآور استفاده از پوشههای بودجه برای جلوگیری از هزینههای سرسامآور در عاملهای AI است که بر کنترل دقیق منابع تأکید دارد.
هفت فایل شواهدی
کارت رسید نیازمند حضور هفت فایل غیرخالی است. فایلهای خالی، رمزها و اسکرینشاتهای ترمینال سبز رنگ به عنوان شاهد پذیرفته نمیشوند:
- GOAL.txt: تعریف یک وظیفه، یک کاربر و یک خروجی مشخص. این فایل باید حتماً نام دو محصول خاص را ذکر کند.
- BUDGET.txt: تعیین سقف زمانی سختگیرانه ۴۵ دقیقه و استفاده exclusive از مسیر رایگان. اگر هرگونه هزینه یا پرداخت (paid hop) در مسیر ظاهر شود، دروازه شکست میخورد.
- FIXTURE.txt: حاوی ورودیهای نمونهٔ پاکسازی شده. این فایل نباید حاوی اسرار یا رمز عبور باشد. اگر هر شکلی از کلید یا رمز عبور شناسایی شود، فایل رد میشود.
- REPRO.md: لیست دقیق دستوراتی که برای بازتولید مجدد خطا مورد نیاز است. این گامها باید صرفاً بر اساس حافظه لپتاپ توسعهدهنده باشند.
- DIFF_SCOPE.txt: لیست صریح تمام فایلهایی که پیشنویس اجازه تغییر آنها را دارد تا از گسترش بیرویه دامنه (Scope Creep) جلوگیری شود. اگر مسیری خارج از محدوده CLI ظاهر شود، این یک شکست محسوب میشود.
- ROLLBACK.txt: ارائه دستورات دقیق برای بازگرداندن تغییرات (undo). جملات مبهم مثل «بعداً راهش را پیدا میکنم» ممنوع است.
- ABANDON.txt: تعیین خط قرمز دقیقی که در آن توسعهدهنده باید متوقف شده و شاخه را حذف کند. شما نمیتوانید بگویید «چه زمانی» متوقف شوید؛ این خط باید مطلق و قطعی باشد.
گردشکار اجرا
این فرآیند از ۶ گام شمارهدار پیروی میکند تا خوشبینیِ برنامهنویس باعث دور زدن دروازه نشود:
۱. نوشتن خط تخلیه در ابتدا: پیش از ارسال هر پرامپتی، فایل ABANDON.txt باز شود. برای مثال، شاخه ممکن است پس از دو بار شکست در اجرای دروازه یا در صورتی که سرور رایگان نتوانست کار را انجام دهد، بمیرد. این کار به این دلیل است که بعد از دیدن یک جدول زیبا، صدای امید در ذهن برنامهنویس بلندتر میشود.
۲. محدود کردن پیشنویس: هدف باید در یک جمله شامل نام دستور، فایل ورودی و خروجی باشد. اگر در یک جمله جا نشد، CLI بیش از حد بزرگ است و باید تقسیم یا حذف شود.
۳. پیشنویس در مسیر رایگان: درخواست برای یک فایل واحد، نه یک چارچوب (framework) کامل. هدف و ورودی نمونه (fixture) را پیست کنید. هرگونه سرویس اضافی، دیمون (daemon) یا فراخوانیهای شبکه پنهان را رد کنید. هر وابستگی نامگذاری نشده، یک خطای دامنه است که باید در DIFF_SCOPE.txt ثبت یا بازگردانی شود.
۴. یکبار اجرا روی سرور رایگان: کپی CLI به سرور آزمایشی MonkeyCode. اجرای دستورات موجود در REPRO.md و ذخیره خروجی استاندارد (stdout) و کد وضعیت (exit code) در همان فایل. هرگز دایرکتوریهای واقعی Home را مونت نکنید یا سرور را به میزبانهای تولید متصل نکنید.
۵. اجرای دروازه رسید بهصورت محلی: استفاده از قالب اسکریپت receipt-gate.sh روی پوشه رسید. هر فایل مفقود باید منجر به خروجی غیرصفر (non-zero exit) شود.
۶. بررسی، ارتقا یا حذف: در صورت عبور از دروازه، هر خط تغییر یافته را بخوانید. تنها مسیرهای ذکر شده در DIFF_SCOPE.txt را ارتقا دهید. اگر دروازه دو بار شکست خورد، دستور بازگشت را اجرا و شاخه را حذف کنید.
مکانیسم دروازه
برای اتوماسیون، اسکریپتی به نام receipt-gate.sh ارائه شده است. این اسکریپت عمداً «خستهکننده» طراحی شده چون هدف همین است. این ابزار از set -euo pipefail استفاده میکند تا هر خطایی منجر به توقف کامل و بسته شدن دروازه شود.
این اسکریپت سه بررسی اصلی انجام میدهد:
- تایید وجود و غیرخالی بودن هر هفت فایل مورد نیاز.
- استفاده از
grepبرای جستوجوی اسرار (مثلsk-یاapi_keyیاpasswordیاBEGIN PRIVATE) درFIXTURE.txt. - بررسی
DIFF_SCOPE.txtبا عبارات منظم (Regular Expression) برای اطمینان از اینکه تنها مسیرهای معتبر شامل حروف، اعداد، نقطه، اسلش و زیرخط (underscore) حضور دارند.
تست دروازه
توسعهدهندگان تشویق میشوند با انجام یک «مانور» (drill) و مسموم کردن عمدی فایل ورودی، سیستم را تست کنند. برای مثال، ابزاری به نام dfcli.py بسازید و عبارت api_key=demo-not-real را به FIXTURE.txt اضافه کنید. اگر اسکریپت receipt-gate.sh فریاد نکشد و با کد غیرصفر خارج نشود، دروازه صرفاً یک «پوستر» تزیینی است و نه یک حفاظ واقعی. تنها پس از عبور از دروازه و خواندن دستی تمام خطوط diff، کد ارتقا مییابد.
این سیستم بهطور صریح «فقط یک پرامپت دیگر» را پس از رسیدن به خط تخلیه ممنوع میکند. اگر بودجه ۴۵ دقیقهای تمام شود یا سرور رایگان شکست بخورد، شاخه بلافاصله میمیرد. این مرز بخشی اصلی از کارت است، نه یک پاورقی.
قوانین سختگیرانه (Fail-Closed)
قوانین غیرقابل مذاکره این فرآیند عبارتند از:
- بدون فایل رسید، ارتقایی در کار نیست. لاگهای چت، فایل محسوب نمیشوند.
- بدون پاکسازی ورودیها (fixture)، اجرا ممنوع است. پیش از اینکه سرور رایگان آن را ببیند، پاکسازی کنید.
- هر مسیری خارج از
DIFF_SCOPE.txtمنجر به عدم ثبت (Commit) میشود. فایلهای اضافی نیاز به پیشنویس جدید دارند. - بدون بودجه دوم، تلاشی در کار نیست. مسیر رایگان تنها کیف پول شماست.
- بدون خواندن انسانی، ادغامی صورت نمیگیرد. اسکریپت نمیتواند نام یک فلگ (flag) بد را تشخیص دهد.
محدودیتها و دامنه
این روش برای CLIهای کوچک و تکنفره است، نه برای زنجیره انتشار محصولات تجاری. اگر ابزار با پرداختها، دادههای مشتری یا اعتبارنامههای عملیاتی در ارتباط است، یا اگر نیاز به یک شورای تغییرات رسمی (change board) است، باید از این روش صرفنظر کرد.
محدودیتها صریح هستند: جستوجوی رمزها با grep یک تله ساده است، نه یک اسکنر کامل. مدل رایگان ممکن است سوئیچهایی ابداع کند که در ورودیها نیستند. سرور رایگان ممکن است کار را رد کند یا ناپدید شود. دستورات بازگشت نیز سادهاند (مثل git switch - و git branch -D scratch-df). اگر شاخه به یک ریموت ارسال شده بود، شاخه ریموت نیز باید حذف شود.
این تغییر در رویکرد، توسعه با هوش مصنوعی را از مدل «پرامپت بزن و دعا کن» به یک گردشکار سختگیرانه و مبتنی بر شواهد تبدیل میکند. با اجبار توسعهدهنده به تعریف شرط خروج پیش از نوشتن اولین خط کد، وابستگی عاطفی به پیشنویسهای «تقریباً درست» از بین میرود. این متدولوژی در واقع یکی از رکنهای اساسی برای تبدیل نمونههای اولیه AI به محصولاتی پایدار است تا از فروپاشی کد در محیط عملیاتی جلوگیری شود.
تکامل این چارچوب در آینده شامل فایلهای «خروجی طلایی» (golden output) برای شناسایی فرمتهای ناپایدار AI، تایماوتها یا لیست وابستگیهای ممنوعه خواهد بود. شما میتوانید با پیادهسازی receipt-gate.sh روی اولین ابزار کوچک بعدی خود شروع کنید تا ببینید چند درصد از پیشنویسهای فعلی شما واقعاً از دروازه عبور میکنند.




گفتگو