فولڈر کا نام پروجیکٹ کی شناخت نہیں ہے
فولڈر کا راستہ (path) ایک روٹ ہے۔ یہ کسی ٹول کو بتاتا ہے کہ اس وقت پروجیکٹ کہاں موجود ہے۔ پروجیکٹ کی شناخت (identity) اس سے مختلف ہوتی ہے۔
شناخت کو ان عام تبدیلیوں کے باوجود برقرار رہنا چاہیے:
- ڈائریکٹری کا نام تبدیل کرنا
- پروجیکٹ کو ایک مشین سے دوسری مشین پر منتقل کرنا
- ریپوزٹری (repo) کو ایک نئے راستے (path) میں کلون کرنا
- ایک ہی پروجیکٹ کے متعدد چیک آؤٹس (checkouts) استعمال کرنا
اگر شناخت کا انحصار راستے پر ہو، تو یہ اقدامات پرخطر ہو جاتے ہیں۔ راستہ کام تو کر سکتا ہے، لیکن یہ اس بات کا ثبوت دینے میں ناکام رہتا ہے کہ پروجیکٹ وہی ہے۔ یہ اسے اسٹیٹ (state) کو محفوظ کرنے کے لیے ایک ناقص کلید (key) بنا دیتا ہے۔
میں اس مسئلے کو حل کرنے کے لیے APC اور APX کے ساتھ ایک تقسیم شدہ ڈیزائن (split design) استعمال کرتا ہوں۔
APC پروجیکٹ کنٹریکٹ (contract) کو سنبھالتا ہے۔ یہ ریپوزٹری میں رہتا ہے۔ APX رن ٹائم اسٹیٹ (runtime state) کو سنبھالتا ہے۔ یہ ریپوزٹری سے باہر رہتا ہے۔
APC ایک مستحکم اینکر (stable anchor) بنانے کے لیے مخصوص فائلیں استعمال کرتا ہے:
- AGENTS.md روٹ کنٹریکٹ کے لیے
- .apc/project.json پروجیکٹ میٹا ڈیٹا کے لیے
- .apc/agents/*.md ایجنٹ کی تعریفوں کے لیے
- .apc/mcps.json MCP ہنٹس (hints) کے لیے
.apc/project.json فائل بہت چھوٹی ہے۔ اس میں ایک نام اور ایک مستحکم آئی ڈی (ID) ہوتی ہے۔ یہ ایک مارکر ہے، کوئی بڑی کنفیگ (config) فائل نہیں ہے۔
APX اس فائل کو ایک لائیو چیک آؤٹ کو پائیدار ریکارڈ سے جوڑنے کے لیے استعمال کرتا ہے۔ راستے (paths) APX کو پروجیکٹ تلاش کرنے میں مدد دیتے ہیں۔ میٹا ڈیٹا، پروجیکٹ مل جانے کے بعد اسے مستحکم رکھنے میں APX کی مدد کرتا ہے۔
یہ ڈیزائن ریپوزٹری کو صاف رکھتا ہے۔ رن ٹائم ڈیٹا جیسے کہ سیشن لاگز (session logs) اور میسج ہسٹری (message history) APX اسٹوریج میں رہتے ہیں۔ یہ آپ کی git ہسٹری کو خراب نہیں کرتے۔
جب آپ راستوں (paths) پر انحصار کرتے ہیں، تو آپ کو ان ناکامیوں کا سامنا کرنا پڑتا ہے:
- راستے تبدیل ہو جاتے ہیں
- اسٹیٹ ٹوٹ جاتی ہے
- ٹول غلط اندازے لگاتا ہے
- آپ چیزیں بنانے کے بجائے ناموں کی ڈی بگنگ (debugging) میں وقت ضائع کرتے ہیں
ایک مستحکم شناخت اس شور (noise) کو ختم کر دیتی ہے۔ یہ کوڈ ریویوز (code reviews) کو آسان بناتی ہے۔ آپ اپنے ڈفس (diffs) میں حادثاتی رن ٹائم آؤٹ پٹ کے بجائے پروجیکٹ کے حقائق دیکھتے ہیں۔
حد (boundary) سادہ ہے:
- AGENTS.md: پروجیکٹ کیا توقع رکھتا ہے
- .apc/project.json: پروجیکٹ کیا ہے
- ~/.apx/: اس پر کام کرتے ہوئے کیا ہوا
ایک پروجیکٹ کو ایک مستحکم اینکر کی ضرورت ہوتی ہے۔ فولڈر کا راستہ بہت غیر مستحکم (volatile) ہے۔ رن ٹائم بہت زیادہ شور (noisy) پیدا کرتا ہے۔ ایک ریپو کنٹریکٹ اور ایک میٹا ڈیٹا فائل کا مجموعہ بالکل درست سائز ہے۔
Source: https://dev.to/tecnomanu/a-folder-name-is-not-a-project-identity-4eca
Optional learning community: https://t.me/GyaanSetuAi
