Community编程与开发github.com

daniloduuarte/verify-saas

验证代码更改是否破坏了任何功能。完整模式执行类型检查、lint、构建和测试,并与保存的基准线进行比较(区分新错误和旧债),并提示新的路由、依赖项或迁移,特别标记包含安全关键词的迁移。快速模式(--quick)仅对更改的文件执行类型检查和 lint 和测试。在合适的时机使用(参见“何时运行”);在提交、推送和部署前必须运行。

verify-saas 是什么?

`daniloduuarte/verify-saas` 是一个 AI 代理技能,旨在在开发工作流程的关键阶段(如提交、推送和部署前)自动验证 SaaS 项目的代码更改。它执行一个可配置的步骤序列——类型检查、lint、构建和测试——并将结果与保存的基准线(`verify-saas.baseline.json`)进行比较,从而区分预存的“旧债务”和当前更改引入的“新错误”。该技能还检测项目结构的变化,例如新的依赖项、更改的路由以及数据库迁移,并特别标记包含可配置安全关键词(例如“权限”、“角色”)的迁移。它提供两种运行模式:完整模式(`--quick` 或完整),用于全面验证和基准线更新;以及快速模式(`--quick`),用于仅对修改后的文件进行快速检查,而无需更新基准线。该技能设计为通过 `verify-saas.config.json` 进行高度可配置,并包含详细的报告,使用符号(`✗`、`✓`、`=`、`ℹ`、`⚠`)指示回归、改进、无变化、信息和警告。它主要在 Claude Code、Cursor 和 Codex 等 AI 编码代理平台上使用,是开发工作流程中的预防性检查点,用于在软件投入生产前捕获错误。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/daniloduuarte/verify-saas/tree/HEAD/verify-saas

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

何时运行(决定规则)

有节制地运行,而非条件反射。根据情况选择级别:

情况要运行的内容
仅文档、笔记、评论、计划或规范不运行任何内容。 说明没有必要。
工作过程中:编辑之间、修正轮次、“我是否破坏了类型?”快速运行: node .claude/skills/verify-saas/driver.mjs --quick(或者如果仅更改了单个类型,则仅运行类型命令)
每个任务或逻辑批次的末尾,提交之前完整运行,一次
在任何 git push、部署或合并到主分支之前完整运行,必须执行。 如果上一次完整运行正好覆盖了即将提交的 commit,则无需重复。
新增迁移、package.json 更改、构建配置、访问/身份验证规则在该更改结束时完整运行(结构更改风险)
在 git pull 或合并其他人的工作之后完整运行(重新锚定基准线)

永远不要:

  • 在没有中间更改的情况下连续运行两次;
  • 在读取第一次结果之前开始第二次运行;
  • 与同一目录中的其他构建或测试并行运行;
  • 在实时调整轮次中运行完整模式(等待提交请求)。

始终要:

  • 确认测试指向测试数据库/环境,切勿指向生产环境(参见 README 中的警告);
  • 在运行前重新阅读自己的差异:多余的导入和错误的属性名称可以通过阅读发现,而不是浪费一次运行;
  • 阅读完整报告,而不仅仅是退出代码。

如何运行

在项目根目录下:

node .claude/skills/verify-saas/driver.mjs            # 完整运行
node .claude/skills/verify-saas/driver.mjs --quick    # 快速运行,不修改基准线
node .claude/skills/verify-saas/driver.mjs --baseline # 重新捕获当前状态为“良好”

所有特定于项目的内容(命令、目录、警报词、启用或禁用的步骤)都保存在项目根目录下的 verify-saas.config.json 文件中。如果没有此文件,则使用 Next.js + TypeScript + npm 的默认值。

退出代码:0 = 未恶化任何内容;1 = 某些内容恶化或某些内容已经损坏(类型、构建或测试)。

首次使用:适配项目(适用于正在阅读此内容的代理)

如果用户刚刚安装此技能并要求将其适配到他们的 SaaS 项目,请按此顺序操作:

  1. 阅读项目(package.json 或等效文件、迁移目录、测试运行方式)并调整 verify-saas.config.json:类型、lint、构建和测试命令、structure.migrationsDir 和 alertKeywords。禁用("enabled": false)项目没有的内容。
  2. 询问业务中绝对不能破坏什么(没有重复时段的日程表、不会变为负数的库存、平衡的余额、公司 A 看不到公司 B、收到两次付款却只贷记一次……)。不要发明规则:与用户确认并为它们编写测试,使用 docs/exemplos-por-nicho.md 作为模板。
  3. 确认测试环境。 切勿针对生产环境运行测试。如果没有测试数据库或环境,请停止运行并通知用户。
  4. 只有在那之后,运行 node .claude/skills/verify-saas/driver.mjs --baseline 并显示报告,指出哪些内容已经损坏(债务)以及哪些内容通过了。
  5. 告知用户已调整的内容,并且他们应审查已编写的测试。

如何阅读报告

按顺序:

  1. 类型:通过/失败以及相对于基准线的错误数量。
  2. Lint:通过指纹(文件:行:列:规则)进行比较,而不仅仅是计数。“之前 5 个错误,之后 5 个”可能隐藏 5 个不同的错误。旧债务从来都不是你的错;只有新的才重要。
  3. 构建:通过/失败以及路由列表(如果已配置)。
  4. 测试:相对于基准线的通过/失败。
  5. 结构:新增、删除或版本更改的依赖项;新的迁移,如果包含警报词(安全/权限),则带有警告标记。

符号:✗ 回归(修复),✓ 改进,= 无变化,ℹ 信息,⚠ 检查是否为有意为之。

打印后,完整模式会用当前状态覆盖基准线。因此:在再次运行之前先修复回归,否则第二次运行会将错误视为“旧债务”。

最佳实践

  • 基准线(verify-saas.baseline.json)应提交到项目中;正是它使得“自上次以来”的比较在会话和机器之间工作。
  • 首次在项目中使用:在你确信状态良好的情况下使用 --baseline 运行。
  • 迁移仅通过文件名进行比较。该技能不会应用或验证 SQL;它只会通知出现了新的迁移以及它是否涉及安全性。
  • 该技能不会安装依赖项(npm install 是一个比验证本身应该做的更大的操作)。
  • 如果报告显示你未导致的“新”问题,请检查是否有人在两次运行之间更改了仓库(git log -3 --oneline)。
  • 真正的保护来自你编写的测试(参见 docs/exemplos-por-nicho.md)。该技能仅确保它们运行,并在发生变化时发出通知。

相关技能