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 request যাচাই করলে সেগুলো সারিতে দাঁড়াবে।
- ভেতরে আসার পোর্ট নেই। ব্রাউজারে অ্যাপ খোলা যায় না। ভেতরে চালু করুন এবং দ্বিতীয় কমান্ড থেকে
curl localhostদিয়ে টেস্ট করুন। - ভেতরে Docker নেই। কনটেইনার চালানো টেস্টের জায়গা VPS-এর runner।
- বাইরে যাওয়ার ইন্টারনেট খোলা। এ কারণেই
pip installকাজ করে। প্যাচের লেখককে দেবেন না এমন কিছু স্যান্ডবক্সে রাখবেন না।
শুরু করা
নতুন অ্যাকাউন্ট $1-এর স্যান্ডবক্স সময় পায়, যা standard ট্যারিফে একশোর বেশি রিভিউয়ের জন্য যথেষ্ট। স্যান্ডবক্স পেজে ট্যারিফ আছে, SDK রেফারেন্সে ওপরে ব্যবহৃত প্রতিটি মেথড, আর 5 মিনিটে Python SDK-এ সেটআপ।
সম্পর্কিত: পুরো পাইপলাইনের জন্য আলাদা CI টেস্ট রান, আর যেসব এজেন্ট কোড লেখে তাদের জন্য AI এজেন্টের জন্য স্যান্ডবক্স।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।