SSD Nodes Learn Hosting plans →
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-10-30

لوپ انجینئرنگ کیا ہے؟ سادہ تعریف اور مثال

لوپ انجینئرنگ AI agent کے بار بار چلنے والے کام کا trigger، boundary، verification اور budget ڈیزائن کرنے کا طریقہ ہے، نہ کہ صرف ایک clever prompt لکھنا۔

لوپ انجینئرنگ سے کیا مراد ہے

لوپ انجینئرنگ سے مراد اس دہرائے جانے والے چکر کو ڈیزائن کرنا ہے جس میں AI agent کام کرتا ہے: اسے کیا متحرک کرتا ہے، اسے کن چیزوں تک رسائی حاصل ہو سکتی ہے، اس کے output کی جانچ کیسے ہوتی ہے، اور اسے کون سی چیز روکتی ہے۔ Prompt engineering میں model کے لیے ایک message کی ساخت تیار کی جاتی ہے۔ Loop engineering اس process کی ساخت تیار کرتی ہے جو آپ کے سو جانے کے بعد ہزاروں messages بھیجتا ہے۔ کام کی بنیادی اکائی prompt سے بدل کر loop بن جاتی ہے۔

مختصر طور پر، آپ صرف instructions لکھنا چھوڑ کر control system لکھنا شروع کرتے ہیں۔ Agent کو اب بھی اچھی instructions درکار ہوتی ہیں، لیکن وہ ایک ایسے cycle کا جزو بن جاتی ہیں جو schedule کے مطابق چلتا ہے، آپ کے code کی isolated copy میں کام کرتا ہے، test کے ذریعے اپنے result کی تصدیق کرتا ہے، اور budget ختم ہونے پر رک جاتا ہے۔

یہ اصطلاح 2026 میں کیوں سامنے آئی

یہ نام ابھی عوامی سطح پر رائج ہو رہا ہے۔ GitHub repository cobusgreyling/loop-engineering نے پہلی بار سامنے آنے کے دو ماہ کے اندر 9,600 stars عبور کر لیے تھے (جولائی 2026 تک)، اور 2026-10-27 کو اس پر تقریباً 11,600 stars دکھائی دے رہے تھے۔ اس کے ساتھ یہ عبارت درج تھی: "Prompting بند کریں۔ Loop ڈیزائن کریں۔ Score حاصل کریں۔" جولائی 2026 میں اس کے README نے اس تبدیلی کو چھ بنیادی اجزا میں تقسیم کیا تھا: scheduling، worktrees، skills، plugins اور connectors، sub-agents، اور conversation سے باہر محفوظ کی جانے والی durable memory۔ موجودہ README میں اب یہ فہرست شامل نہیں ہے (2026-10-27 کو جانچا گیا)، لیکن یہ اب بھی loop کی state کو conversation سے باہر ایک file میں محفوظ رکھتا ہے۔

Repository نے Boris Cherny کو اپنی inspirations میں شامل کیا ہے۔ وہ Anthropic میں Claude Code کی قیادت کرتے ہیں۔ ان سے منسوب وسیع پیمانے پر رپورٹ کیا گیا جملہ یہ ہے:

اب میں Claude کو prompt نہیں کرتا۔ میرے پاس ایسے loops چل رہے ہیں جو Claude کو prompt کرتے ہیں۔

دوسری repository AI-Builder-Club/skills کے قریب 1,300 stars ہیں (2026-10-27 تک) اور یہ دونوں کرداروں کو براہ راست بیان کرتی ہے: ایک "codebase harness" جو repository کو agent کے لیے tests چلانے اور deploy کرنے کے دوران محفوظ بناتا ہے، اور ایک "loop engineer" جو ایسے workflows بناتا ہے جو کسی trigger پر بیدار ہوتے ہیں، کام کرتے ہیں، اور سیکھی گئی باتیں ایک shared file میں لکھ دیتے ہیں تاکہ اگلا loop انہیں پڑھ سکے۔

ان میں سے کسی repository نے یہ practice ایجاد نہیں کی۔ جو شخص nightly build، continuous integration میں linter، یا ایسا cron job چلا چکا ہو جو ticket کھولتا ہے، وہ اس ساخت سے پہلے ہی واقف ہے۔ نئی بات یہ ہے کہ loop کے اندر کام کرنے والا worker اب non-deterministic ہے۔ اس سے اردگرد کے machinery کے تقاضے بدل جاتے ہیں۔

لوپ کے چار حصے

ہر درست طور پر کام کرنے والے لوپ میں یہ چار حصے ہوتے ہیں۔ جو لوپ ان میں سے کسی ایک حصے کو چھوڑ دے، وہی آپ کو رات 3 بجے بیدار کرتا ہے۔

  • Trigger۔ وہ واقعہ جو run شروع کرتا ہے: timer، webhook، نیا pull request یا alert۔
  • Boundary۔ وہ files، credentials اور network جن تک agent اس run کے دوران رسائی حاصل کر سکتا ہے۔
  • Verification۔ exit code کے ساتھ ایک check، جو فیصلہ کرتا ہے کہ run کا output رکھا جائے یا discard کر دیا جائے۔
  • Budget۔ tokens، وقت اور رقم کی حد، جو run کامیاب ہو یا نہ ہو، اسے ختم کر دیتی ہے۔

ان چاروں نکات کو سوالات کی صورت میں دوبارہ پڑھیں۔ اس طرح ہر اس agent کے لیے design review تیار ہو جاتا ہے جسے آپ مسلسل running حالت میں چھوڑنے والے ہیں۔

ایجنٹ کو کیا فعال کرتا ہے

Timer سب سے سادہ trigger ہے۔ Linux server پر اس کام کے لیے systemd timer، cron سے بہتر ہے۔ یہ logs لکھتا ہے، آپ کی مقرر کردہ شرائط کے مطابق دوبارہ کوشش کرتا ہے، اور اس unit کی دوسری copy شروع نہیں کرتا جو ابھی چل رہی ہو۔ آخری خاصیت agent loops میں سب سے عام overlap bug ختم کرتی ہے: دو runs ایک ہی branch میں ترمیم کر رہے ہوں۔

پہلے ایجنٹ کے لیے الگ user بنائیں۔ یہ user security boundary کا حصہ ہے۔ اس کی ملکیت صرف /srv/agent ہو، اور کسی دوسری چیز کی نہیں:

sudo useradd --system --home-dir /srv/agent --shell /usr/sbin/nologin agent
sudo chown -R agent:agent /srv/agent

پھر unit کو /etc/systemd/system/agent-loop.service پر لکھیں:

[Unit]
Description=Agent loop: triage open issues
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
User=agent
WorkingDirectory=/srv/agent/repo
ExecStart=/srv/agent/bin/loop.sh
TimeoutStartSec=1800

اور timer کو /etc/systemd/system/agent-loop.timer پر لکھیں:

[Unit]
Description=Run the triage loop every 30 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=30min
Unit=agent-loop.service

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now agent-loop.timer
systemctl list-timers agent-loop.timer

systemctl list-timers میں NEXT column دکھنا چاہیے، جس میں مستقبل کا وقت ہو، اور LEFT column بھی، جو باقی وقت گن رہا ہو۔ خالی نتیجے کا مطلب ہے کہ timer enabled نہیں ہے، کیونکہ enable کو --now کے بغیر استعمال کرنے سے یہ صرف اگلے boot کے لیے schedule ہوتا ہے۔ TimeoutStartSec=1800 کی اہمیت بظاہر اس سے زیادہ ہے۔ Type=oneshot service اس وقت تک starting شمار ہوتی ہے جب تک اس کا script exit نہیں ہو جاتا۔ systemd oneshot units کے لیے start timeout بطور default بند کر دیتا ہے۔ اس line کے بغیر، input کا انتظار کرتے ہوئے hang ہونے والا agent unit کو ہمیشہ activating state میں پھنسا رکھتا ہے۔ بعد میں timer کا ہر tick اسے ابھی running پاتا ہے اور کچھ بھی شروع نہیں کرتا۔ یہ line شامل ہونے پر systemd 30 منٹ بعد run ختم کر دیتا ہے اور اسے failed mark کرتا ہے۔ اگر آپ unit کو کبھی default Type=simple میں تبدیل کریں تو TimeoutStartSec خود run کو مزید cover نہیں کرتا۔ اسے محدود کرنے والی setting RuntimeMaxSec= ہے۔ کسی run کو journalctl -u agent-loop.service -n 50 سے پڑھیں۔

اگر آپ loop کو cron سے چلائیں تو اپنی overlap guard شامل کریں، کیونکہ cron دوسری copy شروع کرنے سے نہیں رکے گا:

*/30 * * * * /usr/bin/flock -n /tmp/agent-loop.lock /srv/agent/bin/loop.sh

lock موجود ہونے پر flock -n فوراً status 1 کے ساتھ exit کرتا ہے۔ اس طرح دوسرا run پہلے run کے ساتھ race کرنے کے بجائے خاموشی سے ختم ہو جاتا ہے۔ یہی systemd service اور timer setup server پر چلنے والے کسی بھی long-running job پر لاگو ہوتا ہے، خواہ وہ agent ہو یا نہ ہو۔

حد بندی: ہر run کے لیے اپنی copy دیں

آپ کی working tree میں editing کرنے والا agent آپ کے uncommitted کام کو ضائع کر سکتا ہے۔ Git worktrees یہ مسئلہ کم لاگت کے ساتھ حل کرتے ہیں: ہر run کو اپنی directory اور اپنی branch ملتی ہے، جبکہ سب ایک ہی object store شیئر کرتے ہیں۔

cd /srv/agent/repo
git worktree add -b loop/triage-01 /srv/agent/work/triage-01 origin/main
git worktree list

git worktree list ہر tree کے لیے اس کا path، commit اور branch ایک سطر میں دکھاتا ہے۔ جب run ختم ہوتا ہے تو git worktree remove /srv/agent/work/triage-01 worktree کو remove کرتا ہے، لیکن صرف clean worktree کو۔ اگر tree میں untracked files یا modified tracked files ہوں، یا اس میں submodules موجود ہوں، تو git اس وقت تک انکار کرتا ہے جب تک آپ --force شامل نہ کریں۔ اسی لیے نیچے دیا گیا gate script صرف اس path پر removal زبردستی کرتا ہے جسے run ختم کر دیتا ہے۔ git worktree prune ان entries کو صاف کرتا ہے جن کی directory غائب ہو چکی ہو۔ اس مرحلے پر parallel loops محفوظ ہو جاتے ہیں، کیونکہ دو directories میں دو branches پر چلنے والے دو agents ایک دوسرے کی files overwrite نہیں کر سکتے۔

یہ boundary credentials کے بارے میں بھی ہے۔ unattended طور پر چلنے والا loop long-lived tokens اپنے پاس رکھتا ہے، اور ہر run میں یہ خطرہ ہوتا ہے کہ کوئی token log، commit یا model context میں leak ہو جائے۔ token کو صرف اس repository تک محدود رکھیں جسے loop استعمال کرتا ہے۔ جہاں ممکن ہو، اسے اس environment سے باہر رکھیں جو agent کا اپنا shell دیکھ سکتا ہے۔ Production access دینے سے پہلے AI agents سے secrets کو باہر رکھنے کا طریقہ پڑھیں۔ مزید مضبوط isolation کے لیے پورا loop ایک ایسی disposable VM پر چلائیں جسے ہر run کے بعد destroy کیا جا سکے۔ آپ کون سا tool چلاتے ہیں، یہ بھی code لکھنے سے پہلے boundary کا ایک حصہ طے کرتا ہے۔ اس لیے یہ فیصلہ کرنے سے پہلے کہ آپ کو کتنی isolation خود بنانی ہے، Cowork کے managed sandbox کا اپنی machine پر Claude Code کے ساتھ تقابل پڑھیں۔

تصدیق: وہ گیٹ جو لوپ کو محفوظ بناتا ہے

یہی وہ حصہ ہے جو لوپ کو صرف کمانڈز چلانے والی cron job سے الگ کرتا ہے۔ agent کا output ایک تجویز ہے۔ فیصلہ gate کرتا ہے۔

#!/usr/bin/env bash
set -euo pipefail

repo=/srv/agent/repo
branch="loop/$(date -u +%Y%m%dT%H%M%SZ)"
tree="/srv/agent/work/$(basename "$branch")"

cd "$repo"
git fetch --quiet origin
git worktree add -b "$branch" "$tree" origin/main
cd "$tree"

# the agent's own command runs here, in non-interactive mode

if ! npm test; then
  echo "gate failed: discarding $branch" >&2
  cd "$repo"
  git worktree remove --force "$tree"
  exit 1
fi

git push origin "$branch"
cd "$repo"
git worktree remove "$tree"

اس script میں set -euo pipefail حقیقی کام کر رہا ہے۔ -e کے بغیر ناکام git fetch نظرانداز ہو جاتا ہے، اور run پرانے origin/main کے خلاف جاری رہتا ہے۔ -u کے بغیر variable name میں typo خالی string میں expand ہو جاتا ہے، اور cleanup واضح failure کے بجائے غلط path کے خلاف چلتا ہے۔ آخری line میں جان بوجھ کر --force موجود نہیں ہے: اگر run نے tree میں untracked یا uncommitted files چھوڑی ہوں تو git انہیں remove کرنے سے انکار کرتا ہے، اور -e push کے بعد run کو error کے ساتھ ختم کرتا ہے، بجائے اس کے کہ کسی کے commit نہ کیے ہوئے کام کو خاموشی سے حذف کر دے۔

if ! npm test block پورا تصور واضح کرتا ہے۔ ایسے check کا exit code، جس پر آپ پہلے ہی اعتماد کرتے ہیں، یعنی اپنی test suite یا type checker کا، یہ فیصلہ کرتا ہے کہ branch push کی جائے یا تباہ کر دی جائے۔ بغیر gate والا loop ایسا کام پیدا کرتا ہے جس کا جائزہ لینے کے لیے کسی کے پاس وقت نہیں ہوتا، اور یہ کوئی کام نہ ہونے سے بھی بدتر ہے۔ gate والا loop ایسی branch پیدا کرتا ہے جو پہلے ہی وہی معیار پورا کر چکی ہوتی ہے جو انسانی contributor کی branch کو پورا کرنا ہوتا ہے۔ کامیاب gate اس بارے میں کچھ نہیں بتاتا کہ agent نے وہاں پہنچنے کے لیے کتنا code تبدیل کیا، اس لیے check کو ایسی مستقل ہدایت کے ساتھ جوڑنا مفید ہے جیسے وہ اصول جو agent کو کام کرنے والی سب سے چھوٹی تبدیلی لینے کا پابند بناتا ہے۔ اس سے diff اتنا مختصر رہتا ہے کہ اس کا جائزہ لینا کم وقت لیتا ہے۔

ایسا gate منتخب کریں جو حقیقی failure ظاہر کرے۔ اگر empty diff پر بھی test suite کامیاب ہو جائے تو loop یہ سیکھتا ہے کہ کچھ نہ کرنا کامیابی ہے۔ کمزور tests والی repositories کمزور loops پیدا کرتی ہیں۔ اسی لیے مقبول repositories میں "codebase کو agent-ready بنائیں" کو "loop لکھیں" سے پہلے رکھا جاتا ہے۔ اگر آپ جاننا چاہتے ہیں کہ آپ کی suite regression کو واقعی پکڑے گی یا صرف متعلقہ lines execute کرے گی، تو mutation testing اس سوال کا جواب دینے والا check ہے۔ ایسا agent جو آپ سے diff پڑھنے کے بجائے دوبارہ چلائے جا سکنے والی evidence report واپس کرے اس جواب کو ایسی چیز میں بدل دیتا ہے جس کی آپ خود تصدیق کر سکتے ہیں۔

بجٹ: run کو روکنے والی چیزیں

جو agent ہمیشہ retry کرتا رہے، اس کا bill بھی غیر محدود ہوتا ہے۔ ہر loop کے لیے wall-clock کی ایک آخری حد مقرر کریں اور اسے اوپر موجود TimeoutStartSec کے ذریعے نافذ کریں؛ اپنی script میں retry count رکھیں؛ اور provider account کے ذریعے spend cap نافذ کریں۔ پھر ہر run کی لاگت بھی log کریں، تاکہ invoice آنے سے پہلے معلوم ہو جائے کہ loop حد سے بڑھ رہا ہے۔ ہمیشہ فعال agent VPS کے لیے cost control accounting کے پہلو کا احاطہ کرتا ہے، جبکہ agent کے turns کے درمیان منتقل ہونے والے context کا انتظام فی run لاگت کے سب سے بڑے واحد عامل کی وضاحت کرتا ہے۔ اس کی وجہ یہ ہے کہ جو loop ہر 30 منٹ بعد اسی repository کو دوبارہ پڑھتا ہے، وہ اس کی لاگت بھی ہر 30 منٹ بعد ادا کرتا ہے۔

لاگت ہی وہ وجہ ہے جس کی بنا پر loops عموماً ایک طویل session سے بہتر ہوتے ہیں۔ جو run نئے سرے سے شروع ہو، ایک محدود کام کرے اور ختم ہو جائے، وہ اپنا context مختصر رکھتا ہے۔ 8 گھنٹے تک کھلا رہنے والا session اپنی history میں پہلے کی ہر غلطی محفوظ رکھتا ہے اور ہر turn پر پوری transcript کی لاگت ادا کرتا ہے۔

loop-engineering repository میں production کے آٹھ patterns درج ہیں (2026-10-27 تک)۔ انہیں manifesto کے بجائے ایک menu کے طور پر پڑھنا زیادہ مفید ہے۔ Daily triage۔ ایک thin loop جو GitHub Action کے طور پر چلتا ہے اور کوئی state file محفوظ نہیں کرتا۔ ایک pull-request babysitter جو review comments کو monitor کرتا ہے اور ان کا جواب دیتا ہے۔ ایک continuous-integration sweeper جو red builds سنبھالتا ہے۔ ایک dependency sweeper۔ ایک changelog drafter۔ Post-merge cleanup۔ Issue triage۔

ان سب میں ایک محدود کام اور واضح gate مشترک ہے۔ "Failing build کو ٹھیک کریں" کی pass condition ایسی ہوتی ہے جسے machine پڑھ سکتی ہے۔ "Codebase بہتر بنائیں" کے لیے ایسی condition نہیں ہوتی، اس لیے یہ کبھی loop نہیں بنتا۔ یہ schedule کے ساتھ ایک mess بن جاتا ہے۔

ان سب میں ایک تحریری record بھی مشترک ہے۔ دونوں repositories state کو conversation سے باہر، repository کی files میں منتقل کرتی ہیں: کیا چلا، اسے کیا ملا، اور اس نے کیا فیصلہ کیا۔ یہ file loop کی memory ہوتی ہے۔ اسی کی وجہ سے دوسرا loop پہلے loop کے کام کو دوبارہ تلاش کرنے کے بجائے اس پر کام آگے بڑھا سکتا ہے۔ یہ بعد میں agent کا audit کرنے کا طریقہ بھی ہے، کیونکہ run ختم ہوتے ہی model کا context ختم ہو جاتا ہے۔ Live coordination ایک الگ channel ہے، اور ایک Claude Code session اسی box پر دوسرے کو کام دے سکتا ہے جبکہ دونوں ابھی چل رہے ہوں، لیکن اس exchange میں موجود کوئی چیز دونوں sessions کے ختم ہونے کے بعد باقی نہیں رہتی۔ اس لیے file وہ حصہ ہے جسے آپ بعد میں دوبارہ پڑھ سکتے ہیں۔

لوپس کہاں ناکام ہوتے ہیں

ناکامیاں معمولی ہوتی ہیں اور مختلف ٹیموں میں بار بار دہرائی جاتی ہیں۔

  • کوئی gate نہیں۔ Output جمع ہوتا رہتا ہے، کوئی اس کا جائزہ نہیں لیتا، اعتماد ختم ہو جاتا ہے، اور loop بند کر دیا جاتا ہے۔
  • تداخل۔ ایک branch پر دو runs چلتے ہیں، یا ایک working tree میں دو agents کام کرتے ہیں، جس سے conflicts پیدا ہوتے ہیں اور agent پھر انہیں resolve کرنے کی کوشش کرتا ہے۔
  • خاموش drift۔ Loop مسلسل کامیاب ہوتا رہتا ہے کیونکہ check اتنا کمزور ہے کہ failure پیدا نہیں کرتا۔
  • غیر محدود scope۔ مصروف repository میں ہر commit پر فعال ہونے والا trigger ایک دن کے اندر اخراجات کا مسئلہ بن جاتا ہے۔

ہر صورت میں ایک ہی حل ہے: job کا دائرہ کم کریں، check کو زیادہ واضح اور سخت بنائیں، اور run کا log رکھیں۔ اگر آپ pass condition کو ایک جملے میں بیان نہیں کر سکتے تو job خودکار بنانے کے لیے تیار نہیں ہے۔

الفاظ کی اصطلاحات جانے بغیر آغاز

آپ کو کسی framework کی ضرورت نہیں۔ ایک چھوٹا، ہمیشہ فعال Linux server، ایک git repository جس کی test suite ناکامی کی صورت میں ناکام ہو، ایک systemd timer، اور ایک shell script جس میں if موجود ہو، مکمل loop بنا دیتے ہیں۔ زیادہ تر لوگوں کے لیے واقعی یہی بہترین آغاز ہے، کیونکہ design سے متعلق سوالات کسی tool کا انتخاب کرنے کے بجائے اسے چلا کر حل ہوتے ہیں۔ ایک loop مستحکم ہو جائے تو دوسرا loop چلانا عموماً ایک اور timer اور ایک اور worktree شامل کرنے جتنا آسان ہوتا ہے۔ بنیادی setup کے لیے VPS پر coding AI agent چلانے کا طریقہ دیکھیں، اور اگر آپ agent کو اپنے زیرِ انتظام hardware پر چلانا چاہتے ہیں تو موجودہ self-hosted AI agent کے اختیارات دیکھیں۔

FAQ

کیا loop engineering، prompt engineering سے مختلف ہے؟

Prompt engineering ایک message کو بہتر بناتی ہے: الفاظ، مثالیں اور output format۔ Loop engineering اس message کے گرد موجود cycle کو بہتر بناتی ہے: run شروع کرنے والا trigger، وہ sandbox جس میں run ہوتا ہے، وہ check جو output کو قبول یا مسترد کرتا ہے، اور وہ budget جو run ختم کرتا ہے۔ Loop کے اندر اچھے prompt کی پھر بھی ضرورت ہوتی ہے۔ روزمرہ tuning میں prompt بنیادی عنصر نہیں رہتا، کیونکہ gate اور trigger نتیجے پر زیادہ اثر ڈالتے ہیں۔

کیا agent loop بنانے کے لیے framework ضروری ہے؟

نہیں۔ systemd timer، ہر run کے لیے ایک git worktree، ایسا shell script جو test command پر ختم ہو، اور provider account پر spend cap، definition کے ہر حصے کو cover کرتے ہیں۔ Frameworks scheduling interfaces، shared memory formats اور multi-agent routing شامل کرتے ہیں۔ یہ کئی loops چلانے پر مفید ہوتے ہیں۔ پہلے loop کے لیے یہ لازمی نہیں ہیں۔

codebase harness کیا ہوتا ہے؟

یہ ان چیزوں کا مجموعہ ہے جو agent کو کسی repository میں انسان کی موجودگی کے بغیر کام کرنے دیتی ہیں: one-command setup، ایسے tests جو non-interactively چلیں اور واضح طور پر fail ہوں، linter، اور change کو deploy یا preview کرنے کا طریقہ۔ یہ اصطلاح loop engineering کے ساتھ repositories کی اسی 2026 کی لہر سے نکلی ہے۔ عملی test سادہ ہے: اگر نیا human contributor ایک command سے clone سے green tests تک نہیں پہنچ سکتا تو agent بھی نہیں پہنچ سکتا۔

agent loop کو بڑا bill بنانے سے کیسے روکوں؟

اسے تین جگہ محدود کریں۔ اوپر والی طرح Type=oneshot systemd unit پر TimeoutStartSec set کریں، تاکہ hang ہونے والا run ختم کر دیا جائے۔ Type=simple service پر اس کا متبادل RuntimeMaxSec ہے۔ Script کے اندر retries محدود کریں، نہ کہ success تک مسلسل loop چلاتے رہیں۔ API account پر hard spend limit مقرر کریں، کیونکہ یہی وہ واحد حد ہے جس سے agent بات کر کے آگے نہیں بڑھ سکتا۔ پھر ہر run کی cost log کریں، کیونکہ جس loop کی cost دوگنی ہو جائے، عموماً اس کا scope خاموشی سے بڑھ چکا ہوتا ہے۔

پہلے کن jobs کو loop میں تبدیل کرنا مفید ہے؟

ایسا job منتخب کریں جس کی pass condition machine-readable ہو اور جس کا blast radius محدود ہو۔ Red build ٹھیک کرنا، dependency update کرنا اور changelog دوبارہ generate کرنا اس معیار پر پورا اترتے ہیں، کیونکہ test suite یا diff نتیجے کا ثبوت دے سکتا ہے۔ Refactoring یا design جیسے open-ended کام ابھی اس معیار پر پورے نہیں اترتے، کیونکہ gate کے پاس check کرنے کے لیے کچھ واضح نہیں ہوتا۔ Gate کے بغیر loop review debt پیدا کرنے کا ایک مہنگا طریقہ ہے۔

کیا یہ مضمون مفید تھا؟