Yunxiao mr reviewer
Skill NSObjects/yunxiao-work-assistant/skills/yunxiao-mr-reviewer
基于 Yunxiao MCP 审核阿里云云效 Codeup 合并请求/MR,拉取 MR 详情、patch set、diff、提交、文件内容、项目 AGENT 指南、specs 规格文件和已有评论,输出按严重程度排序的代码审核发现,并可主动在 MR 上发布行内问题评论和最终总结评论;用于用户要求审查云效 MR、Codeup 合并请求、变更 diff、待合并代码风险、规格实现一致性,或处理 MR 评论时。From its SKILL.md
npx -y skills add NSObjects/yunxiao-work-assistant --skill yunxiao-mr-reviewerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
25.1 KB, as published. Nobody here has run it
云效 MR 审核助手
核心原则
- 所有自然语言输出使用简体中文;工具名、字段名、文件路径、代码片段保持原文。
- 用户要求审核 MR 时,允许主动创建云效 MR 审核评论,不需要用户额外提示或二次确认;默认优先发布行内评论,无法可靠定位行号时发布全局评论。
- 云效 MR 评论按“评论排版规范”里的通用 Markdown 模板编写,优先使用标题、短列表和短代码块;问题评论不要使用 Mermaid、HTML、表格或依赖特定渲染组件的复杂格式。最终总结评论允许使用符合本 skill 模板的 Mermaid
sequenceDiagram代码理解图。 - 官方 README 的完整功能列表见
https://raw.githubusercontent.com/aliyun/alibabacloud-devops-mcp-server/refs/heads/master/README.md;MR 审核至少需要启用code-management,按关联工作项核对需求时还需要project-management。 - 以当前会话真实暴露的 Yunxiao MCP 工具为准;旧文档可能使用
list_change_request、get_compare等历史名称,当前优先使用list_change_requests、compare。 - 不臆造
organizationId、repositoryId、localId、分支名、patch set ID、文件路径或行号。缺关键参数时先查询,仍无法确认时再向用户要。 - 审核发现必须基于最新 patch set 的 MR diff、目标/源分支文件内容、提交或已有评论证据;推断要标明依据,不把猜测写成事实。
- MR 变更范围必须锁定在最新 patch set 的 base/source commit 或等价 patch-set 边界上;不要用普通 branch compare、merge-base compare 或源分支历史提交清单当作最终审核范围。
- 审核前必须形成紧凑 Review Package:实现内容、规格/验收场景、目标基线、源分支头部、测试证据、已知风险和缺失上下文;包内缺关键证据时结论用
NEEDS_CONTEXT。 - MR 审核只读取已有测试证据,不运行本地测试命令、不触发云效流水线、不执行云效测试计划或测试用例;测试不足时只报告缺口和建议。
- 审核输出以问题为主。没有明确 bug、回归、安全风险或缺失测试时,直接说明“未发现需要阻塞合并的问题”。
- 行内/全局问题评论用于指出具体风险;最终总结评论用于沉淀整个分支的实现说明、结构化实现流程和人工 review 指引,二者不要混在一起。
必要上下文
organizationId:优先使用用户给出的值;否则用历史上下文、环境变量YUNXIAO_ORGANIZATION_ID/YUNXIAO_ORG_ID,或调用get_current_organization_info。repositoryId:优先使用用户给出的仓库 ID、URL 编码全路径或 MR 链接解析结果;否则用list_repositories按仓库名搜索并让用户在候选中确认。localId:云效 Codeup 仓库内的 MR 局部 ID。用户只给标题或关键词时,用list_change_requests搜索 opened MR 并确认唯一结果。- MR 链接:从链接中提取仓库路径和 MR 编号时要保留原始链接;如果无法可靠解析,不要硬猜。
审核流程
- 定位 MR:
- 调用
get_current_organization_info获取默认组织。 - 调用
get_repository或list_repositories确认仓库。 - 调用
get_change_request获取 MR 标题、状态、作者、源分支、目标分支、关联工作项和描述。 - 如果只有搜索条件,调用
list_change_requests,优先筛选state="opened"。
- 调用
- 收集审核材料:
- 调用
list_change_request_patch_sets获取版本列表,识别最新 patch set、base commit、source commit,以及行内评论需要的from_patchset_biz_id/to_patchset_biz_id。 - 调用
list_change_request_comments获取已发布和未解决评论,避免重复提出同一问题。 - 调用
compare对最新 patch set 的 base commit 与 source commit 做直接比较;工具支持时使用from=<base commit>、to=<source commit>、sourceType="commit"、targetType="commit"、straight=true。这份结果是唯一的 MR 变更文件清单和行号依据。 - 如果最新 patch set 没有返回可比较的 commit 或等价边界,先尝试从 patch set 详情、MR 版本信息或提交详情补齐;仍无法补齐时结论为
NEEDS_CONTEXT,不要退回到 branch compare 扩大审核范围。 - 只允许把 latest patch-set diff 中新增、修改或删除的文件作为审核发现的定位范围。读取未改文件只能用于理解调用方、被调用方、接口契约、项目约定或风险传播路径;不得把未改文件里的既有问题当成本次 MR 发现。
- 需要上下文时,用
get_file_blobs按 base commit 和 source commit 分别读取文件内容;需要目录结构时用list_files。读取分支名版本只可作为补充,不可替代 patch-set commit 版本。 - 优先读取 base commit 上的项目指南文件:仓库根目录或靠近改动文件的
AGENT.md,再读取 source commit 同路径版本。source commit 修改了指南文件时,把指南变更本身作为 MR 变更审查,不要直接用新规则覆盖基线规则。 - 查看源分支
specs/目录下与 MR 标题、分支名、工作项 ID、提交信息或改动模块相关的规格文件;没有提交或找不到对应规格文件时忽略,并在最终总结评论里标注“未发现对应 specs 规格文件”。 - 需要追溯动机或拆分变更时,用
list_commits和get_commit查看源分支提交;这些材料只解释动机,不改变 latest patch-set diff 定义的审核范围。 - MR 关联了工作项且用户要求核对需求时,用
get_work_item、list_work_item_comments、list_workitem_attachments、get_workitem_file补需求、验收说明和附件证据。
- 调用
- 建立 Review Package:
实现内容:基于 MR 描述、提交和 diff 概括,不照抄作者描述。规格/验收场景:来自specs/、关联工作项或 MR 描述;没有就写None provided。目标基线:目标分支名、latest patch set 的 base commit,以及使用的比较方式。源分支头部:源分支名、latest patch set 的 source commit,以及最新 patch set ID。测试证据:只记录测试文件变更、MR 描述里的测试结果、已有流水线结果或人工验证说明;没有就写“未发现测试证据”,不要为了补证据而运行测试。已知风险/缺失上下文:权限不足、文件过大未读、specs 规格缺失、评论写入失败等。
- 做代码审核:
- 先用目标分支基线的
AGENT.md理解项目架构、目录职责、命名约定、测试策略和禁用做法;如果源分支修改了该文件,单独说明规则变化及其影响。审核风格和架构一致性时要引用基线约定。 - 再用对应 specs 规格文件判断分支是否实现了预期功能、是否遗漏验收条件、是否引入规格外行为;没有 specs 规格文件时只基于代码和 MR 描述审核,不臆造需求。
- 先看高风险文件:鉴权、权限、支付、数据迁移、配置、部署、并发、缓存、错误处理、外部 API、持久化、测试改动。
- 大 MR 先按文件和风险聚类;不要平均扫所有格式化或生成文件。
- 对每个候选问题,确认它能由 latest patch-set diff 触发,并说明触发条件、影响和最小修复方向;如果问题只存在于未改上下文文件,最多作为背景说明,不写成 MR 审核发现。
- 需要更细的检查清单时,读取
references/review-guidelines.md。
- 先用目标分支基线的
- 输出结果:
- 先列
审核发现,按P0、P1、P2、P3排序。 - 每条发现包含:严重级别、文件行号、问题、证据、影响、建议;文件行号必须指向 latest patch-set diff 中的新增或修改行,无法可靠定位时降级为全局问题评论并说明相关 diff 文件。
- 对明确且可行动的问题,按“评论写入流程”主动写入 MR 评论;没有明确问题时不写评论。
- 无论是否发现问题,都按“最终总结评论”在 MR 上发布一条全局总结,方便人工 review。
- 再给
审核摘要:MR 状态、源分支到目标分支、Review Package 摘要、已有未解决评论、主要风险面、评论写入结果和结论。 - 最后给
测试与验证缺口,只列和风险直接相关的缺口。
- 先列
发现级别
P0:会导致生产事故、数据破坏、严重安全漏洞、无法启动或无法合并的阻塞问题。P1:高概率功能回归、权限绕过、数据不一致、兼容性破坏或关键流程失败。P2:边界条件错误、可恢复但真实的行为缺陷、重要测试缺口或可观测性缺口。P3:低风险问题,例如误导性文案、非阻塞清理项。不要把纯风格偏好写成 P3。
审核结论
NEEDS_CHANGES:存在P0或P1,或存在必须修复的规格偏离、关键测试缺口、数据/安全/兼容性风险。NEEDS_CONTEXT:无法取得关键 diff、文件内容、基线规则、规格/验收材料、patch set 或评论写入验证结果,导致无法公平判断。APPROVED:未发现阻塞合并的问题,且 Review Package 中没有会影响判断的关键证据缺口;可带非阻塞备注。
评论排版规范
云效评论区按朴素 Markdown 渲染。为了保持工整,所有写入云效的评论都必须遵守这些格式约束:
- 同一条评论只表达一种用途:问题评论只讲一个可行动问题;最终总结只做分支级说明和 review 指引。
- 使用固定章节名和固定字段顺序,不临时发明“风险洞察”“优化建议”这类额外栏目。
- 最终总结可以借鉴 AI review 报告的分组方式,但要落成普通 Markdown 章节:
评审意见分为代码实现建议和架构设计建议,审查详情记录文件清单和证据范围。 - 每个标题、段落、列表块之间保留一个空行;不要把多条信息挤在同一行。
- 问题评论不使用 Markdown 表格、HTML、Mermaid、脚注、折叠块、连续多级嵌套列表或装饰性分隔线;最终总结评论只允许在“代码理解图”章节使用 Mermaid
sequenceDiagram。 - 文件路径优先写成 Markdown 链接;分支名、函数名、字段名、结论值和命令使用反引号;不要粘贴大段源码或完整 diff。
- 文件链接优先使用稳定版本:
[path/to/file.go](<repository webUrl>/blob/<latest source commit>/<url-encoded path>);没有 commit 时用源分支名;无法可靠拼出链接时才退回反引号路径。 - 最终总结里的文件不要堆成一大段列表;按职责分组,每组 2 到 5 个链接,组名使用短字段,如“配置与协议”“语音 Turn”“WebSocket 入口”。
- 列表优先使用
- **字段**:内容,字段名保持短且稳定;内容过长时拆成多条并列列表。 - 不使用 emoji、口号式标题或夸张措辞;评论要像人工 code review 记录一样干净、克制、可复查。
行内问题评论模板
INLINE_COMMENT 只写当前行相关的问题,目标长度控制在 1200 字符内。必须使用这个结构:
**`P1` 问题标题**
- **触发条件**:说明什么输入、状态或调用路径会触发。
- **问题原因**:说明 latest patch-set diff 中哪段逻辑导致问题。
- **影响范围**:说明会影响哪些用户、数据、权限或流程。
- **修复建议**:给出最小修复方向。
- **验证建议**:说明应补充或复核的关键场景;没有测试缺口时写“复用现有验证即可”。
全局问题评论模板
无法可靠定位到单行、跨多个文件或属于总体风险的问题,使用问题类 GLOBAL_COMMENT。不得包含最终总结标记。必须使用这个结构:
### `P1` 问题标题
- **位置**:`path/to/file.ts:42`、`path/to/other.ts`;跨模块问题写主要相关文件。
- **触发条件**:说明什么输入、状态或调用路径会触发。
- **问题原因**:说明涉及的代码路径、状态变化或模块协作问题。
- **影响范围**:说明会影响哪些用户、数据、权限或流程。
- **修复建议**:给出最小修复方向;需要产品或架构确认时写清确认点。
- **验证建议**:说明需要补充或复核的关键场景。
最终总结评论模板
最终总结评论必须单独发布为 GLOBAL_COMMENT,并使用这个结构。章节为空时保留章节,用“未发现”“未提供”或“无需补充”说明,不删除章节。
<!-- yunxiao-mr-reviewer:final-summary -->
## AI Review 最终总结
### 1. 变更概览
- **结论**:一句话说明这个分支解决什么问题。
- **主要模块**:列出模块或能力分组。
- **关键文件**:按职责分组列出 3 到 8 个最值得人工 review 的文件链接;文件较多时按模块概括,不要堆成长列表。
### 2. 项目约定依据
- **已读取**:列出 `AGENT.md` 路径;没有则写“未发现项目 AGENT 指南”。
- **影响本次审核的约定**:列出和本 MR 直接相关的约定。
### 3. 规格对应关系
- **已读取**:列出 `specs/` 文件、工作项或 MR 描述来源。
- **覆盖情况**:说明已覆盖的需求点。
- **未覆盖/未确认**:说明缺失的 specs 规格文件、验收点或业务确认项。
### 4. 评审意见
- **代码实现建议**:列出明确的代码实现问题或写“未发现需要特别关注的代码实现问题”。
- **架构设计建议**:列出跨文件交互、系统一致性、边界抽象、配置契约或扩展性风险;没有则写“未发现需要特别关注的架构设计问题”。
- **关键代码**:列出 0 到 5 个最需要人工看的文件行号链接;已在问题评论中覆盖时写“见问题评论”。
- **潜在风险**:只写由 diff、specs 规格文件或现有证据支持的风险;没有则写“未发现明显潜在风险”。
### 5. 实现流程
1. **入口**:说明请求、任务、命令或事件从哪里进入。
2. **处理**:说明主要判断、转换、调用或状态流转。
3. **输出**:说明最终响应、持久化、消息投递或外部副作用。
4. **异常路径**:说明失败、空数据、权限不足或兼容分支;没有则写“未发现特殊异常路径”。
### 6. 代码理解图
```mermaid
sequenceDiagram
participant U as 用户/调用方
participant E as 入口模块
participant S as 核心服务
participant D as 数据/外部依赖
U->>E: 发起请求或触发事件
E->>S: 校验并转交处理
alt 失败或不满足条件
S->>E: 返回错误或跳过原因
E->>U: 返回失败结果
else 正常处理
S->>D: 读取或写入数据
D->>S: 返回依赖结果
S->>E: 返回处理结果
E->>U: 返回成功结果
end
```
### 7. 核心实现说明
- **模块/文件**:说明新增或修改的职责、关键分支和边界处理。
- **模块/文件**:继续按模块列出,不逐行复述 diff。
### 8. 测试与验证
- **已有证据**:列出 MR 描述、测试文件、流水线结果或人工验证说明。
- **缺口**:列出和风险直接相关的缺口;没有则写“未发现明显测试缺口”。
- **AI 执行情况**:固定写“AI 未执行本地测试、云效流水线或测试计划,仅基于已有证据审核。”
### 9. 人工 review 重点
- **重点 1**:说明文件或流程,以及人工需要确认的原因。
- **重点 2**:继续列出风险点、业务确认项或回滚关注点。
### 10. 审查详情
- **变更文件**:列出文件总数和主要路径;文件很多时按目录或模块归类。
- **已审查材料**:列出 MR 描述、diff、提交、`AGENT.md`、`specs/`、工作项、已有评论等实际读取的材料。
- **未审查/受限**:列出权限不足、文件过大、未取得 specs 规格文件、无法读取旧版本等限制;没有则写“未发现受限材料”。
### 11. AI 审核结论
- **结论**:`APPROVED` / `NEEDS_CHANGES` / `NEEDS_CONTEXT`
- **问题评论**:已写入 `P0/P1/P2/P3` 评论数量;没有则写“未写入问题评论”。
- **残余风险**:一句话说明剩余风险或上下文缺口;没有则写“未发现需要阻塞合并的残余风险”。
评论写入流程
- 写入前必须已经完成去重:查询已有未解决评论,避免重复发布同一问题。
- 只评论明确、可行动、能定位到 latest patch-set diff 或相关文件的问题;低价值风格建议默认只放在最终回复里,不写入 MR。
- 调用 Yunxiao MCP 时必须按当前工具 schema 传参,不要把 REST API 文档里的
repositoryIdentity、commentType、filePath、patchSetBizId等字段名直接传给 MCP。content长度保持在 1 到 65535 之间。总结评论仍按本 skill 的长度目标压缩,避免接近上限。parent_comment_biz_id只在回复已有评论时传;创建根评论时不传。- 创建根评论时显式设置
resolved=false:行内问题评论、全局问题评论和最终总结评论都不要标记为已解决;回复评论按上下文决定是否设置。 - 评论层级一般不要超过 3 层;自动回复已有评论时避免继续加深层级。
- 调用
create_change_request_comment:- 最终总结评论固定使用
comment_type="GLOBAL_COMMENT",patchset_biz_id使用最新合并源版本 ID,并显式设置resolved=false。 - 能可靠定位到 latest patch-set diff 新增或修改行的问题评论,使用
comment_type="INLINE_COMMENT",必须提供file_path、line_number、from_patchset_biz_id、to_patchset_biz_id和patchset_biz_id,并显式设置resolved=false。 - 无法可靠映射新文件行号、跨多个文件、缺少具体行号或属于总体风险的问题评论,使用
comment_type="GLOBAL_COMMENT",在内容里写明文件路径和代码位置,并显式设置resolved=false。 - 问题类
GLOBAL_COMMENT不能使用最终总结标记<!-- yunxiao-mr-reviewer:final-summary -->,最终总结GLOBAL_COMMENT不能承载未解决问题详情。 - 评论正文必须套用“评论排版规范”的模板;行内评论优先用短列表,全局总结使用固定二级/三级标题、列表和 Mermaid
sequenceDiagram代码理解图。 - 默认发布正式评论;只有用户明确要求草稿时才设置
draft=true。
- 最终总结评论固定使用
- 写入后调用
list_change_request_comments验证评论存在,并输出成功项、失败项和未写项。
最终总结评论
最终总结评论是单独的 GLOBAL_COMMENT,不替代 INLINE_COMMENT 文件行内问题评论,也不替代问题类 GLOBAL_COMMENT。每次完整审核 MR 后都发布一条,除非用户明确要求只本地输出不写云效。
- 使用
comment_type="GLOBAL_COMMENT"调用create_change_request_comment,patchset_biz_id使用最新合并源版本 ID,并显式设置resolved=false,让最终总结保留为未解决评论,方便人工 review 跟进。 - 评论内容必须包含稳定标记
<!-- yunxiao-mr-reviewer:final-summary -->。只有已有评论同时包含该标记和标题## AI Review 最终总结时,才允许用update_change_request_comment更新同一条;更新时也必须显式传resolved=false,避免沿用已有评论的已解决状态;否则新建,避免误改人工评论。 - 评论标题固定使用
## AI Review 最终总结,内容包含:变更概览:一句话说明分支解决什么问题,列出主要模块和关键文件。项目约定依据:列出读取到的AGENT.md路径和影响本次审核的约定;没有则写“未发现项目 AGENT 指南”。规格对应关系:列出读取到的specs/文件、覆盖的需求点、未覆盖或未找到 specs 规格文件的说明。评审意见:分代码实现建议和架构设计建议;没有明确问题时直接写“未发现需要特别关注的问题”,不要为了填满栏目编造建议。实现流程:按“入口、处理、输出、异常路径”使用有序列表描述关键调用链、状态流转或数据流;流程未知时用模块级流程,不编造运行时细节。代码理解图:使用 MermaidsequenceDiagram代码块帮助人工理解代码意图,格式必须和已验证可显示的样例一致:- 代码块必须写成 <code>```mermaid</code>,下一行必须是
sequenceDiagram。 - 用
participant X as 名称声明参与者,别名使用 ASCII 字母,名称使用中文或模块名。 - 用
A->>B: 动作说明表达调用或状态推进,用B->>A: 返回结果表达返回。 - 分支使用
alt/else/end,每个分支写关键触发条件。 - 不要使用
graph TD、flowchart TD、HTML、表格、样式类、子图、复杂转义或其他无法确认云效可渲染的 Mermaid 语法。 - 如果代码更像流程图,也要用
sequenceDiagram表达关键步骤和分支;除非用户提供云效可显示的流程图样例,否则不要输出流程图。 - 图只表达主流程和最关键异常分支,服务理解代码意图;不要把所有文件和函数逐行画进图里。
- 代码块必须写成 <code>```mermaid</code>,下一行必须是
核心实现说明:按模块说明新增/修改的职责、入口、关键分支和边界处理。测试与验证:列出已有测试证据、缺口和建议人工验证路径,并说明 AI 未执行测试用例。人工 review 重点:列出需要人工重点看的文件、风险点和业务确认项。审查详情:列出变更文件清单、实际读取的审查材料和未审查/受限材料,帮助人工判断覆盖范围。AI 审核结论:使用APPROVED/NEEDS_CHANGES/NEEDS_CONTEXT,总结是否发现阻塞问题、已写入的问题评论数量、残余风险。
- 总结评论以帮助人工 review 为目标,可以比行内评论更详细;但不要粘贴大段源码或完整 diff。
- 控制总结评论长度,目标不超过 40000 字符。超过时按优先级保留
变更概览、评审意见、实现流程、人工 review 重点、AI 审核结论,把逐文件说明压缩成模块级摘要,避免超过云效评论长度上限导致写入失败。
禁止事项
- 不调用应用交付的
list_appstack_change_requests、close_appstack_change_request、cancel_appstack_change_request来处理 Codeup MR;它们是另一类变更请求。 - 不执行合并、关闭、删除分支、删除文件、修改文件、运行流水线或发布部署,除非用户另行明确要求并走对应高风险确认流程;发布 MR 审核评论不需要二次确认。
- 不运行任何测试用例或测试命令,包括但不限于
go test、npm test、pnpm test、yarn test、pytest、mvn test、gradle test,也不通过云效测试管理工具创建、执行或更新测试结果。 - 不把“已有测试文件被修改”直接当作测试充分;要说明测试覆盖了什么风险。
- 不因为个人偏好的命名、格式、抽象层级提出阻塞意见;只有影响可读性到足以掩盖缺陷时才作为低优先级建议。
本地输出模板
**审核发现**
- **`P1` `path/to/file.ts:42` 问题标题**
- **触发条件**:说明什么输入、状态或调用路径会触发。
- **问题原因**:说明 diff 中哪段逻辑会触发问题。
- **影响范围**:说明用户、数据、权限或流程会怎样受影响。
- **修复建议**:给出最小修复方向。
**审核摘要**
- 结论:`APPROVED` / `NEEDS_CHANGES` / `NEEDS_CONTEXT`
- MR:标题,`source` -> `target`,状态
- Review Package:实现内容、规格/验收场景、基线、头部、测试证据、已知风险摘要
- 已有评论:未解决评论数量和主题
- 最终总结评论:已创建/已更新/失败及原因
- 主要风险:一句话总结
**评审意见详情**
- 代码实现建议:明确问题或“未发现需要特别关注的代码实现问题”。
- 架构设计建议:跨文件交互、系统一致性、配置契约或扩展性风险;没有则写“未发现需要特别关注的架构设计问题”。
- 关键代码:最需要人工查看的文件行号链接;没有则写“未发现需要单独标注的关键代码”。
**测试与验证缺口**
- 缺口及其对应风险;没有缺口时写“未发现明显测试缺口”。
**审查详情**
- 变更文件:文件总数和主要路径。
- 已审查材料:MR 描述、diff、提交、指南、spec、工作项或已有评论。
- 未审查/受限:缺失或受限材料;没有则写“未发现受限材料”。