ڈومین ایونٹس
ڈومین ایونٹ کیا ہے
سیکشن کا عنوان “ڈومین ایونٹ کیا ہے”ڈومین ایونٹس وہ ڈیکپلنگ میکانزم ہیں جو فیچرز کو براہ راست انحصار کے بغیر ایک دوسرے سے بات کرنے دیتے ہیں۔ فیچر A کے فیچر B کو کال کرنے کے بجائے، فیچر A ایک ایونٹ شائع کرتا ہے اور فیچر B اُسے سبسکرائب کرتا ہے۔
DomainEventBus ایک ان پروسیس براڈکاسٹ پبلش/سبسکرائب بس ہے۔ پبلشرز
publish(event) کال کرتے ہیں؛ سبسکرائبرز ایک ٹائپ شدہ on<T>() اسٹریم استعمال کرتے
ہیں۔ ہر ایونٹ DomainEvent کو نافذ کرتا ہے اور occurredAt ساتھ رکھتا ہے۔
بس cc_server کے اندر چلتی ہے۔ ہر پبلشر اور ہر زندہ سبسکرائبر وہیں رہتا ہے۔ کوئی
کلائنٹ اس بس کو نہیں دیکھتا۔ کلائنٹ جو دیکھتا ہے وہ ایک چُنا ہوا ذیلی مجموعہ ہے جسے
سرور notifications/* JSON-RPC فریمز کے طور پر دوبارہ نشر کرتا ہے۔
آخر بس کیوں
سیکشن کا عنوان “آخر بس کیوں”ایونٹس کے بغیر ہر بین فیچر ردِعمل ایک امپورٹ بن جاتا ہے۔ اطلاعات کا راستہ صرف یہ جاننے کے لیے کہ ٹوسٹ کب اٹھانا ہے، ایجنٹس فیچر، Pull request فیچر، ٹکٹنگ اور میٹنگز کو امپورٹ کرنا پڑتا — اور پھر اُن میں سے ہر ایک کو یہ بھی جاننا پڑتا کہ اطلاعات کا وجود ہے۔ ٹکٹنگ پائپ لائنز کو امپورٹ کرتی تاکہ کوئی مکمل شدہ ٹکٹ کسی رن کو آگے بڑھا سکے۔ انحصار کا گراف ایک گرہ میں بند ہو جاتا اور مشترکہ کرنل مشترکہ رہنا چھوڑ دیتا۔
ایونٹ شائع کرنا اسے توڑ دیتا ہے۔ اطلاعات کا راستہ اکیس ایونٹ کلاسز کو سبسکرائب کرتا ہے اور اُن فیچرز میں سے کوئی بھی امپورٹ نہیں کرتا جو اُنہیں اٹھاتے ہیں۔ پائپ لائن ٹرگر ڈسپیچر پوری بس کو سبسکرائب کرتا ہے اور pull requests، ٹکٹس یا میٹنگز کے بارے میں کچھ نہیں جانتا۔ آبزرویبیلٹی ڈسپیچ کے اندر جھانکے بغیر رن کے نتائج جمع کرتی ہے۔
قیمت وہی معمول کی ہے: پبلشر نہیں جان سکتا کہ کوئی سن رہا ہے یا نہیں، اور جو سننے
والا کبھی بنایا ہی نہ جائے وہ خاموشی سے بے اثر رہتا ہے۔ TicketRemoteSyncHandler
اس کی مستقل مثال ہے: یہ اعلان شدہ ہے، ٹیسٹوں میں ڈھکا ہوا ہے، اور پروڈکشن میں کبھی
وائر نہیں ہوا۔
بس کیا نہیں ہے
سیکشن کا عنوان “بس کیا نہیں ہے”ایک بات کے بارے میں واضح رہنا ضروری ہے، جس کی بس مالک نہیں۔
آڈٹ ٹریل ایونٹ اسٹریم کا پروجیکشن نہیں ہے۔ ہر تبدیلی کرنے والا RPC آپریشن بطور
ڈیفالٹ آڈٹ ہوتا ہے — RepoOp.audited کی ڈیفالٹ true ہے اور کوئی آپریشن صرف
audited: false کے اعلان سے باہر نکلتا ہے، جو ایک سوچا سمجھا عمل ہے جو آپریشن پر ہی
نظر آتا ہے۔ ڈسپیچر کامیاب کال کے فوراً بعد “کس نے کیا کیا، کہاں سے” والی قطار شامل
کرتا ہے۔ کوئی DomainEventAuditBridge نہیں ہے۔ ActivityLogPersister،
ActivityLogged ایونٹس سے activity_log قطاریں لکھتا ہے؛ وہ RPC آڈٹ سے ایک الگ فیڈ
ہے۔
ایونٹ بس اطلاعات اور آٹومیشن کے لیے ٹرانسپورٹ ہے۔ یہ ریکارڈ کا حساب کتاب رکھنے والا نظام نہیں ہے۔
بس کن چیزوں کو چلاتی ہے
سیکشن کا عنوان “بس کن چیزوں کو چلاتی ہے”- اطلاعات۔ اکیس ایونٹ کلاسز کو سرور
notifications/*وائر فریمز میں بدلتا ہے، ایک پائیدار فی ورک اسپیس فیڈ میں محفوظ کرتا ہے اور منسلک سیشنز کو نشر کرتا ہے۔ جو فریم اپنےworkspace_idمیں ایسا ورک اسپیس بتائے جس کا سیشن صارف رکن نہ ہو، سرور پر ہی گرا دیا جاتا ہے؛ پھر کلائنٹ بقیہ کو اُس ورک اسپیس تک فلٹر کرتا ہے جسے وہ دیکھ رہا ہے۔ - ایونٹ پر مبنی آٹومیشن۔ پائپ لائن ٹرگرز بس کو سبسکرائب کرتے ہیں اور مماثل پائپ لائنز خودکار شروع کرتے ہیں (نیچے دیکھیں)۔
- لائف سائیکل ردِعمل۔ ورک اسپیس بنانے پر اُس کے CEO اور ماہر ایجنٹس، بلٹ اِن پائپ لائن ٹیمپلیٹس اور ابتدائی ایوال سوٹس بیج کی طرح بچھ جاتے ہیں۔ مکمل شدہ ایجنٹ رن معطل شدہ پائپ لائن قدم دوبارہ شروع کرتا ہے، کوئی ٹاسک بند کرتا ہے، گول سپروائزر کو خوراک دیتا ہے، کسی نامزد چیکر کو جگا سکتا ہے اور کسی ٹیم لیڈر کو دوبارہ متحرک کر سکتا ہے۔ مرج شدہ PR یا حذف شدہ اسپیس worktree گاربیج کلیکشن شروع کرتی ہے۔
- کراس وینڈر سنک۔ مقامی ٹکٹ تبدیلیاں ایک کوآرڈینیٹر کے ذریعے کنفیگر شدہ وینڈرز تک بھیجی جاتی ہیں، جو پانچ ٹکٹ ایونٹس سنتا ہے۔
ایونٹ کی اقسام
سیکشن کا عنوان “ایونٹ کی اقسام”ایونٹس پوری پروڈکٹ سطح پر پھیلے ہوئے ہیں۔ موٹے طور پر:
- ورک اسپیسز، ایجنٹس اور ریپوز — ورک اسپیس کی تخلیق، رن کی تکمیل، ریپو کی رجسٹریشن، مہارتوں کی تازہ کاری
- Pull requests — اشاعت، اسٹیٹس کی تبدیلیاں، مرج، ریویو کی درخواستیں، ذکر، خود لکھے PR کی نگرانی، باہر سے شناخت شدہ PRs
- میسجنگ — پیغامات، اسپیسز اور اسپیس پروویژننگ کی پیش رفت
- ٹکٹس — تخلیق، تفویض، دوبارہ تفویض، تفصیلات، اسٹیٹس اور تین حتمی نتائج
- ٹاسکس — ایک ڈسپیچ شدہ رن کے لیے ترتیب وار لائف سائیکل فریمز، تاکہ کلائنٹس اُنہیں ترتیب دے سکیں اور ڈپلیکیٹ نکال سکیں
- پائپ لائنز — صرف حتمی رن ایونٹس (مکمل، منسوخ، ناکام)
- آبزرویبیلٹی — ایکٹیویٹی لاگ اندراجات اور بجٹ کی حدیں
- شناخت اور رکنیت — رکن شامل ہوا، ہٹا، کردار بدلا
- کیلنڈر اور میٹنگز — auth کی میعاد ختم، میٹنگز کا شروع ہونا اور ریکارڈنگ کا مکمل ہونا
- رگز — ٹیک اوور، ریپ اور غیر متوقع بندش
میموری، آرکیسٹریشن، پلان دستاویزات، آرٹی فیکٹس، منظوریاں، ٹکٹ سنک انٹیک، کیلنڈر ریفریش، worktree مرج، صارف کی تخلیق، دعوتیں اور ڈیوائس کی منسوخی ڈومین ایونٹس نہیں ہیں؛ حوالہ دیکھیں۔
مکمل کیٹلاگ کے لیے — تمام 53 ٹھوس ایونٹ کلاسز، اُن کے پیلوڈز اور اُنہیں استعمال کرنے والے 24 سبسکرائبرز — ڈومین ایونٹس حوالہ دیکھیں۔ وہ صفحہ فہرست ہے؛ یہ صفحہ ماڈل۔
لائیو رسائی کنٹرول دو مختلف میکانزم پر چلتا ہے
سیکشن کا عنوان “لائیو رسائی کنٹرول دو مختلف میکانزم پر چلتا ہے”رکنیت اور ڈیوائس ایونٹس دیکھنے میں ہم شکل لگتے ہیں مگر ہیں نہیں، اور یہ اہم ہے اگر آپ سوچ رہے ہوں کہ منسوخی کتنی تیزی سے اثر کرتی ہے۔
کسی ڈیوائس کی منسوخی اُس کے سیشن واقعی ختم کر دیتی ہے۔ سرور پیئر شدہ ڈیوائس ٹیبل پر نظر رکھتا ہے اور جس زندہ سیشن کا ڈیوائس فعال سیٹ سے نکل جائے اُسے سیکنڈوں میں گرا دیتا ہے۔
کسی رکن کو ہٹانا ساکٹ بند نہیں کرتا۔ WorkspaceMemberRemoved استعمال ہوتا ہے:
LocalRpcServer اور RemoteRelayHost اُس صارف کی منسلک ورک اسپیس سبسکرپشنز گرا
دیتے ہیں، اور RemoteEventForwarder اپنا رکنیت کیشے باطل کر دیتا ہے تاکہ اُس ورک
اسپیس کے مزید فریم نہ بھیجے جائیں۔ اگلے RPC کو روکنے والا پھر بھی رول گیٹ ہی ہے، جو
ہر کال پر رکنیت دوبارہ حل کرتا ہے — چنانچہ اُن کی اگلی درخواست
“Not a member of this workspace” کے ساتھ مسترد ہوتی ہے۔ جو بھی وہ کرنے کی کوشش کریں
اُس پر اثر فوری ہے؛ بس یہ اُن سے کنکشن ختم کر کے حاصل نہیں کیا جاتا۔
پائپ لائن ٹرگرز
سیکشن کا عنوان “پائپ لائن ٹرگرز”پائپ لائن ٹرگرز ڈومین ایونٹس کو سبسکرائب کرتے ہیں اور مماثل پائپ لائنز خودکار شروع
کرتے ہیں۔ PipelineTriggerDispatcher پوری بس سنتا ہے، پھر:
- شارٹ سرکٹ کر دیتا ہے جب تک ایونٹ کی قسم ایسی نہ ہو جسے وہ پیلوڈ پر میپ کرنا جانتا ہو
- ہر ورک اسپیس میں اُس ایونٹ قسم سے مماثل فعال ٹرگرز تلاش کرتا ہے
- ہر ایک کو اُس کے اپنے ورک اسپیس تک فلٹر کرتا ہے اور اُس کا پیلوڈ میچ فلٹر لاگو کرتا ہے
- ہر بچ جانے والے ٹرگر کے لیے ایک رن شروع کرتا ہے
اہم پابندی قدم 1 ہے۔ بس 53 اقسام کے ایونٹس رکھتی ہے؛ ٹرگر شامل کرنے والا چناؤ اِن
چودہ کے لیے رن شروع کرتا ہے (EventPayloadMapper کے پیلوڈ برانچز):
ExternalPrDetected, PullRequestPublished, PullRequestStatusChanged,
PrMerged, MessageReceived, TicketAssigned,
TicketCompleted, TicketFailed, TicketCancelled,
BudgetThresholdCrossed, RepoAdded, MeetingRecordingStopped, SkillUpdated
اور SpaceDeleted۔ اِن کے سوا کوئی اور چیز پائپ لائن شروع نہیں کر سکتی۔
کلائنٹ یہ سب کیسے دیکھتا ہے
سیکشن کا عنوان “کلائنٹ یہ سب کیسے دیکھتا ہے”RemoteEventForwarder نوٹیفکیشن کلاس کے ایونٹس کو وائر فریمز میں ترجمہ کرتا ہے اور
RPC کے ذریعے منسلک سیشنز تک پہنچاتا ہے، جہاں ایک فریم میپر اُنہیں ایپ کے اندر اطلاعات
میں بدل دیتا ہے۔ چنانچہ ایک پتلا کلائنٹ سرور کے ایونٹ اسٹریم کا پروجیکشن دیکھتا ہے،
بغیر کوئی عمل اپنے پاس رکھے — اور
پتلے کلائنٹ کی تقسیم کا پورا مقصد یہی ہے۔
تاہم ہر بھیجا گیا فریم اطلاع نہیں ہوتا۔ ٹاسک لائف سائیکل اسٹریم اور ٹکٹ کی دوبارہ تفویض UI چلانے کے لیے براہِ راست فارورڈ کیے جاتے ہیں، مگر وہ اطلاعات کی فیڈ میں محفوظ نہیں ہوتے اور کوئی ٹوسٹ نہیں اٹھاتے۔
مزید دیکھیں
سیکشن کا عنوان “مزید دیکھیں”- پائپ لائنز اور آٹومیشن: ٹرگر کیا شروع کرتا ہے
- ٹکٹس اور تفویض: ایجنٹ کو تفویض بمقابلہ ٹیم کو
- آرکیٹیکچر: ایونٹس انحصار کے اصول میں کیسے فٹ ہوتے ہیں
- ڈومین ایونٹس حوالہ: مکمل کیٹلاگ اور اُس کے سبسکرائبرز
- پائپ لائن ٹرگرز سیٹ کریں
- اطلاعات کنفیگر کریں