研发协作
在合并前对 PR 或功能分支做生产就绪质量审查时使用…
当用户要求审查 PR、判断代码是否生产就绪、验证文档/测试/UX 并在合并前把关时,按七个维度系统检查并输出具体问题与结论。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在合并前对 PR 或功能分支做生产就绪质特定
解决思路
- 先了解变更范围:运行 `git branch --show-current` 查看当前分支。
- 运行 `git log main..HEAD --oneline` 查看提交历史。
- 运行 `git diff main...HEAD --stat` 查看变更文件。
- 运行 `git diff main...HEAD` 获取完整 diff 用于审查。
- 如果审查远程 PR,先获取:运行 `gh pr view <number> --json title,body,files`。
- 运行 `gh pr diff <number>` 获取远程 PR 的 diff。
- 阅读 PR 描述和所有提交,在深入代码前理解变更意图。
- 按七个维度逐项审查,并为每个维度报告状态:Pass、Needs work 或 N/A。
- 维度 1 生产就绪:检查错误处理,确认所有错误都被检查,并用 `fmt.Errorf("context: %w", err)` 包装上下文,向用户暴露可操作信息。
- 维度 1 生产就绪:检查边界情况,包括空输入、nil 值、缺失配置、网络失败、API 速率限制、大数据集、分页边界。
- 维度 1 生产就绪:检查安全校验,所有变更命令(create、edit、apply、delete、update)必须在 `LoadConfig()` 之后、客户端操作之前包含安全校验;模式为 `checker, err := NewSafetyChecker(cfg); if err := checker.CheckError(safety.OperationXXX, safety.OwnershipUnknown); err != nil { return err }`;确认操作类型正确;仅在 dry-run 路径跳过。
- 维度 1 生产就绪:检查库代码中无 stdout,`pkg/` 必须返回数据而不是打印;只有 `cmd/` 处理输出。
- 维度 1 生产就绪:检查无硬编码密钥或客户数据,代码或测试中没有真实姓名、环境 ID、token、邮箱;邮箱使用 `@example.invalid`(RFC 2606)。
- 维度 2 代码质量:检查是否遵循 Go 惯用法,参考 Effective Go 和 Go Code Review Comments。
- 维度 2 代码质量:检查命名是否描述性强并符合 Go 约定,未导出使用 camelCase、导出使用 PascalCase,接口使用 `-er` 后缀。
- 维度 2 代码质量:检查文件大小,文件应低于 500 行;大文件应拆分。
- 维度 2 代码质量:检查导入顺序,标准库优先,然后是第三方,最后是内部包(`github.com/dynatrace-oss/dtctl`)。
- 维度 2 代码质量:检查重复,寻找应提取为 helper 的复制粘贴代码。
- 维度 2 代码质量:检查注释,导出函数/类型有文档;注释解释“为什么”而不是“做什么”。
- 维度 2 代码质量:检查一致模式,新代码应遵循代码库现有模式;参考 `pkg/resources/` 中类似资源实现。
- 维度 2 代码质量:运行 linter 捕获遗漏问题:`make lint-strict`。
- 维度 3 用户体验:检查命令命名,遵循 `dtctl <verb> <resource>` 模式;不使用自定义查询标志,使用 DQL 透传。
- 维度 3 用户体验:检查输出格式,表格输出可读、列合理、无错位;JSON/YAML 输出干净。
- 维度 3 用户体验:检查错误消息,应清晰、可操作、建议下一步;在 agent 模式(`-A`)下,错误为结构化 JSON 并带机器可读代码。
- 维度 3 用户体验:检查交互行为,名称解析、消歧提示有效;`--plain` 禁用交互行为。
- 维度 3 用户体验:检查帮助文本,命令有 `Short` 描述、`Long` 描述和 `Example` 字段;父动词命令有示例。
- 维度 3 用户体验:检查别名,资源有合理别名(如 `wf` 代表 workflow,`dash` 代表 dashboard)。
- 维度 3 用户体验:检查 agent 模式,命令支持带上下文建议的 `--agent` envelope;用 `-A -o json` 测试。
- 维度 3 用户体验:检查颜色控制,尊重 `NO_COLOR`、`FORCE_COLOR`、`--plain` 和 TTY 检测。
- 维度 3 用户体验:实际运行命令体验,运行 `dtctl <command> --help` 看帮助文本,运行 `dtctl <command> --plain` 看表格输出,运行 `dtctl <command> -A` 看 agent 模式。
- 维度 4 测试覆盖:检查单元测试,新函数有测试;优先表驱动测试。
- 维度 4 测试覆盖:检查覆盖率目标,整体最低 70%,新包 80%,关键包(`pkg/client`、`pkg/config`)90%。
- 维度 4 测试覆盖:检查边界用例测试,不仅快乐路径,还测试错误条件、空输入、边界值。
- 维度 4 测试覆盖:检查 mock 服务器守卫,分页 mock 服务器必须拒绝无效参数组合(如 `page-size` + `page-key`);Settings API mock 还必须拒绝 `schemaIds`/`scopes` 与 `nextPageKey` 组合。
- 维度 4 测试覆盖:检查 golden 测试,如果输出格式变化或新增资源,必须更新 golden 文件;运行 `go test ./pkg/output/ -run TestGolden`;golden 测试使用 `pkg/resources/*` 中真实生产结构体,绝不使用仅测试用的副本。
- 维度 4 测试覆盖:检查 E2E 测试,为新资源或复杂工作流在 `test/e2e/` 中添加集成场景。
- 维度 4 测试覆盖:运行全量测试:`go test ./...`。
- 维度 4 测试覆盖:检查覆盖率:`make test-coverage`。
- 维度 5 文档:始终要求常规提交标题,PR 标题(以及 squash-merge 提交)必须是有效 conventional commit(`feat: ...`、`fix: ...`、`feat!: ...` 表示破坏性变更),release-please 据此推导版本提升和 GitHub Release 说明;没有 CHANGELOG.md 要编辑。
- 维度 5 文档:新功能要求更新 `README.md`,如果功能面向用户且重要(新资源类型、新命令类别)。
- 维度 5 文档:新功能要求更新 `docs/QUICK_START.md`,为主要新功能提供使用示例。
- 维度 5 文档:新功能要求更新 `docs/dev/IMPLEMENTATION_STATUS.md` 中的功能矩阵行。
- 维度 5 文档:新功能要求如果引入新约定,在 `docs/dev/API_DESIGN.md` 中记录设计模式。
- 维度 5 文档:新功能要求如果功能需要额外 API 权限,在 `docs/TOKEN_SCOPES.md` 中记录新 scope。
- 维度 5 文档:新资源要求创建资源专属文档页到 `docs/resources/`,并在 `scripts/gen-docs/gen_all.py` 中添加 `PLAN` 条目,使生成器管理其表格。
- 维度 5 文档:新资源要求命令参考重新生成,而不是手工编辑——`make docs-generate` 会重写 `docs/COMMANDS.md`。
- 维度 5 文档:新 AI agent 支持要求更新 `README.md`、`docs/QUICK_START.md`、`docs/dev/API_DESIGN.md`、`docs/dev/IMPLEMENTATION_STATUS.md`(全部四个)。
- 维度 6 文档检查:确认不存在文档网站,`docs/site/` 已退役且仅保留重定向存根,使之前发布的 URL 解析到 `docs/`;在 `docs/site/_docs/` 下添加页面的 PR 是错误的。
- 维度 6 文档检查:检查生成块未被手工修改,`<!-- GENERATED:x:start/end -->` 内部无编辑;如果目录变化,运行 `make docs-generate` 并提交其输出。
- 维度 6 文档检查:检查新资源已映射,新 catalog 资源出现在 `scripts/gen-docs/INDEX.md` 的某页面下,而不是未映射列表。
- 维度 6 文档检查:检查散文已验证,`make docs-check` 通过——每个文档中的 `dtctl ...` 都能解析且每个 flag 存在;CI 会运行,但审查者应确认新示例实际运行过,而非凭空编写。
- 维度 6 文档检查:检查链接,相对链接可解析且锚点存在(`make docs-check` 覆盖此点)。
- 维度 7 PR 描述:检查标题清晰并遵循 conventional commit 风格(`feat: ...`、`fix: ...`)。
- 维度 7 PR 描述:检查摘要解释改了什么和为什么,而不只是触及哪些文件。
- 维度 7 PR 描述:检查关联 issue,用 `Closes #NNN` 或 `Fixes #NNN` 引用 issue。
- 维度 7 PR 描述:检查破坏性变更,如有则明确标注。
- 维度 7 PR 描述:检查测试部分,描述如何测试变更。
- 维度 7 PR 描述:检查 UX 示例,面向用户变更提供前后 CLI 输出。
- 审查输出:完成审查后,按指定格式提供摘要,包括 `## PR Review: <title>` 标题。
- 审查输出:提供表格,维度包括 Production readiness、Code quality、User experience、Test coverage、Documentation、GitHub Pages、PR description,状态为 Pass/Needs work/N/A,并填写 Notes。
- 审查输出:在 `### Issues Found` 下编号列出问题,格式为 `**[Dimension]** file:line -- description of issue`。
- 审查输出:在 `### Suggestions (non-blocking)` 下列出非阻塞建议。
- 审查输出:在 `### Verdict` 下给出 Ready to merge 或 Needs revisions,并列出 blocker。
- 审查时直接且具体:引用确切的文件路径和行号。
- 区分阻塞问题(必须修复)和建议(最好有)。
- 不要用赞美填充审查——聚焦需要注意的内容。
适用边界 · 注意事项
- 不适用于非 Go 项目:Go 惯用法、`pkg/`/`cmd/` 布局、`make lint-strict`、`go test`、覆盖率目标等检查缺少对应基础。
- 不适用于没有 `gh` CLI 或不是 GitHub 远程 PR 的场景:`gh pr view` 和 `gh pr diff` 步骤无法执行。
- 不适用于非 dtctl 项目:`dtctl` 命令命名、别名、agent 模式、`docs/` 生成流水线、`scripts/gen-docs`、`make docs-generate` 等检查无意义。