Typed entities plus versioned aspects. An entity is identified by URN and carries named aspect documents; classification, quality rules, ownership and documentation are all aspects.
This is what makes extensibility real: a new metadata attribute is a registered aspect schema, not a database migration and a release.
The alternative — a wide table per asset type — was rejected because every new governance requirement would then change the core schema.
Model rules
Every entity is addressed by URN of the form platform:instance:path, so the same physical table harvested twice resolves to one asset.
Lineage carries granularity and evidence on the edge itself, so a table-level guess and a parsed column mapping are never confused.
Provenance is stored on every aspect version — this is the field the precedence engine reads (view 09).
Omitted here
workflow_task and audit_event are part of the model but are shown where they are used, in views 13 and 21.
Physical partitioning, indexes and the JSONB GIN strategy are in the storage design, not the logical model.