Positron PR 助手实战指南:动态 e2e 测试标签与规范 PR 描述生成
开发工具代码编辑器数据科学【免费下载链接】positronPositron, a next-generation data science IDE项目地址https://gitcode.com/gh_mirrors/po/positron点击查看免费下载Positron 是一个下一代数据科学 IDEdata science IDE其仓库采用严格的 PR 规范PR 描述需要结构化分区Summary / Release Notes / Validation Steps并通过:前缀的 e2e 测试标签控制 CI 运行哪些 Playwright 测试套件。本文讲解仓库内置的positron-pr-helper技能.claude/skills/positron-pr-helper/SKILL.md如何帮助开发者从唯一事实来源动态拉取最新 e2e 测试标签、按 PR 类型套用模板生成规范 PR 描述并借助 PETE 本地预览在开 PR 之前补齐测试覆盖。读完本文你将掌握完整的 PR 描述工作流、标签安全红线:tag只能出现在 Validation Steps、测试标签体系的源码级分类规则以及 CI 侧标签解析的真实机制。一、这个技能解决什么问题在 Positron 仓库中PR 描述不仅是给人看的说明更是驱动 CI 的配置描述里出现的:tag会被 CI 脚本提取决定本次 PR 运行哪些 e2e 测试套件。因此 PR 描述的质量直接决定测试覆盖是否正确。positron-pr-helper技能适用于以下场景创建新 PR需要一份结构完整的 PR 描述更新已有 PR 描述使其符合 Positron 仓库约定需要获取当前完整的 e2e 测试标签列表用于 Validation Steps希望在开 PR 前做一次测试覆盖自查PETE 本地预览。它的核心思路是标签从test/e2e/infra/test-runner/test-tags.ts动态提取而不是靠记忆或复制旧 PR确保每次拿到的是最新、完整的标签列表功能标签、平台标签、性能标签、特殊标签。二、前置条件使用该技能前需要满足安装并认证 GitHub CLIgh因为技能会调用gh issue view获取 issue 上下文、用gh pr edit更新 PR 描述当前工作目录在 Positron 仓库内可以访问仓库的test-tags.ts文件即 test/e2e/infra/test-runner/test-tags.ts。三、五步工作流Step 1收集上下文技能会先询问五个信息Issue 编号如果该 PR 解决某个具体 issuePR 类型bug fix、feature、UI change、maintenance 等PR 做了什么Summary是否需要截图仅 UI 变更需要关联 PR例如 ark 仓库中的配套 PR。如果提供了 issue 编号技能会用gh issue view拉取 issue 详情更好地理解变更背景。Step 2动态获取当前 e2e 测试标签技能通过提取脚本动态获取 test/e2e/infra/test-runner/test-tags.ts 中定义的全部标签包括Feature tags按功能/区域划分Platform tags控制操作系统/运行环境Performance tags性能测试Special tagscritical特殊行为标签。Step 3评估测试覆盖PETE在撰写 Validation Steps 之前技能会运行本地 PETE 预览即pete技能.claude/skills/pete-local/SKILL.md其评分标准与 CI 的 PR Test Checker 共用 .claude/skills/pr-test-checker/SKILL.md来检查工作区变更的测试覆盖具体会对没有单元/e2e 测试覆盖的实质性源码变更给出Insufficient覆盖不足判定发现已有 e2e 测试覆盖了本次变更、但其:标签缺失在 PR 描述中——这些标签会合并进 Step 2 的标签列表指出 Windows / Web 部署覆盖缺口值得在 Validation Steps 中说明。如果 PETE 判定为Insufficient技能会明确说明并在最终确定 PR 描述前给出具体补充建议文件路径、测试 runner、要测什么而不是用一句泛泛的 Validation Steps 掩盖覆盖缺口。需要强调这只是本地预览不替代官方检查——PR 打开后在评论中发送/pete或/recheck-tests、/rePETE、/re-pete才能获得权威判定因为官方 PR Test Checker 在 CI 中按需运行。Step 4生成 PR Body根据 PR 类型和上下文技能生成结构化的 PR 描述包含五大部分Opening Line若有关联 issue使用 GitHub 关闭关键词Fixes、Closes、Resolves写出Fixes #[issue]使 PR 合并时 issue 自动关闭否则写一句 PR 动作简述。Description/Summary简洁说明变更内容必要时补充技术上下文引用关联 PR。Screenshots仅 UI 变更需要可放占位文本或真实 URL。Release Notes按 New Features / Bug Fixes 分区写面向用户的描述。Validation Steps按受影响区域给出相关 e2e 测试标签、测试步骤、有用的代码示例以及 Step 3 中 PETE 判定为 Insufficient 时的说明。Step 5输出选项PR 描述就绪后可选四种输出方式Copy to clipboard仅 Mac使用pbcopyUpdate existing PR使用gh pr editSave to file写入指定文件Display only仅展示手动复制。四、标签安全红线:tag只能写在 Validation Steps这是本技能最重要的安全规则。CI 侧的 scripts/pr-tags-parse.sh 用原始正则grep -o :[a-zA-Z0-9_-]*扫描整个 PR 描述文本来提取标签它不感知 Markdown 结构——任何位置出现的字面量:tag子串都会触发对应套件的 CI 任务无论是在哪个分区、是否被反引号包裹、是真实指令还是仅仅是正文里提到标签名都会被当作指令反引号包裹不能起到保护作用已在 PR #14734 上确认。所以规则是字面量字符串:加标签字符只能出现在 Validation Steps 分区且只为确实希望 CI 运行的标签其余位置Summary、QA Notes、解释影响范围的列表等一律用不带:前缀的区域名称描述。例如写 the sessions, apps, and viewer suites 或 affects thesessionshelper broadly绝不写 :sessions :apps :viewer 作为括号补充。即使 PR 本身是修复标签自动检测逻辑也要遵守同一规则——用标签名描述不要拼出:形式。在定稿任何 PR 描述前需要扫描草稿中 Validation Steps 分区之外的:并改写掉。从源码结构看这种裸子串匹配的设计是为了让标签解析脚本保持简单和健壮scripts/pr-tags-parse.sh 中的匹配都是直接对规范化后的 PR 描述做grep -q。该脚本还有更精细的边界处理例如:workbench用grep -qE :workbench([^a-zA-Z0-9_-]|\$)匹配裸标签而不会误触发:workbench-stable:connect也做了边界匹配避免与共享前缀的:connections冲突。此外CI 会把作者手写标签与 test/e2e/infra/test-runner/test-tags.ts 中的真实枚举比对拼错的标签如:consle会被识别为 invalid 并忽略避免静默变成匹配不到任何测试的死标签。五、测试标签体系源码级解读标签的唯一事实来源是 test/e2e/infra/test-runner/test-tags.ts。该文件按角色拆分为三个枚举再合并成统一的TestTags对象与类型让测试代码统一用tags.CONSOLE、tags.WIN等形式引用。FeatureTags功能标签对应应用的某个功能/区域在默认的 Linux/Electron 通道运行。这是唯一允许被测试变更自动标签推导选中的标签类别自动推导逻辑见 scripts/derive-test-change-tags.mjs——修改某个 e2e 测试文件会自动补上运行它所需的最少功能标签。当前功能标签包括:accessibility、:apps、:ark、:assistant、:connect、:connections、:console、:critical、:data-explorer、:debug、:duck-db、:editor-action-bar、:environment-modules、:extensions、:help、:html、:assistant-eval、:interpreter、:jupyter、:layouts、:mcp、:viewer、:editor、:quarto、:modal、:new-folder-flow、:notebooks、:positron-notebooks、:outline、:output、:packages-pane、:pdf、:performance、:plots、:problems、:publisher、:pyrefly、:references、:r-markdown、:r-pkg-development、:reticulate、:scm、:search、:sessions、:tasks、:test-explorer、:top-action-bar、:update、:variables、:welcome、:vscode-settings。新增功能标签时如果它对应某个源码目录需要把该目录加入 .github/workflows/test-tag-paths-map.json这样改动该目录的 PR 会被自动打上标签scripts/check-test-tag-map.sh 负责防止两者漂移。PlatformTags平台/通道选择标签默认情况下 PR 只在 Linux/Electron 运行测试这些标签会为每个通道拉起独立的 CI 任务其他操作系统、浏览器、Workbench/remote 通道。它们是作者控制的把标签写进 PR 描述即可不会从测试文件变更自动推导——唯一的例外是:win/:web测试文件中新增的tags.WIN/tags.WEB会通过 scripts/lib/pr-tags-lib.sh 的scan_added_platform_tags自动启用对应通道。平台标签包括:cross-browser多浏览器Chrome、Firefox、WebKit、Edge、:rocky-electron、:rocky-web、:suse-electron、:suse-web、:sles-electron、:sles-web、:debian-electron、:debian-web、:web、:web-only、:win、:workbench、:workbench-stable针对最后一个稳定 Workbench 版本而非 daily属于版本轴而非操作系统轴、:workbench-rocky、:workbench-suse、:workbench-allUbuntu Rocky openSUSE 三个 OS 通道的简写会取代而非叠加:workbench、:workbench-rocky、:workbench-suse、:workbench-snowflake、:workbench-databricks、:workbench-azure、:remote-ssh、:remote-wsl。合并与校验文件末尾用对象展开将两个枚举合并export const TestTags { ...FeatureTags, ...PlatformTags }; export type TestTags FeatureTags | PlatformTags;并通过validateTags强制所有标签符合:${string}模式。辅助脚本 fetch-test-tags.sh 源码解读技能依赖的提取脚本是 scripts/fetch-test-tags.sh位于技能目录.claude/skills/positron-pr-helper/scripts/下也可从仓库根目录的 scripts 中查看同名脚本用法./scripts/fetch-test-tags.sh [format] # format: markdown (默认), json, 或 list该脚本的特点源码可见于 .claude/skills/positron-pr-helper/scripts/fetch-test-tags.sh无需 TypeScript 编译直接用grep -E ^\s*[A-Z_]\s*\s*:解析枚举行再用sed提取:xxx标签自动分类categorize_tags按名称把标签归入 platform:web、:web-only、:win、:workbench、:rocky-electron、:rocky-web、:remote-ssh、performance:performance、special:critical三类其余全部归为 feature多种输出格式markdown 输出按 Feature / Performance / Platform / Special 四个小节分组并附带说明PR 默认只跑 Linux/Electron 测试加平台标签才能启用额外平台:critical在所有 PR 上始终运行json 输出对应四个数组list 输出纯标签列表执行快运行时间小于 1 秒。注意该脚本按名称前缀归类与 test-tags.ts 中按枚举角色归类的方式略有差异例如:cross-browser在枚举中属于 PlatformTags但脚本名称归类会把它归为 feature以枚举文件为最权威来源。六、PR Body 模板按类型套用完整的模板与写法细节见 .claude/skills/positron-pr-helper/references/pr-templates.md。技能按 PR 类型选择不同模板。Bug Fix 模板Fixes #[issue] [2-3 sentences explaining the fix] ### Release Notes #### New Features - N/A #### Bug Fixes - [User-facing description] (#[issue]) ### Validation Steps [relevant tags] [Simple test instructions]New Feature 模板Fixes #[issue] ### Summary [1-2 paragraphs explaining the feature] [Technical implementation notes if relevant] [Related PRs if applicable] ### Release Notes #### New Features - [User-facing description] (#[issue]) #### Bug Fixes - N/A ### Validation Steps [relevant tags] [Detailed test steps with code examples]其他类型模板要点UI/UX Change描述 UI 变更及改进点放截图占位Validation Steps 用带编号的导航步骤1. Navigate → 2. Perform → 3. Verify标签包含 UI 相关标签Performance ImprovementSummary 中给出 Before/After 性能特征Release Notes 增加#### Performance分区Validation Steps 必须包含:performance标签及验证性能改进的步骤Maintenance/Refactoring明确无用户可见变更Validation Steps 验证既有功能仍正常E2E Test Addition说明新增测试覆盖的行为Validation Steps 给出运行命令例如npx playwright test [test-file-name] --project e2e-electronOpening Line 与 Description 的写法规范带 issueFixes #[issue_number]每个 issue 都要有自己的关闭关键词Fixes、Closes、Resolves——Fixes #[issue1], fixes #[issue2], and fixes #[issue3]不带 issue一句简述 PR 做什么简单描述2-3 句格式为 This PR [what it does]. The [root cause/reason]. [Any important implementation detail]复杂描述使用### Summary分区可引用关联 PR例如posit-dev/ark#[number]。Release Notes 写法指南好的例子面向用户Added support for Python 3.12 virtual environmentsJupyter notebooks now support collapsible cell outputsNew keyboard shortcutkbdCmdShiftP/kbdopens command paletteFixed Data Explorer scrolling on Safari坏的例子太技术化❌ Refactored AbstractKernelManager to use dependency injection太模糊❌ Improved performance / Fixed various bugs / Updated UI原则用现在时fixes、adds、enables、主动语态、简洁、聚焦用户影响而非实现细节issue 引用放在括号内(#[issue])。七、完整示例示例 1Bug Fix PRFixes #8930 This PR fixes the Data Explorer scrollbars snapping back to 0 on Safari. The issue was caused by incorrect event handling in the virtual scrolling implementation. ### Release Notes #### New Features - N/A #### Bug Fixes - Fix Data Explorer scrollbars snapping back to 0 on Safari (#8930) ### Validation Steps :data-explorer Open a large data frame in Data Explorer on Safari and verify scrollbars can be dragged without snapping back.示例 2New Feature PRFixes #8484 ### Summary Adds support for native DuckDB connections in the Connections Pane. Users can now inspect DuckDB databases directly without needing external tools. This implementation uses the native DuckDB Python API for better performance. Related PR: posit-dev/ark#456 (adds DuckDB kernel support) ### Release Notes #### New Features - Added support for inspecting native DuckDB connections in the Connections Pane (#8484) #### Bug Fixes - N/A ### Validation Steps :connections :duck-db 1. Install DuckDB: pip install duckdb 2. Create a new DuckDB connection using the modal 3. Run the following to create test data: python conn.execute( CREATE TABLE employees ( id INTEGER, name VARCHAR, salary INTEGER ) ) conn.execute(INSERT INTO employees VALUES (1, Alice, 75000))Verify tables appear in the Connections pane### 复杂功能的验证步骤写法 复杂变更建议用编号步骤 代码示例 markdown :connections :duck-db 1. Install DuckDB: pip install duckdb 2. Create connection via File New Connection DuckDB 3. Select In-memory database option 4. Run the test script: python import duckdb conn duckdb.connect() conn.execute(CREATE TABLE test (id INT, name VARCHAR)) conn.execute(INSERT INTO test VALUES (1, test))Verify table appears in Connections paneDouble-click table to preview data### 标签选择的注意事项 - 用功能标签覆盖功能变更需要平台专属测试时再加平台标签 - 只在关键路径功能上使用 :critical - **不要过度打标签**——聚焦主要受影响区域 - 简单修复配简单指令如 :console Run any Python code in the console and verify output appears correctly.。 ### 常见模式配套 PR、破坏性变更、文档更新 - **配套 PR**多仓库依赖时按合并顺序列出如 ark 内核支持先合并本 PR UI 集成随后语言服务器支持可选 - **破坏性变更**增加 ### ⚠️ Breaking Changes 分区给出 Before/After 迁移说明 - **文档更新**引用文档仓库 PR如 Documentation: posit-dev/positron-docs#789。 ## 八、最佳实践与避坑清单 综合技能文档与仓库源码以下习惯能显著提高 PR 质量与 CI 效率 - **简洁但完整不用华丽辞藻**描述用现在时fixes、adds、enables - **Release Notes 中 issue 引用放在括号内** - **Validation Steps 至少包含一个 e2e 测试标签** - **绝不**在 Validation Steps 之外写字面量 :tag——CI 的标签解析器在正文任何位置包括散文和反引号内匹配子串都会意外触发对应套件 - 复杂变更用**编号测试步骤** - Release Notes 保持**面向用户**避免实现细节 - 避免提交信息列表式描述PR 描述应总结而非罗列、TODO 项应归入 issue、未解决的问题 - 对于跨平台风险高的变更Windows 的路径/行尾/进程/文件监视器/pty 等Web 的沙箱文件系统/子进程/IPC/storage/原生 UI/认证/生命周期等检查相关 e2e 测试是否带有 :win / :web 标签——这两个表面的 PR 时覆盖是**按标签选择加入**的默认只在 Linux/Electron 运行macOS 则只在 nightly 覆盖。 ## 九、总结 positron-pr-helper 将 Positron 的 PR 规范沉淀为一个可重复执行的工作流从 [test-tags.ts](https://link.gitcode.com/i/2cb587c856721d4163daae838e872b2f) 动态拉取标签保证信息不过期用 PETE 本地预览在开 PR 前堵住测试覆盖缺口用分类型模板保证描述结构一致用标签安全规则避免误触发 CI。理解 [scripts/pr-tags-parse.sh](https://link.gitcode.com/i/24807ef7a3f71b556386d47c4d244b54) 的裸子串提取机制是正确使用 :tag 的前提理解 [test-tags.ts](https://link.gitcode.com/i/2cb587c856721d4163daae838e872b2f) 的 Feature/Platform 角色划分是正确选择标签的前提。这套方法不仅适用于 Positron 仓库其文档驱动 CI 单一事实来源 本地预检的组合也是大型开源项目 PR 工程化的一种可借鉴范式。赞分享开发工具代码编辑器数据科学【免费下载链接】positronPositron, a next-generation data science IDE项目地址https://gitcode.com/gh_mirrors/po/positron点击查看免费下载相关推荐HCCL PR 检视规范PR 描述与测试完备性核查指南HCCL PR 检视规范PR 描述与测试完备性核查指南 导读 本文面向向 CANN / hccl昇腾集合通信库提交代码的开发者与代码检视者系统讲解 HC通信高性能计算人工智能AscendCANNPositron 仓库 PR Body 编写规范与模板参考从模板结构到 e2e 测试标签触发机制Positron 仓库 PR Body 编写规范与模板参考从模板结构到 e2e 测试标签触发机制 导读 本文基于 Positron 仓库的 PR Body 模开发工具代码编辑器数据科学Forge 的 github-pr-description 命令用 AI 自动生成高质量 PR 描述与标题的完整实践指南Forge 的 github pr description 命令用 AI 自动生成高质量 PR 描述与标题的完整实践指南 导读 github pr descr人工智能AI Agent代码智能体AI 应用CLI开发工具上一篇如何让你的ESP32开发板听懂人话5步搭建小智AI语音助手完整教程下一篇终极数据挖掘指南CodeGuide中的关联规则与聚类算法实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考