মূল কনটেন্টে যান
এআই টিউটোরিয়াল

RepoPilot দিয়ে যাচাইকরণ-নির্ভর GitHub Issue ও PR মেরামত কীভাবে চালাবেন

RepoPilot ইনস্টল করা, বিশ্বস্ত টেস্ট ও রিপোজিটরি নীতি কনফিগার করা, পুল রিকোয়েস্ট পর্যালোচনা করা, Issue পুনরুৎপাদন করা, Codex-তৈরি মেরামত যাচাই করা, কাজ পরিচালনা করা এবং রক্ষণাবেক্ষণকারীদের নিয়ন্ত্রণ বজায় রেখে যোগ্য সমাধানগুলো ঐচ্ছিকভাবে ড্রাফট পুল রিকোয়েস্ট হিসেবে প্রকাশ করা শিখুন।

RepoPilot দিয়ে যাচাইকরণ-নির্ভর GitHub Issue ও PR মেরামত

RepoPilot যা করে

RepoPilot হলো যাচাইকরণ-নির্ভর সফটওয়্যার পুনরাবৃত্তির জন্য একটি স্ব-হোস্টেড কন্ট্রোলার। এটি নির্বাচিত GitHub Issues এবং একই রিপোজিটরির pull request-গুলোকে একটি সীমাবদ্ধ ওয়ার্কফ্লোতে রূপান্তর করে, যার মধ্যে রয়েছে নিয়ম পর্যালোচনা, টেস্ট তৈরি, ব্যর্থতা পুনরুৎপাদন, কোড মেরামত, স্বাধীন যাচাইকরণ এবং ঐচ্ছিকভাবে একটি মেরামত শাখা ও draft pull request প্রকাশ।

প্রকল্পটি রিপোজিটরির নিয়ম বোঝা, প্রয়োজনীয়তা-নির্ভর টেস্ট নকশা এবং production code পরিবর্তনের প্রস্তাব দেওয়ার জন্য OpenAI Codex SDK ব্যবহার করে। একটি পৃথক Docker runner নির্দিষ্ট করা রিপোজিটরি snapshot-এর বিরুদ্ধে টেস্ট চালায়। কনফিগার করা প্রমাণ এবং নীতিমালা যাচাই সফল হলেই কন্ট্রোলার কোনো ফলাফল প্রকাশ করে।

RepoPilot স্বয়ংক্রিয়ভাবে পরিবর্তন merge বা deploy করে না। Maintainer-রা কাজ নির্বাচন করেন, প্রমাণ পর্যালোচনা করেন এবং চূড়ান্ত merge সিদ্ধান্ত নিজেদের কাছে রাখেন।

ওয়ার্কফ্লো কীভাবে সীমাবদ্ধ থাকে

  1. RepoPilot প্রাসঙ্গিক base এবং head commit নির্দিষ্ট করে।
  2. এটি base branch থেকে বিশ্বস্ত নীতিমালা লোড করে, যার মধ্যে প্রযোজ্য AGENTS.md নির্দেশনাও রয়েছে।
  3. Codex পরিবর্তন পর্যালোচনা করে এবং টেস্ট বা মেরামতের সম্ভাব্য প্রার্থী প্রস্তাব করে।
  4. Production code মেরামতের আগে তৈরি করা টেস্টগুলো স্থির করা হয়।
  5. একটি পৃথক runner স্বাধীন snapshot-এর বিরুদ্ধে টেস্ট চালায়।
  6. কন্ট্রোলার স্থিতিশীল test identity, failure fingerprint, সুরক্ষিত path, নীতিমালার ফলাফল এবং কনফিগার করা সীমা যাচাই করে।
  7. যোগ্য ফলাফল একটি পৃথক branch-এ রাখা এবং মানব পর্যালোচনার জন্য draft pull request হিসেবে জমা দেওয়া যেতে পারে।

Pull request-এর ক্ষেত্রে RepoPilot base এবং head-এর আচরণ তুলনা করে। Issue-এর ক্ষেত্রে এটি প্রথমে মূল baseline সফল হওয়া আবশ্যক করে, তারপর মেরামতের প্রস্তাব দেওয়ার আগে একটি নতুন স্থির করা টেস্ট দিয়ে রিপোর্ট করা ত্রুটি পুনরুৎপাদনের চেষ্টা করে।

প্রধান বৈশিষ্ট্য ও বর্তমান পরিধি

  • নির্দিষ্ট ইনপুট: Base এবং head SHA, title ও body digest, freshness check এবং cancellation stale input-এর বিরুদ্ধে যাচাইকরণ প্রতিরোধে সহায়তা করে।
  • বিশ্বস্ত রিপোজিটরি নিয়ম: Static policy literal check এবং JavaScript বা TypeScript call rule সমর্থন করে। Nested base-branch AGENTS.md ফাইল semantic review পরিচালনা করতে পারে।
  • স্বাধীন টেস্ট সম্পাদন: Model-এর মূল্যায়নের ওপর নির্ভর না করে কন্ট্রোলার একটি পৃথক Docker runner-কে execution-এর দায়িত্ব দেয়।
  • একাধিক টেস্ট ecosystem: Version 1.3.0 Node-এর test runner, Vitest, pytest, Go test এবং সামঞ্জস্যপূর্ণ JUnit XML evidence সমর্থন করে।
  • Monorepo সমর্থন: Configuration-এ working directory, একাধিক নামযুক্ত test command এবং সাময়িক dependency service ব্যবহার করা যায়।
  • সীমাবদ্ধ মেরামত: Attempt, retry, model call, token, task execution এবং মোট task time সীমিত করা যায়।
  • অনুসরণযোগ্য রিপোর্ট: Atomic JSON report এবং সংক্ষিপ্ত Markdown summary-তে finding, test outcome, patch, attempt এবং publication state সংরক্ষিত থাকে।
  • অপারেশনাল পুনরুদ্ধার: Task command inspection, cancellation, resumption এবং rerun সমর্থন করে। recover flow preview এবং যাচাইকৃত cleanup-এর মাধ্যমে মালিকানাধীন crash leftover সামলায়।

বর্তমান implementation সর্বাধিক 10,000 ফাইল বা 16 MiB-সমৃদ্ধ public, text-based repository লক্ষ্য করে। এটি fork pull-request execution, browser end-to-end testing, hosted dashboard, webhook, distributed queue, automatic dependency installation, automatic merging বা deployment প্রদান করে না।

পূর্বশর্ত

Node.js ইনস্টল করতে না চাইলে Linux, Windows বা macOS-এর জন্য RepoPilot 1.3.0 portable release ডাউনলোড করতে পারেন। Source installation-এর জন্য নিম্নলিখিতগুলো প্রস্তুত করুন:

  • Node.js 22, যা প্রস্তাবিত version
  • npm এবং Git
  • Linux container চালানোর জন্য কনফিগার করা Docker
  • Codex-নির্ভর review, test planning বা repair চালু থাকলে একটি OpenAI API key
  • GitHub access বা publication প্রয়োজন হলে একটি GitHub token

1.3.0 controller এবং Agent image-এর version মিলিয়ে ব্যবহার করুন। Docker image এবং project dependency আগে থেকেই provision করতে হবে, কারণ test container-এ ডিফল্টভাবে network access থাকে না।

Source থেকে RepoPilot ইনস্টল করুন

1. Project ইনস্টল, যাচাই ও build করুন

Clone করা RepoPilot repository থেকে locked dependency ইনস্টল করুন, project check ও test চালান এবং controller build করুন:

npm ci
npm run check
npm test
npm run build

RepoPilot-এর নিজস্ব development test-এ mocked API, agent, runner এবং synthetic fixture ব্যবহার করা হয়। এগুলো model credit ব্যবহার করে না, Docker চালু করে না এবং GitHub content লেখে না।

2. একটি local configuration তৈরি করুন

সরবরাহ করা example configuration কপি করুন:

cp repopilot.example.json config.local.json

PowerShell ব্যবহারকারীরা cp-এর পরিবর্তে Copy-Item ব্যবহার করতে পারেন। লক্ষ্য repository এবং একটি বিশ্বস্ত test command নির্দিষ্ট করতে config.local.json সম্পাদনা করুন। পর্যালোচনাধীন repository snapshot-এর বাইরে এই local configuration রাখুন।

Example configuration-এ agent review, repair এবং publishing নিষ্ক্রিয় থাকে। Local verification কাজ করছে নিশ্চিত হওয়ার পরেই এই capability-গুলো আলাদাভাবে চালু করুন।

3. Codex Agent image build করুন

Codex-নির্ভর semantic review, test planning বা repair চাইলে Agent container build করুন:

docker build -f Dockerfile.agent -t repopilot-agent:local .

Controller environment-এ OPENAI_API_KEY সেট করুন। এটি শুধুমাত্র Agent container পাবে। Desktop ChatGPT credential পুনর্ব্যবহার করা হয় না। GITHUB_TOKEN বা GH_TOKEN-এর মাধ্যমে দেওয়া GitHub credential controller-এর মধ্যেই থাকে।

আপনার প্রথম Local Pull Request Check চালান

একটি বেস ব্রাঞ্চ এবং একটি ফিচার ব্রাঞ্চের মধ্যে স্থানীয় তুলনা দিয়ে শুরু করুন:

npm run dev -- check --config config.local.json --repo /path/to/project --base main --head feature

/path/to/project, main এবং feature-এর জায়গায় আপনার স্থানীয় রিপোজিটরি এবং রেফ ব্যবহার করুন। স্থানীয় check কোনো পরিবর্তন প্রকাশ করে না এবং সোর্স চেকআউট সম্পাদনা করে না।

RepoPilot কীভাবে জেনারেট করা টেস্ট শ্রেণিবদ্ধ করে

জেনারেট করা পরিস্থিতিগুলো regression অথবা new_behavior হিসেবে শ্রেণিবদ্ধ হয়। ডিফল্ট হলো regression।

  • Regression-এর প্রমাণ: একইভাবে চালানো টেস্ট কেসটি বেস রিভিশনে পাস করে এবং হেড রিভিশনে ব্যর্থ হয়।
  • নতুন আচরণের প্রমাণ: কেসটি বেসে ব্যর্থ এবং হেডে পাস হয়, এবং প্রস্তাবিত টেস্টে pull request-এর শিরোনাম বা বডি থেকে নেওয়া সঠিক requirement quote থাকে।
  • রিভিউ প্রয়োজন: উভয় রিভিশনই ব্যর্থ হলে, কোনো কেস স্কিপ বা অনুপস্থিত হলে, এক্সিকিউশন ব্যর্থ হলে, টেস্ট আবিষ্কারের ফল পরিবর্তিত হলে, অথবা মূল টেস্টের ফল অপ্রত্যাশিতভাবে বদলালে।

মডেল-প্রদত্ত লেবেল runner-এর প্রমাণকে অগ্রাহ্য করতে পারে না। স্বয়ংক্রিয় মেরামতের যোগ্য হওয়ার আগে regression-গুলোকে একই ব্যর্থ টেস্ট পরিচয় এবং fingerprint সহ পুনরায় ঘটতে হবে।

নিরবচ্ছিন্নভাবে Pull Request রিভিউ করুন

RepoPilot-এর watcher non-draft, একই রিপোজিটরির pull request-গুলো poll করে এবং নিজের autofix branch বাদ দেয়। কনফিগারেশন যাচাই করার সময় একটি polling cycle চালান:

npm run dev -- watch --config config.local.json --once

ফলাফল নিশ্চিত করার পর watcher-টি নিরবচ্ছিন্নভাবে চালান:

npm run dev -- watch --config config.local.json

প্রকাশনা opt-in এবং এর জন্য publish=true প্রয়োজন। GitHub token-এ repository Contents এবং Pull requests-এর write permission থাকতে হবে। প্রকাশনা পৃথক autofix branch এবং draft pull request তৈরি করে; এটি কখনো force-push বা স্বয়ংক্রিয় merge করে না।

প্রকাশনার আগে RepoPilot commit SHA এবং pull request-এর description পুনরায় যাচাই করে। কোনো বিদ্যমান repair branch বা pull request কেবল তখনই পুনর্ব্যবহার করা যায়, যখন তার parent এবং tree যাচাইকৃত ফলাফলের সঙ্গে মেলে।

GitHub Issue পুনরুৎপাদন ও মেরামত করুন

Issue repair maintainer স্পষ্টভাবে নির্বাচন করেন। Issue 123 প্রক্রিয়া করতে চালান:

npm run dev -- fix --issue 123 --config config.local.json

Issue workflow তিনটি প্রধান ধাপে এগোয়:

  1. Baseline স্থাপন: নির্ধারিত target revision-এ বিদ্যমান টেস্টগুলো অবশ্যই পাস করতে হবে।
  2. Bug পুনরুৎপাদন: RepoPilot Issue description-এর সঙ্গে সংযুক্ত একটি টেস্ট তৈরি ও স্থির করে। নতুন টেস্টটিকে অবশ্যই রিপোর্ট করা ব্যর্থতা পুনরুৎপাদন করতে হবে।
  3. মেরামতের চেষ্টা ও যাচাই: Codex কোড প্রতিস্থাপনের প্রস্তাব দেয়, এবং স্বাধীন runner স্থির করা generated test, মূল test suite ও repository policy যাচাই করে।

অপর্যাপ্ত, অস্থিতিশীল বা অসম্পূর্ণ প্রমাণ workflow-টি মানব রিভিউয়ের জন্য থামিয়ে দেয়। RepoPilot স্বয়ংক্রিয়ভাবে Issue নির্বাচন করে না, product roadmap নির্ধারণ করে না বা ফলস্বরূপ repair merge করে না।

বিশ্বস্ত Repository Policy যোগ করুন

লক্ষ্য base branch-এ .repopilot/policy.json commit করুন। উদাহরণস্বরূপ, নিচের নিয়মটি disabled JavaScript এবং TypeScript test প্রত্যাখ্যান করে:

{
  "rules": [
    {
      "id": "no-disabled-tests",
      "kind": "forbid-call",
      "extensions": [".ts", ".js"],
      "callee": "test.skip",
      "message": "Keep regression tests enabled.",
      "severity": "error"
    }
  ],
  "exceptions": []
}

সমর্থিত static rule kind-এর মধ্যে রয়েছে forbiddenText, forbid-call এবং require-call। Call rule সরাসরি call, qualified call এবং string property access পরীক্ষা করে। এগুলো alias resolve বা whole-program analysis করে না। Literal rule comment-ও মিলিয়ে দেখতে পারে।

Policy exception-এ ruleId, সঠিক path, কারণ, UTC expiration timestamp এবং ঐচ্ছিক সঠিক evidence নির্দিষ্ট করা যায়। Exception কেবল base policy থেকে এলে বিশ্বস্ত হিসেবে গণ্য হয়, এবং মেয়াদোত্তীর্ণ exception finding দমন করে না।

পরস্পরকে অতিক্রমকারী required এবং forbidden rule থাকলে রিভিউ থেমে যায়। Trusted rule file পরিবর্তন করা pull request-এর জন্য maintainer review প্রয়োজন এবং সেগুলো নিজেদের repair অনুমোদন করতে পারে না।

Test Evidence সতর্কতার সঙ্গে কনফিগার করুন

ডিফল্ট reporter হলো node এবং এটি node --test ব্যবহার করে। বিশ্বস্ত reporter উপলভ্য থাকার জন্য প্রথমে RepoPilot build করুন। Vitest-এর জন্য reporter=vitest কনফিগার করুন এবং pinned dependency-সহ একটি trusted image-এ স্পষ্ট vitest run command ব্যবহার করুন।

  • Reporter flag untrusted test command-এর পরিবর্তে controller-এর অন্তর্ভুক্ত।
  • reporter=command কেবল output সংগ্রহ করে এবং verification বা publication সমর্থন করতে পারে না।
  • Runner বাদ দিলে policy-only review তৈরি হয়, যেখানে test-গুলো not_run হিসেবে রেকর্ড হয়।
  • শূন্য test, সব test skipped, malformed report এবং অনুপস্থিত test identity কখনো passing হিসেবে গণ্য হয় না।
  • কনফিগার করা dependency service-গুলো একটি disposable internal Docker network ব্যবহার করে।

Base revision-এ নেই এমন export-সম্পর্কিত generated test-এর ক্ষেত্রে executing test case-এর ভেতরে সেই export আছে কি না যাচাই করুন। Structured evidence সংগ্রহের আগে top-level import যেন crash না করে, তাই missing export-এর কারণে top-level import ব্যর্থ হওয়া উচিত নয়।

চলমান ও সম্পন্ন Task পরিচালনা করুন

RepoPilot .repopilot-data-এর অধীনে report এবং snapshot সংরক্ষণ করে। প্রতিটি task JSON evidence এবং একটি Markdown summary পায়। পুনরায় চালানো execution-গুলো আগের evidence TASK.execution-N.json-এর মতো নাম ব্যবহার করে archive করে।

Task পরিদর্শন ও বাতিল করুন

npm run dev -- tasks list --config config.local.json --status running --limit 20 --offset 0
npm run dev -- tasks show TASK_ID --config config.local.json --format markdown
npm run dev -- tasks cancel TASK_ID --config config.local.json

কন্ট্রোলার তার লেখার লক ধরে রাখার সময় কাজের তালিকা দেখা, বিস্তারিত দেখা এবং বাতিল করার সুবিধা চালু থাকে। বাতিল করার মাধ্যমে একটি স্থায়ী অনুরোধ তৈরি হয়, যা যাচাইকরণ ও প্রকাশনার সময় পরীক্ষা করা হয়। ইতিমধ্যে সম্পন্ন হওয়া GitHub-এ লেখা পরিবর্তন এটি ফিরিয়ে নিতে পারে না।

কাজ পুনরায় শুরু বা আবার চালানো

npm run dev -- tasks resume TASK_ID --config config.local.json
npm run dev -- tasks rerun TASK_ID --config config.local.json

resume কাজের পরিচয়, কনফিগারেশন এবং সীমা অপরিবর্তিত রাখে। অবস্থার ওপর নির্ভর করে এটি যাচাইকরণ পুনরায় শুরু করে অথবা ইতিমধ্যে যাচাইকৃত কাজের প্রকাশনা চালিয়ে যায়। rerun মূল নির্ধারিত কমিট এবং বর্তমান কনফিগারেশন ব্যবহার করে একটি সম্পর্কিত কাজ তৈরি করে, একই সঙ্গে আগের প্রতিবেদন ও বাতিলকরণ চিহ্ন সংরক্ষণ করে।

স্থায়ী, টার্মিনাল বা সীমা-শেষ হওয়া কাজের জন্য পুনরায় চালানো প্রয়োজন। রিপ্লের জন্য রেকর্ড করা স্থানীয় রিপোজিটরি বা Git ক্যাশও প্রয়োজন, এবং রিপ্লের সময় pull request-এর ইনপুট আবার পরীক্ষা করা হয়।

উন্নত অপারেশনাল পরামর্শ

সতর্ক সীমা ব্যবহার করুন

কাজের টাইমআউট, maxCalls, maxAttempts, maxTaskExecutions এবং টোকেন ব্যবহারের জন্য সীমাবদ্ধ মান কনফিগার করুন। প্রতিটি মডেল কলের পর রিপোর্ট করা ব্যবহারের ভিত্তিতে maxTokens মান গণনা করা হয়, তাই একটি কলেই এই সীমা অতিক্রম হতে পারে। এটিকে কঠোর আর্থিক ব্যয়সীমা হিসেবে বিবেচনা করা উচিত নয়।

পরিবেশগত ব্যর্থতাগুলো আলাদাভাবে বিবেচনা করুন

RepoPilot ব্যর্থতাগুলো শ্রেণিবদ্ধ করে এবং উপযুক্ত পরিবেশগত সমস্যার জন্য ধাপ-ভিত্তিক সীমিত সংখ্যক পুনঃচেষ্টা চালায়। অস্থিতিশীল পরীক্ষা, পরিবর্তনশীল আবিষ্কার বা অসম্পূর্ণ প্রমাণকে নিশ্চিত কোড ত্রুটি হিসেবে বিবেচনা না করে স্বয়ংক্রিয় মেরামত আটকে দেওয়া হয়।

প্রমাণের ধারাবাহিকতা সুরক্ষিত রাখুন

মেরামতের প্রার্থীদের অবশ্যই তৈরি করা পরীক্ষার পরিচয় সংরক্ষণ করতে হবে এবং ওয়ার্কফ্লো অনুযায়ী মূল বেস, মূল হেড ও তৈরি করা কেসগুলো পাস করতে হবে। বিদ্যমান পরীক্ষা, ম্যানিফেস্ট, কনফিগারেশন, নীতি এবং লুকানো পাথ সুরক্ষিত থাকে। প্রার্থী মেরামতের পর স্ট্যাটিক ও সেমান্টিক নীতি পরীক্ষা আবার চালানো হয়।

ক্র্যাশের পর সতর্কতার সঙ্গে পুনরুদ্ধার করুন

সংস্করণ 1.3.0-তে বাধাপ্রাপ্ত কাজের মালিকানাধীন রিসোর্সের পূর্বরূপ দেখা এবং স্পষ্টভাবে পরিষ্কার করার জন্য recover ওয়ার্কফ্লো রয়েছে। পুরোনো প্রক্রিয়া বন্ধ হয়েছে নিশ্চিত করার পর অব্যবহৃত লক সরান। পুরোনো লক ও রিসোর্সের জন্য ম্যানুয়াল পরিদর্শন প্রয়োজন হতে পারে।

বিশ্বাসের সীমানা বুঝুন

কন্ট্রোলার, প্রতিবেদন এবং রানার আপনার মেশিন বা ওয়ার্কারে চলে, কিন্তু Codex-এর মডেল কল OpenAI পরিষেবা ব্যবহার করে এবং নির্বাচিত রিপোজিটরি টেক্সট ও কাজের প্রেক্ষাপট পাঠায়। RepoPilot নিজে হোস্ট করলেও অফলাইন মডেল ইনফারেন্স পাওয়া যায় না।

পরীক্ষা চালানো ইঞ্জিনিয়ারিং প্রমাণ সরবরাহ করে, ক্ষতিকর কোডের বিরুদ্ধে কারচুপিরোধী প্রত্যয়ন নয়। সিমলিংক, সাবমডিউল, বাইনারি এবং একই নামে সংঘর্ষপূর্ণ পাথ ব্যর্থতাকে নিরাপদ অবস্থায় বন্ধ করে। অবিশ্বস্ত রিপোজিটরি চালানোর আগে প্রকল্পের নিরাপত্তা নির্দেশিকা পর্যালোচনা করুন।

উপসংহার

RepoPilot নির্ধারিত ইনপুট, স্থির করা পরীক্ষা, স্বাধীন Docker এক্সিকিউশন, রিপোজিটরি নীতি, সীমিত পুনঃচেষ্টা এবং টেকসই প্রমাণের সঙ্গে Codex-সহায়িত পর্যালোচনা ও মেরামতকে একত্র করে। প্রকাশনা ছাড়া স্থানীয় check দিয়ে শুরু করুন, আপনার রিপোর্টার ও নীতি কনফিগারেশন যাচাই করুন, তারপর প্রমাণ আপনার দলের মানদণ্ড পূরণ করলেই ওয়াচিং, Issue মেরামত এবং খসড়া pull request প্রকাশনা যোগ করুন।