{"id":"fb6e7e69-693e-411a-be9f-0e694c525c7d","shortId":"6q4R5L","kind":"skill","title":"ubiquitous-language","tagline":"Maintain a project thesaurus (domain glossary) following DDD ubiquitous language\nprinciples. Use PROACTIVELY when naming anything: variables, functions, classes,\nmodules, database fields, API endpoints, events, files, or directories. Also use\nwhen the user asks to \"create thesaur","description":"# Ubiquitous Language: Project Thesaurus Manager\n\nYou enforce naming consistency across the codebase by maintaining a living thesaurus\nof domain terms and consulting it every time something needs a name.\n\n**Three modes:**\n- **Naming consultation** (frequent) — everything in this file\n- **Thesaurus generation** (rare) — read [references/generating-thesaurus.md](references/generating-thesaurus.md)\n- **Naming audit** (periodic) — read [references/naming-audit.md](references/naming-audit.md)\n\n## Foundations\n\nThis skill combines two bodies of knowledge:\n\n- **Domain-Driven Design (DDD)** by Eric Evans — ubiquitous language, bounded contexts, aggregate naming\n- **[First Principles Framework (FPF)](https://github.com/ailev/FPF/blob/main/FPF-Spec.md)** — a transdisciplinary \"operating system for thought\" that provides formal tools for semantic precision: bounded contexts as declared semantic frames, polysemy unpacking, lexical firewalls, cross-context bridges with loss notes, term continuity relations, and anti-explosion naming control. References like \"FPF F.5\" or \"FPF A.1.1\" point to specific sections of the FPF specification.\n\n## Core Principle\n\n> \"A project should use a single, shared vocabulary. Every name in code, docs, APIs,\n> and conversations must map to a term in the thesaurus. If a concept isn't in the\n> thesaurus — add it before naming anything.\"\n>\n> — Domain-Driven Design, Eric Evans\n\n**The codebase is primary evidence, not automatic authority.** Use code to discover\nwhich terms are currently in circulation. Use the thesaurus and user input to decide\nwhich terms SHOULD be canonical.\n\n- For **what exists today** — derive from code (classes, DB schemas, API routes, events)\n- For **what should become the standard** — ask the user/domain expert\n- If code contradicts the approved thesaurus — the thesaurus wins for new code\n- If the user says \"fix legacy naming\" — the user's directive overrides the codebase;\n  map existing code names to `## Legacy Terms` and use the user's terms as canonical\n\n**Tacit knowledge**: For areas not yet implemented, the most important domain knowledge\nexists only in experts' heads, not in any artifact.\n\n## Thesaurus File\n\n**Locating the thesaurus:**\n1. If the user specified a path — use it\n2. If `THESAURUS.md` already exists somewhere in the repo — use that location\n3. Default: `docs/THESAURUS.md`\n\nSingle source of truth for domain vocabulary.\n\n### Entry Format\n\n```markdown\n### [Term]\n- **Definition**: What this concept means in the business domain\n- **NOT**: What this term does NOT mean (prevents confusion with similar concepts)\n- **Synonyms to AVOID**: Terms that mean the same thing but must NOT be used\n- **Related terms**: Other thesaurus terms this concept connects to\n```\n\n### Minimal Viable Entry\n\n```markdown\n### [Term]\n- **Definition**: [one sentence]\n- **Synonyms to AVOID**: [list]\n```\n\n**Why no \"Use in code\" field**: The thesaurus defines concepts and canonical names,\nnot how they appear in code. Code casing follows project conventions automatically.\n\n**The thesaurus captures concepts, not behavior.** It's strong at nouns (entity names,\nroles, process names) but won't replace behavioral specs for business rules. Don't try\nto turn the thesaurus into a specification — keep entries short. If a concept has a\ncritical invariant, note it briefly in the definition, not as a separate section.\n\n**Non-English domains**: If the business domain operates in a non-English language, use\nthe **original language** for the canonical term. The thesaurus should reflect how domain\nexperts actually speak. Add an English translation only if the codebase uses English\nidentifiers: `Счёт-фактура (Invoice in code)`.\n\n## When to Consult the Thesaurus\n\n**ALWAYS** before naming:\n- Classes, interfaces, types, enums, aggregates, entities, value objects\n- Functions, methods, commands, queries, domain events\n- Variables, constants, fields, parameters\n- Database tables, columns, collections\n- API endpoints, parameters, response fields\n- Files, directories, modules, packages\n- Feature flags, config keys, environment variables\n- Commit messages or PR titles that reference domain concepts\n\n## Workflow\n\n### 1. Read the thesaurus BEFORE inventing any name\n\n**This is the single most important step.** Before proposing ANY name for anything,\nfind and read the thesaurus (see \"Locating the thesaurus\" above). Most naming tasks\ndon't need a new term — the right name is already there.\n\nCheck:\n- Does a term for this concept already exist? **Use it exactly. Don't invent a new one.**\n- Is there a related term that should inform the naming?\n- Are there synonyms marked as \"AVOID\"? Don't use them.\n- Which bounded context does this belong to?\n\nIf the thesaurus has a term that fits — **stop here**. You're done. Use that term.\n\n### 2. If the concept is new\n\n**Before minting a new term, try four levers** (from FPF F.14 \"Name less, express more\"):\n\n1. **Reuse** — does an existing term already cover this? Maybe the concept is a variant, not a new thing\n2. **Compose** — can you combine existing terms? `OrderLineItem` reuses `Order` + `LineItem`\n3. **Qualify** — is this the same concept in a different state/window? Don't create `NightOperator` — use `Operator` with a time qualifier\n4. **Ask** — if still unclear: \"I need to name [concept]. The thesaurus doesn't have a term for this. What does the domain call it?\"\n   **If the user doesn't have an answer either** — that's a white spot, not a dead end.\n   Building a ubiquitous language is co-creation, not extraction. Add it to `## Unresolved`\n   with a `[WHITE-SPOT]` tag. Don't force a name for an undefined concept.\n\nOnly after all four fail, mint a new term:\n1. **Name what the invariants make true** (FPF F.5) — don't name aspirationally. If the code doesn't enforce \"Premium\", don't call it `PremiumCustomer`\n2. **Use minimal generality** — choose the narrowest name whose rules you actually enforce. Don't upgrade `Task` to `Activity` to sound universal\n3. **Keep it to 1-3 words** — no rhetorical adjectives (\"robust\", \"optimal\", \"advanced\")\n4. **Add it to THESAURUS.md** with at least: definition + avoided synonyms\n5. **Then** use the term in code\n\n### 3. If you find an inconsistency\n\nWhen existing code uses a term that contradicts the thesaurus:\n- Flag it: \"Found `fetchPurchases()` but thesaurus says the canonical term is `Order`, not `Purchase`\"\n- Suggest a rename if scope is small\n- For large-scale renames, note as tech debt and ask user how to proceed\n\n## Naming Rules by DDD Construct\n\n### Aggregates & Aggregate Roots\nUse the business domain term. Singular. No technical suffixes.\n\n```\nGOOD: Order, Invoice, UserAccount, ShoppingCart\nBAD:  OrderAggregate, OrderRoot, OrderAggregateImpl, OrderEntity\n```\n\n### Entities\nSingular noun from the domain. Something with identity.\n\n```\nGOOD: OrderLineItem, PaymentTransaction, Customer\nBAD:  OrderLineItemEntity, OrderLineItemImpl, OrderLineItemObj\n```\n\n### Value Objects\nSingular noun describing an immutable concept. Describes **what it is**, not what it does.\n\n```\nGOOD: Money, Email, PhoneNumber, Address, DateRange\nBAD:  MoneyValue, EmailValidator, PriceInfo, AmountData\n```\n\n### Domain Events\n**Past tense verb + noun.** Something that happened.\n\n```\nGOOD: OrderPlaced, PaymentCaptured, InvoiceSent, InventoryReserved\nBAD:  OrderEvent, OnOrderPlaced, CreateOrder (that's a command)\n```\n\n### Commands\n**Imperative verb + noun.** An action requested.\n\n```\nGOOD: CreateOrder, CancelInvoice, ProcessRefund, ReserveInventory\nBAD:  OrderCreated (that's an event), NewOrder, OrderCommand\n```\n\n### Queries\nQuestion or retrieval. Verb + object or descriptive name.\n\n```\nGOOD: GetOrderById, FindInvoicesByCustomer, ListPendingOrders\nBAD:  RetrieveOrderData, OrderQuery, GetterForOrder\n```\n\n### Domain Services\nNamed after **business activities** the domain expert recognizes.\n\n```\nGOOD: InvoiceCalculator, OrderFulfillment, NotificationSender\nBAD:  OrderManager, GenericService, HelperService\n```\n\n### Repositories\nRepository suffix is acceptable — it's an infrastructure pattern.\n\n```\nGOOD: OrderRepository, InvoiceRepository, CustomerRepository\nBAD:  OrderStorage, OrderPersistence, OrderFinder, OrderDao\n```\n\n### Methods on Aggregates\n\n**Commands (change state):** Imperative verb, no \"Get\" prefix.\n```\nGOOD: order.Cancel(), order.AddLineItem(product, quantity), order.Recalculate()\nBAD:  order.CancelOrderMethod(), order.GetCancelled(), order.DoCancelOrder()\n```\n\n**Queries (read-only):** Start with Get, Is, Has, Can, or a domain verb.\n```\nGOOD: order.GetTotal(), order.IsExpired(), order.CanBeShipped()\nBAD:  order.FetchInfo(), order.CheckData()\n```\n\n## Naming Anti-Patterns to Detect and Flag\n\n### Lexical Firewall: Forbidden Terms in Domain Layer\n\nThe domain layer must be protected from transient jargon, vague terms, and\nimplementation details. Maintain a **Forbidden Lexicon** in the thesaurus: terms that\nMUST NOT appear in domain code and must always be replaced with a specific domain term.\n\n### Weasel Words (never use in domain layer)\n\n| Weasel Word | Problem | Fix |\n|-------------|---------|-----|\n| `Info` | Meaningless suffix | Remove it: `UserInfo` -> `User` |\n| `Data` | Says nothing about the concept | Use domain term: `OrderData` -> `Order` |\n| `Manager` | Vague, hides responsibility | Split by actual responsibility |\n| `Handler` | Generic, unclear intent | Name after what it handles |\n| `Service` | Overused catch-all | Use specific domain activity name |\n| `Base` | Technical distraction | Remove, use composition |\n| `Item` | Too generic | Use domain term: `Item` -> `OrderLineItem`, `Product` |\n| `Util` / `Helper` | Indicates bad design | Move logic to domain objects |\n| `Object` / `Obj` | Never appropriate | Remove suffix |\n| `Record` / `Model` | Database concept leaking into domain | Use domain term |\n\n### Technical Jargon in Domain Layer\n\nDomain code must be free of implementation details:\n\n```\nBAD:  MongoOrder, SqlUserRepository, HttpOrderService, OrderDto, OrderEntity\nGOOD: Order, OrderRepository (interface), PaymentGateway, Order (just Order)\n```\n\nTechnical prefixes/suffixes belong ONLY in the infrastructure layer:\n```\nINFRASTRUCTURE LAYER (OK): MongoOrderRepository, RedisSessionCache, HttpPaymentClient\nDOMAIN LAYER (NEVER):      MongoOrder, RedisSession, HttpPayment\n```\n\n**Framework caveat**: In frameworks that intentionally blend domain and persistence\n(Active Record pattern, ORM-centric frameworks), the model IS the domain entity.\nKeep the **domain noun clean** and let framework coupling live in inheritance,\nannotations, or metadata — not in the class name. Flag technical jargon only when\nit becomes part of the business-facing name or leaks outside its boundary.\n\n### Synonym Drift\n\nSame concept called different things in different parts of code:\n\n```\nPROBLEM: \"Customer\" in auth, \"User\" in API, \"Account\" in billing — all mean the same thing\nFIX:     Pick ONE canonical term per bounded context. Add others to \"Avoid\" list.\n```\n\n### Abbreviation Boundary\n\nBan abbreviations in **durable, domain-bearing names**: types, exported functions,\nmodules, API fields, DB columns, events, config keys.\n\nAllow **conventional short-lived local identifiers** when meaning is obvious in scope:\n`i`, `j`, `ctx`, `req`, `res`, `err`, `tx`, `db`, `e` for events.\n\nAllow **industry-standard acronyms** when they are the dominant term: `SKU`, `VAT`,\n`URL`, `ID`, `OAuth`. Do NOT force unnatural expansions if experts use the acronym.\n\n```\nPROBLEM: usr, user, account, acct — competing abbreviations for the same durable concept\nFIX:     Pick ONE canonical form for domain-bearing names. Short-lived locals are exempt.\n```\n\n### Generic Names Hiding Domain Concepts\n\n```\nBAD:  record, entity, item, data, info, config, settings\nGOOD: Use the specific domain term. \"Config\" → \"LoanProduct\". \"Settings\" → \"NotificationPreferences\"\n```\n\n### Naming by Implementation Instead of Domain\n\n```\nBAD:  RedisCache, PostgresStore, KafkaProducer, ElasticSearchIndex\nGOOD: SessionStore, OrderHistory, EventPublisher, ProductCatalog\n```\n\n### Translation Chain (\"Telephone Game\")\n\nWhen different artifacts use different terms for the same concept across the\nknowledge chain, information is lost at each translation:\n\n```\nSMELL: Domain expert says \"Campaign\" → PM writes \"Promotion\" in spec →\n       Dev codes `marketing_push` → QA tests \"advertising effort\"\nFIX:   Same term everywhere: expert, PM, dev, QA all say and write \"Campaign\"\n```\n\nThis is worse than synonym drift because each translation also loses nuance and\nbusiness rules. **How to detect:** compare terms in requirements/specs/tickets\nagainst code names. If they don't match, the ubiquitous language has a translation\ngap — adopt the domain expert's term everywhere.\n\n## Casing Conventions\n\nWhen the thesaurus provides a canonical term, apply it using the project's casing:\n\n| Context | Convention | Example (term: \"Order\") |\n|---------|-----------|------------------------|\n| Class/Type | PascalCase | `Order`, `OrderService` |\n| Function/Method | Project convention | `createOrder` / `create_order` |\n| Variable | Project convention | `pendingOrder` / `pending_order` |\n| Constant | UPPER_SNAKE | `MAX_ORDER_ITEMS` |\n| Database table | Project convention | `orders`, `order_items` |\n| API endpoint | kebab-case or convention | `/orders`, `/order-items` |\n| Event/Message | PascalCase with past-tense verb | `OrderPlaced`, `OrderCancelled` |\n| File/Directory | Project convention | `order.ts`, `order_service.py` |\n\n**Key rules:**\n- Use the EXACT canonical term — don't abbreviate (`ord`), don't expand (`orderObject`), don't synonym (`purchase`)\n- Compound names combine thesaurus terms: `OrderItem`, not `PurchaseLineItem`\n- Technical suffixes for infrastructure roles are fine: `OrderRepository`, `OrderDTO` (in infra layer only)\n- Multi-word terms like \"Processing Stage\" become `ProcessingStage` / `processing_stage` — keep all words\n- Variables and parameters use full descriptive names: `totalAmount` not `amt`, `customerEmail` not `cEmail`\n\n## Updating the Thesaurus\n\nWhen changing terms, use the **least strong** relation that tells the truth (from FPF F.13):\n\n| Operation | When | Effect on thesaurus |\n|-----------|------|---------------------|\n| **Add** | New concept | Create entry. Minimum: definition + avoided synonyms |\n| **Rename** | Wording improved, sense unchanged | Old name becomes legacy alias; grep codebase, suggest renames |\n| **Split** | One term covered two senses | Old term deprecated; two new entries; disambiguation note |\n| **Merge** | Two terms are really one sense | Pick canonical form; other becomes alias in \"Avoid\" list |\n| **Retire** | Term was misleading, no single successor | Read-warning only (\"avoid in new code; see X and Y\") |\n| **Deprecate** | Concept being phased out | Move to Legacy Terms with replacement pointer |\n\n**Key test**: Can you point to the **same concept** before and after the change?\n- Yes, same concept, better wording → **Rename** (keep as alias for reading old code)\n- No, the concept actually changed → **Split** or **Merge** (not a rename)\n\n**Alias parsimony**: keep at most 1 legacy alias per term — the one readers will most likely encounter in old code.\n\n## Quick Checklist Before Naming Anything\n\n1. Is this term in `THESAURUS.md`? If not — add it first\n2. Would a domain expert recognize this name?\n3. Does it contain a weasel word (Manager, Service, Handler, Info, Data, Item, Base, Util)?\n4. Is it too generic (could mean multiple things in different contexts)?\n5. Does it reveal infrastructure details (Mongo, Sql, Http, Dto, Entity, Model)?\n6. Is it consistent with other uses of this term across the codebase?\n7. Am I using the EXACT canonical form from the thesaurus, or a synonym?\n8. Am I in the right bounded context for this term?\n9. If this is a domain event, is it past tense? If a command, imperative?\n10. Can I explain what this name represents in one sentence using domain language?\n\nIf any answer raises a concern — stop and fix before proceeding.","tags":["ubiquitous","language","driven","development","codealive-ai","agent-safety","agent-skills","ai-coding","ai-driven-development","ai-safety","antigravity","bash"],"capabilities":["skill","source-codealive-ai","skill-ubiquitous-language","topic-agent-safety","topic-agent-skills","topic-ai-coding","topic-ai-driven-development","topic-ai-safety","topic-antigravity","topic-bash","topic-claude-code","topic-codex-cli","topic-cursor","topic-developer-tools","topic-gemini-cli"],"categories":["ai-driven-development"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/CodeAlive-AI/ai-driven-development/ubiquitous-language","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add CodeAlive-AI/ai-driven-development","source_repo":"https://github.com/CodeAlive-AI/ai-driven-development","install_from":"skills.sh"}},"qualityScore":"0.483","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 67 github stars · SKILL.md body (16,014 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:57:07.913Z","embedding":null,"createdAt":"2026-05-04T06:56:24.149Z","updatedAt":"2026-05-18T18:57:07.913Z","lastSeenAt":"2026-05-18T18:57:07.913Z","tsv":"'-3':928 '/ailev/fpf/blob/main/fpf-spec.md)**':119 '/order-items':1810 '/orders':1809 '1':340,616,744,876,927,2042,2062 '10':2173 '2':349,723,763,901,2073 '3':361,774,923,954,2081 '4':795,936,2096 '5':947,2108 '6':2120 '7':2133 '8':2147 '9':2158 'a.1.1':165 'abbrevi':1515,1518,1592,1834 'accept':1158 'account':1494,1589 'acct':1590 'acronym':1564,1585 'across':50,1667,2130 'action':1104 'activ':919,1141,1323,1423 'actual':542,912,1304,2029 'add':208,544,848,937,1510,1915,2070 'address':1070 'adject':932 'adopt':1745 'advanc':935 'advertis':1693 'aggreg':111,573,1011,1012,1175 'alia':1933,1964,2021,2037,2044 'allow':1536,1560 'alreadi':352,660,669,750 'also':32,1717 'alway':566,1261 'amountdata':1076 'amt':1888 'annot':1448 'answer':827,2189 'anti':155,1217 'anti-explos':154 'anti-pattern':1216 'anyth':19,212,636,2061 'api':26,189,260,591,1493,1529,1802 'appear':447,1255 'appli':1761 'appropri':1353 'approv':277 'area':317 'artifact':334,1659 'ask':37,269,796,1001 'aspir':888 'audit':86 'auth':1490 'author':226 'automat':225,455 'avoid':398,429,695,945,1513,1922,1966,1979 'bad':1028,1046,1072,1091,1111,1132,1150,1168,1190,1212,1343,1379,1619,1643 'ban':1517 'base':1325,2094 'bear':1523,1606 'becom':266,1462,1872,1931,1963 'behavior':461,476 'belong':705,1395 'better':2016 'bill':1496 'blend':1419 'bodi':96 'bound':109,133,701,1508,2153 'boundari':1474,1516 'bridg':146 'briefli':503 'build':838 'busi':382,479,518,1016,1140,1467,1721 'business-fac':1466 'call':818,898,1479 'campaign':1681,1707 'cancelinvoic':1108 'canon':249,313,442,533,978,1505,1601,1759,1830,1960,2139 'captur':458 'case':451,1752,1767,1806 'catch':1318 'catch-al':1317 'caveat':1414 'cemail':1891 'centric':1428 'chain':1654,1670 'chang':1177,1896,2012,2030 'check':662 'checklist':2058 'choos':905 'circul':236 'class':22,257,569,1454 'class/type':1773 'clean':1440 'co':844 'co-creat':843 'code':187,228,256,274,284,301,435,449,450,560,891,953,962,1258,1372,1486,1688,1731,1982,2025,2056 'codebas':52,220,298,551,1935,2132 'collect':590 'column':589,1532 'combin':94,767,1846 'command':579,1098,1099,1176,2171 'commit':606 'compar':1726 'compet':1591 'compos':764 'composit':1330 'compound':1844 'concept':202,378,395,416,440,459,496,614,668,726,755,780,804,866,1057,1292,1359,1478,1597,1618,1666,1917,1988,2007,2015,2028 'concern':2192 'config':602,1534,1625,1633 'confus':392 'connect':417 'consist':49,2123 'constant':584,1789 'construct':1010 'consult':62,73,563 'contain':2084 'context':110,134,145,702,1509,1768,2107,2154 'continu':151 'contradict':275,967 'control':158 'convent':454,1537,1753,1769,1779,1785,1798,1808,1822 'convers':191 'core':174 'could':2101 'coupl':1444 'cover':751,1941 'creat':39,787,1781,1918 'createord':1094,1107,1780 'creation':845 'critic':499 'cross':144 'cross-context':143 'ctx':1551 'current':234 'custom':1045,1488 'customeremail':1889 'customerrepositori':1167 'data':1287,1623,2092 'databas':24,587,1358,1795 'daterang':1071 'db':258,1531,1556 'ddd':11,103,1009 'dead':836 'debt':999 'decid':244 'declar':136 'default':362 'defin':439 'definit':375,424,506,944,1921 'deprec':1946,1987 'deriv':254 'describ':1054,1058 'descript':1126,1884 'design':102,216,1344 'detail':1243,1378,2113 'detect':1220,1725 'dev':1687,1701 'differ':783,1480,1483,1658,1661,2106 'direct':295 'directori':31,597 'disambigu':1950 'discov':230 'distract':1327 'doc':188 'docs/thesaurus.md':363 'doesn':807,823,892 'domain':8,59,100,214,324,369,383,515,519,540,581,613,817,1017,1038,1077,1136,1143,1206,1228,1231,1257,1267,1274,1294,1322,1335,1348,1362,1364,1369,1371,1407,1420,1434,1438,1522,1605,1617,1631,1642,1678,1747,2076,2163,2185 'domain-bear':1521,1604 'domain-driven':99,213 'domin':1569 'done':719 'drift':1476,1713 'driven':101,215 'dto':2117 'durabl':1520,1596 'e':1557 'effect':1912 'effort':1694 'either':828 'elasticsearchindex':1647 'email':1068 'emailvalid':1074 'encount':2053 'end':837 'endpoint':27,592,1803 'enforc':47,894,913 'english':514,525,546,553 'entiti':467,574,1033,1435,1621,2118 'entri':371,421,492,1919,1949 'enum':572 'environ':604 'eric':105,217 'err':1554 'evan':106,218 'event':28,262,582,1078,1116,1533,1559,2164 'event/message':1811 'eventpublish':1651 'everi':64,184 'everyth':75 'everywher':1698,1751 'evid':223 'exact':673,1829,2138 'exampl':1770 'exempt':1613 'exist':252,300,326,353,670,748,768,961 'expand':1838 'expans':1580 'expert':272,329,541,1144,1582,1679,1699,1748,2077 'explain':2176 'explos':156 'export':1526 'express':742 'extract':847 'f.13':1909 'f.14':739 'f.5':162,884 'face':1468 'fail':871 'featur':600 'fetchpurchas':973 'field':25,436,585,595,1530 'file':29,78,336,596 'file/directory':1820 'find':637,957 'findinvoicesbycustom':1130 'fine':1858 'firewal':142,1224 'first':113,2072 'fit':714 'fix':289,1279,1502,1598,1695,2195 'flag':601,970,1222,1456 'follow':10,452 'forbidden':1225,1246 'forc':860,1578 'form':1602,1961,2140 'formal':128 'format':372 'found':972 'foundat':91 'four':735,870 'fpf':116,161,164,172,738,883,1908 'frame':138 'framework':115,1413,1416,1429,1443 'free':1375 'frequent':74 'full':1883 'function':21,577,1527 'function/method':1777 'game':1656 'gap':1744 'general':904 'generat':80 'generic':1307,1333,1614,2100 'genericservic':1152 'get':1182,1200 'getorderbyid':1129 'getterforord':1135 'github.com':118 'github.com/ailev/fpf/blob/main/fpf-spec.md)**':117 'glossari':9 'good':1023,1042,1066,1086,1106,1128,1146,1164,1184,1208,1385,1627,1648 'grep':1934 'handl':1314 'handler':1306,2090 'happen':1085 'head':330 'helper':1341 'helperservic':1153 'hide':1300,1616 'http':2116 'httporderservic':1382 'httppayment':1412 'httppaymentcli':1406 'id':1574 'ident':1041 'identifi':554,1542 'immut':1056 'imper':1100,1179,2172 'implement':320,1242,1377,1639 'import':323,629 'improv':1926 'inconsist':959 'indic':1342 'industri':1562 'industry-standard':1561 'info':1280,1624,2091 'inform':687,1671 'infra':1862 'infrastructur':1162,1399,1401,1855,2112 'inherit':1447 'input':242 'instead':1640 'intent':1309,1418 'interfac':570,1388 'invari':500,880 'invent':621,676 'inventoryreserv':1090 'invoic':558,1025 'invoicecalcul':1147 'invoicerepositori':1166 'invoices':1089 'isn':203 'item':1331,1337,1622,1794,1801,2093 'j':1550 'jargon':1238,1367,1458 'kafkaproduc':1646 'kebab':1805 'kebab-cas':1804 'keep':491,924,1436,1876,2019,2039 'key':603,1535,1825,1999 'knowledg':98,315,325,1669 'languag':3,13,42,108,526,530,841,1740,2186 'larg':993 'large-scal':992 'layer':1229,1232,1275,1370,1400,1402,1408,1863 'leak':1360,1471 'least':943,1900 'legaci':290,304,1932,1994,2043 'less':741 'let':1442 'lever':736 'lexic':141,1223 'lexicon':1247 'like':160,1869,2052 'lineitem':773 'list':430,1514,1967 'listpendingord':1131 'live':56,1445,1540,1610 'loanproduct':1634 'local':1541,1611 'locat':337,360,643 'logic':1346 'lose':1718 'loss':148 'lost':1673 'maintain':4,54,1244 'make':881 'manag':45,1298,2088 'map':193,299 'mark':693 'markdown':373,422 'market':1689 'match':1737 'max':1792 'mayb':753 'mean':379,390,401,1498,1544,2102 'meaningless':1281 'merg':1952,2033 'messag':607 'metadata':1450 'method':578,1173 'minim':419,903 'minimum':1920 'mint':730,872 'mislead':1971 'mode':71 'model':1357,1431,2119 'modul':23,598,1528 'money':1067 'moneyvalu':1073 'mongo':2114 'mongoord':1380,1410 'mongoorderrepositori':1404 'move':1345,1992 'multi':1866 'multi-word':1865 'multipl':2103 'must':192,406,1233,1253,1260,1373 'name':18,48,69,72,85,112,157,185,211,291,302,443,468,471,568,623,634,648,658,689,740,803,862,877,887,908,1006,1127,1138,1215,1310,1324,1455,1469,1524,1607,1615,1637,1732,1845,1885,1930,2060,2080,2179 'narrowest':907 'need':67,652,801 'never':1271,1352,1409 'new':283,654,678,728,732,761,874,1916,1948,1981 'neword':1117 'nightoper':788 'non':513,524 'non-english':512,523 'note':149,501,996,1951 'noth':1289 'notificationprefer':1636 'notificationsend':1149 'noun':466,1035,1053,1082,1102,1439 'nuanc':1719 'oauth':1575 'obj':1351 'object':576,1051,1124,1349,1350 'obvious':1546 'ok':1403 'old':1929,1944,2024,2055 'one':425,679,1504,1600,1939,1957,2048,2182 'onorderplac':1093 'oper':122,520,790,1910 'optim':934 'ord':1835 'order':772,981,1024,1297,1386,1390,1392,1772,1775,1782,1788,1793,1799,1800 'order.addlineitem':1186 'order.canbeshipped':1211 'order.cancel':1185 'order.cancelordermethod':1191 'order.checkdata':1214 'order.docancelorder':1193 'order.fetchinfo':1213 'order.getcancelled':1192 'order.gettotal':1209 'order.isexpired':1210 'order.recalculate':1189 'order.ts':1823 'order_service.py':1824 'orderaggreg':1029 'orderaggregateimpl':1031 'ordercancel':1819 'ordercommand':1118 'ordercr':1112 'orderdao':1172 'orderdata':1296 'orderdto':1383,1860 'orderent':1032,1384 'orderev':1092 'orderfind':1171 'orderfulfil':1148 'orderhistori':1650 'orderitem':1849 'orderlineitem':770,1043,1338 'orderlineitement':1047 'orderlineitemimpl':1048 'orderlineitemobj':1049 'ordermanag':1151 'orderobject':1839 'orderpersist':1170 'orderplac':1087,1818 'orderqueri':1134 'orderrepositori':1165,1387,1859 'orderroot':1030 'orderservic':1776 'orderstorag':1169 'origin':529 'orm':1427 'orm-centr':1426 'other':1511 'outsid':1472 'overrid':296 'overus':1316 'packag':599 'paramet':586,593,1881 'parsimoni':2038 'part':1463,1484 'pascalcas':1774,1812 'past':1079,1815,2167 'past-tens':1814 'path':346 'pattern':1163,1218,1425 'paymentcaptur':1088 'paymentgateway':1389 'paymenttransact':1044 'pend':1787 'pendingord':1786 'per':1507,2045 'period':87 'persist':1422 'phase':1990 'phonenumb':1069 'pick':1503,1599,1959 'pm':1682,1700 'point':166,2003 'pointer':1998 'polysemi':139 'postgresstor':1645 'pr':609 'precis':132 'prefix':1183 'prefixes/suffixes':1394 'premium':895 'premiumcustom':900 'prevent':391 'priceinfo':1075 'primari':222 'principl':14,114,175 'proactiv':16 'problem':1278,1487,1586 'proceed':1005,2197 'process':470,1870,1874 'processingstag':1873 'processrefund':1109 'product':1187,1339 'productcatalog':1652 'project':6,43,177,453,1765,1778,1784,1797,1821 'promot':1684 'propos':632 'protect':1235 'provid':127,1757 'purchas':983,1843 'purchaselineitem':1851 'push':1690 'qa':1691,1702 'qualifi':775,794 'quantiti':1188 'queri':580,1119,1194 'question':1120 'quick':2057 'rais':2190 'rare':81 're':718 'read':82,88,617,639,1196,1976,2023 'read-on':1195 'read-warn':1975 'reader':2049 'realli':1956 'recogn':1145,2078 'record':1356,1424,1620 'rediscach':1644 'redissess':1411 'redissessioncach':1405 'refer':159,612 'references/generating-thesaurus.md':83,84 'references/naming-audit.md':89,90 'reflect':538 'relat':152,410,683,1902 'remov':1283,1328,1354 'renam':986,995,1924,1937,2018,2036 'replac':475,1263,1997 'repo':357 'repositori':1154,1155 'repres':2180 'req':1552 'request':1105 'requirements/specs/tickets':1729 'res':1553 'reserveinventori':1110 'respons':594,1301,1305 'retir':1968 'retriev':1122 'retrieveorderdata':1133 'reus':745,771 'reveal':2111 'rhetor':931 'right':657,2152 'robust':933 'role':469,1856 'root':1013 'rout':261 'rule':480,910,1007,1722,1826 'say':288,976,1288,1680,1704 'scale':994 'schema':259 'scope':988,1548 'section':169,511 'see':642,1983 'semant':131,137 'sens':1927,1943,1958 'sentenc':426,2183 'separ':510 'servic':1137,1315,2089 'sessionstor':1649 'set':1626,1635 'share':182 'shoppingcart':1027 'short':493,1539,1609 'short-liv':1538,1608 'similar':394 'singl':181,364,627,1973 'singular':1019,1034,1052 'skill':93 'skill-ubiquitous-language' 'sku':1571 'small':990 'smell':1677 'snake':1791 'someth':66,1039,1083 'somewher':354 'sound':921 'sourc':365 'source-codealive-ai' 'speak':543 'spec':477,1686 'specif':168,173,490,1266,1321,1630 'specifi':344 'split':1302,1938,2031 'spot':833,856 'sql':2115 'sqluserrepositori':1381 'stage':1871,1875 'standard':268,1563 'start':1198 'state':1178 'state/window':784 'step':630 'still':798 'stop':715,2193 'strong':464,1901 'successor':1974 'suffix':1022,1156,1282,1355,1853 'suggest':984,1936 'synonym':396,427,692,946,1475,1712,1842,1923,2146 'system':123 'tabl':588,1796 'tacit':314 'tag':857 'task':649,917 'tech':998 'technic':1021,1326,1366,1393,1457,1852 'telephon':1655 'tell':1904 'tens':1080,1816,2168 'term':60,150,196,232,246,305,311,374,387,399,411,414,423,534,655,665,684,712,722,733,749,769,811,875,951,965,979,1018,1226,1240,1251,1268,1295,1336,1365,1506,1570,1632,1662,1697,1727,1750,1760,1771,1831,1848,1868,1897,1940,1945,1954,1969,1995,2046,2065,2129,2157 'test':1692,2000 'thesaur':40 'thesaurus':7,44,57,79,199,207,239,278,280,335,339,413,438,457,487,536,565,619,641,645,709,806,969,975,1250,1756,1847,1894,1914,2143 'thesaurus.md':351,940,2067 'thing':404,762,1481,1501,2104 'thought':125 'three':70 'time':65,793 'titl':610 'today':253 'tool':129 'topic-agent-safety' 'topic-agent-skills' 'topic-ai-coding' 'topic-ai-driven-development' 'topic-ai-safety' 'topic-antigravity' 'topic-bash' 'topic-claude-code' 'topic-codex-cli' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'totalamount':1886 'transdisciplinari':121 'transient':1237 'translat':547,1653,1676,1716,1743 'tri':483,734 'true':882 'truth':367,1906 'turn':485 'two':95,1942,1947,1953 'tx':1555 'type':571,1525 'ubiquit':2,12,41,107,840,1739 'ubiquitous-languag':1 'unchang':1928 'unclear':799,1308 'undefin':865 'univers':922 'unnatur':1579 'unpack':140 'unresolv':851 'updat':1892 'upgrad':916 'upper':1790 'url':1573 'use':15,33,179,227,237,307,347,358,409,433,527,552,671,698,720,789,902,949,963,1014,1272,1293,1320,1329,1334,1363,1583,1628,1660,1763,1827,1882,1898,2126,2136,2184 'user':36,241,287,293,309,343,822,1002,1286,1491,1588 'user/domain':271 'useraccount':1026 'userinfo':1285 'usr':1587 'util':1340,2095 'vagu':1239,1299 'valu':575,1050 'variabl':20,583,605,1783,1879 'variant':758 'vat':1572 'verb':1081,1101,1123,1180,1207,1817 'viabl':420 'vocabulari':183,370 'warn':1977 'weasel':1269,1276,2086 'white':832,855 'white-spot':854 'whose':909 'win':281 'won':473 'word':929,1270,1277,1867,1878,1925,2017,2087 'workflow':615 'wors':1710 'would':2074 'write':1683,1706 'x':1984 'y':1986 'yes':2013 'yet':319 'счёт':556 'счёт-фактура':555 'фактура':557","prices":[{"id":"6d3e3908-c971-4db3-b1a7-e7b6d99d39a3","listingId":"fb6e7e69-693e-411a-be9f-0e694c525c7d","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"CodeAlive-AI","category":"ai-driven-development","install_from":"skills.sh"},"createdAt":"2026-05-04T06:56:24.149Z"}],"sources":[{"listingId":"fb6e7e69-693e-411a-be9f-0e694c525c7d","source":"github","sourceId":"CodeAlive-AI/ai-driven-development/ubiquitous-language","sourceUrl":"https://github.com/CodeAlive-AI/ai-driven-development/tree/main/skills/ubiquitous-language","isPrimary":false,"firstSeenAt":"2026-05-04T06:56:24.149Z","lastSeenAt":"2026-05-18T18:57:07.913Z"}],"details":{"listingId":"fb6e7e69-693e-411a-be9f-0e694c525c7d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"CodeAlive-AI","slug":"ubiquitous-language","github":{"repo":"CodeAlive-AI/ai-driven-development","stars":67,"topics":["agent-safety","agent-skills","ai-coding","ai-driven-development","ai-safety","antigravity","bash","claude-code","codex-cli","cursor","developer-tools","gemini-cli","hooks","mcp","multi-agent","opencode","plugins","prompt-engineering","skills","subagents"],"license":"mit","html_url":"https://github.com/CodeAlive-AI/ai-driven-development","pushed_at":"2026-05-12T20:04:46Z","description":"Practices, protocols, and skills for AI-driven software development. 18 skills + 1 Bash safety hook for Claude Code, Codex CLI, OpenCode, Cursor, Gemini CLI, Antigravity, and any agent supporting the Agent Skills standard.","skill_md_sha":"1ed15c084a125ba4a556ed246998180ff051bd9d","skill_md_path":"skills/ubiquitous-language/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/CodeAlive-AI/ai-driven-development/tree/main/skills/ubiquitous-language"},"layout":"multi","source":"github","category":"ai-driven-development","frontmatter":{"name":"ubiquitous-language","description":"Maintain a project thesaurus (domain glossary) following DDD ubiquitous language\nprinciples. Use PROACTIVELY when naming anything: variables, functions, classes,\nmodules, database fields, API endpoints, events, files, or directories. Also use\nwhen the user asks to \"create thesaurus\", \"update glossary\", \"add term\", \"rename\nto match domain\", \"check naming consistency\", \"what should I call this\", \"domain\nlanguage\", \"ubiquitous language\", or \"naming conventions\". Ensures all names in\nthe codebase are consistent, descriptive, and aligned with the shared domain\nvocabulary. Not for general code style or linting — only for domain term\nconsistency."},"skills_sh_url":"https://skills.sh/CodeAlive-AI/ai-driven-development/ubiquitous-language"},"updatedAt":"2026-05-18T18:57:07.913Z"}}