ایک diff دکھاتا ہے کہ پیچ کیا کرنے کا دعویٰ کرتا ہے۔ یہ نہیں دکھاتا کہ بگ واقعی ختم ہوا یا نہیں، if کی نئی شاخ کبھی چلتی بھی ہے یا نہیں، یا ڈیپنڈنسی کا نیا ورژن صاف انسٹالیشن پر import توڑ دیتا ہے یا نہیں۔ ریویورز یہ جانتے ہیں، اسی لیے اتنے ریویو "LGTM، اگر ٹیسٹ پاس ہو جائیں" پر ختم ہوتے ہیں۔
AI کے لکھے پیچ کے ساتھ یہ خلا اور بڑھ جاتا ہے۔ ماڈل تیزی سے قابلِ یقین دکھنے والا کوڈ بنا دیتا ہے، اور قابلِ یقین دکھنے والا کوڈ ہی تھکے ہوئے ریویور کی نظر سے پھسل جاتا ہے۔ سستا حل یہ ہے کہ کسی کی منظوری سے پہلے تبدیلی کو چلایا جائے — ایسی جگہ جہاں وہ کچھ نقصان نہ کر سکے۔
جانچ: base، head، ٹیسٹ
کوئی پیچ جو سب سے قائل کرنے والا ثبوت دے سکتا ہے، وہ ایسا دہراؤ ہے جو پرانے کوڈ پر ناکام ہو اور نئے پر پاس ہو۔ سینڈباکس اسے 20 لائن کا اسکرپٹ بنا دیتا ہے۔ یہ Python 3.12، Node.js 22، git اور curl والی Firecracker microVM ہے، جو تقریباً ایک سیکنڈ میں شروع ہوتی ہے:
import os
from eqvps import Sandbox
REPO, BASE, HEAD = os.environ["REPO_URL"], os.environ["BASE_SHA"], os.environ["HEAD_SHA"]
def repro(sb, ref):
sb.exec(f"cd /root/app && git checkout -q {ref}", timeout=55)
return sb.exec("cd /root/app && python3 /root/repro.py", timeout=55).exit_code
with Sandbox.create(tariff="standard", ttl=1800) as sb:
sb.exec(f"git clone -q {REPO} /root/app", timeout=55)
sb.exec("cd /root/app && pip install -q -r requirements.txt", timeout=55)
sb.upload("/root/repro.py", open("repro.py").read())
before, after = repro(sb, BASE), repro(sb, HEAD)
tests = sb.exec("cd /root/app && python3 -m pytest -q", background=True).wait()
print(f"repro on base: {before}, on head: {after}; tests: {tests.state}, exit {tests.exit_code}")
فائل repro.py بگ رپورٹ کا کوڈ ٹکڑا ہے۔ اگر یہ base پر صفر کے سوا کسی کوڈ اور head پر صفر کے ساتھ ختم ہو، تو پیچ وہی ٹھیک کرتا ہے جس کا وہ دعویٰ کرتا ہے۔ وہ لائن اور ٹیسٹ کا خلاصہ pull request پر تبصرے کے طور پر ڈالیں، اور ریویور حقائق سے آغاز کرے گا۔
ٹیسٹ سویٹ بیک گراؤنڈ ٹاسک کے طور پر چلتا ہے کیونکہ ایک سنکرونس کمانڈ 55 سیکنڈ پر رک جاتی ہے۔ 30 منٹ کا TTL طے کرتا ہے کہ اٹکا ہوا رن زیادہ سے زیادہ کتنی دیر بل بنا سکتا ہے۔
کوڈ چلانے والے ریویو ایجنٹس
یہی خیال AI ریویور پر بھی لاگو ہوتا ہے۔ MCP سرور سے جڑے ایجنٹ کے پاس سینڈباکس اوزار ہوتے ہیں: سینڈباکس بنانا، کمانڈ چلانا، فائلیں اپ لوڈ اور ڈاؤن لوڈ کرنا۔ "یہ Python 3.8 کے ساتھ مطابقت توڑ سکتا ہے" لکھنے کے بجائے وہ برانچ لاتا ہے، کوڈ چلاتا ہے اور traceback کا حوالہ دیتا ہے — یا بتاتا ہے کہ سب ٹھیک ہے۔
ایسے ایجنٹ کو خرچ کی حد اور صرف پڑھنے والا ٹوکن دیں، اور طے کریں کہ وہ بغیر پوچھے کون سے اوزار بلا سکتا ہے۔ MCP حفاظتی تدابیر ہر اوزار کو خطرے کی سطح کے لحاظ سے درج کرتی ہیں۔
کون سا ٹیرف
| ریپوزٹری | ٹیرف | عام بار | تخمینی لاگت |
|---|---|---|---|
| چھوٹی لائبریری، خالص Python یا JS | small (0.5 vCPU, 1 GB) | 2 منٹ | $0.0011 |
| ٹیسٹ سویٹ والی ویب ایپ | standard (1 vCPU, 2 GB) | 5 منٹ | $0.0055 |
| نیٹو ایکسٹینشنز، کمپائل ہونے والی ڈیپنڈنسیز | plus (2 vCPU, 4 GB) | 15 منٹ | $0.033 |
عارضی سینڈباکس کا بل فی سیکنڈ بنتا ہے، کم از کم 60 سیکنڈ۔ اگر ریویور چند دنوں تک اسی ماحول میں لوٹنا چاہتا ہے تو اسے persistent کے طور پر بنائیں: وہ اپنی ڈسک 30 دن تک رکھتا ہے اور ہر شروع ہونے والے گھنٹے کا بل بنتا ہے، اس لیے دو دن کے ریویو کے لیے رکھا گیا standard سینڈباکس تقریباً 3.17 ڈالر کا پڑتا ہے۔ pull request ضم ہونے پر اسے حذف کر دیں۔
جاننے کے لائق حدود
- ہر اکاؤنٹ میں ایک وقت میں دو کمانڈز۔ ایک کے بعد ایک ہونے والے ریویو کے لیے کافی۔ اگر آپ درجنوں pull requests ایک ساتھ جانچیں تو وہ قطار میں لگیں گے۔
- اندر آنے والے پورٹ نہیں۔ آپ ایپ کو براؤزر میں نہیں کھول سکتے۔ اسے اندر شروع کریں اور دوسری کمانڈ سے
curl localhostکے ذریعے ٹیسٹ کریں۔ - اندر Docker نہیں۔ کنٹینر چلانے والے ٹیسٹ VPS پر runner میں ہونے چاہییں۔
- باہر جانے والا انٹرنیٹ کھلا ہے۔ اسی سے
pip installکام کرتا ہے۔ سینڈباکس میں ایسا کچھ نہ رکھیں جو آپ پیچ کے مصنف کو نہ دیتے۔
آغاز کیسے کریں
نئے اکاؤنٹس کو 1 ڈالر کا سینڈباکس وقت ملتا ہے، جو standard ٹیرف پر سو سے زیادہ ریویو کے لیے کافی ہے۔ سینڈباکس صفحے پر ٹیرف ہیں، SDK حوالہ میں اوپر استعمال ہونے والا ہر طریقہ، اور 5 منٹ میں Python SDK میں سیٹ اپ۔
متعلقہ: پوری پائپ لائن کے لیے الگ CI ٹیسٹ رن، اور کوڈ لکھنے والے ایجنٹس کے لیے AI ایجنٹس کے لیے سینڈباکس۔
تبصرے
ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔