The POPE model — bRRAIn Docs
People, Organizations, Places, Events — the universal entity layer underlying every bRRAIn graph.
The POPE model
POPE stands for People, Organizations, Places, Events. It's the universal entity layer that every bRRAIn graph is built on — four simple categories that cover most of what matters in institutional memory.
Why only four?
POPE is deliberately small. The test for adding a new POPE-level entity type: does every organization, across every industry, have this? People, Organizations, Places, and Events pass that test. Contracts, Patients, and Transactions don't — they're industry-specific and live in custom ontology extensions.
Core entity types
Person
A human participant in the system.
| Property | Type | Example |
| --- | --- | --- |
| id | string | person:alice-uuid |
| name | string | Alice Chen |
| email | string | alice@firm.io |
| role | string | Engineer |
| org_id | ref | org:acme-corp |
Organization
Institutions, teams, departments, customers, vendors.
| Property | Type | Example |
| --- | --- | --- |
| id | string | org:acme-corp |
| name | string | Acme Corporation |
| type | string | customer / partner / internal-team |
| parent_org | ref | org:acme-holdings |
Place
Projects, workspaces, physical locations, deployment regions.
| Property | Type | Example |
| --- | --- | --- |
| id | string | place:project-portfolio-2026 |
| name | string | Project Portfolio 2026 |
| type | string | project / workspace / region |
| owner_id | ref | person:alice-uuid |
Event
Sessions, meetings, milestones, consolidation cycles, deployments, incidents.
| Property | Type | Example |
| --- | --- | --- |
| id | string | event:q2-planning-meeting |
| name | string | Q2 Planning Meeting |
| type | string | session / meeting / milestone |
| timestamp | datetime | 2026-04-10T15:00:00Z |
| participants | array | [person:alice, person:bob] |
Standard relationships
POPE ships with a canonical set of edges. You can add more in custom ontology extensions, but these always exist:
| Edge | Source | Target | Meaning |
| --- | --- | --- | --- |
| authored | Person | anything | Created the target |
| participated_in | Person | Event | Was a participant |
| belongs_to | Person | Organization | Employment/membership |
| owns | Person / Organization | Place | Ownership or primary control |
| member_of | Organization | Place (project) | Team working on a project |
| informs | Decision | Decision | One decision informed another |
| validated | Decision | Learning | A decision produced a learning |
| mitigates | Decision | Risk | A decision reduced a risk |
| exacerbates | Decision | Risk | A decision increased a risk |
| created_in | * | Event | The target was created during this event |
| discovered_in | Learning | Session | Context for how a learning surfaced |
Supplementary layers
POPE is extended with three always-available supplementary layers:
Provenance layer
| Entity | Purpose | | --- | --- | | Decision | Why was a choice made? Who decided? What alternatives were considered? | | Learning | What was understood? What validated an assumption? What contradicted prior thinking? |
Reliability layer
| Entity | Purpose | | --- | --- | | Risk | What could affect validity? Owner? Mitigation status? Severity? |
Temporal layer
| Entity | Purpose | | --- | --- | | Session | When did creation occur? Under what context? Which participants? |
These layers are also "first-class" — you can query across POPE + provenance + reliability + temporal in a single retrieval.
POPE in practice
Example: a legal engagement
- People: the partner, associates, client contacts
- Organizations: the client firm, opposing counsel
- Places: the matter, the court, the document repository
- Events: intake call, depositions, filings
- Decisions: forum selection, settlement posture
- Risks: statute of limitations, discovery sanctions
- Sessions: every attorney's work session on the matter
A single query — "what forum-selection decisions did Alice make on cases where the opposing counsel was Widget LLP and the statute-of-limitations risk was medium or above?" — uses every POPE and supplementary layer at once.
Example: a manufacturing operation
- People: operators, supervisors, quality engineers
- Organizations: suppliers, certification bodies, customers
- Places: production lines, receiving docks, regional distribution centers
- Events: shift starts, maintenance windows, shipment departures
- Decisions: supplier selections, quality gate overrides
- Risks: tariff exposure, component shortages
- Sessions: every shift on every line
Extending POPE
POPE is the base layer; your domain model extends it. For example, a Contract entity type in a legal ontology extension relates to POPE via:
authored— a Person authored the Contractinvolves(custom) — the Contract involves one or more Organizations (the parties)governed_by(custom) — the Contract is governed by a Place (jurisdiction)
See Extending the ontology for the full workflow.
What POPE is not
- POPE is not an industry vertical — don't try to fit everything into these four categories.
- POPE is not immutable in every property — property schemas can be extended. Only the entity types themselves are immutable.
- POPE is not a complete world model — it's a minimal, portable spine. Your custom ontology adds the domain-specific flesh.