关于 docs-review-pr
docs-review-pr 是用于审查 Elastic 文档拉取请求的只读技能。它调度现有审查技能,并将结果整合为涵盖六项标准的报告,附上处理建议。
主要功能
- 01按六项标准进行完整审查
- 02调度配套审查技能
- 03将发现整合为清单报告
- 04建议批准、评论或请求修改
- 05只读,不向 GitHub 发帖
适用场景
- 01审查 Elastic 文档拉取请求
- 02汇总风格、元数据和代码示例问题
- 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 同名,却指向完全不同的位置。因此:
git rev-parse HEAD必须与headRefOid相同。仅此一项检查就涵盖了分支名称、fork 和过时状态——提交匹配就表示工作树匹配。- 如果不匹配,请先确认你位于正确的仓库中。将
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 | 发现报告归属 |
|---|---|---|---|---|
| 1 | docs-check-style | 任一 | 始终 | 语言、风格 |
| 2 | docs-flag-jargon-skill | 任一 | 始终 | 语言 |
| 3 | docs-content-type-checker | 任一 | 始终 | 用户关注点 |
| 4 | docs-check-contradictions | 任一 | 始终 | 技术准确性 |
| 5 | docs-frontmatter-audit | 任一 | 始终 | 用户关注点 |
| 6 | docs-applies-to-tagging | 仅子 Agent | 差异涉及 applies_to 或特定版本的内容 | 适用性 |
| 7 | docs-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 实际使用的路径,并报告出来。
-
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 操作,导致其发现的问题混入报告并影响建议。如有疑问,每次调用只传一个文件。两种调度路径都遵循此规则。 -
子 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 的规则复制到此文件中。
- 通过 glob 查找 companion 的
-
未安装。 如果找不到某个 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-docsMCP 工具find_related_docs进行检查。
技术准确性的证据
你无法确认某项更改是否经过主题专家(SME)审核,但可以报告是否存在相关证据。
- 查看 PR 正文、评审评论、分支名称以及任何关联的 issue,确认是否有 SME 签字认可、工程评审或权威来源。
- 检查新增代码示例是否注明已经过测试。
- 明确说明结论:证据存在及其所在位置,或证据缺失。切勿根据自信的措辞推断技术正确性。
对照所描述的代码更改检查文档
当证据涉及代码 PR 或提交时——例如 elastic/elasticsearch#12345、GitHub PR URL、“Docs for kibana#678”或以 issue 命名的分支——不要只停留在记录其存在。请阅读并进行对照。关联的代码更改明确了仓库、引用和版本,因此这是唯一一项无需猜测该信任哪个来源即可执行的技术检查。如果未引用代码更改,请跳过整个部分;切勿为了检查而主动寻找代码更改。
-
解析引用并阅读双方内容:
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 缺失,而不是命令错误。 -
从代码差异中提取可核查的事实:设置、标志和参数名称;默认值、限制和枚举值;错误及日志消息文本;以及新增或更改的测试。与注释相比,测试对预期行为的断言通常更可靠。
-
将每项事实与文档更改所声称的内容进行对照。在“技术准确性”部分报告结果,并引用代码 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 生成的结果并非总是准确,采取行动前请确认相关发现。