mcpField
P
pr

pr

github.com/overextended开发209 次安装2 周前更新
代码仓库

关于 pr

为编码 Agent 和贡献者提供简洁 PR 描述写作指导,涵盖变更说明、证据展示与合并风险评估,并给出多种可视化表达形式。

主要功能

  1. 01PR 模板与章节指导
  2. 02伪代码、树形图、差异和 Mermaid
  3. 03前后对比证据指导
  4. 04合并风险与影响范围评估

适用场景

  1. 01撰写简洁的 PR 正文
  2. 02为代码变更选择可视化形式
  3. 03记录测试或截图证据
  4. 04评估回滚风险与影响

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/overextended/skills --skill pr

安装后在 Claude Code 中输入/pr确认已加载。

附带文件agents/openai.yamlCREDITS.md

详细介绍

PR

编写 PR 正文时使用此模板:

## Summary

<diagram, diff-sketch, or tree>

## Evidence

- **Before:** <screenshot/output/failing test run>
  **After:** <screenshot/output/passing test run>

## Merge Danger

**Door:** <one-way or two-way>

<optional: description>

**Blast Radius:** <one-word description>

<optional: potential ramifications of merge>

如果仓库中有拉取请求模板(.github/pull_request_template.md 或 .github/PULL_REQUEST_TEMPLATE/),请改用该模板,并在适用的标题下填写以下各节。

各节

跳过所有开场白,尽量简洁地表达。沿用代码中已有的资源、事件、导出项和条目名称。

摘要

选择能清楚说明重点的最简形式。

  • 用伪代码展示逻辑或算法:
on(my_shops:buy)
  if player is too far from the shop
    return false
  remove money
  add item
  return true
  • 用调用树展示运行时控制流;在必要时跨越客户端/服务端边界:
client/points.lua nearby
  lib.callback.await('my_shops:buy')
    server/shops.lua buy
      exports.ox_inventory:RemoveItem
      exports.ox_inventory:AddItem
  • 用组件树展示 NUI 结构,包括重要的状态和模块边界:
<App> (web/src/App.tsx)
  useNuiEvent('setVisible')
  <ShopWindow>
    <ItemGrid> (web/src/components/ItemGrid.tsx)
  • 用简洁的文件树展示文件职责或较大范围的重构:
my_shops/
├── client/      # points, target and NUI messages
├── server/      # validates and charges purchases
├── data/        # shop locations and stock
└── web/         # NUI
  • 使用 Mermaid 展示组件交互、控制流或数据流:
sequenceDiagram
    participant NUI
    participant Client
    participant Server
    NUI->>Client: buy (NUI callback)
    Client->>Server: lib.callback.await('my_shops:buy')
    Server-->>Client: true
    Client-->>NUI: updated stock
  • 如果重点在于发生了哪些变化,且周边结构已存在,请使用 diff。根据主题选择合适的 diff 结构。

对于组件变更:

 <ShopWindow>
   <ItemGrid>
+  <BasketSummary />
   <CloseButton>

对于文件布局变更:

 my_shops/
 ├── client/
+│   └── target.lua   # only required when ox_target is used
 ├── server/
-└── config.lua
+└── data/
+    └── shops.lua

对于调用树或调用栈变更:

 server/shops.lua buy
+  check distance to shop
   exports.ox_inventory:RemoveItem
   exports.ox_inventory:AddItem
-  TriggerClientEvent('my_shops:refresh', -1)
+  TriggerClientEvent('my_shops:refresh', source)

对于状态或控制流变更:

 on(my_shops:buy)
-  remove money
+  if count is not a whole number from 1 to 100
+    return false
+  remove money
   add item
  • 如果大部分内容都是新增的、省略上下文会掩盖归属或顺序,或者用户需要一个可复制的目标结构,请展示完整代码块:
lib.callback.register('my_shops:buy', function(source, shopId, itemName, count)
    local shop = type(shopId) == 'string' and shops[shopId]
    if not shop then return false end
    -- ...
end)
指南

将每个可视化内容放在其支持的简短说明旁边。只保留回答评审者关于此次变更的问题所必需的调用、文件、属性、状态和边界。

你可以使用其中一种,也可以使用多种;不太可能全部用上。请自行判断,避免让评审者应接不暇。

证据

提供变更有效的具体证据。展示变更前后的情况。

截图属于 S 级证据:如果环境已准备就绪且变更涉及视觉效果,应通过浏览器操作 NUI 的开发服务器来截取截图。

基于执行的证据属于 A 级:测试结果、脚本输出、服务端控制台输出。使用伪代码展示现在会失败和通过的确切测试。

合并风险

说明这是单向门还是双向门。双向门可以折返,但单向门不行。容易回滚的 PR 风险较低。涉及破坏性操作或难以撤销的决策的变更属于单向门:例如删除或重命名数据库列、重命名条目(已保存的库存仍保留旧名称)、更改 KVP 键或已保存的 JSON 结构。

影响范围是此 PR 引入的变更可能造成的影响或覆盖范围。请考虑所有可能性。例如,其他资源调用已变更的导出项或监听已重命名的事件、所有玩家的已保存数据、客户端帧耗时、不同分辨率下的 NUI,以及服务端所有者已经设置的 convar。

评论

支持 Markdown