Domain Modeling
Constrói e afia o modelo de domínio de um projeto. Use ao discutir terminologia do codebase, escrever ou editar um CONTEXT.md, ou registrar/editar um ADR.
Domain Modeling
Origem: importada de mattpocock/skills (
engineering/domain-modeling), adaptada ao vocabulário deste harness.
CONTEXT.md e ADRs são conteúdo novo neste harness — não existiam antes desta importação. Esta skill constrói ativamente e afia o modelo de domínio do projeto enquanto você desenha. Esta é a disciplina ativa: desafiar termos, inventar cenários de edge case, e escrever o glossário e as decisões no momento em que se cristalizam. (Só ler o CONTEXT.md em busca de vocabulário não é esta skill: isso é um hábito de uma linha que qualquer skill pode fazer — como já fazem tdd e diagnosing-bugs. Esta skill é para quando você está mudando o modelo, não só consumindo.)
Quando ler cada arquivo
| Tarefa | Arquivo |
|---|---|
Formato e regras do CONTEXT.md (glossário, single vs. multi-context) |
CONTEXT-FORMAT.md |
| Formato e critério de quando registrar um ADR | ADR-FORMAT.md |
Estrutura de arquivos
A maioria dos repositórios tem um único contexto:
/
├── CONTEXT.md
├── docs/
│ └── adr/
│ ├── 0001-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
└── src/
Se existir um CONTEXT-MAP.md na raiz, o repositório tem múltiplos contextos. O mapa aponta para onde cada um vive:
/
├── CONTEXT-MAP.md
├── docs/
│ └── adr/ ← decisões de todo o sistema
├── src/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ └── docs/adr/ ← decisões específicas do contexto
│ └── billing/
│ ├── CONTEXT.md
│ └── docs/adr/
Crie os arquivos de forma preguiçosa: só quando tiver algo para escrever. Se nenhum CONTEXT.md existe, crie um quando o primeiro termo for resolvido. Se nenhum docs/adr/ existe, crie-o quando o primeiro ADR for necessário.
Durante a sessão
Desafie contra o glossário
Quando o usuário usa um termo que conflita com a linguagem já existente no CONTEXT.md, aponte isso na hora. "Seu glossário define 'cancelamento' como X, mas parece que você quer dizer Y. Qual dos dois é?"
Afie linguagem vaga
Quando o usuário usa termos vagos ou sobrecarregados, proponha um termo canônico preciso. "Você está dizendo 'conta': quer dizer o Customer ou o User? São coisas diferentes."
Discuta cenários concretos
Quando relações de domínio estão sendo discutidas, teste-as sob estresse com cenários específicos. Invente cenários que sondem edge cases e forcem o usuário a ser preciso sobre as fronteiras entre conceitos.
Cruze com o código
Quando o usuário declara como algo funciona, verifique se o código concorda. Se você encontrar uma contradição, exponha-a: "Seu código cancela Orders inteiras, mas você acabou de dizer que cancelamento parcial é possível. Qual dos dois está certo?"
Atualize o CONTEXT.md inline
Quando um termo é resolvido, atualize o CONTEXT.md ali mesmo. Não acumule isso para depois: capture no momento em que acontece. Use o formato em CONTEXT-FORMAT.md.
CONTEXT.md deve estar totalmente livre de detalhes de implementação. Não trate CONTEXT.md como uma spec, um rascunho, ou um repositório de decisões de implementação — isso já tem lugar próprio neste harness (.gsd/SPEC.md, ADRs). É um glossário e nada mais.
Ofereça ADRs com moderação
Só ofereça criar um ADR quando as três condições forem verdadeiras:
- Difícil de reverter: o custo de mudar de ideia depois é significativo
- Surpreendente sem contexto: um leitor futuro vai se perguntar "por que fizeram assim?"
- Resultado de um trade-off real: havia alternativas genuínas e você escolheu uma por motivos específicos
Se qualquer uma das três estiver ausente, pule o ADR. Use o formato em ADR-FORMAT.md.
Skills relacionadas
- Vocabulário de módulo/interface/seam:
codebase-design - Loop TDD que lê
CONTEXT.mdpara nomear testes e interfaces:tdd - Diagnóstico de bugs que lê
CONTEXT.md/ADRs ao explorar:diagnosing-bugs - Entrevista que conduz esta disciplina ativamente:
grill-with-docs