diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 092df9fc17..bb24140592 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,43 +1,59 @@ -# PowerToys – Copilot guide (concise) +--- +description: PowerToys AI contributor guidance. +applyTo: pullRequests +--- + +# PowerToys - Copilot guide (concise) This is the top-level guide for AI changes. Keep edits small, follow existing patterns, and cite exact paths in PRs. -Repo map (1‑line per area) +# Repo map (1-line per area) - Core apps: `src/runner/**` (tray/loader), `src/settings-ui/**` (Settings app) - Shared libs: `src/common/**` - Modules: `src/modules/*` (one per utility; Command Palette in `src/modules/cmdpal/**`) - Build tools/docs: `tools/**`, `doc/devdocs/**` -Build and test (defaults) +# Build and test (defaults) - Prerequisites: Visual Studio 2022 17.4+, minimal Windows 10 1803+. - Build discipline: - - One terminal per operation (build → test). Don’t switch/open new ones mid-flow. + - One terminal per operation (build -> test). Do not switch or open new ones mid-flow. - After making changes, `cd` to the project folder that changed (`.csproj`/`.vcxproj`). - - Use script(s) to build, synchronously block and wait in foreground for it to finish: `tools/build/build.ps1|.cmd` (current folder), `build-essentials.*` (once per brand new build for missing nuget packages) - - Treat build **exit code 0** as success; any non-zero exit code is a failure, have Copilot read the errors log in the build folder (e.g., `build.*.*.errors.log`) and surface problems. - - Don’t start tests or launch Runner until the previous step succeeded. -- Tests (fast + targeted): - - Find the test project by product code prefix (e.g., FancyZones, AdvancedPaste). Look for a sibling folder or 1–2 levels up named like `*UnitTests` or `*UITests`. - - Build the test project, wait for **exit**, then run only those tests via VS Test Explorer or `vstest.console.exe` with filters. Avoid `dotnet test` in this repo. - - Add/adjust tests when changing behavior; if skipped, state why (e.g., comment-only, string rename). + - Use scripts to build, synchronously block and wait in foreground for completion: `tools/build/build.ps1|.cmd` (current folder), `build-essentials.*` (once per brand new build for missing nuget packages). + - Treat build exit code 0 as success; any non-zero exit code is a failure. Read the errors log in the build folder (such as `build.*.*.errors.log`) and surface problems. + - Do not start tests or launch Runner until the previous step succeeded. +- Tests (fast and targeted): + - Find the test project by product code prefix (for example FancyZones, AdvancedPaste). Look for a sibling folder or one to two levels up named like `*UnitTests` or `*UITests`. + - Build the test project, wait for exit, then run only those tests via VS Test Explorer or `vstest.console.exe` with filters. Avoid `dotnet test` in this repo. + - Add or adjust tests when changing behavior; if skipped, state why (for example comment-only or string rename). -Pull requests (expectations) -- Atomic: one logical change; no drive‑by refactors. -- Describe: problem / approach / risk / test evidence. +# Pull requests (expectations) +- Atomic: one logical change; no drive-by refactors. +- Describe: problem, approach, risk, test evidence. - List: touched paths if not obvious. -When to ask for clarification +# When to ask for clarification - Ambiguous spec after scanning relevant docs (see below). -- Cross-module impact (shared enum/struct) not clear. -- Security / elevation / installer changes. +- Cross-module impact (shared enum or struct) not clear. +- Security, elevation, or installer changes. -Logging (use existing stacks) -- C++: `src/common/logger/**` (`Logger::info|warn|error|debug`). Keep hot paths quiet (hooks, tight loops). -- C#: `ManagedCommon.Logger` (`LogInfo|LogWarning|LogError|LogDebug|LogTrace`). Some UIs use injected `ILogger` via `LoggerInstance.Logger`. +# Logging (use existing stacks) +- C++ logging lives in `src/common/logger/**` (`Logger::info`, `Logger::warn`, `Logger::error`, `Logger::debug`). Keep hot paths quiet (hooks, tight loops). +- C# logging goes through `ManagedCommon.Logger` (`LogInfo`, `LogWarning`, `LogError`, `LogDebug`, `LogTrace`). Some UIs use injected `ILogger` via `LoggerInstance.Logger`. -Docs to consult +# Docs to consult - `tools/build/BUILD-GUIDELINES.md` -- `doc/devdocs/core/architecture.md`, `doc/devdocs/core/runner.md`, `doc/devdocs/core/settings/readme.md`, `doc/devdocs/modules/readme.md` +- `doc/devdocs/core/architecture.md` +- `doc/devdocs/core/runner.md` +- `doc/devdocs/core/settings/readme.md` +- `doc/devdocs/modules/readme.md` -Done checklist (self review before finishing) -- Build clean? Tests updated/passed? No unintended formatting? Any new dependency? Documented skips? \ No newline at end of file +# Language style rules +- Always enforce repo analyzers: root `.editorconfig` plus any `stylecop.json`. +- C# code follows StyleCop.Analyzers and Microsoft.CodeAnalysis.NetAnalyzers. +- C++ code honors `.clang-format` plus `.clang-tidy` (modernize/cppcoreguidelines/readability). +- Markdown files wrap at 80 characters and use ATX headers with fenced code blocks that include language tags. +- YAML files indent two spaces and add comments for complex settings while keeping keys clear. +- PowerShell scripts use Verb-Noun names and prefer single-quoted literals while documenting parameters and satisfying PSScriptAnalyzer. + +# Done checklist (self review before finishing) +- Build clean? Tests updated or passed? No unintended formatting? Any new dependency? Documented skips? diff --git a/.github/prompts/create-pr.prompt.md b/.github/prompts/create-pr.prompt.md new file mode 100644 index 0000000000..571fccda08 --- /dev/null +++ b/.github/prompts/create-pr.prompt.md @@ -0,0 +1,22 @@ +--- +mode: 'agent' +model: GPT-5-Codex (Preview) +description: 'Generate a PowerToys-ready pull request description from the local diff.' +--- + +**Goal:** Produce a ready-to-paste PR title and description that follows PowerToys conventions by comparing the current branch against a user-selected target branch. + +**Repo guardrails:** +- Treat `.github/pull_request_template.md` as the single source of truth; load it at runtime instead of embedding hardcoded content in this prompt. +- Preserve section order from the template but only surface checklist lines that are relevant for the detected changes, filling them with `[x]`/`[ ]` as appropriate. +- Cite touched paths with inline backticks, matching the guidance in `.github/copilot-instructions.md`. +- Call out test coverage explicitly: list automated tests run (unit/UI) or state why they are not applicable. + +**Workflow:** +1. Determine the target branch from user context; default to `main` when no branch is supplied. +2. Run `git status --short` once to surface uncommitted files that may influence the summary. +3. Run `git diff ...HEAD` a single time to review the detailed changes. Only when confidence stays low dig deeper with focused calls such as `git diff ...HEAD -- `. +4. From the diff, capture impacted areas, key file changes, behavioral risks, migrations, and noteworthy edge cases. +5. Confirm validation: list tests executed with results or state why tests were skipped in line with repo guidance. +6. Load `.github/pull_request_template.md`, mirror its section order, and populate it with the gathered facts. Include only relevant checklist entries, marking them `[x]/[ ]` and noting any intentional omissions as "N/A". +7. Present the filled template to the user as markdown format so that it is ready to be pasted into a PR, clearly flagging any placeholders that still need their input.