mcpField
D
docs-review-pr

docs-review-pr

github.com/elastic测试与质量7249 次安装2 天前更新
代码仓库

关于 docs-review-pr

docs-review-pr 是用于审查 Elastic 文档拉取请求的只读技能。它调度现有审查技能,并将结果整合为涵盖六项标准的报告,附上处理建议。

主要功能

  1. 01按六项标准进行完整审查
  2. 02调度配套审查技能
  3. 03将发现整合为清单报告
  4. 04建议批准、评论或请求修改
  5. 05只读,不向 GitHub 发帖

适用场景

  1. 01审查 Elastic 文档拉取请求
  2. 02汇总风格、元数据和代码示例问题
  3. 03在决定如何处理 PR 前生成完整报告

MCP 相关

如果 elastic-internal-docs MCP 可用,该技能会从规范审查页面更新评审标准;不可用时也可使用本地参考文件继续审查。

安装

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

$npx skills add https://github.com/elastic/elastic-docs-skills --skill docs-review-pr

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

附带文件evals/evals.jsonreferences/review-criteria.md

详细介绍

你会依据文档团队的审查清单,审查 Elastic 文档拉取请求。你会针对全部六项审查标准——用户关注度、技术准确性、适用性、可维护性、语言和风格——汇总成一份报告,并建议批准、发表评论还是要求修改。

你是一个编排器。目录中已有检查风格、标签、内容类型、矛盾、元数据和代码示例的技能。你会调度这些技能,并将其发现整合到清单结构中。不要重新实现它们的评估标准。

此技能刻意省略了 context: fork,而目录中的大多数技能都设置了该项。它必须留在主上下文中,才能通过 Skill 和 Agent 工具调度配套技能,并在第 1 步询问用户是否执行 gh pr checkout。每个配套技能都会自行分叉,因此其输出不会留在上下文中。

此技能始终执行完整审查。 没有轻量或简单模式。审查者自行决定如何处理报告;你的任务是提供完整情况。

限制

此技能为只读。

  • 绝不编辑文件。绝不在暂存区以外写入文件。
  • 绝不向 GitHub 发布内容。绝不运行 gh pr review、gh pr comment 或 gh pr merge。
  • 以仅报告模式调度所有配套技能,以确保此限制也能传递生效。有两个配套技能在允许的情况下可以写入:docs-applies-to-tagging 声明了 Edit,其 validate 模式会报告或修复问题;docs-validate-code-samples 声明了 Write,可以写入输出文件。这两个技能只能通过子 Agent 路径运行,在生成提示中可以禁止写入——参见第 3 步。
  • 唯一例外是第 1 步中的 gh pr checkout:你可以提出执行该命令,但只有在用户同意后才能运行。

输入

$ARGUMENTS 是 PR 编号、GitHub PR URL、文件或目录。如果为空,则针对其基分支审查当前分支。

第 0 步:加载评估标准

始终读取此文件旁的 references/review-criteria.md。这是评估标准;无需网络、MCP 或身份验证即可使用——适用于 Agent 工作流和 CI 场景。

然后,如果 elastic-internal-docs MCP 可用,则通过 get_internal_document_by_url 并设置 includeBody: true,从规范页面刷新评估标准:

页面URL
文档审查清单/r/docs-content-internal/processes/docs-review-checklists
PR 审查指南/r/docs-content-internal/processes/pr-reviews

若获取的页面内容与本地文件不同,以页面内容为准,并在报告中注明任何冲突。如果 MCP 不可用或未通过身份验证,仅使用参考文件即可——请在报告标题中注明 Rubric source: references/review-criteria.md (MCP not reachable),让读者知道评估标准未刷新。

第 1 步:确定目标

$ARGUMENTS解析方式
PR 编号或 GitHub PR URL运行 gh pr view <n> --json number,title,body,author,labels,files,baseRefName,baseRefOid,headRefName,headRefOid,headRepository,isCrossRepository,url 和 gh pr diff <n>
空将当前分支与其派生自的分支进行比较。先检查此分支是否已有 PR——如果存在,直接运行不带编号的 gh pr view 即可找到该 PR。如果存在,则使用该 PR 并运行仅适用于 PR 的检查。只有不存在 PR 时才跳过这些检查
文件或目录路径将其中的文件视为审查范围。没有 diff,因此每一行都在范围内——无法区分新增内容和既有内容;第 5 步必须说明这一点,不得猜测。跳过仅适用于 PR 的检查

在报告标题中说明使用了哪种输入模式,以及是否有 PR 元数据。存在开放 PR 的分支要进行完整审查;没有 PR 的分支和路径输入则不进行仅适用于 PR 的检查。读者需要了解这一点。

在每种模式下解析基准分支

在此步骤的后续部分中,$BASE 和 $BASE_REPO 用于读取已删除的页面;在第 5 步中,它们用于限定检查范围。无论使用哪种模式,都要在解析目标时设置它们,而不只是审查分支时设置。如果 PR 审查进行到读取已删除页面时仍未设置它们,就会运行 git fetch "https://github.com/.git" "",并报出不易理解的错误。

PR 模式——从 PR 本身获取这两个值。gh pr view 没有 baseRepository 字段,因此基准仓库取自 PR URL:

BASE=$(gh pr view <n> --json baseRefName -q .baseRefName)
BASE_REPO=$(gh pr view <n> --json url \
  -q '.url | capture("github\\.com/(?<r>[^/]+/[^/]+)/pull").r')

分支模式——向 GitHub 查询该分支的目标分支,并在查询失败时回退到仓库默认分支。不要使用上游跟踪分支(@{u}):它代表分支推送到的位置,而不是分支基于的位置。因此,对于已推送的分支,它会解析到该分支自己的远程副本,差异结果为空,最终你会报告对空内容的审查结果正常。

BASE=$(gh pr view --json baseRefName -q .baseRefName 2>/dev/null) \
  || BASE=$(gh repo view --json defaultBranchRef -q .defaultBranchRef.name)
BASE_REPO=$(gh repo view --json parent,nameWithOwner \
  -q 'if .parent then .parent.nameWithOwner else .nameWithOwner end')
git fetch "https://github.com/$BASE_REPO.git" "$BASE"
git diff -U0 "$(git merge-base HEAD FETCH_HEAD)"...HEAD

路径模式——没有差异,也没有基准分支。将两者都留空,跳过所有依赖它们的步骤,并将这些检查标记为未检查——没有可供比较的基准分支。

这些步骤特别注意了两点:

  • 不带编号运行 gh pr view 时,如果当前分支存在 PR,就会解析该 PR。这是判断分支目标的最可靠方式。如果命令成功,说明该分支有 PR:应复用该 PR 的元数据来检查标签、作者和正文,而不是将仅适用于 PR 的检查标记为已跳过。
  • 从基准仓库获取基准分支,而不是从 origin 获取。 在基于 fork 的克隆中,origin 指向 fork,因此 origin/main 是贡献者的 main 副本——可能已过时,也可能完全不存在——与之进行差异比较会得出错误的变更文件集。通过 URL 获取到 FETCH_HEAD,就无需关心任何本地远程究竟指向哪里。

如果最终差异为空,请停止并说明这一点,不要报告审查结果正常——空差异几乎总是意味着基准分支解析错误,而不是没有内容需要审查。

确认工作树与 PR 一致

请在读取任何文件之前执行此操作。第 4 步中的几项检查——孤立图片、缺失的重定向、父页面中的交叉引用——都会搜索本地仓库。如果此处检出的不是 PR 的 head ref,这些搜索就会读取另一棵工作树,导致你信心十足地报告错误结果。

比较提交,而不是分支名称。本地分支可能与 PR 的 head 同名,却指向完全不同的位置。因此:

  1. git rev-parse HEAD 必须与 headRefOid 相同。仅此一项检查就涵盖了分支名称、fork 和过时状态——提交匹配就表示工作树匹配。
  2. 如果不匹配,请先确认你位于正确的仓库中。将 gh repo view --json nameWithOwner 的结果与 PR 的base 仓库(PR URL 中的 owner/name)进行比较;按 owner/name 比较,绝不要按 remote URL 字符串比较,因为同一仓库的 SSH 和 HTTPS 形式在文本上不同。

绝不要将本地仓库与 headRepository 比较。 对于 fork PR(isCrossRepository: true),head 仓库是贡献者的 fork,任何人都没有检出这个仓库。Fork PR 是从 base 仓库的克隆中审查的:gh pr checkout 会将 fork 的 head 获取到该仓库的本地分支中。与 headRepository 比较会导致每个 fork PR 都被判定为仓库错误——而这些贡献恰恰最需要仔细审查。

  • 提交匹配——继续。

  • 不是 Git 仓库,或不是 PR 的 base 仓库——停止。告诉用户应从哪个仓库运行。

  • 仓库正确,但 ref 错误——先使用 git status --porcelain --untracked-files=no 检查是否有未提交的工作。只有已跟踪的修改会阻止切换:如果存在此类修改,不要提议检出,并告诉用户先暂存或提交。未跟踪文件不会阻止切换,因为 gh pr checkout 不会动它们——提及这些文件,然后继续。如果没有阻碍,请询问是否运行 gh pr checkout <n>,并等待答复。未经同意,绝不要检出。

  • 用户拒绝检出——以降级模式继续。将每个已更改文件写入各自的临时路径,并保留其相对于仓库的目录结构,然后审查这些副本:

    SCRATCH=$(mktemp -d)                       # create it once, reuse for every file
    mkdir -p "$SCRATCH/$(dirname <path>)"
    gh api "repos/{owner}/{repo}/contents/<path>?ref=<headRefOid>" --jq .content \
      | base64 -d > "$SCRATCH/<path>"
    

    在首次 fetch 之前创建 $SCRATCH,并告知用户该路径,以便用户检查你审查的内容。

    重定向到文件是关键所在——将解码后的内容输出到 stdout,会导致后续的 Read、Grep 和配套步骤没有可供打开的内容。将配套步骤分派到临时路径。将第 4 步中所有仓库卫生检查标记为未检查——针对不同的 ref 运行,因为仓库的其余部分仍处于错误的提交。不要报告这些检查通过。

阅读变更文件

从头到尾阅读每个发生变更的 .md 文件,而不只是差异代码块。H1 的准确性、告警内容的排列、内容位置和标题结构都是页面级属性,无法从差异代码块中看出。

已删除和已重命名的页面需要读取基线版本。 检出 head 引用后,已删除的页面或重命名操作的源文件就不在磁盘上了,而这些文件正是孤立资源和重定向检查所依赖的内容。请从基线版本读取。

基线提交通常不在本地克隆中,因此读取前请先获取它,否则 git show 会报错,提示对象不存在:

git fetch "https://github.com/$BASE_REPO.git" "$BASE"
git show "$(git merge-base HEAD FETCH_HEAD)":<path>

如果无法获取 — 例如克隆是浅克隆,或无法访问基线仓库 — 请改用 API 读取文件,并使用 gh pr view 输出中的 baseRefOid:

gh api "repos/{owner}/{repo}/contents/<path>?ref=<baseRefOid>" --jq .content | base64 -d

如果两种方法都不可行,请将孤立资源和重定向检查标记为 未检查 — 基线版本不可用。不要推测已删除页面的内容。

也要阅读差异中的非 Markdown 文件。 导航文件(toc.yml、docset.yml)和重定向文件都是变更的一部分,它们决定页面能否成功构建并保持可访问。即使六项标准针对的是正文内容,这些文件也在检查范围内。

记录差异实际涉及的行:PR 使用 gh pr diff <n>,分支使用 git diff -U0 <base>...HEAD。仅列出文件名还不够:第 5 步需要行范围,以区分本 PR 引入的内容和它只是邻近的内容。对于文件或目录输入,不存在差异,因此应将每一行都视为检查范围内的内容,并在报告中说明这一点,不要猜测哪些行是新增的。

第 2 步:记录作者信号

根据 PR 审查指南。此信息用于调整审查重点,而不是审查深度 — 完整清单无论如何都要执行。

作者重点关注
Developer通常可以认为技术信息正确。重点关注语言和风格。
Writer,且标记了 Developer注意待完成的技术审查可能会引发值得重新审查的重大改动。
非 Writer、非 Developer(例如面向客户的团队)除了错字修正外,都应指出应由具备相关专业知识的 Writer 负责;同时可能仍需要技术审查人员参与。

gh pr view 会显示 GitHub 登录名,而不是角色。只有基于真实证据 — 例如你能看到的团队成员身份、PR 对自身的描述、作者通常参与的仓库 — 才能推断作者类型。证据不足时,记录 作者信号:未知,不调整审查重点。凭空认定作者类型会悄然改变整个审查过程。

在报告标题中用一行记录此信息。

第 3 步:调度辅助技能

每个满足 Gate 条件的辅助技能都会在每次审查中运行——没有任何级别会跳过辅助技能。两个 Gate 是有条件的,因为代码示例验证器无法对没有代码块的 PR 提供意见,而标记技能也无法对完全未涉及 applies_to 的差异提供意见。调度前请检查 Gate 列。不要在不适用的 PR 上运行受 Gate 条件限制的辅助技能。

#辅助技能调度方式Gate发现报告归属
1docs-check-style任一始终语言、风格
2docs-flag-jargon-skill任一始终语言
3docs-content-type-checker任一始终用户关注点
4docs-check-contradictions任一始终技术准确性
5docs-frontmatter-audit任一始终用户关注点
6docs-applies-to-tagging仅子 Agent差异涉及 applies_to 或特定版本的内容适用性
7docs-validate-code-samples仅子 Agent差异新增或更改了代码块技术准确性

七个辅助技能,分别调度七次。绝不要将两个合并到一次调用或一个子 Agent 中。 最后一列说明辅助技能的发现报告在哪里;它不是分组依据。辅助技能 1 和 2 都归入语言,3 和 5 都归入用户关注点,但它们各自都需要单独调度,并使用各自的评估标准——将它们捆绑在一起,就意味着其中一个评估标准不会运行,而运行表却会声称已覆盖你实际上未覆盖的内容。

五个始终满足 Gate 条件的辅助技能,每次审查都必须调度,无一例外。“未调度”绝不是它们的有效结果——如果无法联系到某个辅助技能,应标记为未安装或未返回结果,并据此报告。

每个辅助技能都对应六个报告部分之一。不会产生第七部分——docs-frontmatter-audit 的发现应归入用户关注点,作为可查找性和元数据相关内容。

如何调度

Companions 可由模型调用,因此无论它们是单独安装,还是作为 elastic-docs-skills 插件的一部分安装,都可以通过 Skill 工具访问。唯一的例外是 docs-validate-code-samples:由于它可以写入文件,因此保留了 disable-model-invocation: true;它始终走子 Agent 路径,由子 Agent 从磁盘读取其 SKILL.md,不受该标志影响。

Path 列决定每个 companion 使用哪条路径。只读 companion 会先尝试路径 1,如果失败则转到路径 2;可写 companion 则直接使用路径 2。记录每个 companion 实际使用的路径,并报告出来。

  1. Skill 工具——仅适用于 Path 列中标明的只读 companion。将一个待审查文件作为 args 传入。使用插件前缀形式的 frontmatter 名称 elastic-docs-skills:docs-content-type-checker,这是 README 中说明的形式。如果带前缀的名称被拒绝,则改用不带前缀的名称。如果某个副本作为项目 skill 安装在 .claude/skills/ 下,它响应的是目录名称,而不是 frontmatter 中的 name,因此最后再尝试这种形式。

    声明了 Edit 或 Write 的 companion 绝不能走此路径。 在 Skill 调用中,唯一可控的是 args;礼貌地请求验证并不能保证不写入:docs-applies-to-tagging 会将文件路径视为验证模式,而验证模式仍会报告问题或进行修复。只有子 Agent 启动提示才能真正禁止写入,因此 applies-to-tagging 和 docs-validate-code-samples 始终使用路径 2,即使 Skill 工具接受它们也不例外。

    每次调用处理一个变更文件。 Companion 声明了 <file-or-directory> 并对 $ARGUMENTS 使用 glob,因此以空格分隔的文件列表会被视为一个无效路径,而不是多个有效路径。每个变更文件调用一次。只有当目录恰好包含所有变更文件且不包含其他内容时,才传入目录;否则 companion 会对无关页面执行 glob 操作,导致其发现的问题混入报告并影响建议。如有疑问,每次调用只传一个文件。两种调度路径都遵循此规则。

  2. 子 Agent。 可写 companion 必须使用此路径;如果 Skill 的两种名称形式都被拒绝或未列出,也使用此路径。每个 companion 启动一个子 Agent,并在同一条消息中启动所有子 Agent,使它们并行运行。每个子 Agent:

    • 通过 glob 查找 companion 的 SKILL.md:~/.claude/skills/*/SKILL.md、~/.claude/plugins/**/skills/**/SKILL.md,以及本地仓库的 skills/**/SKILL.md;匹配目录名称或 frontmatter 中的 name: 字段。
    • 按原样对变更文件执行这些说明,将 $ARGUMENTS 替换为单个路径——一个文件或共同的父目录——并遵循与路径 1 相同的单个目标规则。
    • 返回简洁的问题列表:文件、行号、严重程度、发现的问题。不要返回 companion 的完整报告。

    阅读 companion 的评审标准可以让此 skill 保持精简。切勿将 companion 的规则复制到此文件中。

  3. 未安装。 如果找不到某个 companion,将其对应标准标记为 未检查 — 未安装 <skill>,并提供安装命令:

    npx --yes skills@latest add elastic/elastic-docs-skills --skill <name> -g
    

    使用 companion 的 frontmatter name:——docs-check-contradictions,而不是其 check-contradictions 目录。这是安装命令所需的名称。调用名称则是另一个问题:如果某个副本作为项目 skill 安装在 .claude/skills/ 下,它响应的是目录名称,因此在报告 companion 未安装之前,先尝试这种形式。

绝不要代替未运行的协作工具

无论协作工具未产出结果的原因是什么——未安装、拒绝执行、出错,或已调度但始终没有返回——本规则都适用。

  • 不要自行编写该协作工具负责的检查项的发现,也不要把这个缺口标记为手动评估。你自己的检查属于第 4 步的清单,不能替代协作工具的评估标准;这正是协作工具存在的全部意义。
  • 将该检查项标记为 Not checked,说明是哪个协作工具以及原因,然后到此为止。你手动补全后看起来已覆盖的检查项,比坦承缺口更糟,因为没人能从报告中分辨两者。
  • 唯一的例外是你确实在第 4 步自行发现的问题。将其来源标记为 docs-review-pr,并单独列出——绝不要把它合并到缺失协作工具对应的条目中。
必须仅报告,不得修改

在 Skill 路径中,传入的参数只能要求验证或审查,绝不能要求生成或修复——并且要记住,这只是请求,并非强制要求,因此具有写入能力的协作工具不会被纳入该路径。在子 Agent 路径中,请在生成提示词中原样加入以下内容:

不要编辑或写入任何文件。不要修改工作树。只返回发现的问题。

报告前等待所有协作工具完成

两种调度路径都会分叉并在后台运行。结果会以通知的形式送达,而不是作为你所调用内容的返回值。

  • 在所有已调度的协作工具都返回之前,不要开始第 5 步。
  • 绝不要预测、总结或捏造待返回的协作工具会说什么。伪造协作工具的输出是此技能可能出现的最严重错误,因为报告格式会让内容看起来像是有据可查且经过核实。
  • 如果协作工具出错或始终没有返回,将其检查项标记为 Not checked — companion did not return,然后继续处理其余部分。不要用自己的评估填补缺口;请参阅绝不要代替未运行的协作工具。

**撰写报告前,先核对数量。**运行表必须恰好有 7 行,与调度表中的每个协作工具一一对应。所有始终必须调度的协作工具,其状态都必须是 Ran、Not installed 或 did not return——绝不能是 Not dispatched。如果某行显示跳过了某个协作工具,说明你要么漏掉了它,要么把它合并到了另一次调用中;请返回并调度它。

第 4 步:执行协作工具未覆盖的检查

这是你对审查的独立贡献。每条发现都必须限定在 PR 的变更范围内。

关注用户
  • 变更满足用户的任务需求,并且放在页面上的正确位置。
  • 段落简短,并使用列表、表格和提示框来拆分密集内容。
  • 引导句应明确主题范围,并告诉读者该如何理解后文。
  • 应说明功能或路径带来的益处,而不只是描述其运作方式。请从三个方面检查:引言/说明(用户受益,而不只是运作方式)、每个决策点(权衡取舍,而不只是分别描述两个选项)以及标题(页面是否兑现了标题的承诺?)。
  • 评估并更新所有受影响的页面,包括使用了新引入概念的参考页面。
  • 应在父页面中结合产品全局情况说明新功能。
  • **页面必须在 frontmatter 中通过 type: 声明内容类型。**如果 docs-content-type-checker 将页面识别为操作指南、教程、概览或故障排除页面,而 frontmatter 中没有 type: 字段,请建议添加该字段,并指出应填写的类型。无论是新页面还是经过编辑的页面,都要进行这项检查:现有页面未必套用过模板,因此最常缺少此字段。即使目前还没有任何内容使用该字段,也要提出建议。如果对内容类型提出结构性发现,却没有对应的标签来说明该类型,就会让读者自行推断你已经确定的结论。
易发现性和逻辑流程
  • 页面位于信息架构中的正确位置。
  • 父页面中有交叉引用指向该页面,避免用户无所适从。使用 Grep 在仓库中搜索指向任何新增或迁移页面的链接。
  • 在可行的情况下,标题长度约为 50–60 个字符,并能与类似页面清晰区分。
  • 页面按递进顺序披露信息,让读者按需获取内容。
  • 警告和注意事项应出现在其所警示的步骤或内容之前,而不是之后。
  • 概念选择应使用对比项;选项的价值主张应靠近决策点;分支决策应使用嵌套导航。
  • 没有其他现有页面已经涵盖此主题。请使用页面主题调用 elastic-docs MCP 工具 find_related_docs 进行检查。
技术准确性的证据

你无法确认某项更改是否经过主题专家(SME)审核,但可以报告是否存在相关证据。

  • 查看 PR 正文、评审评论、分支名称以及任何关联的 issue,确认是否有 SME 签字认可、工程评审或权威来源。
  • 检查新增代码示例是否注明已经过测试。
  • 明确说明结论:证据存在及其所在位置,或证据缺失。切勿根据自信的措辞推断技术正确性。
对照所描述的代码更改检查文档

当证据涉及代码 PR 或提交时——例如 elastic/elasticsearch#12345、GitHub PR URL、“Docs for kibana#678”或以 issue 命名的分支——不要只停留在记录其存在。请阅读并进行对照。关联的代码更改明确了仓库、引用和版本,因此这是唯一一项无需猜测该信任哪个来源即可执行的技术检查。如果未引用代码更改,请跳过整个部分;切勿为了检查而主动寻找代码更改。

  1. 解析引用并阅读双方内容:

    gh pr view <n> --repo <owner/repo> --json title,body,state,mergedAt,baseRefName,files
    gh pr diff <n> --repo <owner/repo>
    

    使用 --repo 传入编号,或传入完整的 PR URL。简写形式 gh pr view elastic/elasticsearch#12345 不起作用——gh 会将其视为分支名称,并报告未找到 PR,看起来像是 PR 缺失,而不是命令错误。

  2. 从代码差异中提取可核查的事实:设置、标志和参数名称;默认值、限制和枚举值;错误及日志消息文本;以及新增或更改的测试。与注释相比,测试对预期行为的断言通常更可靠。

  3. 将每项事实与文档更改所声称的内容进行对照。在“技术准确性”部分报告结果,并引用代码 PR 及其差异中的文件,让撰写者可以沿着相同路径进行核查。

有四点必须注意,因为每一点都可能让人自信地得出错误结论:

  • 版本。 代码 PR 的 baseRefName 会告诉你它合并到哪个分支。请将其与页面的 applies_to 交叉核对。标记为 9.2 的文档描述了一项实际合并到 8.19 的更改,这是一个真实发现,也是此评审中其他检查都无法发现的问题。
  • 合并状态。 尚未合并的代码 PR 描述的是仍可能发生变化的预期行为。应如实说明这一点,不要将其视为已确定的行为。
  • 缺失不能证明任何事。 代码差异中没有出现某项文档声明,并不意味着该声明有误——差异只涉及一项更改,并不涵盖整个产品。只有出现直接冲突时才应标记:文档写的是一个值,代码写的是另一个值。
  • 一致不等于验证。 报告哪些内容一致,以及证据所在的位置。切勿仅因代码差异与文档内容一致,就断言更改在技术上正确;适用于自信措辞的同一规则,也适用于自信地解读代码差异。
标记技能之外的适用性检查
  • 变更后,先决条件仍准确无误,涵盖权限、设置和假定的知识。
  • 没有遗漏任何新增的权限或设置依赖。
  • 如果部署类型和版本与页面级标记不同,先决条件中会明确说明。
  • 部署范围正确:涵盖或注明相关类型;共享流程不依赖特定部署类型;自管理、ECE 和 ECK 被视为不同的部署类型,而非统称为客户运营的部署类型。它们共享 Elasticsearch 的核心功能;区别在于部署的运行方式,而非其功能。
可维护性和仓库卫生
  • 没有重复已有位置中的流程或值。交叉引用或代码片段更合适。如果某个章节嵌入了参考资料(参数说明、格式解释、API 语法、完整流程),请使用 find_related_docs 或 search_docs 检查是否已有专门页面涵盖。也要标记页面内部的重复内容——并排阅读选项 1 和选项 2,或方法 A 和方法 B。
  • 没有页面仍通过旧路径链接或引用已删除或移动的页面。使用 grep 搜索仓库中的旧路径及其锚点。
  • 没有其他页面仍引用已删除的图片或代码片段。使用 grep 搜索每个已移除的资源路径。
  • 每个重命名、移动或删除的页面都有对应的重定向条目,包括重命名的锚点。缺少重定向时标记为 High,因为这会导致现有链接失效。文件位于内容集的 docset.yml 或 _docset.yml 同级目录,名称为 redirects.yml 或 _redirects.yml——报告缺少重定向之前,请检查这两种文件名,以免误报。
  • 不手动编辑生成的或自动化的参考资料。应在源头修复。
  • 截图、图表和非 Elastic 外部链接都需要承担持续维护成本。
范围控制
  • 此变更不涉及路线图事项或任何未来计划。
  • 此变更不包含用户不需要的实现细节或决策历史。
预览整洁度
  • 渲染输出中没有字面量 {{,且所有替换项均已解析。
  • 没有连续堆叠的提示框。将它们合并为一个提示框或融入正文。检查连续的提示框组合——即使每个提示框单独看起来都没问题,只要它们之间仅由空白分隔,也算连续堆叠。
  • 每个区域中的提示框大致不超过三个,确保它们仍然醒目。
  • 没有多余的项目符号、遗留注释、损坏的表格或选项卡组。
  • 徽章可正常渲染,章节级或行级 applies_to 标记与页面级标记可同时使用。
  • 链接文本含义明确,新增或变更的链接均可访问。
PR 流程

如果输入的是路径而非 PR,请跳过此部分。

  • 已为目标分支添加正确的回移标签。使用 gh pr view --json labels 查看。
  • 没有未完成的内容:TODO、占位文本或注释掉的草稿。
  • 变更后,标题和 H1 仍准确无误,并采用句首字母大写格式。

第 5 步:合并并报告

按照清单中六项标准的顺序分节,提交一份报告。

标题
Target: <PR #, title, URL — or branch/path>
Author signal: <author type → where you focused>
Rubric source: internal MCP | embedded fallback — <reason>
Working tree: head ref checked out | degraded — <what was skipped>

然后附上运行情况表:列出每项技能、是否运行以及运行路径;如果已跳过,注明原因(不相关及其原因);如果未安装,也请注明。

发现

按评审标准分组:用户关注、技术准确性、适用性、可维护性、语言、风格。每项发现占一行:

| Severity | file:line | Finding | Guideline | Source |
  • 严重程度 — 当用户按页面操作会失败或受到误导,或有效链接失效时,标为高。内容前后不一致或不清晰,但仍可使用时,标为中。细微问题标为低。
  • 指南 — 链接到 references/review-criteria.md 中「规则引用」表里决定该项发现的规则。若表中列出了章节锚点,则链接到该锚点;否则链接到管辖该评审标准的页面。引用该项发现实际依据的规则,而不是它恰好归属的章节:缺少 description 属于元数据和可查找性规则,而非 seo#headings;触发条件含糊属于清晰度问题,而非 grammar-spelling。评审标准名称(例如“技术准确性”)不是引用——它只说明该项发现归入哪里,并不能决定该项发现。若表中没有合适的规则,就将此列留空,不要勉强引用最接近的链接;错误的引用会把作者引向一条并未说明你所声称内容的规则。此列只能放链接或留空——不得填写单独的词语(例如 findability)或评审标准名称作为引用。所有语言和风格方面的发现都必须附上引用,其他由具体页面决定的发现也一样。对有异议的作者来说,必须有地方可以核查;“风格指南是这么说的”并不是引用。如果伴随工具报告了自己的规则名称,例如 Vale 规则 Elastic.OxfordComma,也要一并写出,让作者知道触发了哪项检查。绝不可编造锚点——若列表中没有适用项,就引用页面并说明适用的部分。
  • 来源 — 标明产生该项发现的伴随工具,或对你自己的检查标注为 docs-review-pr。读者需要知道应重新运行哪个工具。
  • 若某项评审标准已经检查且没有发现问题,标为通过。若没有运行检查,则标为未检查。两者不同——绝不可将后者说成前者。两者都是章节级状态:写在章节标题下方一行,绝不可在发现表中将“通过”放进「严重程度」列。发现表只放发现;没有发现的章节不设表格。
  • 每个章节都使用同一种表格。不要在报告中途改用「严重程度:」/「发现:」这样的散行格式——全篇采用同一种格式,方便读者浏览。
  • 六个章节始终都要出现。 没有发现的章节要用一行标明状态——通过,或注明原因的未检查——绝不可只留下一个空标题。空章节看起来像是疏漏,读者也无法判断这是检查通过还是跳过了。
  • 每次提及伴随工具时,都要与分派表中的名称完全一致。docs-flag-jargon-skill 和 docs-flag-jargon 不能作为两个来源。
  • 干净的 PR 也是有效结果。 绝不可为了显得全面而塞入无关小问题。如果某项评审标准没有发现值得作者花时间处理的问题,就标为通过,然后继续。优秀 PR 的正确评审结果就是简短报告,而不是漏检的表现。
常见模式

当同一个问题在 PR 中反复出现时,将其作为一个模式报告,并注明次数和几个示例。根据 PR 评审指南中的评审礼仪,一条全局评论胜过逐一评论每个实例。

既有问题

本次 PR 未引入的任何问题都要单独放在一个明确标注的章节中。作者不应为无关的历史欠账负责;将它们混在一起会让评审显得武断。

此章节只列出问题,不写表扬。PR 带来的改进应放在有效之处;将其写在这里会让作者以为自己的改进是一个既有缺陷。如果没有既有问题,用一行说明即可。

有效之处

如果内容写得好,请简短、具体地指出。正面反馈有助于强化良好的写作习惯,也能让评审不那么令人望而生畏。

建议采取的行动

根据上述发现撰写此列表,切勿凭记忆撰写。 每项行动都应复述你已经写出的某条发现,且方向一致。总结时不要重新推导修复方案:否则报告可能会让作者把 select 改成 click,而报告中的发现明明说了相反的方向;而总结恰恰是人们会据此采取行动的部分。撰写某项行动前,请重新阅读它所依据的发现,并确认方向一致。如果某项行动在上文找不到对应的发现,那么它要么不该出现在列表中,要么报告缺少了这条发现。

从 Approve、Comment 或 Request changes 中选择一项,并说明理由:

  • Approve — 达到质量门槛。轻微的可选建议应作为评论提出,而不是作为阻止通过的理由。
  • Comment — 你有疑问或非阻塞性反馈。
  • Request changes — 未达到质量门槛,或此更改会导致用户无法成功使用产品或功能。阻止更改通过是维护质量的正常做法,并非对作者的评价。
结尾说明

请以以下内容结尾,以免有人将此报告视为正式评审本身:

这是初步检查,不能替代评审。AI 生成的结果并非总是准确,采取行动前请确认相关发现。

评论

支持 Markdown