何时运行(决定规则)
有节制地运行,而非条件反射。根据情况选择级别:
| 情况 | 要运行的内容 |
|---|---|
| 仅文档、笔记、评论、计划或规范 | 不运行任何内容。 说明没有必要。 |
| 工作过程中:编辑之间、修正轮次、“我是否破坏了类型?” | 快速运行: 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 项目,请按此顺序操作:
- 阅读项目(
package.json或等效文件、迁移目录、测试运行方式)并调整verify-saas.config.json:类型、lint、构建和测试命令、structure.migrationsDir和alertKeywords。禁用("enabled": false)项目没有的内容。 - 询问业务中绝对不能破坏什么(没有重复时段的日程表、不会变为负数的库存、平衡的余额、公司 A 看不到公司 B、收到两次付款却只贷记一次……)。不要发明规则:与用户确认并为它们编写测试,使用
docs/exemplos-por-nicho.md作为模板。 - 确认测试环境。 切勿针对生产环境运行测试。如果没有测试数据库或环境,请停止运行并通知用户。
- 只有在那之后,运行
node .claude/skills/verify-saas/driver.mjs --baseline并显示报告,指出哪些内容已经损坏(债务)以及哪些内容通过了。 - 告知用户已调整的内容,并且他们应审查已编写的测试。
如何阅读报告
按顺序:
- 类型:通过/失败以及相对于基准线的错误数量。
- Lint:通过指纹(文件:行:列:规则)进行比较,而不仅仅是计数。“之前 5 个错误,之后 5 个”可能隐藏 5 个不同的错误。旧债务从来都不是你的错;只有新的才重要。
- 构建:通过/失败以及路由列表(如果已配置)。
- 测试:相对于基准线的通过/失败。
- 结构:新增、删除或版本更改的依赖项;新的迁移,如果包含警报词(安全/权限),则带有警告标记。
符号:✗ 回归(修复),✓ 改进,= 无变化,ℹ 信息,⚠ 检查是否为有意为之。
打印后,完整模式会用当前状态覆盖基准线。因此:在再次运行之前先修复回归,否则第二次运行会将错误视为“旧债务”。
最佳实践
- 基准线(
verify-saas.baseline.json)应提交到项目中;正是它使得“自上次以来”的比较在会话和机器之间工作。 - 首次在项目中使用:在你确信状态良好的情况下使用
--baseline运行。 - 迁移仅通过文件名进行比较。该技能不会应用或验证 SQL;它只会通知出现了新的迁移以及它是否涉及安全性。
- 该技能不会安装依赖项(
npm install是一个比验证本身应该做的更大的操作)。 - 如果报告显示你未导致的“新”问题,请检查是否有人在两次运行之间更改了仓库(
git log -3 --oneline)。 - 真正的保护来自你编写的测试(参见
docs/exemplos-por-nicho.md)。该技能仅确保它们运行,并在发生变化时发出通知。