بڑے پیمانے پر خام گفتگو کے لاگز (raw conversation logs) ناقابلِ فہم ہو جاتے ہیں۔ کچھ مہینوں کے بھرپور استعمال کے بعد، آپ لاکھوں لائنوں کے تبادلہ خیال کے سامنے کھڑے ہوتے ہیں۔ انہیں تلاش کرنا سست ہے؛ انہیں پڑھنا ناممکن ہے۔ اس کے برعکس، ایک Obsidian vault آپ کو ایک منظم طویل مدتی یادداشت فراہم کرتا ہے: دو طرفہ لنکس، ٹیگز، اور ایک گراف ویو جو تعلقات کو ظاہر کرتا ہے۔ ان دونوں کے درمیان فرق واضح ہے۔ اس فرق کو ختم کرنے کے لیے آٹومیشن کی ضرورت ہے۔

میں نے ایک چھوٹی سی پائپ لائن بنائی ہے جو ہر رات اس فرق کو ختم کرتی ہے۔ یہ بغیر کسی انسانی مداخلت کے تین مراحل کو ترتیب وار چلاتی ہے۔ پہلا مرحلہ، یہ تازہ ترین گفتگو کے ایکسپورٹس حاصل کرتا ہے اور انہیں ان کی موجودہ حالت تک ریفریش کرتا ہے۔ دوسرا، یہ Claude کے ذریعے گزشتہ 28 گھنٹوں کے خام مکالمے کا خلاصہ کرتا ہے، اور براہ راست Obsidian vault میں منظم خلاصے شامل کرتا ہے۔ یہ 28 گھنٹے کا وقفہ جان بوجھ کر رکھا گیا ہے؛ یہ پچھلے پورے دن کے ساتھ ساتھ تاخیر کے لیے ایک چھوٹا سا بفر بھی فراہم کرتا ہے۔ تیسرا، یہ تمام تبدیلیوں کو ایک پرائیویٹ ریپوزٹری میں کمٹ (commit) اور پش (push) کر کے بیک اپ لیتا ہے، جو آف لائن اسٹوریج اور غلطی سے ڈیلیٹ ہونے کے خلاف تحفظ، دونوں کے طور پر کام کرتا ہے۔ پوری زنجیر کا سادہ اور قابلِ اعتماد ہونا ضروری ہے۔ سادہ آٹومیشن ہی اصل مقصد ہے۔

جب macOS خاموشی سے آپ کے اسکرپٹ کو روک دیتا ہے

رات کے وقت ہونے والے کام کا سب سے بڑا دشمن کوئی بڑا کریش نہیں ہے۔ بلکہ خاموشی ہے۔

macOS پر، Documents فولڈر TCC کی حفاظت میں ہوتا ہے، جو کہ ایک پرائیویسی سب سسٹم ہے اور حساس مقامات تک رسائی کو کنٹرول کرتا ہے۔ اگر آپ اپنے اسکرپٹ کو launchd کے ذریعے شیڈول کرتے ہیں، تو سسٹم کسی ایسی غلطی (error) کے بغیر عمل کو بلاک کر سکتا ہے جس پر آپ کی نظر پڑے۔ آپ کی لاگ فائل خالی رہ جاتی ہے۔ آپ کا vault کبھی اپ ڈیٹ نہیں ہوتا۔ کام ناکام ہو جاتا ہے، لیکن آپ کو اس کا پتہ کئی دنوں بعد چلتا ہے جب آپ کو احساس ہوتا ہے کہ آپ کے نوٹس پرانے ہو چکے ہیں۔

میں اسے ایک سخت پری فلائٹ روٹین (preflight routine) کے ذریعے سنبھالتا ہوں۔ اصل کام شروع ہونے سے پہلے، اسکرپٹ ٹارگٹ ڈائریکٹری کے اندر ایک معمولی رائٹ آپریشن کرنے کی کوشش کرتا ہے۔ اگر macOS اسے مسترد کر دیتا ہے، تو ناکامی کا فوری پتہ چل جاتا ہے اور ایک واضح ڈیسک ٹاپ نوٹیفکیشن بھیج دیا جاتا ہے۔ یہاں خاموشی سے باہر نکلنے کی کوئی گنجائش نہیں ہے۔ اس کے بعد، شیل انٹرپریٹر (shell interpreter) کو خود System Settings کے اندر Full Disk Access دینے کی ضرورت ہوتی ہے۔ یہ اجازت بہت سخت ہوتی ہے، اس لیے میں تمام آٹومیشن اسکرپٹس کو محفوظ شدہ Documents فولڈر ٹری سے مکمل طور پر باہر رکھ کر خطرے کو کم سے کم کرتا ہوں۔ وہ کسی دوسری جگہ ایک مخصوص ڈائریکٹری میں رہتے ہیں، اور vault کا راستہ (path) واضح طور پر دیا جاتا ہے۔ جلد شناخت، شور مچانے والے الرٹس، اور فولڈر کی احتیاط سے ترتیب، یہ مجموعہ خاموشی سے کام رک جانے کے منظرنامے کو حل کر دیتا ہے۔

نیند، ٹائم آؤٹ، اور منجمد کاموں کے لیے ڈیزائننگ

لیپ ٹاپ سو جاتے ہیں۔ نیٹ ورکس میں خلل آتا ہے۔ API کالز رک جاتی ہیں۔ ایک بھی منجمد کام پورے سسٹم کو غیر ضروری طور پر نہیں روکنا چاہیے۔

میں پائپ لائن کو مستحکم رکھنے کے لیے چار عملی میکانزم استعمال کرتا ہوں۔

متعدد ٹائم سلاٹس۔ صبح سویرے کے ایک ہی رن پر سب کچھ داؤ پر لگانے کے بجائے، شیڈولر دن بھر مختلف اوقات میں دوبارہ کوشش کرتا ہے۔ اگر صبح سویرے مشین بند تھی، تو دوپہر کا وقت اسے پکڑ لیتا ہے۔

ڈن مارکرز (Done markers)۔ جب کوئی رن کامیاب ہوتا ہے، تو وہ ایک واضح نشان (breadcrumb) چھوڑ دیتا ہے۔ اگلی شیڈول شدہ کوشش پہلے اس مارکر کو چیک کرتی ہے۔ اگر کام پہلے ہی مکمل ہو چکا ہو، تو یہ چند سیکنڈوں میں صاف طریقے سے ختم ہو جاتا ہے۔ یہ غیر ضروری API کالز اور اضافی پروسیسنگ کو روکتا ہے۔

mkdir کے ذریعے فائل لاک۔ ایک ہی وقت میں کئی کاموں کے چلنے سے بچنے کے لیے، میں ڈائریکٹری پر مبنی لاک استعمال کرتا ہوں۔ لوکل فائل سسٹمز پر ڈائریکٹری بنانا ایٹامک (atomic) ہوتا ہے، اس لیے دو بیک وقت چلنے والے کام ایک ہی لاک پاتھ پر دعویٰ نہیں کر سکتے۔ اگر ڈائریکٹری پہلے سے موجود ہو، تو دوسرا عمل فوری طور پر رک جاتا ہے۔ جب پہلا عمل ختم ہو جاتا ہے، تو یہ ڈائریکٹری کو ہٹا دیتا ہے۔ یہ PID فائلوں سے ہلکا ہے اور زیادہ