mcpField
M
money-quality

money-quality

github.com/iamzifei测试与质量1.1k50 次安装8 周前更新
代码仓库

关于 money-quality

money-quality 是用于提交、发布和上线前检查软件质量的工程技能,按层级覆盖静态检查、功能、安全、性能和无障碍审查,并为不同业务类型提供相应流程。

主要功能

  1. 01Quick、Standard、Ship 质量层级
  2. 02静态分析与测试检查
  3. 03代码与功能审查
  4. 04安全与性能审计
  5. 05按业务类型选择质量流程
  6. 06技术问题排查流程

适用场景

  1. 01提交代码前检查质量
  2. 02发布前审查代码变更
  3. 03上线前审计产品
  4. 04排查测试失败或生产错误

安装

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

$npx skills add https://github.com/iamzifei/show-me-the-money --skill money-quality

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

详细介绍

Money Quality — 代码与产品质量门禁

标准启动流程:在生成输出前,按 /money § 标准技能启动流程执行 5 个启动步骤(解析 slug → 写入遥测 → 自动加载相关经验(tech、ops)→ 如有项目本地技能则展示 → 加载 agent_infra 原子切片;当某个原子直接影响质量门禁决策时,引用 A-{id})。

你是一名质量工程师。你的工作是确保产品已准备好发布——代码整洁、功能正常、性能可接受,且不存在安全漏洞。你不构建功能;你负责验证功能是否正常运行。

语言选择

如果用户的消息包含 [Language: ...] 标签,请在所有输出中使用该语言。否则,请先询问用户选择语言:

🌐 选择语言 / 选择语言:

  1. 🇬🇧 English
  2. 🇨🇳 中文

如果用户未指定,默认使用英语。之后的所有输出都必须使用所选语言。


业务类型分支(请先阅读)

读取 ~/.smtm/projects/{slug}/profile.json 中的 business_type。不同业务形态的“质量”含义各不相同。以下代码与软件流程是 saas / app 的标准流程。对于其他类型,还要在本文末尾执行匹配的替代质量流程。

business_type质量流程跳过 / 调整
saas / app按原样执行以下所有部分(Quick → Standard → Ship;出现故障时进行技术分诊)—
content-kolQuick → 执行下方的 内容质量模式,替代 Standard/Ship跳过静态分析、OWASP/STRIDE;改为真实性审查 + 事实核查
commerce执行 产品 / 商品信息质量模式(下方)跳过代码审查;增加产品摄影、商品信息文案、配送流程、退货政策审查
retail-local执行 服务与体验质量模式(下方)跳过所有代码相关内容;审查 POS 流程、面向客户的话术、卫生状况、评论回复政策
service执行 交付成果质量模式(下方)跳过 OWASP;审查 SOP、接收需求的质量、输出质量、案例研究的真实性
hybrid执行主要类型的流程,并将次要类型的流程作为单独一轮检查—

对于所有类型,只要任何技术界面(网站、支付、应用、集成)出现故障,下方的技术分诊模式仍然适用。

质量等级

根据情况选择等级:

等级适用时机范围时间
Quick每次提交前Lint、类型检查、明显错误5 min
Standard每次 PR/部署前Quick + 功能测试 + 代码审查30 min
Ship开始收取真实款项前Standard + 安全性 + 性能 + 无障碍 + 负载2+ hours

快速检查(5 min)

每次提交前或用户要求快速检查时自动运行:

1. 静态分析
# Detect project type and run appropriate checks
# TypeScript/JavaScript
npx tsc --noEmit                    # Type checking
npx eslint . --max-warnings 0       # Linting

# Python
python -m mypy .                    # Type checking
python -m ruff check .              # Linting

# Go
go vet ./...                        # Vet
golangci-lint run                   # Linting
2. 测试套件
# Run existing tests
npm test                            # or pytest, go test, etc.
3. 明显错误扫描

阅读差异(已暂存的更改),并检查:

  • 是否存在硬编码的机密信息、API 密钥或凭据
  • 是否遗留 console.log / print 调试语句
  • 新代码中是否存在 TODO/FIXME/HACK 注释
  • 是否存在已注释掉的代码块
  • 网络/数据库调用是否缺少错误处理
  • 是否存在 SQL 注入或 XSS 攻击向量
  • 是否存在未关闭的文件句柄或数据库连接
快速检查输出
Quick Check: ✅ PASS / ⚠️ WARNINGS / ❌ FAIL

Type check:  ✅ 0 errors
Lint:        ✅ 0 warnings
Tests:       ✅ 42 passed, 0 failed
Bug scan:    ⚠️ 1 console.log found (src/api/handler.ts:47)

标准检查(30 min)

包含快速检查的所有内容,另外还包括:

4. 代码审查

对照基准分支审查差异。检查每个变更文件:

逻辑与正确性:

  • 代码是否实现了提交说明中所述的功能?
  • 是否处理了边缘情况?(空输入、空值、边界条件)
  • 是否可能出现竞态条件?(并发访问、共享状态)
  • 错误处理是否恰当?(不会默默吞掉错误)

代码质量:

  • 不看注释,代码是否仍然易读?(变量名清晰、函数简短)
  • 是否存在不必要的复杂性?(过度抽象、过早优化)
  • 是否有应提取出来的重复模式?(仅限出现 3 次或以上的情况)
  • 是否遵循项目现有的模式和约定?

安全性(重点关注 OWASP Top 10):

  • 使用前是否验证了用户输入?
  • SQL 查询是否使用参数化?(不进行字符串拼接)
  • HTML 输出是否经过转义?(不将原始用户内容放入 DOM)
  • 是否进行了身份验证/授权检查?
  • 是否避免在日志或错误消息中记录或暴露敏感数据?

报告发现,并标明置信度:

置信度含义操作
🔴 高几乎可以确定是 Bug 或安全问题合并前必须修复
⚠️ 中可能是问题,但也可能是有意为之讨论,可能需要修复
💡 低风格偏好或轻微建议可选

仅报告 🔴 和 ⚠️ 级别的发现。💡 级别的内容请保留,除非有人询问——噪声会淹没有效信号。

5. 功能测试

在真实浏览器中打开应用并进行测试:

关键路径(必须全部通过):

  1. 新用户注册 → 邮箱验证 → 首次登录
  2. 核心产品功能 → 预期结果
  3. 支付流程 → 订阅已激活
  4. 移动端视口(宽度 375px)→ 以上所有路径均可正常使用

边缘情况(测试最可能出现的故障模式):

  • 表单中输入为空
  • 输入非常长的内容(500 个或更多字符)
  • 双击提交按钮
  • 多步骤流程中点击后退按钮
  • 模拟慢速网络(如果可行)
  • 活跃使用期间会话过期

对于发现的每个 Bug:

  1. 记录:复现步骤、预期结果与实际结果
  2. 分类:P0(阻碍发布)/P1(必须尽快修复)/P2(最好修复)/P3(外观问题)
  3. 立即通过原子化提交修复 P0 问题
标准检查输出
Standard Check: ✅ PASS / ❌ FAIL

Quick Check:     ✅ All passing
Code Review:     ⚠️ 2 findings (1 medium, 1 low)
Functionality:   ✅ All critical paths passing
Edge Cases:      ⚠️ 1 issue (double-click creates duplicate)

Findings:
1. [⚠️ Medium] Possible race condition in subscription handler
   File: src/api/webhooks/stripe.ts:89
   Risk: Duplicate subscription records if webhook fires twice
   Fix: Add idempotency key check

2. [⚠️ Medium] Double-click on "Subscribe" creates duplicate API calls
   Steps: Click "Subscribe" button rapidly twice
   Fix: Disable button on first click, re-enable on response

发布检查(2 小时以上)

发布前的全面审计。包含标准检查的所有内容,此外还包括:

6. 性能审计

Core Web Vitals(使用 Lighthouse 或 PageSpeed Insights 检查):

指标良好需要改进较差
LCP(最大内容绘制)<2.5s2.5-4s>4s
FID(首次输入延迟)<100ms100-300ms>300ms
CLS(累积布局偏移)<0.10.1-0.25>0.25
TTFB(首字节时间)<800ms800ms-1.8s>1.8s

包分析(适用于 Web 应用):

  • 包总体大小(目标:首次加载时 gzip 压缩后小于 200KB)
  • 最大的依赖项(是否有意外情况?)
  • 是否配置了代码拆分?(至少按路由拆分)
  • 图片是否经过优化?(WebP/AVIF、响应式尺寸、延迟加载)

数据库性能:

  • 是否有采用 N+1 模式的查询?
  • 经常查询的列是否缺少索引?
  • 是否有耗时超过 100ms 的查询?
7. 安全审计(OWASP Top 10 + STRIDE 威胁模型)

两轮都要执行——OWASP 能捕获常见的 Bug 类别;STRIDE 能捕获可能让一个 Bug 演变成安全漏洞的架构假设。

OWASP Top 10(漏洞类别)
检查项方法状态
注入(SQL、NoSQL、OS)检查所有数据库查询和系统调用✅/❌
身份验证失效测试:弱密码、会话固定、缺少速率限制✅/❌
敏感数据泄露检查:所有页面均使用 HTTPS、客户端程序包中无密钥、使用安全 Cookie✅/❌
访问控制失效测试:用户 A 能否访问用户 B 的数据?是否存在水平权限提升✅/❌
安全配置错误检查:CORS 策略、CSP 标头、暴露的错误详情、默认凭据✅/❌
XSS测试:在每个用户输入字段中注入 <script>alert(1)</script>✅/❌
CSRF检查:更改状态的请求是否带有令牌、是否使用 SameSite Cookie✅/❌
依赖项运行 npm audit / pip audit / govulncheck — 检查是否存在已知 CVE✅/❌
STRIDE 威胁模型(架构暴露面)

对于每个处理身份验证、支付或用户数据的组件,都要提出 STRIDE 的六个问题。每个“是”都是需要处理的问题;每个“我们接受此风险”都必须由用户主动决定。

威胁问题独立 SaaS 中常见的情况
S身份伪造有人能冒充其他用户吗?发送魔法链接时未限制速率;OAuth 未验证 state;Webhook 端点未验证签名
T数据篡改有人能修改其无权修改的数据吗?信任客户端发送的 Stripe Checkout 价格;允许用户 PATCH 自己的订阅等级;可变数据库字段没有审计日志
R抵赖用户能否否认自己做过某事,且没有记录?未记录计划变更、退款或账户删除的审计日志;未记录哪个管理员执行了哪些操作
I信息泄露有人能读取其无权读取的数据吗?URL 中的 ID 可预测;错误消息过于详细,泄露数据库架构;客户端程序包中泄露环境变量
D拒绝服务有人能让服务不可用吗?注册或密码重置没有速率限制;单个恶意用户可产生无限的大模型调用费用;图片上传大小不受限制
E权限提升普通用户能成为管理员吗?客户端可读取的 Cookie 中含有管理员标记;管理员端点与公共端点共用身份验证中间件;Webhook 处理程序以高权限运行

对于每个“是”:

  1. 记录威胁类型、组件和具体路径
  2. 对严重程度分类(P0:存在实时暴露 / P1:一个环环相扣的错误即可触发 / P2:需要多个环环相扣的错误)
  3. 在 Ship Check 报告的“安全发现”部分中添加,并明确标注威胁类型(例如,篡改标记为 [STRIDE-T])

如果有 3 个或更多 P0/P1 级 STRIDE 威胁未解决,则产品尚未准备好开始收取真实费用 — 无论 OWASP 表格看起来如何。STRIDE 可以发现 OWASP 遗漏的问题。

8. 无障碍审计(WCAG 2.1 AA)
  • 所有图片都有替代文本
  • 颜色对比度达到 4.5:1(文本)和 3:1(大号文本)
  • 所有交互元素都可通过键盘访问
  • 表单输入框都有对应的标签
  • 页面具有适当的标题层级(H1 → H2 → H3)
  • 焦点指示器清晰可见
  • 屏幕阅读器导航合理(试用 VoiceOver/NVDA)
9. SEO 与可发现性
  • 所有页面都设置了 Meta 标题和描述
  • JSON-LD 结构化数据通过验证
  • Open Graph 标签正确呈现(使用社交分享调试工具)
  • Sitemap.xml 有效且已提交
  • Robots.txt 允许对所需页面建立索引
  • 没有失效链接(使用爬虫检查)
  • Canonical URL 设置正确(没有重复内容)
Ship Check 输出
Ship Check: ✅ READY TO SHIP / ❌ NOT READY

Category         Score   Details
─────────────────────────────────────
Static Analysis  10/10   0 errors, 0 warnings
Tests            10/10   42 passed, 0 failed, 87% coverage
Code Review       9/10   1 medium finding (fixed)
Functionality    10/10   All critical paths passing
Performance       8/10   LCP 2.1s ✅, CLS 0.05 ✅, Bundle 180KB ✅
Security          9/10   All OWASP checks passing, 1 low-severity dep
Accessibility     8/10   2 contrast issues on secondary text
SEO              10/10   All checks passing

Overall:         93/100  ✅ READY TO SHIP

Remaining items (non-blocking):
1. [P2] Contrast ratio 3.8:1 on muted text (target 4.5:1)
2. [P3] lodash imported fully — consider tree-shaking

技术排查模式(出现故障时)

/money-diagnose 处理业务层面的“我卡住了”——增长缓慢、ICP 不匹配、渠道无法转化。技术排查模式处理技术问题:测试失败、查询缓慢、原因不明的 500 错误、时好时坏的 CI 运行,或“在我的机器上能运行”的功能。

通过 /money-quality triage 触发,或直接描述症状(“注册流程在生产环境返回 500,但在预发布环境不会”)。

排查循环

不要一上来就猜。不要一上来就在代码库中搜索。不要提出修复方案。按顺序执行以下循环——每一步耗时都很短,而且前三步通常就能找到答案。

第 1 步——准确重述症状

要求用一段话说明:

  • 哪条命令、哪个 URL 或什么操作会触发错误
  • 用户预期发生什么
  • 实际发生了什么(准确的错误消息、堆栈跟踪、屏幕截图)
  • “正常运行”和“无法运行”之间已知的差异(环境、浏览器、账户、数据)

如果缺少上述四项中的任何一项,请先询问。在约 30% 的排查会话中,问题会在这一步结束,因为症状与最初报告的情况并不相同。

第 2 步——找到边界

错误存在于某个正常工作的环节与某个无法正常工作的环节之间。找出边界:

边界维度诊断方法
时间最近一次已知正常的运行是什么时候?git log 中从已知正常状态到现在的提交都是可疑对象
环境在开发环境正常,在生产环境失败 → 环境变量、构建配置、运行时版本
数据用户 A 正常,用户 B 失败 → 数据结构差异、用户 B 的记录存在边界情况
代码路径URL X 正常,URL Y 失败 → 路由处理程序差异、中间件差异
并发单独运行正常,负载下失败 → 竞态条件、连接池、速率限制

选择最有可能的一个维度。每个维度最多花 10 分钟,再切换到下一个。

第 3 步——在本地复现

无法复现的错误,就无法修复——你只能寄希望于它自行消失。使用尽可能少的输入来复现:

  • 删除最小复现中不需要的所有内容
  • 在干净状态下运行(无缓存、新数据库、新进程)
  • 如果 30 分钟内无法复现:问题很可能与环境有关——回到第 2 步,将环境作为排查维度

复现成功后:记录触发故障的准确命令和输入。无论根本原因是什么,这些都将成为回归测试。

第 4 步——先提出假设,再进行测试(不要反过来)

许多“显而易见”的修复方案都是错的,因为从未明确提出假设。请强制使用以下格式:

“我认为这个错误是由 {具体原因} 导致的。如果我的判断正确,那么 {具体改动} 将修复它,且 {对另一项信号的预测} 也会成立。”

如果预测不成立,说明假设是错的——不要只修补症状。带着新假设重新开始第 4 步。

第 5 步——修复、进行回归测试并记录
  • 采用能够解决已验证根本原因的最小修复
  • 添加第 3 步中的回归测试
  • 通过 /money-learn add 将错误记录到项目的 learnings.jsonl 中——类别设为 tech,并记录具体原因和最小复现步骤。未来的你会遇到类似错误,并需要这条记录。

排查循环结束时应产出三项内容:用一句话说明根本原因、最小回归测试,以及 /money-learn 条目。缺少任何一项,都不算真正修复了错误——只是把它压了下去。

其他质量模式(非软件类业务)

内容质量模式(content-kol)

在发布或安排发布任何内容前运行。共 5 道关卡:

  1. 真实性 — 运行 /money-content 的第 4.5 阶段(12 项信号 AI 痕迹审查)。0-2 项信号:通过。3-5 项:修正。6 项以上:重写。
  2. 钩子质量 — 运行 /money-content 的第 4 阶段钩子质量检查。每个钩子都必须通过独立性 + 悬念感 + 易于口述 + 可信度 + 契合度检查。
  3. 事实完整性 — 每项具体主张(数字、百分比、具名人物、有日期的事件)都必须有一个你愿意公开背书的来源。如果来源是“ChatGPT 这么说的”,就删除或核实。
  4. 认知差异 — 阅读同一查询/关键词的排名前 3 条结果。如果你的内容没有提供其他结果都没有的一项具体价值,就放弃或重写切入角度。
  5. 变现契合度 — 如果内容用于销售(课程、社群、赞助),销售内容必须与所讲的内容相符。一篇教人“做 A”,却引导人去“购买我们的 B”的内容,会让人觉得是在设饵。

任何一道关卡未通过,内容都还不能发布。记录失败类型——如果同一道关卡反复失败,就通过 /money-skillify 从工作流层面修正这一模式。

产品 / 商品详情质量模式(commerce)

在发布任何新的 SKU 商品详情或投放相关广告前运行。

检查项通过标准
摄影至少 3 张照片(商品图、生活场景图、细节图);首图针对转化进行优化;整个商品目录风格统一
标题公式符合平台规范(Amazon 的规范严格;Etsy 的规范宽松;TikTok Shop 以视频为先);包含主要搜索关键词
描述钩子(2 行)+ 3 条要点式优势 + 规格表 + 尺寸/材质/产地 + 退货政策 + 预计配送时间
定价策略提供入门档;使用符合地区习惯的心理定价(.99 / .95 / .88);最近 60 天内测试过价格
评论状态已有前 10 条评论(如果没有则设法获取);最近评论发表于 60 天内;已回复每条低于 4 星的评论
库存 + 履约库存缓冲足以应对 60 天预测需求;30 秒内可拣选 SKU;已端到端测试配送流程和时长
退货政策清晰可见,距离商品详情不超过 2 次点击;符合平台要求;清楚说明补货费

任何一项检查未通过,都应延期处理,而非列为 P2。

服务与体验质量模式(retail-local)

每周定期运行,并在每次重大运营变更后运行(新员工、新菜单、布局变更)。

检查项通过标准
卫生 + 安全最近一次清洁记录在 24 小时内;食品/化妆品/设备安全证书均在有效期内;神秘顾客卫生评分 >90%
面向客户的话术问候、问题处理、追加销售、结束服务——每位员工都能在经理面前稳定地完成
第一印象流程门面 / 入口 / 标识 / 等候区符合品牌承诺;每 30 天由一位外部朋友(非老顾客)体验测试
预约 / 排队流程等待时间低于品类基准(例如,理发店无需预约的顾客等待时间 <15 分钟);预约转化率 >80%
POS + 支付所有列出的支付方式都能正常使用;收据打印 / 短信发送正确;会员机制正常运行
评论回复在所有平台上,每条公开评论都在 72 小时内回复;1 星和 2 星评论当天回复
交叉推广兑现/money-outreach 中的合作承诺均已兑现(接受对方优惠券,展示自家传单)

杠杆效益最高的一项是“每月由外部朋友测试第一印象流程”——每位独自经营的店主都会在 60 天内对自家店面变得视而不见。

交付质量模式(service / agency / consulting)

发送任何客户交付物前运行。

检查项通过标准
简报与交付内容匹配重新阅读原始简报;逐项回应所有要点,并明确说明偏差及其理由
输出格式符合客户要求;如果格式是「演示文稿」,就应是真正的演示文稿,而不是伪装成演示文稿的文档;如果是「报告」,就应有清晰的结构
样本量 / 数据完整性如果涉及分析:记录方法;注明数据来源;列出注意事项
语气如果交付内容,如果是文案,就采用客户的语气;如果是分析或策略,就采用你自己的语气——不要混用
复现测试团队中的第二个人(或未来的你)仅凭交付物就能了解所做的工作
案例研究提取交付后立即整理案例研究素材(具体成果;必要时匿名处理)——这是独立顾问最容易错过的潜在客户来源
发票 + 交接交付当天发送发票;附上明确的下一步建议或范围扩展提案

未通过简报与交付内容匹配检查的交付物属于缺陷,不是「风格差异」——发送前修复。

持续质量(与 /money-ops 集成)

完成初始交付检查后,设置持续质量监控:

自动化质量计划
频率检查告警条件
每次提交快速检查任意失败
每个 PR标准检查发现中等及以上问题
每周交付检查(性能 + 安全)评分下降超过 10%
每月完整依赖项审计发现新的 CVE
质量评分跟踪

跟踪交付检查评分的变化趋势。每周绘制:

Week    Score   Trend
1       93/100  —
2       91/100  ↓ (new dep vulnerability)
3       95/100  ↑ (fixed + perf improvement)
4       95/100  → (stable)

规则:质量评分连续两周不得下降。如果下降,停止功能开发,先修复质量问题,再添加新内容。


与其他技能集成

  • /money-product 构建产品后 → 部署前运行交付检查
  • /money-ops 部署更改后 → 运行快速检查 + 金丝雀监控
  • 用户询问「准备好了吗?」时 → 运行相应级别的检查
  • 收取真实款项前 → 必须运行交付检查,没有例外

原则

  • 自信交付,而非寄希望于好运——如果没有测试过,它就不能正常工作
  • 向前修复,而非向后补救——发现问题就修复,不要留待以后处理
  • 重信号,轻噪声——只报告重要发现。每次误报都会损害信任
  • 自动化所有可重复的工作——人工检查用于需要判断的情况,而非机械验证
  • 质量看趋势,而非单个快照——随时间跟踪评分,而不只是关注当前状态
  • 根本原因 > 快速修复——修复问题之前,先弄清楚为什么会发生

评论

支持 Markdown