ubiquitous-language

Extraire un glossaire de langage ubiquitaire de type DDD à partir de la conversation en cours, en signalant les ambiguïtés et en proposant des termes canoniques. Sauvegarde dans UBIQUITOUS_LANGUAGE.md. À utiliser lorsque l'utilisateur souhaite définir des termes du domaine, construire un glossaire, consolider la terminologie, créer un langage ubiquitaire, ou mentionne « modèle du domaine » ou « DDD ».

npx skills add https://github.com/mattpocock/skills --skill ubiquitous-language

Ubiquitous Language

Extract and formalize domain terminology from the current conversation into a consistent glossary, saved to a local file.

Process

  1. Scan the conversation for domain-relevant nouns, verbs, and concepts
  2. Identify problems:
    • Same word used for different concepts (ambiguity)
    • Different words used for the same concept (synonyms)
    • Vague or overloaded terms
  3. Propose a canonical glossary with opinionated term choices
  4. Write to UBIQUITOUS_LANGUAGE.md in the working directory using the format below
  5. Output a summary inline in the conversation

Output Format

Write a UBIQUITOUS_LANGUAGE.md file with this structure:

# Ubiquitous Language

## Order lifecycle

| Term        | Definition                                              | Aliases to avoid      |
| ----------- | ------------------------------------------------------- | --------------------- |
| **Order**   | A customer's request to purchase one or more items      | Purchase, transaction |
| **Invoice** | A request for payment sent to a customer after delivery | Bill, payment request |

## People

| Term         | Definition                                  | Aliases to avoid       |
| ------------ | ------------------------------------------- | ---------------------- |
| **Customer** | A person or organization that places orders | Client, buyer, account |
| **User**     | An authentication identity in the system    | Login, account         |

## Relationships

- An **Invoice** belongs to exactly one **Customer**
- An **Order** produces one or more **Invoices**

## Example dialogue

> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?"
> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed. A single **Order** can produce multiple **Invoices** if items ship in separate **Shipments**."
> **Dev:** "So if a **Shipment** is cancelled before dispatch, no **Invoice** exists for it?"
> **Domain expert:** "Exactly. The **Invoice** lifecycle is tied to the **Fulfillment**, not the **Order**."

## Flagged ambiguities

- "account" was used to mean both **Customer** and **User** — these are distinct concepts: a **Customer** places orders, while a **User** is an authentication identity that may or may not represent a **Customer**.

Rules

  • Be opinionated. When multiple words exist for the same concept, pick the best one and list the others as aliases to avoid.
  • Flag conflicts explicitly. If a term is used ambiguously in the conversation, call it out in the "Flagged ambiguities" section with a clear recommendation.
  • Only include terms relevant for domain experts. Skip the names of modules or classes unless they have meaning in the domain language.
  • Keep definitions tight. One sentence max. Define what it IS, not what it does.
  • Show relationships. Use bold term names and express cardinality where obvious.
  • Only include domain terms. Skip generic programming concepts (array, function, endpoint) unless they have domain-specific meaning.
  • Group terms into multiple tables when natural clusters emerge (e.g. by subdomain, lifecycle, or actor). Each group gets its own heading and table. If all terms belong to a single cohesive domain, one table is fine — don't force groupings.
  • Write an example dialogue. A short conversation (3-5 exchanges) between a dev and a domain expert that demonstrates how the terms interact naturally. The dialogue should clarify boundaries between related concepts and show terms being used precisely.

Example dialogue

Dev: "How do I test the sync service without Docker?"

Domain expert: "Provide the filesystem layer instead of the Docker layer. It implements the same Sandbox service interface but uses a local directory as the sandbox."

Dev: "So sync-in still creates a bundle and unpacks it?"

Domain expert: "Exactly. The sync service doesn't know which layer it's talking to. It calls exec and copyIn — the filesystem layer just runs those as local shell commands."

Re-running

When invoked again in the same conversation:

  1. Read the existing UBIQUITOUS_LANGUAGE.md
  2. Incorporate any new terms from subsequent discussion
  3. Update definitions if understanding has evolved
  4. Re-flag any new ambiguities
  5. Rewrite the example dialogue to incorporate new terms

Plus de skills de mattpocock

improve-codebase-architecture
mattpocock
Trouver des opportunités d'approfondissement dans une base de code, en s'appuyant sur le langage du domaine dans CONTEXT.md et les décisions dans docs/adr/. Utiliser lorsque l'utilisateur souhaite améliorer l'architecture, trouver des opportunités de refactorisation, consolider des modules fortement couplés, ou rendre une base de code plus testable et navigable par l'IA.
developmentcode-reviewapi
tdd
mattpocock
Développement piloté par les tests avec boucle rouge-vert-refactorisation. À utiliser lorsque l'utilisateur souhaite développer des fonctionnalités ou corriger des bugs en utilisant le TDD, mentionne "rouge-vert-refactorisation", veut des tests d'intégration, ou demande un développement test-first.
developmenttesting
handoff
mattpocock
Compacter la conversation actuelle en un document de transfert pour qu’un autre agent puisse le reprendre.
communicationproject-managementdocument
prototype
mattpocock
Construisez un prototype jetable pour étoffer une conception avant de vous y engager. Achemine entre deux branches — une application terminal exécutable pour les questions d'état/logique métier, ou plusieurs variations d'interface utilisateur radicalement différentes, basculables depuis une seule route. À utiliser lorsque l'utilisateur souhaite prototyper, vérifier la cohérence d'un modèle de données ou d'une machine d'état, maquetter une interface utilisateur, explorer des options de conception, ou dit « prototype ceci », « laisse-moi jouer avec », « essaie quelques designs ».
developmentdesigncreative
triage
mattpocock
Trier les problèmes via une machine à états pilotée par des rôles de triage. Utiliser lorsque l'utilisateur souhaite créer un problème, trier des problèmes, examiner les bogues entrants ou les demandes de fonctionnalités, préparer des problèmes pour un agent AFK, ou gérer le flux de travail des problèmes.
developmentproject-managementcommunication
obsidian-vault
mattpocock
Rechercher, créer et gérer des notes dans le coffre Obsidian avec des wikiliens et des notes d’index. Utiliser lorsque l’utilisateur souhaite trouver, créer ou organiser des notes dans Obsidian.
productivitydocument
edit-article
mattpocock
Modifier et améliorer des articles en restructurant les sections, en améliorant la clarté et en resserrant la prose. À utiliser lorsque l'utilisateur souhaite éditer, réviser ou améliorer un brouillon d'article.
documentcreative
writing-great-skills
mattpocock
Référence pour bien rédiger et éditer des compétences — le vocabulaire et les principes qui rendent une compétence prévisible.
documentdevelopment