mcpField
P
ponytail-audit

ponytail-audit

github.com/dietrichgebert测试与质量179.1k47.6k 次安装2 周前更新
代码仓库

关于 ponytail-audit

ponytail-audit 是用于检查指定目录、软件包或整个仓库的一次性技能。它引导 Agent 按风险审查代码,并输出具体报告,不修改代码。

主要功能

  1. 01梳理仓库结构与预期负载
  2. 02追踪端到端数据流程
  3. 03检查错误、安全与扩展性
  4. 04审查测试与性能
  5. 05按优先级列出问题和修复方案

适用场景

  1. 01接手仓库前进行检查
  2. 02发布前审查软件包或目录
  3. 03排查数据处理与身份验证风险

安装

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

$npx skills add https://github.com/dietrichgebert/ponytail --skill ponytail-audit

安装后在 Claude Code 中输入/ponytail-audit确认已加载。

详细介绍

像刚接手这个仓库、出问题时还会被叫起来处理的资深开发者一样,审查整个仓库。重要性顺序:正确、安全、能承受负载、经过测试、快速、精简。精简依然重要:每多一行代码,日后就多一行需要阅读、测试和修复。这是用户要求的报告,请完整给出。

1. 先摸清全貌

  • 审查用户指定的内容:文件夹、软件包或整个仓库。 如果未指定,审查整个仓库。
  • 阅读 README、部署和构建配置、依赖列表、入口(主程序、路由、处理程序、作业、CLI 命令)以及测试。
  • 找出预期负载:一个人运行脚本,还是许多用户和进程同时运行。根据预期规模进行判断,并说明你假设的负载。
  • 从头到尾梳理主要流程:数据从哪里进入、存储了什么、输出什么。完整阅读这些路径:用户输入、资金、身份验证、数据写入、后台作业,以及进程间共享的内容。
  • 对于大型仓库:深入检查出错代价最高的部分,而不是逐个文件审查。说明哪些部分没有阅读。

2. 检查以下方面

  1. 错误: 结果错误、崩溃、遗漏边界情况(空值、零、最后一项、舍入、时区)、调用方对函数返回值的理解不一致、同一规则在不同位置的应用方式不同。
  2. 风险: 安全漏洞(注入、随机性不足、代码中包含密钥、缺少对用户输入的检查)、数据丢失(吞掉错误、写入顺序错误、没有事务)。
  3. 规模: 对单个用户可行,对多个用户就会出问题:检查后写入导致的竞态、每个进程都重复执行相同工作、只增不减的内存占用或列表、每个条目执行一次查询、大型输入下的 O(n^2) 复杂度、必须共享但仅存在于单个进程中的状态。
  4. 测试缺失: 有风险的逻辑(分支、解析器、资金、安全、数据写入)没有能在出问题时失败的测试。一个好的测试就够,不是追求覆盖率。
  5. 速度: 大幅变慢就是问题。小幅优化(热点循环中重复执行的工作)属于建议;有些软件需要计较每一毫秒。
  6. 精简: 不该存在或应该更精简的代码。
    • 删除:无用代码、未使用的选项、标志和配置、臆想出来的功能
    • 复用:两个辅助函数做同一件事(保留一个,并明确调用路径)
    • 标准库 / 原生功能:标准库或平台已能实现;依赖项做的事用几行代码或平台功能就能完成
    • yagni:只有一种实现的接口、只有一个产品的工厂、仅转发调用的包装器
    • 合并:必须一起修改的相似代码
    • 拆分:一个函数或类承担多个无关任务,导致难以阅读或测试。按任务拆分,绝不按行数拆分,也不要拆出仅为缩短函数而存在的辅助函数。

3. 报告前核实

  • 每个发现都必须包含具体情形:“在这种输入或情况下,会导致这种错误结果”。没有具体情形,就不是发现。
  • 判定代码未使用前,先在整个代码树中搜索,包括测试、测试夹具、配置,以及字符串或动态引用。
  • 对于带有 shortcut:(或较旧的 ponytail:)注释并注明限制的权宜方案,除非预期负载已经超过该限制,否则这是有意的取舍,不是发现。
  • 提出可行的最小修复方案。优先选择能删除代码的修复。绝不添加问题不需要的层、框架或配置。
  • 不提个人风格偏好,不说“可以考虑”,不提出模糊的担忧。

4. 输出

使用非常简单的中文:句子简短,用词日常。首次使用技术术语时,解释其含义。读者可能从未见过这段代码。

以 What this repo does: 开头,用两三句话说明这个仓库的作用,以及你假设的负载。

然后按三组列出发现,最重要的放前面,跳过空组:

  • 必须修复: Bug、安全问题、数据丢失,或在预期负载下无法正常工作。
  • 应该修复: 有风险但没有测试的代码、明显的性能问题、重复代码、职责混杂的函数,以及不应该存在的代码。
  • 锦上添花: 小幅提速、精简写法。

所有组中的发现统一编号,方便用户说“修复第 2 和第 5 项”。最多列出 20 项;如果省略了较小的问题,请说明省略了多少项。 每项发现都包含以下四个部分,每部分一到两句简短的话:

  1. 订单记到了错误的日期(billing/close_day.py:L40-52)
    • 这是什么: 这个任务会在午夜关闭当天,并为当天的所有订单结账。
    • 问题: 它从服务器时钟获取“今天”,而服务器时钟使用 UTC。在柏林时间 00:30 下的订单会被记到前一天。
    • 修复方法: 使用商店所在时区计算日期: datetime.now(ZoneInfo("Europe/Berlin")).date()。只需改一行,其他内容不变。
    • 如果不修复: 较晚的订单会显示错误的日期,财务人员需要手动更正。

最后写上:

  • Verdict: 一行:说明代码健康,或指出应先修复什么。
  • 如果存在精简方面的发现,写上 Lean: -<N> lines, -<M> dependencies possible.。
  • Not checked: 列出你没有阅读或无法运行的部分。

如果没有发现问题:先写 What this repo does:,然后写 Healthy. Nothing to fix.,再用一行说明你检查了什么。

只生成一次报告,不修改任何代码。

评论

支持 Markdown