domain-modeling
1. Bilingual SKILL.md
左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 16 处。
Entry SHA-256: 9617041db9b0f6606ecf974e2061c83596b05059b5bb20ddb884c60f147c70e9
2. Why This Skill Is Clever
一句话核心机制
把领域建模变成会话内的主动校准回路:术语一出现就对照词汇表、用场景与代码施压,结论一成形就写入唯一职责的长期记录。
触发与边界
Direct source: frontmatter 将触发范围限定在“讨论代码库术语、编写或编辑 CONTEXT.md、记录或编辑 ADR”;正文又明确区分了主动改变模型与“Merely reading CONTEXT.md”。因此,单纯读取既有词汇不是一次完整的领域建模任务。
Supporting context: agents/openai.yaml 只声明显示名与简短描述,没有提供显式的仅人工调用开关。具体 harness 是否自动调用、如何发现 skill,不能从所选原文中推出。
Interpretation: 这是一个应嵌入设计对话的伴随型 skill,而不是“会后整理文档”的独立阶段。若迁移到没有代码读取或文件编辑能力的环境,应把“交叉核对”和“就地更新”改成明确的待办,而不能假装已经闭环。
信息架构与执行顺序
- 先定位上下文结构。 根目录有
CONTEXT-MAP.md就按多上下文工作,否则默认一个根级CONTEXT.md;文件按需创建。 - 让语言先接受冲突检查。 用户的词与既有 glossary 不一致时立即提出二选一问题;含糊或过载时提出规范术语。
- 用场景迫使边界显形。 通过具体边缘案例检验领域关系,而不是停留在抽象同意。
- 把口头模型与运行现实交叉核对。 用户描述与代码行为冲突时,显式展示矛盾,让人决定是模型错了还是代码错了。
- 结论即时落盘。 术语写入
CONTEXT.md,但实现决策被排除;只有通过三重门槛的决策才进入 ADR。
最巧妙的设计点
1. 用“删除测试”划出调用边界
“This skill is for when you're changing the model, not just consuming it.”
Direct source: 原文主动排除了“只读 CONTEXT.md”这一低成本习惯。
Interpretation: 这避免了一个常见的 skill 反模式:把任何相关动作都吞进自身触发面。只有模型正在发生变化时,重型的质疑、场景和记录流程才值得启动。
2. 把文件结构变成可观察的路由信号
“If a
CONTEXT-MAP.mdexists at the root, the repo has multiple contexts.”
Direct source: 是否存在一个明确文件,直接决定单上下文与多上下文的路由方式。
Interpretation: 这比依靠目录规模或命名猜测更稳定。仓库自己提供一个廉价、可机械检查的结构信号,agent 因而更少把术语写错位置。
3. 以按需创建对抗空文档仪式
“Create files lazily — only when you have something to write.”
Direct source: CONTEXT.md 和 docs/adr/ 都要等到第一个真实内容出现才创建。
Interpretation: 空模板容易制造“已经完成治理”的错觉,也会鼓励为了填满栏目而写低价值内容。延迟创建把文件存在本身变成一个更可信的信号:这里确实已有结论。
4. 让反例而不是共识磨利模型
“stress-test them with specific scenarios”
Direct source: skill 要主动发明边缘场景,迫使用户精确说明概念之间的边界。
Interpretation: 抽象定义往往可以同时容纳互相矛盾的理解;具体场景会暴露所有权、生命周期和例外规则。它把词汇讨论从文案润色升级成可证伪的模型检验。
5. 把代码设为证据,而不是自动真理
“check whether the code agrees”
Direct source: 发现口头描述与代码冲突时,skill 提出“which is right?”,没有默认任何一方获胜。
Interpretation: 这是双向校验:代码可能偏离业务,用户也可能误述现状。通过展示矛盾而非替用户下结论,skill 保留了领域所有者的决策权。
6. 用两个存储体实现严格的信息分型
“It is a glossary and nothing else.”
Direct source: CONTEXT.md 只存领域词汇,明确排除 spec、scratch pad 和实现决策;高价值决策则进入 ADR。
Supporting context: CONTEXT-FORMAT.md 要求短定义、规范词和 _Avoid_ 同义词;ADR-FORMAT.md 则允许 ADR 只用一个短段落,并把额外栏目设为可选。
Interpretation: 这不是简单的“多写两个文档”,而是把“世界里有哪些概念”与“为什么这样实现”分开。不同寿命、不同读者和不同更新频率的信息不再互相污染。
防失败机制与 trade-off
显式 invariants(Direct source):
- 只读 glossary 不触发完整 skill;只有改变模型时才进入主动流程。
- 文件必须按需创建,不能为了结构完整而预生成空壳。
- 术语冲突与含糊必须即时处理,已确认结论不能批量延后记录。
- 领域陈述要与代码交叉核对;矛盾必须被显式呈现。
CONTEXT.md只能是 glossary,完全排除实现细节、spec 和草稿。- ADR 必须同时满足难逆转、缺少上下文会令人意外、源于真实权衡三项条件。
Trade-off 与可移植风险(Interpretation):
- “立即指出”能阻止词义漂移,但在高压讨论中可能打断节奏;移植时可保留即时捕获,同时把非阻塞问题放进短暂的 parking lot。
- 用文件是否存在判断上下文结构非常清晰,却假设仓库接受
CONTEXT.md/CONTEXT-MAP.md约定;已有 DDD 文档体系的项目需要显式映射。 CONTEXT.md完全不含实现细节会保持纯净,但某些术语的业务含义确实依赖外部约束;这类约束应链接到 spec/ADR,而不是复制进 glossary。- “检查代码”依赖 agent 的仓库访问与检索能力;只读或远程聊天 harness 必须请求证据,不能虚构核对结果。
- ADR 三重门槛显著降低文档噪声,也可能漏掉短期看似可逆、后来逐渐形成锁定的决策;定期回顾仍有价值。
可迁移原则
- 给 skill 写清楚反触发条件。 说明相关但太轻的动作不属于本流程,比堆触发词更能控制调用成本。
- 把仓库结构变成路由协议。 用一个明确、可检查的文件或 manifest 决定内容应该写到哪里。
- 结论在形成时落盘。 即时记录能保留上下文,也能避免会后重构记忆。
- 用反例和实现证据检验术语。 好的 glossary 不是定义集合,而是经受过边界场景与现实行为校验的模型。
- 为不同类型的信息设置单一职责存储。 术语、规格、草稿和决策理由应各有归宿,并明确禁止交叉污染。
今日实践题
团队一直把付费的人、登录的人和合同主体都叫作 account。请设计一个具体边缘场景,迫使大家区分这三个概念;然后说明最终术语应写入 CONTEXT.md,还是需要另写 ADR,以及为什么。
Evidence note
本文的触发边界、目录规则、会话动作、CONTEXT.md 禁止项与 ADR 三重门槛来自所选 SKILL.md(Direct source)。CONTEXT-FORMAT.md、ADR-FORMAT.md 与 agents/openai.yaml 仅用于解释模板形状和 harness 展示信息(Supporting context),它们不是双语阅读器中的所选原文。关于调用成本、反例驱动、信息寿命与可移植性的判断属于设计分析(Interpretation)。
Source & provenance
- Repository path
- skills/engineering/domain-modeling/SKILL.md
- Generated
- 2026-08-14 08:23 Asia/Shanghai
- Upstream commit
- 8b78b531ab965735c5dc74f6f7a219e1e37326df
- Source
- View on GitHub