domain-modeling (mattpocock/skills)
domain-modeling:对照组 2.8、一句话提示 4.61、装 skill 5.0(0–5 分,Codex 实测,n=2/任务/组)。结论:推荐,相对不装 skill +2.20。
28.2 / 30
相对不装 skill 的提升:+2.20
推荐:总分 28.2/30 不低于 22,产出质量 5.0 不低于 3.5,提升 +2.20 不低于 +1.0。
前沿
通过使用 Codex 测试。
覆盖 Codex, Claude Code
Codex CLI 0.166(SOTA 档):18 次评分运行。按我们的分档规则,这档通过同时覆盖 Claude Code;它不代表第二档的结果。
分数
每一维 0 到 5 分,六维相加是满分 30 的总分。每一维都是 5 更好。成本 5 表示又便宜又快。安装 5 表示容易。
- 触发可靠性
- 5.0
- 相对不装的提升
- 4.2
- 产出质量
- 5.0
- 令牌与时间成本
- 5.0
- 安装与可移植性
- 4.0
- 安全
- 5.0
安全审查
安全静态扫描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工审查:可在断网沙箱中运行。扫描没有命中不等于绝对安全。
安装
npx skills@latest add mattpocock/skills --skill domain-modeling
固定提交: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
测试日期: 2026-11-02
我们测了什么
- Create a glossary from overloaded terms — Our library-lending app uses 'member', 'patron', 'borrower' and 'customer' for the same person (someone who can borrow books). A 'loan' is also called a 'checkout' or 'rental'. A 'copy' is one physical book, a 'title' is the abstract book. Please set up the pr…
- Record a hard-to-reverse decision — Record this architecture decision for the repo: we store money as integer cents in Postgres rather than NUMERIC/DECIMAL, because the payment partner's API uses integer cents and rounding bugs bit us twice. Write it up.
- Record only what deserves an ADR — Two decisions from today's meeting: (a) we're moving authentication from our own password table to a third-party identity provider (Auth0): a quarter of work to undo; (b) we renamed the CSS class .btn-main to .btn-primary. Record whatever deserves recordin…
优点
- 平均分从不装时的 2.8 提到 5.0(+2.20)。
- 不点名也会被触发:Skill file read in 6/6 treatment runs.
- 不增加 token 开销:约为不装 skill 时的 0.96 倍。
- 比把它的规则压成一句话的做法高 +0.39。
- 装 skill 后绝对质量高:5.0 / 5。
缺点
- 测试说明:看到对照组的文件名后我们放宽了检查里的文件名匹配,并按同一套放宽后的规则重打了所有运行。
- 每个任务每组 n=2,差距在 1 分以内属于噪声。
评测
在 Codex CLI(SOTA 档)上跑 3 个任务、对照、一句话提示、装 skill 三组,共 18 次运行,由规则脚本打分(没有 LLM 评委),断网沙箱、每次运行独立临时目录。具体做法见下方英文评测原文。
三组对比
| 组别 | 平均分(0–5) | 每次 token |
|---|---|---|
| 不装 skill | 2.8 | 83k |
| 一句话提示 | 4.61 | 83k |
| 装了 skill | 5.0 | 80k |
Codex CLI 实测,18 次运行,规则脚本打分,没有 LLM 评委。总分 28.2 / 30,结论 推荐。
测试披露: 看到对照组的文件名后我们放宽了检查里的文件名匹配,并按同一套放宽后的规则重打了所有运行。
下面是评测原文,英文。
Verdict: Recommended (28.2 / 30). Source: mattpocock/skills, skills/engineering/domain-modeling, pinned at commit 4ae2317. Install: npx skills@latest add mattpocock/skills --skill domain-modeling. Licence: MIT (repo LICENSE).
What it is
The domain-modeling skill (mattpocock/skills): keeps a project's domain language sharp. It maintains a GLOSSARY.md (one canonical bold term per concept, a tight definition, _Avoid_: synonyms, no generic programming terms) and writes ADRs under docs/adr/ only for decisions that are hard to reverse, surprising and genuinely traded off, as a short paragraph with sequential numbers.
How we tested
Codex CLI 0.166 (gpt-6-astra, low reasoning) on a dedicated Windows test PC, a fresh temporary project and temporary HOME/TMPDIR/caches per run, skill installed (treatment) or absent (control) or absent with the skill's core requirement squeezed into one sentence appended to the prompt (one-liner group), 2 runs per group per task, network off, /tmp writes blocked. The prompts never mention the skill (except the wording noted below).
Three tasks with natural wording that does not name a format: 'set up the project's domain glossary' (a library app that calls the same person member/patron/borrower/customer), 'record this architecture decision' (money as integer cents), and 'two decisions from the meeting; record whatever deserves recording' (an Auth0 migration that is hard to undo and a CSS class rename that is not), starting from a repo with ADRs 0001 and 0002. One-liner = the whole convention in one sentence.
- Create a glossary from overloaded terms — Our library-lending app uses 'member', 'patron', 'borrower' and 'customer' for the same person (someone who can borrow books). A 'loan' is also called a 'checkout' or 'rental'. A 'copy' is one physical book, a 'title' is the abstract book. Please set up the pr…
- Record a hard-to-reverse decision — Record this architecture decision for the repo: we store money as integer cents in Postgres rather than NUMERIC/DECIMAL, because the payment partner's API uses integer cents and rounding bugs bit us twice. Write it up.
- Record only what deserves an ADR — Two decisions from today's meeting: (a) we're moving authentication from our own password table to a third-party identity provider (Auth0): a quarter of work to undo; (b) we renamed the CSS class
.btn-mainto.btn-primary. Record whatever deserves recordin…
Scoring is programmatic (hidden tests / planted-issue recall / constraint checks / render+OCR where relevant), 0–5 per run. No LLM judge decided any score.
Results
The one-liner given to the third group: "Keep the project's domain language sharp: write a GLOSSARY.md with one canonical bold term per concept (a tight definition and _Avoid_: synonyms, no generic programming terms), and record only hard-to-reverse, surprising, genuinely traded-off decisions as short sequentially numbered ADRs in docs/adr/ (a paragraph, not a template)."
| Task | Control score | One-liner | With skill | Control tokens | One-liner tokens | With-skill tokens | Skill read |
|---|---|---|---|---|---|---|---|
| t1-glossary | 1.46 | 4.38 | 5.0 | 75k | 90k | 79k | 2/2 |
| t2-adr | 2.5 | 5.0 | 5.0 | 91k | 74k | 69k | 2/2 |
| t3-adr-numbering | 4.45 | 4.45 | 5.0 | 82k | 83k | 89k | 2/2 |
Mean score: 2.8 without vs 5.0 with the skill (delta +2.2). Tokens per run: 83k vs 80k (0.96x); time 45s vs 35s. One-liner group: 4.61 (the skill's gain over the one-liner: +0.39; one-liner's own gain over no skill: +1.8); one-liner tokens 83k per run, so the skill costs 0.96x the one-liner.
What happened
- Control 2.80, one-liner 4.61, skill 5.00 (n=6 each). Control does the sensible thing but in its own shape: a DOMAIN*GLOSSARY.md (not GLOSSARY.md) with a table or prose, no
\_Avoid*lines in either run, and ADRs of 263 and 355 words with Context/Decision/Consequences headings where the convention wants a short paragraph; one control ADR went to docs/decisions/ instead of docs/adr/. - The skill's two judgement calls are right: in both treatment runs of the third task it recorded only the Auth0 move as ADR 0003 (correct numbering after the existing 0001/0002) and said it skipped the CSS rename as easy to reverse. Control and one-liner also skipped the rename, but control-2 and one-liner-2 gave a reason my regex did not recognise (routine change, unrecorded), so the 'tells me why' check under-credits them.
- The one-liner reaches most of the format (glossary 3.75 and 5.0, ADRs 5.0, 5.0) but one one-liner glossary used a different layout, so it missed the
_Avoid_structure check. - No cost: 80k tokens per run for the skill, 83k for control and one-liner. The skill read in 6/6 treatment runs without being named.
Dimension scores
| Dimension | Score | Why |
|---|---|---|
| 1_output_quality | 5.0 | Mean score 5.00/5 with the skill (programmatic checks, see per-task table). |
| 2_lift_vs_no_skill | 4.2 | +2.20 points vs 2.80 without the skill (n=2 per task; under ~1 point is noise). |
| 3_trigger | 5.0 | Skill file read in 6/6 treatment runs. |
| 4_instructions_portability | 4 | Short SKILL.md with a few reference templates; no scripts. |
| 5_efficiency | 5 | 0.96x tokens (80k vs 83k per run) and 0.78x time (35s vs 45s). |
| 6_safety_hygiene | 5 | Prose only; see security.md. |
Limits of this test
- Rule-based checks on file names, headings, bold-term counts, word counts and
_Avoid_lines. Several are shape checks that a control cannot meet without being told the shape; the checks measure compliance with this house convention, not general writing quality. - I loosened the file-name and layout patterns after seeing control wrote DOMAIN_GLOSSARY.md and the one-liner wrote bullet-style entries (file name stays a separate check), and re-scored all runs with the same rules. The 'why (b) was skipped' regex is still strict.
- Small synthetic repos; no long-lived glossary that has to be updated over time.
- n = 2 per group per task: differences under about 1 point are noise.
- Rule-based scoring measures what the checks can see; it cannot judge taste or whether a result is the best possible.
Security
See security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Verdict: safe to run (no-network sandbox). A clean scan does not prove a skill safe.
Bottom line
For a team that wants this glossary-and-ADR convention, the skill gets it right first time and keeps ADRs scarce, at no extra tokens. A one-sentence instruction gets most of it, so the skill mainly saves you from pasting the convention each time.
记录
Run log for domain-modeling: Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run. Columns: task, arm-run, score (0-5), tokens, seconds, checks passed, skill files the agent opened. t1-glossary control-1: score 1.25, tokens 67501, secs 45.5, checks 2/7, opened nothing t1-glossary control-2: score 1.67, tokens 82953, secs 59.9, checks 3/7, opened nothing t1-glossary oneliner-1: score 5.0, tokens 99071, secs 37.6, checks 7/7, opened nothing t1-glossary oneliner-2: score 3.75, tokens 82400, secs 36.8, checks 6/7, opened nothing t1-glossary treatment-1: score 5.0, tokens 89157, secs 40.7, checks 7/7, opened domain-modeling t1-glossary treatment-2: score 5.0, tokens 70479, secs 32.2, checks 7/7, opened domain-modeling t2-adr control-1: score 3.12, tokens 99540, secs 43.6, checks 3/5, opened nothing t2-adr control-2: score 1.88, tokens 82829, secs 51.1, checks 2/5, opened nothing t2-adr oneliner-1: score 5.0, tokens 66964, secs 43.7, checks 5/5, opened nothing
18 次运行、3 个产物
样例产物
前沿 · 装了 skill:GLOSSARY.md(t1-glossary,第 1 次,Codex)
# Library Lending The library-lending context describes people who can borrow books, the books available to borrow, and their loans. ## Language **Member**: A person who can borrow books from the library, whether or not they currently have a loan. _Avoid_: Patron, borrower, customer **Loan**: An instance of a member borrowing a physical copy of a title from the library. _Avoid_: Checkout, rental **Copy**: One physical book belonging to a title. Two physical books of the same title are two distinct copies. _Avoid_: Title (when referring to a physical book) **Title**: The abstract book represented by physical copies. Multiple copies of the same book share a title. _Avoid_: Copy (when referring to the abstract book)