review-external-pr

Trier une PR d’un contributeur externe et la préparer pour la fusion. Détecte les droits de push, la branche de base, l’état de brouillon, la taille et la qualité de l’historique, puis choisit l’une des…

npx skills add https://github.com/microsoft/vscode-documentdb --skill review-external-pr

Review External PR Workflow

A triage-first workflow for handling community PRs. The skill inspects first, asks two questions, then executes. It never creates branches preemptively.

When to Use

  • A contributor PR is open and you want to review and merge it
  • Trigger phrases: "prepare this external PR", "review PR #N", "let's review this contribution", or invocation while the user is on a pr/<owner>/<PR_NUMBER> branch (created by gh pr checkout)
  • You want a recommendation on push path and merge strategy before doing anything

Phase 1 — Triage (read-only, no prompts)

Identify the PR

Resolve, in order:

  1. The PR number the user mentioned.
  2. Current branch matches pr/<owner>/<PR_NUMBER> → extract <PR_NUMBER>.
  3. gh pr status → active PR for current branch.

Fetch metadata in one call

gh pr view <PR_NUMBER> --json number,title,author,url,state,isDraft,\
headRefName,baseRefName,headRepositoryOwner,maintainerCanModify,\
mergeable,mergeStateStatus,additions,deletions,changedFiles,commits,labels

Derive signals

| Signal | Rule | | --------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----- | -------------- | ---- | ------ | ----- | | canPushToHead | headRepositoryOwner.login == "microsoft" OR maintainerCanModify | | baseBranch | baseRefName (do not hardcode main) | | isDraft | warn if true | | mergeable | warn if mergeable != "MERGEABLE" (values: MERGEABLE, CONFLICTING, UNKNOWN) | | mergeReady | warn if mergeStateStatus is not CLEAN (other values: DIRTY, BLOCKED, BEHIND, UNSTABLE, HAS_HOOKS, UNKNOWN) | | commitCount | commits.length | | messyHistory | any commits[].messageHeadline (the first line of the commit message, returned by gh pr view --json commits) matches /wip | fixup | address review | typo | merge( | $)/i | | changedLines | additions + deletions | | sizeBucket | small ≤ 50 changed lines, medium ≤ 300, large > 300 (uses changedLines) |

Squash recommendation

ConditionRecommend
commitCount == 1No squash (rebase or merge) — history already clean
commitCount ≤ 3 AND no messy subjects AND smallAsk, default no squash
commitCount > 3 OR messy subjects detectedSquash (default)

Print the triage report

PR #<PR_NUMBER> — <title>
  Author:        <login>  (<fork|same-repo>)
  Base:          <baseBranch>
  State:         <state>, <draft?>, mergeable=<mergeable>, mergeStateStatus=<mergeStateStatus>
  Push to head:  <✅ allowed reason | ❌ blocked reason>
  Size:          +<additions> / -<deletions> across <changedFiles> file(s), <commitCount> commit(s)
  History:       <clean | messy: "<sample messageHeadline>">

Recommendation:
  • Path:  <direct push | reviews/ branch | review-only>
  • Merge: <--squash | --merge | --rebase> (<reason>)

Stop here and present the report.

Phase 2 — Two questions

Ask only these. Pre-select the recommended option.

Q1: Do you need to add changes before merging?

  • No → Path A (review & merge)
  • Yes, small tweaks → Path B (direct push) if canPushToHead, otherwise Path C
  • Yes, heavy rework / contributor unresponsive → Path C (reviews/ staging branch)

If canPushToHead == false, omit the "direct push" option and explain: "Contributor disabled maintainer edits; we must use a reviews/ branch."

Q2: Merge strategy?

Offer --squash, --merge, --rebase with the recommended option marked. Justify the default in one short sentence (e.g., "4 commits including 'fix typo' — squash recommended").

Phase 3 — Execute

Run commands non-interactively, echoing each one. After merge, print a one-line summary with the merged commit/PR URL.

Path A — Review & merge (no maintainer changes)

gh pr checkout <PR_NUMBER>                  # optional, for local inspection
# review, leave comments via the PR UI or `gh pr review`
gh pr merge <PR_NUMBER> --<strategy>        # against the PR's actual base

Path B — Direct push to the contributor's branch

Requires canPushToHead == true.

gh pr checkout <PR_NUMBER>                  # sets up a remote tracking the fork branch
# make changes, commit
git push                                    # updates the existing PR in place
gh pr merge <PR_NUMBER> --<strategy>

The existing PR updates in place; the contributor keeps authorship of their commits and maintainer commits are attributed to the maintainer. No second PR is needed.

Path C — reviews/ staging branch

Use when push to head is blocked, or when the maintainer explicitly wants to isolate rework.

Branch slug sanitization — derive <slug> from the PR title:

  1. Lowercase.
  2. Replace every run of non-[a-z0-9] characters with a single -.
  3. Trim leading/trailing -.
  4. Truncate to 30 characters; trim trailing - again if the cut left one.

Example: "fix(tree): sort _id_ index first / cleanup" → fix-tree-sort-id-index-first-c.

Full branch name: reviews/<slug>-pr-<PR_NUMBER>.

git fetch origin
git checkout -b reviews/<slug>-pr-<PR_NUMBER> origin/<baseBranch>
git push -u origin reviews/<slug>-pr-<PR_NUMBER>

Retarget the contributor's PR:

gh pr edit <PR_NUMBER> --base reviews/<slug>-pr-<PR_NUMBER>
gh pr view <PR_NUMBER> --json baseRefName    # verify

⚠️ gh pr edit --base may print a deprecation warning about Projects (classic). Cosmetic only — the base change succeeds.

Merge the contributor's PR into the review branch:

gh pr merge <PR_NUMBER> --<strategy>

Pull and create the finalization PR back to the original base:

git checkout reviews/<slug>-pr-<PR_NUMBER>
git pull origin reviews/<slug>-pr-<PR_NUMBER>

gh pr create \
  --base <baseBranch> \
  --head reviews/<slug>-pr-<PR_NUMBER> \
  --title "<original title> [reviewed]" \
  --body "Finalizes review of @<author>'s contribution in #<PR_NUMBER>.

Original PR: <PR_URL>"

Comment on the original PR:

gh pr comment <PR_NUMBER> \
  --body "Thanks for the contribution! Review continues in #<NEW_PR_NUMBER> where maintainer changes are finalized before merging to \`<baseBranch>\`."

Merge Strategy Reference

StrategyWhen to use
--squashDefault for messy/multi-commit external PRs. One revert undoes the change. Contributor still gets authorship credit.
--mergeLarge feature where individual commits are meaningful and worth preserving.
--rebaseSingle clean commit, or a series of clean atomic commits you want linear on the base.

Hard Rules

  • Never hardcode main as the base — always read baseRefName.
  • Never create a reviews/ branch in Phase 1.
  • Never force-push to a contributor's branch.
  • If the PR is a draft, refuse to merge and report it back to the maintainer.
  • If mergeable == "CONFLICTING" or mergeStateStatus != "CLEAN", stop and surface that before any merge command.

Summary

PhaseWhat happensOutput
1Read PR metadata, derive push capability + recommendationsTriage report
2Ask Q1 (path) and Q2 (merge strategy)Decision
3Execute the chosen path with the chosen merge strategyMerged PR / finalization PR

Plus de skills de microsoft

oss-growth
microsoft
Persona de growth hacker OSS
agent-framework-azure-ai-py
microsoft
Créez des agents Azure AI Foundry à l’aide du SDK Python Microsoft Agent Framework (agent-framework-azure-ai). À utiliser lors de la création d’agents persistants avec AzureAIAgentsProvider, de l’utilisation d’outils hébergés (interpréteur de code, recherche de fichiers, recherche web), de l’intégration de serveurs MCP, de la gestion de fils de conversation ou de l’implémentation de réponses en streaming. Couvre les outils de fonction, les sorties structurées et les agents multi-outils.
development
airunway-aks-setup
microsoft
Configurez AI Runway sur AKS — du cluster nu au modèle en cours d'exécution. Couvre la vérification du cluster, l'installation du contrôleur, l'évaluation GPU, la configuration du fournisseur et le premier déploiement. QUAND : « configurer AI Runway », « intégrer un cluster AKS », « installer AI Runway », « configuration airunway », « déployer un modèle sur AKS », « inférence GPU sur AKS », « configuration KAITO sur AKS », « exécuter LLM sur AKS », « vLLM sur AKS », « configurer le service de modèles sur AKS », « contrôleur AI Runway ».
devops
appinsights-instrumentation
microsoft
Conseils pour instrumenter les applications web avec Azure Application Insights. Fournit des modèles de télémétrie, la configuration du SDK et des références de configuration. QUAND : comment instrumenter une application, SDK App Insights, modèles de télémétrie, qu'est-ce qu'App Insights, conseils sur Application Insights, exemples d'instrumentation, bonnes pratiques APM.
devops
applicationinsights-web-ts
microsoft
Instrumentez les applications navigateur/web avec le SDK JavaScript Application Insights (@microsoft/applicationinsights-web). Utilisez-le pour la surveillance des utilisateurs réels (RUM) — vues de page, clics, dépendances AJAX/fetch, exceptions, événements personnalisés et traces d’agents GenAI côté navigateur corrélées aux traces OpenTelemetry backend. Couvre le script de chargement du SDK et la configuration npm, les extensions de framework (React, React Native, Angular), Click Analytics, les initialiseurs de télémétrie et les conventions sémantiques OTel GenAI pour les spans d’agents/outils/modèles émises depuis le navigateur.
devops
azure-ai-anomalydetector-java
microsoft
Créez des applications de détection d'anomalies avec le SDK Azure AI Anomaly Detector pour Java. Utilisez-le lors de l'implémentation de la détection d'anomalies univariées/multivariées, de l'analyse de séries temporelles ou de la surveillance basée sur l'IA.
development
azure-ai-language-conversations-py
microsoft
Implémentez la compréhension du langage conversationnel (CLU) à l’aide du SDK Python azure-ai-language-conversations. Utilisez-le lorsque vous travaillez avec ConversationAnalysisClient pour analyser l’intention et les entités d’une conversation, créer des fonctionnalités de NLP ou intégrer la compréhension du langage dans des applications.
development
azure-ai-ml-py
microsoft
SDK v2 d’Azure Machine Learning pour Python. Utiliser pour les espaces de travail ML, les tâches, les modèles, les jeux de données, le calcul et les pipelines. Déclencheurs : « azure-ai-ml », « MLClient », « espace de travail », « registre de modèles », « tâches d’entraînement », « jeux de données ».
development