Skip to content
Back to skills

Constraints Md Zh

ASecurity

约束驱动开发、把项目质量标准写成可机械检查的 CONSTRAINTS.md、防止 Agent 悄悄降低标准。当用户说「定一下我们的质量标准」「加质量门禁」「覆盖率定多少合适」「AI 老是加 ts-ignore / 跳过测试来变绿」「怎么防止代理为了通过而放水」「性能/无障碍预算怎么定」时使用。流程:先探测(栈、测试器、linter、现有覆盖率、CI、代理框架)再问;四个带默认值的问题;写 CONSTRAINTS.md(底线:不新增抑制注释、不留桩、不跳测、无密钥、本文件不为通过而被削弱;带数字与检查命令的维度;只测量不强制的棘轮;带负责人与到期日的例外);每个维度装事实标准工具;按 BUILD/VERIFY/REVIEW/SHIP 阶段与成本分配;守住标准本身的五种放水动作;至少一个外部约束;没数字就棘轮;合理默认值表;三级升级。也覆盖「质量约束」「覆盖率」「删了测试」这类说法。改编自 addyosmani/agent-skills 的 constraint-driven-development(MIT)。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 13, 2026
ai-agentsgoshellgit

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 13, 2026

npx -y skills add po-et/workbuddy-skills --skill constraints-md-zh --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Constraints Md Zh?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Constraints Md Zh
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/po-et-constraints-md-zh/badge)](https://www.skillsdirectory.com/skills/po-et-constraints-md-zh)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: constraints-md-zh
description: 约束驱动开发、把项目质量标准写成可机械检查的 CONSTRAINTS.md、防止 Agent 悄悄降低标准。当用户说「定一下我们的质量标准」「加质量门禁」「覆盖率定多少合适」「AI 老是加 ts-ignore / 跳过测试来变绿」「怎么防止代理为了通过而放水」「性能/无障碍预算怎么定」时使用。流程:先探测(栈、测试器、linter、现有覆盖率、CI、代理框架)再问;四个带默认值的问题;写 CONSTRAINTS.md(底线:不新增抑制注释、不留桩、不跳测、无密钥、本文件不为通过而被削弱;带数字与检查命令的维度;只测量不强制的棘轮;带负责人与到期日的例外);每个维度装事实标准工具;按 BUILD/VERIFY/REVIEW/SHIP 阶段与成本分配;守住标准本身的五种放水动作;至少一个外部约束;没数字就棘轮;合理默认值表;三级升级。也覆盖「质量约束」「覆盖率」「删了测试」这类说法。改编自 addyosmani/agent-skills 的 constraint-driven-development(MIT)。
author: Captain
version: 0.1.1
display_name: "约束驱动开发(CONSTRAINTS.md)"
display_name_en: "Constraint-Driven Development (zh)"
description_zh: "把质量标准写成能机械检查的 CONSTRAINTS.md:底线 + 带数字与命令的维度 + 棘轮 + 有期限的例外;按阶段与成本分配检查;盯住 Agent 放水的五种动作;至少一个外部约束。"
description_en: "Write the quality bar as a mechanically checkable CONSTRAINTS.md: a floor, dimensions with numbers and commands, ratchets, expiring exceptions; place checks by phase and cost; watch the five ways agents lower the bar; keep at least one external constraint."
tags:
  - "约束驱动开发"
  - "CONSTRAINTS.md"
  - "质量门禁"
  - "CI"
  - "覆盖率"
  - "coverage"
  - "linter"
  - "质量标准"
examples_zh:
  - "给这个项目定一份质量约束,AI 写的代码必须过"
  - "覆盖率现在 62%,标准定 80% 合理吗"
  - "AI 为了让 CI 变绿删了测试,怎么防"
examples_en:
  - "Set up quality constraints this project's AI-written code must pass"
  - "Coverage is 62%, is an 80% bar reasonable"
  - "The agent deleted tests to make CI green, how do I prevent that"
metadata:
  { "openclaw": { "requires": { "bins": [] }, "os": ["darwin", "linux", "windows"], "emoji": "📏" } }
---

# 约束驱动开发(CONSTRAINTS.md)

其他技能描述"好"长什么样,都活在 Agent 读了也未必照做的散文里,且不跨会话。本技能产出不同的东西:**这个项目**的标准,带数字,活过对话,可机械检查。
原因:你自己写代码时,读一遍就知道好不好;Agent 一下午写的比你一周读的多,判断只能从脑子里搬进围绕循环运行的检查——它们要存在、要有你真选的数字、要在离工作足够近的地方触发,让 Agent 修自己的输出。规格驱动说做什么,测试驱动证明它能用,约束驱动定义"好到能上线"是什么。

用于:新项目或大功能且质量标准没写下来;用户要"定标准/加门禁/别让代理发垃圾";Agent 的产出没人逐行看;CI 有检查但没人说得清哪些拦合并;覆盖率/性能/无障碍每个 PR 都在吵而不是定一次;要跑自主循环而唯一防线是 Agent 自己写的测试套件。不用于:已有 CONSTRAINTS.md 且不改(读它照做);一次性脚本与原型;用户此刻要的是评审或建流水线。**访谈需要在线的人**,CI/自主运行里只应用底线并标记给人。

## 流程
1. **先探测再问**:栈(package.json / pyproject / go.mod / Cargo)、测试器、现有 linter、今日覆盖率、CI、代理框架(.claude/ .codex/ AGENTS.md)。两行汇报发现,只问剩下的。
2. **四个问题,每个带默认值**("不知道"也是完整答案):Q1 底线之外要强制哪些——覆盖率/安全扫描/性能预算/无障碍/架构边界?猜 (a)(b);说清成本(性能与无障碍要有可访问 URL,架构要写规则文件)。Q2 中途检查失败是阻塞还是警告?猜阻塞;默认底线阻塞、其余头两周警告。Q3 有目标数字还是测今天的值然后守住?猜测量;默认测量并守住(棘轮)。Q4 能容忍的最慢检查时长?猜 90 秒;默认任务结束 90 秒、CI 不限。**到四个为止。**
3. **写 CONSTRAINTS.md**(仓库根,任何框架的 Agent 都能读,改动进评审):
   - 底线(始终强制、无需安装):不新增抑制注释(`@ts-ignore` `eslint-disable` `# noqa` `# type: ignore`);不留未实现的桩(`throw new Error("Not implemented")`、空 catch);不跳过或删除测试除非提交信息写理由;源码无密钥;**本文件不为让某次改动通过而被削弱**。
   - 带数字的维度表:维度 / 规则 / 检查命令 / 运行时机(类型零错误 `tsc --noEmit` 每次编辑;lint 零错误;密钥 `gitleaks detect --redact`;改动行覆盖率 ≥ 80%;代码安全无高危 `semgrep`;依赖无高危 `osv-scanner`;无障碍零严重 `axe`;性能 LCP ≤ 2500ms、CLS ≤ 0.1 `lighthouse`)。**每行都要有产出裁决的命令,有数字没命令的是愿望不是约束。**
   - 只测量不强制:项目覆盖率 今日值 不得下降;主包体积 今日值 不得增长。
   - 例外表:ID / 规则 / 路径 / 原因 / 负责人 / 到期日。
   然后在 AGENTS.md / CLAUDE.md 加一行:写代码前读 CONSTRAINTS.md,不为让改动通过而削弱它。
4. **每个维度装事实标准工具**,不自造检查器(类型 tsc/mypy;lint 现有配置;覆盖率测试器自带;代码安全 semgrep;密钥 gitleaks;依赖 osv-scanner;页面性能 lighthouse;包体积 size-limit;无障碍 axe-core;架构 dependency-cruiser;断言质量 stryker)。五个坑:gitleaks 的 `--redact` 不可省(否则密钥落进 Agent 记录);lighthouse 与 axe 要能跑的 URL,没有就砍掉维度而不是编一个跑不了的检查;贵的检查限定到 diff(全仓 stryker 几小时会被关掉,改动文件一分钟内);覆盖率不要跑第二遍测试,读已有 lcov 与 git diff 求交;semgrep 注册表规则免费跑但再分发要看许可。写进项目脚本:`check:fast`(类型 + lint + 密钥)、`check:task`(+ 覆盖率)、`check:full`(+ semgrep + osv)。CONSTRAINTS.md 是规范源,脚本是镜像,漂移以文件为准。
5. **接到生命周期**:BUILD 类型/lint/密钥/底线,几秒、只查改动文件;VERIFY 相关测试 + 改动行覆盖率,90 秒内;REVIEW 全部 + 守护检查,分钟级;SHIP 方向检查、无回退,CI。两条规则:限定到 diff(改动行覆盖率是 Agent 能推动的数字,项目覆盖率是它继承的);成本决定位置(几秒以上的移出编辑循环)。**到处都跑是最大的错误**:拖住 Agent 的检查会被关掉,被关掉的门比没门更糟,因为标准看起来还在。
6. **守住标准本身**:Agent 不会精巧钻空子,它撞到红灯就走最便宜的路变绿。评审时盯五种动作:阈值动了(预算降低、级别下调、检查移出快速阶段——对比分支起点的 CONSTRAINTS.md);测试变容易了(`.skip`、删测试文件、断言被抽走);检查器被静音(新的 `@ts-ignore`/`eslint-disable`;四种要特别注意:`istanbul ignore` 把代码踢出覆盖率、`Stryker disable` 藏存活突变、`nosemgrep`、`gitleaks:allow`);工作没做完(抛错的桩、把失败变沉默的空 catch、站在实现位置上的 TODO);例外表多了一行没人讨论过。**收紧应无声,放松应大声。** 底线没有事实标准工具,Agent 会各写各的检查器;用一份 diff 范围的参考实现(退出码 0/1/2,按生态调整模式)而不是重造。
   按"Agent 能不能靠写不能用的代码通过它"给检查排序:外部(axe 编码 WCAG、osv 读漏洞库、lighthouse 测真浏览器——Agent 无法争辩)> 项目(你的 lint 规则、层边界,人拥有文件)> 套件(你自己的测试,最有用也唯一真循环)。全是第三种的标准不如有一个外部意见的;**确保至少一个外部约束。**
7. **没数字就棘轮**:62% 的代码库定 80% 只会得到永远红的构建和学会忽视红灯的团队。记录今天的值、拒绝变差,改善就更新,下降就是发现。这也回答了对训练的质疑:模型因通过测试被奖励,架构腐烂几个月才显形进不了权重——棘轮就是那个缺失的、写在构建看得见的地方的惩罚。

## 合理默认值
改动行覆盖率 ≥ 80%(够逼出测试、允许一行配置);项目覆盖率 今日值不降;突变分数起步 ≥ 60%(80% 成熟);依赖漏洞 无高危及以上;LCP ≤ 2500ms、CLS ≤ 0.1(Web Vitals 好的阈值);无障碍 零 critical/serious;例外寿命 90 天;棘轮容差 0.5%。数字和理由一起写,没理由的阈值会被下一个撞上它的人删掉。

## 三级升级
1 只写下来(成本零,抓诚实错误,靠 Agent 遵守)→ 2 脚本化(`npm run check` 接到编辑后钩子与 CI,确定性、无新依赖)→ 3 工具支撑(处理 diff 范围、预算、棘轮、守护检查的专用运行器,检查 shell 超过约三十行时)。多数项目停在 2。首次可以只上底线(diff-only、无需安装),再逐个维度装工具;机器级安全工具可只在 CI 跑,在"运行时机"列写明。

## 合理化借口对照

| 借口 | 现实 |
|---|---|
| "代码稳定了再加约束" | 代码会稳定在它移动时被允许的样子 |
| "测试就是约束" | 你写的测试只证明你同意自己;说不了新代码覆盖率、依赖风险、包体积 |
| "我们达不到 80%" | 那就别定 80%;定今天的数字并守住 |
| "会拖慢 Agent" | 只有把慢检查放进快循环才会;那是放置错误不是反对约束的理由 |
| "标准我记得" | Agent 不记得,而它写了大部分代码 |
| "约束会挡住发布" | 带负责人和日期的例外解封你;删掉约束解封所有人到永远 |

## 红灯
访谈超过四问或产出用户解释不了的配置;定了今天就过不了且没有达成计划的预算;有数字没工具;有事实标准却手搓检查器;所有约束都由项目自己的测试裁决;CONSTRAINTS.md 与它拦下的功能在同一提交里被改;例外无负责人或到期超过一年;Agent 提议放宽阈值而不是修代码;慢检查进了编辑循环且有人开始 `--no-verify`;写完没人再打开过。

## 验收
```
- [ ] CONSTRAINTS.md 存在且每个数字有理由 - [ ] 底线在当前代码库上无改动即可通过 - [ ] 选中的每个维度装了工具且命令今天能跑
- [ ] 每条约束写明运行时机,快速阶段几秒内 - [ ] 至少一个外部约束 - [ ] 只测量指标记录今日值与方向 - [ ] 例外有负责人与到期日
- [ ] AGENTS.md / CLAUDE.md 指向该文件 - [ ] 在当前分支试跑没有用户不同意的失败
```

---
改编自 [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills) 的 `constraint-driven-development`(MIT)。改动见 ATTRIBUTION.md。

Files in this skill

  • ATTRIBUTION.md1.2 KB
  • SKILL.md11.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.