Domain Modeling
设计过程中主动构建并 sharpen 项目领域模型。这是 主动 discipline — 挑战术语、发明 edge-case scenario、在 crystallise 的瞬间写下 glossary 与决策。(仅 读取 CONTEXT.md 学词汇不是本 skill — 那是任何 skill 都能做的一行习惯。本 skill 用于你在 改变 模型,而非仅消费它。)
File structure
多数 repo 有 single context:
/
├── CONTEXT.md
├── docs/
│ └── adr/
│ ├── 0001-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
└── src/
若根有 CONTEXT-MAP.md,repo 有 multiple context。Map 指向各 context 位置:
/
├── CONTEXT-MAP.md
├── docs/
│ └── adr/ ← system-wide decisions
├── src/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ └── docs/adr/ ← context-specific decisions
│ └── billing/
│ ├── CONTEXT.md
│ └── docs/adr/
Lazy 创建文件 — 仅有内容可写时。若无 CONTEXT.md,第一个 term resolved 时创建。若无 docs/adr/,第一个 ADR 需要时创建。
During the session
Challenge against the glossary
用户使用的 term 与 CONTEXT.md 现有 language 冲突时,立即 call out。「你的词汇表将 'cancellation' 定义为 X,但你似乎指 Y — 到底是哪个?」
Sharpen fuzzy language
用户使用 vague 或 overloaded term 时,propose precise canonical term。「你说 'account' — 是指 Customer 还是 User?那是不同事物。」
Discuss concrete scenarios
讨论 domain relationship 时,用 specific scenario stress-test。发明 probe edge case、迫使用户 precise 概念边界的 scenario。
Cross-reference with code
用户陈述某物如何工作时,检查 code 是否 agree。若发现矛盾,surface:「你的 code 取消 entire Order,但你刚说 partial cancellation 可能 — 哪个对?」
Update CONTEXT.md inline
Term resolved 时,right there 更新 CONTEXT.md。不要 batch — 发生时 capture。格式见 CONTEXT-FORMAT.md。
CONTEXT.md 应 totally devoid of implementation details。不要把 CONTEXT.md 当 spec、scratch pad 或 implementation 决定仓库。它只是 glossary,nothing else。
Offer ADRs sparingly
仅当三者皆真时才 offer 创建 ADR:
- Hard to reverse — 之后改主意的 cost meaningful
- Surprising without context — future reader 会 wonder「为何这样做?」
- The result of a real trade-off — 有 genuine alternative,因 specific reason 选了一个
任一缺失则 skip ADR。格式见 ADR-FORMAT.md。