news 2026/9/10 9:10:09

PR Review Context

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PR Review Context

PR Review Context

【免费下载链接】oh-my-claudecodeTeams-first Multi-agent orchestration for Claude Code项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-claudecode

You are reviewing PR #{{PR_NUMBER}}:{{PR_TITLE}}

PR Details

  • Author: @{{PR_AUTHOR}}
  • Branch:{{HEAD_BRANCH}}{{BASE_BRANCH}}
  • URL: {{PR_URL}}
各占位符的取值来源是 GitHub CLI 的 `gh pr view` JSON 输出。见 [providers/github.sh](https://link.gitcode.com/i/66329b0431e91c65ede071b394bb96a8): ```bash provider_github_fetch_pr() { local pr_number="$1" local repo="$2" gh pr view "$pr_number" --repo "$repo" --json number,title,author,headRefName,baseRefName,body,files,url 2>/dev/null }

映射关系如下:

占位符含义数据来源(gh 字段)
{{PR_NUMBER}}PR 编号number
{{PR_TITLE}}PR 标题title
{{PR_AUTHOR}}提交者 GitHub 用户名author.login
{{HEAD_BRANCH}}源分支(待审查分支)headRefName
{{BASE_BRANCH}}目标分支(合并基)baseRefName
{{PR_URL}}PR 链接url
{{PR_BODY}}PR 描述正文body(可为空,// ""兜底)
{{CHANGED_FILES}}变更文件路径列表files[].path,最多取 50 条

值得注意的两个实现细节(均出自 psm.sh):

  • body使用jq -r '.body // ""',把缺失描述归一为空字符串,避免渲染时出现字面null
  • 变更文件通过jq -r '.files[]?.path // empty'提取并head -50截断,防止超大 PR 撑爆上下文。

2.2 PR 描述与变更文件

## Description {{PR_BODY}} ## Changed Files {{CHANGED_FILES}}

PR_BODY使 Claude 无需切换上下文即可直接读取 PR 动机与实现说明;CHANGED_FILES则给出审查范围清单,供其快速定位待审文件、决定测试执行顺序(先跑被改动文件对应的最小测试集)。这部分与.psm/review.md中注入的原始换行文本会被整体保留(多行值的安全替换详见后文第三节)。

2.3 五维审查聚焦(Review Focus)

这是模板的"质量标准"核心,Claude 被要求围绕五个维度展开审查:

  1. Code Quality(代码质量)
    • Follow existing patterns and conventions(遵循既有模式与约定)
    • Clean, readable, maintainable code(干净、可读、可维护)
    • Appropriate abstractions(恰当的抽象层次)
  2. Correctness(正确性)
    • Does it do what it claims?(是否兑现 PR 声称的功能)
    • Edge cases handled?(边界情况是否覆盖)
    • Error handling appropriate?(错误处理是否恰当)
  3. Security(安全)
    • Input validation(输入校验)
    • No hardcoded secrets(无硬编码密钥)
    • Safe dependencies(依赖安全)
  4. Testing(测试)
    • Adequate test coverage(测试覆盖是否充分)
    • Tests are meaningful(测试是否有意义)
    • Edge cases tested(边界用例是否被测试)
  5. Documentation(文档)
    • Code is self-documenting(代码自解释)
    • Complex logic explained(复杂逻辑有说明)
    • API changes documented(API 变更是否有文档)

这五维清单同时呼应了仓库中docs/shared/verification-tiers.md、agents/code-reviewer.md 与 agents/critic.md 所体现的"审查质量标准分层"理念:既有面向代码实现细节的工程质量检查,也有面向安全与测试证据的底线检查。

2.4 建议执行的命令序列

模板中嵌入了三条被注释为"审查执行抓手"的命令:

# View diff git diff {{BASE_BRANCH}}...HEAD # Run the narrowest relevant tests first # If this clean review worktree has a symlinked node_modules from the source repo, # focused vitest commands should work without a fresh install. npm run test:run -- <changed-test-paths> # preferred focused verification npm test # or appropriate full test command if focused coverage is insufficient # Check build npm run build # or appropriate build command

这段命令块设计得非常"可运行":审查 worktree 是全新检出的 PR 分支(以{{BASE_BRANCH}}为基线),因此git diff {BASE}...HEAD能精确给出相对合并基的差异;随后强调"先跑最窄的相关测试",并提示如果 worktree 与源仓库node_modules做了符号链接复用,定向 vitest 命令无需重新安装即可执行——这正是 PSM 在 worktree.sh 中实现的依赖引导(bootstrap)机制:

psm_bootstrap_review_dependencies() { ... cmp -s "$source_package_json" "$target_package_json" || return 0 ln -s "$source_node_modules" "$target_node_modules" 2>/dev/null || true return 0 }

前提与限制:只有当 worktree 与源仓库的package.json逐字节一致(cmp -s)时,才会把源仓库的node_modules符号链接到干净 worktree,从而让npm run test:run -- ...这类聚焦测试无需完整npm install。若依赖清单不一致则跳过链接,审查者需自行安装依赖。

2.5 审查检查清单(Review Checklist)

## Review Checklist - [ ] Code follows project style - [ ] No obvious bugs or logic errors - [ ] Security concerns addressed - [ ] Tests pass and cover changes - [ ] Documentation updated if needed

这份清单与 Review Focus 一一对应(风格/质量、正确性、安全、测试、文档),为审查结论提供了可勾选的证据闭环,也方便后续人工复核。

三、模板渲染与提示注入的底层实现

3.1 渲染器psm_render_template

模板中的{{KEY}}由 lib/tmux.sh 中的psm_render_template完成替换。其实现非常克制,刻意不用 sed/awk 而采用 Bash 参数展开:

psm_render_template() { local template_file="$1" shift if [[ ! -f "$template_file" ]]; then echo "error|Template not found: $template_file" >&2 return 1 fi local content content=$(cat "$template_file") for assignment in "$@"; do local key="${assignment%%=*}" local value="${assignment#*=}" content="${content//\{\{${key}\}\}/$value}" done printf '%s\n' "$content" }

该设计在回归测试 test-psm-prompt-injection.sh 中被逐条验证,并针对 PR 场景做了专门加固:

测试用例验证点
单变量替换Hello {{NAME}}!Hello World!
多变量替换PR 编号/标题/作者一次替换
未引用占位符保留未提供的{{OTHER}}原样保留,便于发现漏传
缺失模板文件返回非零退出码与错误信息
值中含/分支名feature/my-branch不被破坏
空值清除空值将占位符清空为空白
值中含&foo&bar不会被当作 sed 反向引用(这正是规避 sed 的原因)

3.2 依赖检测与多行安全

多行值(PR_BODYCHANGED_FILES)能安全注入,得益于 Bash${content//pattern/value}天然支持跨行字符串——这是比逐行 sed 更稳健的选择。此外渲染失败时的降级路径在 test-psm-prompt-injection.sh 的cmd_review simulation用例中有端到端模拟:渲染后写入 worktree 的.psm/review.md必须存在,且 PR 编号、标题、作者、URL、head/base 分支全部无残留占位符。

3.3 REPL 就绪检测与提示注入

模板被渲染成.psm/review.md之后,还需要"送进"正在启动的 Claude Code。这由psm_inject_prompt完成(见 lib/tmux.sh):

psm_inject_prompt() { ... if ! psm_wait_for_claude_prompt "$session_name"; then echo "warn|Timed out waiting for Claude prompt; task context not injected" >&2 return 0 fi local trigger="Read ${context_file} for full task context, then begin." tmux send-keys -t "$session_name" -l -- "$trigger" sleep 0.15 tmux send-keys -t "$session_name" Enter return 0 }

【免费下载链接】oh-my-claudecodeTeams-first Multi-agent orchestration for Claude Code项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-claudecode

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 9:08:26

编码器阻尼力检测原理与高精度测量关键技术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 9:08:23

主从博弈在综合能源系统调度优化中的应用与Matlab实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 9:06:44

国内主流Agent产品怎么选?平台、框架、垂直产品对照与踩坑实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 9:06:00

AI外呼可以设置拨打时间段规避封号吗?合规策略解析

数据截止日期&#xff1a;2026年9月5日本文为第三方自媒体独立评测内容&#xff0c;非厂商官方宣传作者资质说明&#xff1a;行业第三方通信服务行业内容研究者&#xff0c;仅基于公开行业资料整理输出适配发布渠道&#xff1a;本文适配发布渠道为第三方自媒体平台&#xff0c;…

作者头像 李华
网站建设 2026/9/10 9:05:22

CANN/GE图引擎GetOutputDesc API

GetOutputDesc 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow …

作者头像 李华