Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 9 additions & 135 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,144 +1,18 @@
<!--
Thank you for opening a Pull Request 🚀
Please fill out this template as completely as possible.
Clear PRs = faster reviews = better software.
Lead with one to three sentences that explain the outcome and why it matters.
Keep the body concise and remove any section that has no useful content.
-->

# 📌 Summary
<!--
Briefly explain what this PR does and why it is needed.
Focus on the intent, not the implementation details.
-->

---

## 🎯 Related Issues / Tickets
<!--
Link any related issues, tickets, or discussions.
Use GitHub keywords to auto-close issues when merged.
-->
- Closes #
- Related to #

---
## What changed

## 🧩 Scope of Changes
<!--
Describe the scope and nature of the changes at a high level.
-->
- Added:
- Updated:
- Removed:
- Refactored:

---

## 🛠️ Technical Details
<!--
Explain important technical decisions, trade-offs, or architecture changes.
Include anything that may not be obvious from reading the code.
-->

---

## 🔍 How to Test
<!--
Provide clear, step-by-step instructions to test this change.
Assume the reviewer is unfamiliar with the context.
-->
1.
2.
3.

---

## 🧪 Test Coverage
<!--
Indicate what types of tests were added or updated.
-->
- [ ] Unit tests
- [ ] Integration tests
- [ ] End-to-end (E2E) tests
- [ ] Manual testing only (explain why)

---

## 📸 Screenshots / Recordings (UI changes only)
<!--
Include before/after screenshots or short videos if this PR affects the UI.
-->
-

---

## ⚠️ Breaking Changes
<!--
List any breaking changes and required migration steps.
If none, state "None".
-->
- None

---

## 🚀 Deployment Notes
<!--
Anything required or important during deployment:
- environment variables
- database migrations
- feature flags
- deployment order
-->
- [ ] Requires database migration
- [ ] Requires environment variable changes
- [ ] Requires feature flag toggle
- [ ] No special deployment steps

Details:

---

## 🔒 Security Considerations
<!--
Mention any security-related implications or validations.
-->
- [ ] No security impact
- [ ] Input validation changes
- [ ] Authentication / authorization changes
- [ ] Sensitive data handling changes

---

## 📈 Performance Impact
<!--
Describe any performance considerations, improvements, or regressions.
-->
- [ ] No performance impact
- [ ] Improves performance
- [ ] Potential performance regression (explain)

---

## 📝 Notes for Reviewers
<!--
Highlight areas that need special attention or context for reviewers.
-->

---

## ✅ Checklist
<!--
Confirm all items before requesting review.
-->
- [ ] I have self-reviewed my code
- [ ] Code follows project standards and conventions
- [ ] Tests have been added or updated
- [ ] Documentation has been updated (if applicable)
- [ ] No new warnings or lint errors
- [ ] Breaking contract changes and required consumer updates are documented
## Validation

---
-

## 📚 Additional Context
<!--
Any extra information that may help reviewers understand this PR.
Links, references, or follow-up work.
Add "## Review notes" only for material risks, migrations, rollout details,
compatibility concerns, or manual verification that a reviewer must know.
Add a valid closing reference only when this PR resolves a separate issue.
-->
23 changes: 4 additions & 19 deletions .github/workflows/copilot_pull_request.yml
Original file line number Diff line number Diff line change
@@ -1,34 +1,19 @@
name: Copilot - Pull Request
run-name: Copilot PR · ${{ github.event_name }}:${{ github.event.action }}

on:
pull_request:
types: [opened, reopened, edited, closed, synchronize]
pull_request_review:
types: [submitted, edited, dismissed]
merge_group:
types: [checks_requested]
types: [opened, reopened, closed, synchronize]

jobs:
copilot-merge-group:
if: ${{ github.event_name == 'merge_group' }}
name: Copilot - Pull Request
runs-on: [self-hosted, codex]
timeout-minutes: 10
permissions:
checks: write
contents: read
steps:
- name: Confirm merge-group compatibility
run: echo "Copilot PR analysis already ran on each constituent pull request."

copilot-pull-requests:
if: ${{ (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN) && github.event.pull_request.head.repo.full_name == github.repository }}
name: Copilot - Pull Request
runs-on: [self-hosted, codex]
timeout-minutes: 120
concurrency:
group: copilot-pr-${{ github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}
cancel-in-progress: ${{ github.event_name != 'pull_request' || github.event.action != 'edited' }}
group: copilot-pr-${{ github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}-analysis
cancel-in-progress: true
Comment thread
vypbot marked this conversation as resolved.
permissions:
checks: write
contents: read
Expand Down
20 changes: 20 additions & 0 deletions .github/workflows/copilot_pull_request_merge_queue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Copilot - Pull Request Merge Queue
run-name: Copilot PR · ${{ github.event_name }}:${{ github.event.action }}

on:
merge_group:
types: [checks_requested]

jobs:
copilot-pull-request-required-check:
# GitHub required checks match the job name. Keep this identical to normal
# PR analysis while isolating merge-group runs in their own workflow.
name: Copilot - Pull Request
runs-on: [self-hosted, codex]
timeout-minutes: 10
permissions:
checks: write
contents: read
steps:
- name: Confirm merge-group compatibility
run: echo "Copilot PR analysis already ran on each constituent pull request."
94 changes: 94 additions & 0 deletions .github/workflows/copilot_pull_request_review_state.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Copilot - Pull Request Review State
run-name: Copilot PR review · ${{ github.event_name }}:${{ github.event.action }}

on:
pull_request_review:
types: [submitted, edited, dismissed]

jobs:
copilot-pull-request-review-state:
if: ${{ (vars.COPILOT_BOT_LOGIN == '' || github.actor != vars.COPILOT_BOT_LOGIN) && github.event.pull_request.head.repo.full_name == github.repository }}
name: Copilot - Pull Request Review State
runs-on: [self-hosted, codex]
timeout-minutes: 120
concurrency:
group: copilot-pr-${{ github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}-review-state
cancel-in-progress: true
permissions:
checks: write
contents: read
steps:
- name: Checkout Repository
uses: actions/checkout@v5
with:
persist-credentials: false
fetch-depth: 0

- name: Set up Node.js 24 for pinned agent installation
uses: actions/setup-node@v7
with:
node-version: '24.x'

# Exercise the Action implementation from this PR so regressions are caught before merge.
- uses: ./
with:
repository-locale: ${{ vars.REPOSITORY_LOCALE || 'en-US' }}
issues-locale: ${{ vars.ISSUES_LOCALE || '' }}
pull-requests-locale: ${{ vars.PULL_REQUESTS_LOCALE || '' }}
ai-ignore-files: build/*,specs/CATALOG.md
bugbot-severity: ${{ vars.BUGBOT_SEVERITY || 'low' }}
bugbot-comment-limit: ${{ vars.BUGBOT_COMMENT_LIMIT || '20' }}
bugbot-fix-verify-commands: ${{ vars.BUGBOT_AUTOFIX_VERIFY_COMMANDS }}
bugbot-dry-run: ${{ vars.BUGBOT_DRY_RUN || 'false' }}
bugbot-effort: ${{ vars.BUGBOT_EFFORT || 'smart' }}
bugbot-review-drafts: ${{ vars.BUGBOT_REVIEW_DRAFTS || 'false' }}
bugbot-trace-rules: ${{ vars.BUGBOT_TRACE_RULES || 'false' }}
bugbot-suggested-changes: ${{ vars.BUGBOT_SUGGESTED_CHANGES || 'true' }}
bugbot-telemetry: ${{ vars.BUGBOT_TELEMETRY || 'true' }}
bugbot-fail-on-unresolved: ${{ vars.BUGBOT_FAIL_ON_UNRESOLVED || 'false' }}
bugbot-organization-rules: ${{ vars.BUGBOT_ORGANIZATION_RULES }}
debug: ${{ vars.DEBUG }}
agent-provider: ${{ vars.AGENT_PROVIDER || 'codex' }}
agent-model-provider: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
agent-model: ${{ vars.AGENT_MODEL || 'gpt-5.6-luna' }}
agent-effort: ${{ vars.AGENT_EFFORT }}
agent-executable: ${{ vars.AGENT_EXECUTABLE }}
findings-provider: ${{ vars.FINDINGS_PROVIDER }}
findings-model-provider: ${{ vars.FINDINGS_MODEL_PROVIDER }}
findings-model: ${{ vars.FINDINGS_MODEL }}
findings-effort: ${{ vars.FINDINGS_EFFORT }}
findings-executable: ${{ vars.FINDINGS_EXECUTABLE }}
fixer-provider: ${{ vars.FIXER_PROVIDER }}
fixer-model-provider: ${{ vars.FIXER_MODEL_PROVIDER }}
fixer-model: ${{ vars.FIXER_MODEL }}
fixer-effort: ${{ vars.FIXER_EFFORT }}
fixer-executable: ${{ vars.FIXER_EXECUTABLE }}
planner-provider: ${{ vars.PLANNER_PROVIDER }}
planner-model-provider: ${{ vars.PLANNER_MODEL_PROVIDER }}
planner-model: ${{ vars.PLANNER_MODEL }}
planner-effort: ${{ vars.PLANNER_EFFORT }}
planner-executable: ${{ vars.PLANNER_EXECUTABLE }}
reviewer-provider: ${{ vars.REVIEWER_PROVIDER }}
reviewer-model-provider: ${{ vars.REVIEWER_MODEL_PROVIDER }}
reviewer-model: ${{ vars.REVIEWER_MODEL }}
reviewer-effort: ${{ vars.REVIEWER_EFFORT }}
reviewer-executable: ${{ vars.REVIEWER_EXECUTABLE }}
project-ids: ${{ vars.PROJECT_IDS }}
token: ${{ secrets.PAT }}
env:
AGENT_PROVIDER: ${{ vars.AGENT_PROVIDER || 'codex' }}
AGENT_MODEL_PROVIDER: ${{ vars.AGENT_MODEL_PROVIDER || 'openai' }}
AGENT_MODEL: ${{ vars.AGENT_MODEL }}
AGENT_EFFORT: ${{ vars.AGENT_EFFORT }}
AGENT_PROVISIONING: ${{ vars.AGENT_PROVISIONING || 'auto' }}
AGENT_ALLOWED_MODEL_PROVIDERS: ${{ vars.AGENT_ALLOWED_MODEL_PROVIDERS || 'openai' }}
AGENT_ALLOWED_MODELS: ${{ vars.AGENT_ALLOWED_MODELS || 'openai/gpt-5.6-luna' }}
AGENT_EXECUTABLE: ${{ vars.AGENT_EXECUTABLE }}
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
CURSOR_API_KEY: ${{ (vars.AGENT_PROVIDER == 'cursor' || vars.FINDINGS_PROVIDER == 'cursor' || vars.FIXER_PROVIDER == 'cursor' || vars.PLANNER_PROVIDER == 'cursor' || vars.REVIEWER_PROVIDER == 'cursor' || vars.TESTER_PROVIDER == 'cursor') && secrets.CURSOR_API_KEY || '' }}
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
COPILOT_EVIDENCE_TOKEN: ${{ github.token }}
25 changes: 10 additions & 15 deletions build/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6134,10 +6134,10 @@ function getThinkPrompt(params) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getUpdatePullRequestDescriptionPrompt = getUpdatePullRequestDescriptionPrompt;
/**
* Prompt for generating PR description from issue and diff (UpdatePullRequestDescriptionUseCase).
* Prompt for generating a concise PR description from an optional issue and the diff.
*/
const fill_1 = __nccwpck_require__(2559);
const TEMPLATE = `You are in the repository workspace. Your task is to produce a pull request description by filling the project's PR template with information from the branch diff and the issue.
const TEMPLATE = `You are in the repository workspace. Your task is to write a concise, review-ready pull request description from the branch diff and any linked issue.

Write every human-readable sentence in {{targetLocale}}. Preserve code identifiers, paths, refs, commands, URLs, issue/PR references, and conventional title prefixes verbatim. Echo \`outputLocale\` exactly as \`{{targetLocale}}\`.

Expand All @@ -6148,20 +6148,15 @@ Write every human-readable sentence in {{targetLocale}}. Preserve code identifie
- **Head (source) branch:** \`{{headBranch}}\`

**Instructions:**
1. Read the pull request template file: \`.github/pull_request_template.md\`. Use its structure (headings, bullet lists, separators) as the skeleton for your output. The checkboxes in the template are **indicative only**: you may check the ones that apply based on the project and the diff, define different or fewer checkboxes if that fits better, or omit a section entirely if it does not apply.
2. Get the full diff by running: \`git diff {{baseBranch}}..{{headBranch}}\` (or \`git diff {{baseBranch}}...{{headBranch}}\` for merge-base). Use the diff to understand what changed.
1. Read \`.github/pull_request_template.md\` as content guidance and repository-specific constraints. Do not reproduce empty placeholder sections or treat every heading as mandatory.
2. Get the full merge-base diff with \`git diff {{baseBranch}}...{{headBranch}}\`. Use it to understand the behavior and contracts that changed.
3. Use the issue description below for context and intent.
4. Fill each section of the template with concrete content derived from the diff and the issue. Keep the same markdown structure (headings, horizontal rules). For checkbox sections (e.g. Test Coverage, Deployment Notes, Security): use the template's options as guidance; check or add only the items that apply, or skip the section if it does not apply.
- **Summary:** brief explanation of what the PR does and why (intent, not implementation details).
- **Related Issues:** {{relatedIssueInstruction}}
- **Scope of Changes:** use Added / Updated / Removed / Refactored with short bullet points (high level, not file-by-file).
- **Technical Details:** important decisions, trade-offs, or non-obvious aspects.
- **How to Test:** steps a reviewer can follow (infer from the changes when possible).
- **Test Coverage / Deployment / Security / Performance / Checklist:** treat checkboxes as indicative; check the ones that apply from the diff and project context, or omit the section if it does not apply.
- **Breaking Changes:** list any, or "None".
- **Notes for Reviewers / Additional Context:** fill only if useful; otherwise a short placeholder or omit.
5. Do not output a single compact paragraph. Output the full filled template so the PR description is well-structured and easy to scan. Preserve the template's formatting (headings with # and ##, horizontal rules). Use checkboxes \`- [ ]\` / \`- [x]\` only where they add value; you may simplify or drop a section if it does not apply.
6. **Output format:** Return one JSON object with \`outputLocale\` and \`description\`. Put only the filled template content in \`description\`; do not add any preamble, meta-commentary, or framing phrases (e.g. "Based on my analysis...", "After reviewing the diff...", "Here is the description..."). Start \`description\` directly with the first heading of the template (e.g. # Summary). Do not wrap it in code blocks.
4. Provide \`overview\` as one to three sentences that state the outcome and why it matters.
5. Provide \`whatChangedHeading\` as the plain-text {{targetLocale}} equivalent of "What changed" and \`changes\` as two to six short, outcome-oriented items. Do not inventory files, use-case names, internal categories, or every implementation step.
6. Provide \`validationHeading\` as the plain-text {{targetLocale}} equivalent of "Validation" and \`validation\` with only commands, automated checks, or manual scenarios supported by available evidence. Never claim a check passed unless the evidence says it did, and never infer that result from the presence of test files or commands. When no execution evidence is available, say concisely in {{targetLocale}} that validation was not run or was not available.
7. Set \`reviewNotesHeading\` and \`reviewNotes\` to \`null\` unless reviewers need material migration, security, performance, compatibility, rollout, manual-verification, risk, or follow-up context. Otherwise use the localized plain-text heading and one to four concise items. {{relatedIssueInstruction}}
8. Keep the description practical and normally under 4,000 characters. It must never exceed 12,000 characters. Do not use emoji, horizontal separators, generic checklists, empty headings, repeated statements, placeholder text, or unsupported "no impact" claims.
9. Return one JSON object with exactly \`outputLocale\`, \`overview\`, \`whatChangedHeading\`, \`changes\`, \`validationHeading\`, \`validation\`, \`reviewNotesHeading\`, \`reviewNotes\`, and \`closesLinkedIssue\`. Every content field is plain text except Markdown links, code spans, refs, and commands inside content values. The application renders the Markdown structure; do not include headings, bullet prefixes, a preamble, meta-commentary, or code fence in the values.

**Issue description:**
{{issueDescription}}
Expand Down
Loading