প্রকল্প সম্পর্কে

RecurSpec হলো একটি প্রাথমিক পর্যায়ের, MIT-লাইসেন্সপ্রাপ্ত Node.js প্যাকেজ যা কমান্ড-লাইন টুলগুলোর রিকভারি পাথ পরীক্ষা করে। যেখানে একটি প্রচলিত টেস্ট শুধুমাত্র একটি এরর মেসেজ প্রিন্ট হয়েছে কি না তা যাচাই করে, সেখানে RecurSpec নিশ্চিত করে যে মেসেজে দেওয়া পরামর্শ অনুযায়ী কমান্ডটি আসলে সমস্যাটি সমাধান করে কি না, যাতে ব্যবহারকারীরা সত্যিই সমস্যার সমাধান পায়। এটি যেভাবে কাজ করে একটি টেস্ট কেস recurspec.yml ফাইলে ডিক্লারেটিভভাবে বর্ণনা করা হয়। প্রতিটি কেসে রান করার কমান্ড, প্রত্যাশিত ব্যর্থতা (যেমন একটি নন-জিরো এক্সিট কোড এবং একটি stderr সাবস্ট্রিং), রিকভারি নির্দেশাবলী কোথা থেকে আসবে এবং একটি ভেরিফিকেশন স্টেপ ঘোষণা করা হয়। ভেরিফিকেশন প্রক্রিয়ায় মূল কমান্ডটি পুনরায় চালানো হতে পারে এবং একটি জিরো এক্সিট কোড প্রয়োজন হতে পারে, যাতে টুলটি নিশ্চিত করতে পারে যে রিকভারি লুপটি সম্পন্ন হয়েছে, শুধুমাত্র পরামর্শটি উপস্থিত আছে তা নয়। শুরু করা এই প্রজেক্টের জন্য Node.js ২২ বা তার পরবর্তী সংস্করণ এবং pnpm প্রয়োজন। এটি একটি ডেভেলপমেন্ট ডিপেন্ডেন্সি হিসেবে ইনস্টল করা হয় এবং তিনটি কোর কমান্ডের মাধ্যমে ব্যবহৃত হয়: একটি init স্টেপ যা একটি রানযোগ্য Node.js উদাহরণসহ স্টার্টার কনফিগারেশন লেখে, একটি validate স্টেপ এবং একটি test স্টেপ। সাথে দেওয়া ডেমোতে ইচ্ছাকৃতভাবে সফল এবং ত্রুটিপূর্ণ রিকভারি পাথ মিশ্রিত করা হয়েছে। কমান্ড-লাইন সারফেস CLI-তে test, validate, init, explain এবং discover কমান্ড রয়েছে। test কমান্ডটি কেস বা ট্যাগ নির্বাচন, রিপোর্ট ফরম্যাট (human, json, junit অথবা markdown) পছন্দ করা, ভারবোস আউটপুট, ফেইল-ফাস্ট বিহেভিয়ার, একটি সিড এবং ড্রাই রান-এর অপশন সাপোর্ট করে। এক্সিট কোডগুলো সংজ্ঞায়িত করা হয়েছে এভাবে: সব পাস হলে ০, কন্ট্রাক্ট ফেইল করলে ১, এবং কনফিগারেশন বা ব্যবহারের ত্রুটির জন্য ২। JSON, JUnit এবং Markdown রিপোর্টারগুলো CI পাইপলাইন এবং পুল-রিকোয়েস্ট কমেন্টের জন্য তৈরি। runRecurSpec-এর মাধ্যমে একটি প্রোগ্রাম্যাটিক API-ও উপলব্ধ। এটি যা শনাক্ত করে এই টুলটি এরর মেসেজ এবং এর নির্দেশাবলীর মধ্যে অমিল শনাক্ত করে: এমন পরামর্শ দেওয়া কমান্ড যা আর বিদ্যমান নেই, অসম্পূর্ণ রিকভারি স্টেপ, এমন কমান্ড যা সফল হলেও মূল সমস্যা সমাধান করে না, এমন পরামর্শ যা আরও এরর তৈরি করে, ইনস্ট্রাকশন লুপ, এবং অস্পষ্ট বা অনিরাপদ নির্দেশাবলী। রিট্রাই এবং গোল রিকভারি দুটি রিকভারি ফরম্যাট সমর্থিত। রিট্রাই-স্টাইল রিকভারিতে, বাধা দূর করলে মূল কমান্ডটি দ্বিতীয় প্রচেষ্টায় সফল হয়। গোল রিকভারিতে, পরামর্শ দেওয়া কমান্ডটি ব্যর্থ অপারেশনটিকে সম্পূর্ণভাবে প্রতিস্থাপন করে, ফলে ব্যবহারকারীর লক্ষ্য পূরণ হয় যদিও মূল কমান্ডটি পুনরায় চালালে তা ব্যর্থ হতো। README-তে উল্লেখ করা হয়েছে যে Cargo কেসগুলোর কাজ থেকে এই পার্থক্যটি সামনে এসেছে এবং এটি গোল-বেসড ভেরিফিকেশনের দিকে পরিচালিত করেছে। বাস্তব জগতের সামঞ্জস্যতা সামঞ্জস্যতা সুইটে Git, Cargo এবং npm থেকে নেওয়া কেস অন্তর্ভুক্ত রয়েছে, যা মিসিং Git আইডেন্টিটি, ব্রাঞ্চ ডিলিট করা, ডাইভারজেন্ট পুল অ্যাডভাইস, বিদ্যমান Cargo প্রজেক্ট ডিরেক্টরি এবং মিসিং npm স্ক্রিপ্টের মতো পরিস্থিতি কভার করে। ফলাফলের মধ্যে অস্পষ্ট পরামর্শ (একাধিক এক্সক্লুসিভ বা প্রয়োজনীয় কমান্ড), গোল রিকভারি এবং শুধুমাত্র তথ্যমূলক মেসেজ রয়েছে যা সঠিকভাবে উপেক্ষা করা হয়। স্যুটটি চলার সময় মিসিং টুলগুলো স্কিপ করা হয়। নিরাপত্তা মডেল রিকভারি কমান্ডগুলো এক্সিকিউশনের আগে পার্স এবং চেক করা হয়। শেল চেইনিং, রিডাইরেকশন, কমান্ড সাবস্টিটিউশন এবং পরিচিত ধ্বংসাত্মক কমান্ডগুলো ডিফল্টভাবে ব্লক করা থাকে এবং প্রতিটি কেস একটি আইসোলেটেড অস্থায়ী ওয়ার্কস্পেসে চলে। README-তে স্পষ্টভাবে বলা হয়েছে যে লোকাল ব্যাকএন্ড OS-লেভেল নেটওয়ার্ক স্যান্ডবক্সিং এনফোর্স করে না, তাই কন্টেইনার ব্যাকএন্ড আসা পর্যন্ত deny-network সেটিংটি শুধুমাত্র পরামর্শমূলক হিসেবে থাকে। সীমাবদ্ধতা এবং বর্তমান অবস্থা ডকুমেন্টেশনে তিনটি সীমাবদ্ধতার কথা উল্লেখ করা হয়েছে: লোকাল ব্যাকএন্ডে কোনো OS-লেভেল নেটওয়ার্ক আইসোলেশন নেই, ইন্টারঅ্যাক্টিভ TTY প্রোগ্রাম টেস্ট করার সময় স্ক্রিপ্টেড স্ট্যান্ডার্ড ইনপুটের প্রয়োজন (পূর্ণ PTY সাপোর্ট ভবিষ্যতের কাজ), এবং টুলগুলোর গ্র্যাপেবল (greppable) অ্যাডভাইস প্রিন্ট করার ওপর নির্ভরতা, যেখানে অস্পষ্ট বা মিসিং অ্যাডভাইস অনুমান করার পরিবর্তে রিপোর্ট করা হয়। RecurSpec-কে প্রাথমিক পর্যায়ের হিসেবে বর্ণনা করা হয়েছে এবং ১.০ রিলিজের আগে কনফিগারেশন এবং পাবলিক API পরিবর্তিত হতে পারে। আলাদা ডকুমেন্টেশনে কনফিগারেশন, এক্সট্রাকশন, সেফটি, রিপোর্টার এবং ডিসকভারি কভার করা হয়েছে।