{
  "uid": "cogitave.learn.core-model-fundamentals.the-one-model",
  "kind": "moduleUnit",
  "href": "/modules/core-model-fundamentals/the-one-model/",
  "title": "The one-model thesis",
  "summary": "",
  "type": null,
  "products": [],
  "roles": [],
  "levels": [],
  "subjects": [],
  "headings": [
    "Nodes, edges, and one flat namespace",
    "Two identifiers, two jobs",
    "Derived reads, one source of truth",
    "Why this is \"one model,\" not three"
  ],
  "source": "The thesis in one line: an AI-native organization runs on **one** typed property\ngraph - a labeled property graph (LPG) - with a single identity rule and a\nsingle change rule, materialized into a few derived read shapes and served\nbehind one query layer that is MCP-native. Cogitave's own Core is one such\ngraph; this unit uses it as the worked example, and\n[its architecture doc](../../../../core/docs/architecture.md) states the same\nthesis for that instance. Everything below is what the one-line thesis cashes\nout to - and what you would decide when you model your own estate this way.\n\n## Nodes, edges, and one flat namespace\n\nA canonical model needs a **closed, typed vocabulary**: a fixed set of node\ntypes and a fixed set of edge types. A closed set is what keeps traversal\nqueries, faceting, and certification evidence stable as the org grows - new\ncontent is new *nodes*, not new *schemas*. Cogitave's Core, for instance, has\n**18 node types** - `Org`, `Repo`, `Product`, `Service`, `Doc`, `Unit`,\n`Module`, `LearningPath`, `ADR`, `Agent`, `Skill`, `Standard`, `InfraResource`,\n`Decision`, `Team`, `Person`, and more - and a closed set of **11 edge types**,\namong them `partOf` (composition), `dependsOn`, `xref`, `appliesTo`,\n`teachesSkill`, and `derivedFrom`. You are reading one node of that graph right\nnow: this `Unit` is `partOf` this `Module`, exactly as the schema describes.\n\n## Two identifiers, two jobs\n\nSeparate **identity** from **version**:\n\n- An immutable **`uid`** - a dotted name (`<org>.<area>.<name>`) that is globally\n  unique across the whole multi-org estate. One flat namespace means a UID names\n  exactly one node everywhere, so an edge or an `@uid` reference resolves the\n  same way regardless of which org issued it. The URL may change; the UID never\n  does. (Cogitave's own UIDs read `cogitave.<area>.<name>`.)\n- A content-addressed **`contentHash`** - a digest of the canonicalized node\n  payload. Two materializations with the same hash are byte-identical and stored\n  once: the same Merkle-DAG discipline Git and IPFS use for their object models.\n\nIdentity carries **no PII**: a `Person` node holds only a non-PII handle and\ncoarse role labels, with any personal data in a separate, access-controlled\nstore keyed by the same UID.\n\n## Derived reads, one source of truth\n\nThe graph is the source of truth; reads are served from derived, **rebuildable**\nindexes - typically a **catalog** (UID-keyed flat records), a **graph store**\n(typed adjacency for traversal), and a **search index** (lexical + vector). Each\nis a pure function of the graph at a given content root, so any of them can be\nrebuilt independently without touching the source.\n\n## Why this is \"one model,\" not three\n\nBecause the estate itself - orgs, teams, services, infra, standards, controls,\nobservability signals - is *nodes and edges in this same graph*, a rule like \"if\ncode changes, docs are mandatory\" becomes a **graph-level invariant** rather than\na CI afterthought: a `Repo` node changing without a connected `Doc` or `Decision`\nnode is something the graph itself can flag, not just a check bolted on top of\nit. That is the payoff of modeling a whole organization as one graph - and the\nreason to reach for a single canonical model before you have five disconnected\nstores to reconcile.\n",
  "partOf": "cogitave.learn.core-model-fundamentals",
  "durationInMinutes": 7,
  "quiz": null
}