<Repo> <VERSION> — PR Triage

发布时间:2026/9/7 2:19:24
<Repo> <VERSION> — PR Triage — PR Triage【免费下载链接】voiceboxThe open-source AI voice studio. Clone, dictate, create.项目地址: https://gitcode.com/GitHub_Trending/voicebox1/voiceboxWorking doc for tracking which open PRs land in . Delete after release cut.Last updated:ProgressTier 1: 0 / N mergedTier 2: 0 / M handledSupersede triage: pendingMerge for — critical bug fixesPRStatusSizeWhat it fixesWhy must-have#123[ ]5/-0......Strong candidate — needs a quick reviewPRStatusSizeSummaryClose as supersededPRStatusReasonDefer to NEXT_VERSION#xxx ... — reasonOrder of attackClose superseded PRs (one-liner comments)Merge tier-1 in dependency-free batches — check file paths dont overlapReview tier-2 individuallyRerundraft-release-notesto pick up everythingRunrelease-bump文档明确指出**Progress 头部是全文最重要的部分**——它既是记分牌也保证会话中断后可以干净地续作。这条与后续第 10 步呼应每一次合并、关闭、follow-up 之后都要更新该文档因为丢失文档就是丢失整个会话状态。 ## 第五步逐 PR 执行合并循环 对 tier-1 / tier-2 列表中的每个 PR 执行 a–g 七个动作。 **a. 在 review worktree 中 checkout** bash cd ../voicebox-pr-review git checkout pr-review-VERSION # 先重置到中性基点 gh pr checkout Nb. 读实际的提交而不是main..HEADgit show HEAD # PR 的改动本体 git show --stat HEAD # 触碰的文件 行数技能文档用加粗警告绝不要用git diff main..HEADreview 一个比 main 老的 PR 分支。那个 diff 会把PR 分叉之后 main 上落下的每个提交都显示为-删除行——一个 3 行的 PR 会伪装成 700 行的 revert。文档称这是误判一个 PR 的最容易的方式。c. 评估关注点正确性、改动范围、与已合并工作的交互、版本兼容性例如不能用到一个当前依赖版本尚未固定的 API。d. 若分支落后于 main则 rebasegit fetch origin main git rebase origin/main这一步在 squash 合并前是必须的。原理GitHub 的 squash 计算的是diff(PR-head, merge-base)——分支陈旧时这个 diff 会包含回滚中间所有提交的内容。rebase 把 merge-base 前移squash 结果才干净。e. 若maintainerCanModify为真把 rebase 后的分支推回贡献者的 forkgit remote add author https://github.com/author/repo.git git fetch author branch # 先取对方的 ref git push author HEAD:branch --force-with-lease这保证 GitHub 的 PR 页面与 rebase 后的状态一致从 GitHub 侧看合并是干净的。f. 合并gh pr merge N --squashg. 更新 triage 文档——把勾选项翻成✅ merged sha短 SHA 取自gh pr view N --json mergeCommit --jq .mergeCommit.oid[0:7]并同步 Progress 头部。第六步批量合并微型修复满足以下全部条件的 PR 可以跳过逐 PR 仪式在一个循环里直接合并改动 ≤5 行、CI 干净、文件路径不重叠、意图显然正确如单行依赖放宽、加环境变量、修 import 路径。for pr in 425 384 416 429; do echo Merging PR $pr gh pr merge $pr --squash done合并后必须验证每一条都干净落地for pr in 425 384 416 429; do gh pr view $pr --json state,mergeCommit --jq {pr: $pr, state, sha: .mergeCommit.oid[0:7]} done第七步合并后的 follow-up 策略有时一个 PR 带着一个已知的小问题也值得合并文档举例不完整的 dtype map、遗留的 stale sentinel 清理。原则是不要用 follow-up 阻塞合并——先合并紧接着在主 worktree 里以正常分支 PR方式补上cd main-worktree git pull --ff-only origin main git checkout -b fix/short-name # edit... git commit -m fix(area): one-liner git push -u origin fix/short-name gh pr create --title ... --body Follow-up to #N. ...两个 SHA本 PR 与 follow-up PR都要记入 triage 文档✅ merged pr-sha follow-up pr。文档同时给出例外条款直推 main 只在显式、有限范围的政策下例如release speedrun允许不要把它当默认。第八、九步Supersede 关闭与 Partial-apply 模式Supersede 的标准动作是关闭时附一条指向取代者的信用评论gh pr close N --comment Closing — superseded by merged #M which landed brief description. Thanks!再次强调先看 diff 再下结论标题相似不够。如果 PR 只是部分被取代诊断正确但只有一半改动仍然需要走 partial-applycd main-worktree git pull --ff-only origin main # 从 PR 分支按文件 cherry-pick git checkout pr-commit-sha -- file1 file2 # review 暂存区按需调整 git diff --cached # 对不想整体覆盖的文件做外科式编辑 # 例如 PR 里的文件早于 main 上需要保留的近期提交 # 提交并用 trailer 记原始作者的功劳 git commit -m $(cat EOF subject body explaining what was kept vs dropped Co-Authored-By: author noreplygithub.com EOF ) git push ... # 分支 PR除非处于直推 main 例外然后关闭该 PR用评论说明哪些内容被应用、哪些被丢弃并引用被应用的 commit SHA。第十、十一步文档保鲜与完成判定每一步都更新VERSION_PR_TRIAGE.md它是会话日志中断后第二天续作时是我在哪的唯一事实来源。triage 完成的判定文档中每个 PR 都有终态✅ merged / ✅ closed / deferredProgress 头部每个 tier 都显示 N/N下一个要跑的技能是draft-release-notes针对新 main 重新生成[Unreleased]然后release-bump。发布后可以删除 triage 文档也可以留在版本历史里作为记录。技能总结的深坑以及它们在 Voicebox 仓库中的对应证据Gotchas一节是这个技能最有复用价值的部分——多数条目直接对应 Voicebox 仓库里真实存在的实现。逐条对照1. 陈旧分支上的main..HEAD会撒谎。它把分叉后 main 新增的内容全部显示为删除行。永远用git show HEAD看 PR 的实际提交。这是文档在 Notes 中自称本技能最重要的一行。2. Squash 合并未 rebase 的分支会回滚中间的工作。Squash 计算diff(PR-head, merge-base)rebase 把 merge-base 前移。对应第五步 d。3.mergeableUNKNOWN是瞬态。GitHub 在推送后重新计算中直接尝试合并即可。4. 路由注册顺序在 FastAPI 中很关键。文档原文DELETE /history/failed必须先于DELETE /history/{id}注册否则参数化路径会把failed当成 ID 消费。这条在 Voicebox 后端中有直接对应backend/routes/history.py 中固定资源路由router.delete(/history/failed)L65–L69供 UI 的 Clear failed 按钮使用确实定义在参数化路由router.get(/history/{generation_id})L72 起之前——同文件中/history/statsL35同样位于/history/{generation_id}之前可见这是一个贯穿该文件的注册顺序约定。5. Apple 的-weak_framework会覆盖同名 framework 的-framework与顺序无关。当依赖硬链接了某个可选框架时应通过cargo:rustc-link-arg-Wl,-weak_framework,Name处理。Voicebox 的 tauri/src-tauri/build.rs 正是这么用的其中对ScreenCaptureKit输出cargo:rustc-link-arg-Wl,-weak_framework,ScreenCaptureKitL10因为 ScreenCaptureKit 是 macOS 上按需链接的可选能力与仓库的系统音频捕获模块tauri/src-tauri/src/audio_capture配套。6. 依赖版本下限约束你能套用多少内容。文档举例在接受torch_dtype→dtype这类 kwarg 改名前要检查最小版本 pin 是否支持它有时正确动作就是 cherry-pick PR 的一半。仓库中 backend/backends/hume_backend.py 在加载 Hume 模型时仍使用torch_dtypemodel_dtypeL190与该提示的场景吻合。7.cpal::Stream等!Send音频类型不能跨await点或spawn_blocking移动。此时不理想但正确的同步等待有时就是能选的最佳修复——标记问题但不要阻塞合并。仓库的 Tauri 端确以 cpal 0.15 作为音频栈见 tauri/src-tauri/Cargo.toml且cpal的Stream在 tauri/src-tauri/src/audio_output.rs 与各平台 audio_capture 实现 中均为非Send类型这一条是其在 Rust/Tokio 环境下的直接工程约束。8. PyTorch nightly 构建不可用于发布。非确定性、可能逐次回归。若某 PR 建议切到 nightly 修 GPU 问题优先TORCH_CUDA_ARCH_LIST...PTX或等稳定版支持。CHANGELOG.md 中有对应先例曾通过TORCH_CUDA_ARCH_LIST加入sm_120PTX为 Blackwell 架构做前向兼容一次关闭 #386/#395/#396/#399/#400 五个报告docs/content/docs/overview/gpu-acceleration.mdx 也记录了构建以TORCH_CUDA_ARCH_LIST...12.0PTX固定的做法。Canonical 命令速查技能末尾给出的命令参考原样保留N为 PR 编号# 批量 PR 元数据 gh pr list --state open --limit 50 --json number,title,author,mergeable,mergeStateStatus,additions,deletions,maintainerCanModify,files # 单个 PR 详情 gh pr view N --json body,author,headRefName,baseRefName,mergeable,maintainerCanModify,files,statusCheckRollup # 实际提交而非 branch-vs-main diff git show HEAD git show --stat HEAD gh pr diff N # 把贡献者分支 rebase 到当前 main git fetch origin main git rebase origin/main # 把 rebase 推回贡献者 fork要求 maintainerCanModifytrue git remote add author https://github.com/author/repo.git git fetch author branch git push author HEAD:branch --force-with-lease # 合并 gh pr merge N --squash # 取合并 SHA 记入 triage 文档 gh pr view N --json state,mergeCommit --jq {state, sha: .mergeCommit.oid[0:7]} # 关闭被取代 PR gh pr close N --comment Closing — superseded by merged #M. Thanks!【免费下载链接】voiceboxThe open-source AI voice studio. Clone, dictate, create.项目地址: https://gitcode.com/GitHub_Trending/voicebox1/voicebox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考