> For the complete documentation index, see [llms.txt](https://help.cubelet.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.cubelet.ai/platform-and-integration/architecture/data-model-and-taxonomy.md).

# Data model & taxonomy

*The structural shape of a Cubelet and a Case, how they connect to competencies and source frameworks, and the write contract that registers them in the Catalog.*

## Cubelet

A Cubelet is the platform's atomic knowledge unit. Every Cubelet has:

* **Six faces** — WHAT, WHY, HOW, WHERE, WHEN, APPLY. All six are required; none is optional. (See the Glossary for what each face represents.)
* **A 1:1 mapping to a competency.** A Cubelet always teaches exactly one competency.
* **A `quality_gate` block** recording the outcome of the QA stage (see Governance & provenance for the full governance story).
* Optionally, a `framework_element_ids` array (see below).

The `quality_gate` block has this shape:

```json
{
  "scores": { "what": 8, "why": 7, "how": 9, "where": 8, "when": 7, "apply": 9 },
  "aggregate": 48,
  "passed": true,
  "reviewed_by": "qa-agent-opus",
  "review_date": "2026-06-17T00:00:00Z"
}
```

* `scores` — one 0–10 score per face.
* `aggregate` — the sum across all six faces.
* `passed` — whether the Cubelet cleared the quality gate.
* `reviewed_by` — identifies which QA reviewer verified the Cubelet.
* `review_date` — when that review ran.

A Cubelet is produced by the `cubelet_produce` pipeline and is studied by learners in the Library.

## Case

A Case is a judgment exercise, not a knowledge unit — it is never called a "cubelet." A Case is composed of:

* A **fictional organization** — an invented company profile a learner interviews during the exercise.
* A set of **domain practices** the organization is evaluated against.
* A **ground-truth scoring reference** for each organization/practice pair, used to score the evidence a learner gathers.

Cases are produced by the simulator pipeline — a separate pipeline from `cubelet_produce` — and are practiced by learners in the Lab. Each simulator is tied to one domain and is backed by a set of production Cubelets that anchor its practice list.

## Competency

A competency is the unit a Cubelet maps 1:1 to — the atomic skill or knowledge area the Catalog is organized around. Competencies are what the Scaffold diagnostic measures a learner's mastery against, what Pursuit training closes the gap on, and what a Passport credential (see Governance & provenance) certifies as proven.

## Framework element IDs

A Cubelet can carry a `framework_element_ids` array linking it to elements of an external compliance or standards framework, enabling cross-framework traceability. Each entry is formatted `{frameworkId}:{elementId}`, for example:

```
nist-sp-800-171-r3:03.01.01
```

An empty or absent array means cross-framework coverage attestation is pending for that Cubelet — expected for domains outside frameworks with formal crosswalks, and it does not affect whether the Cubelet has passed its own quality gate.

## Cubelet ID naming (per domain)

Separately from `framework_element_ids`, a Cubelet's own `cubelet_id` follows a naming scheme specific to its domain — these are **not** uniform across the platform:

| Domain                        | ID pattern                                              | Examples                                         |
| ----------------------------- | ------------------------------------------------------- | ------------------------------------------------ |
| EU AI Act                     | `euact-art{N}-*`                                        | `euact-art9-risk-mgt`, `euact-annex3-biometrics` |
| NIST AI RMF                   | `govern-N.N` / `map-N.N` / `measure-N.N` / `manage-N.N` | `govern-1.1`, `map-2.3`, `measure-1.1`           |
| CMMC                          | `comp-{domain}-{control}`                               | `comp-ac-3.1.1`, `comp-au-3.3.1`                 |
| ISACA (CISA/CISM/CRISC/CDPSE) | `cisa-d{N}-*` / `cism-d{N}-{N}` / etc.                  | `cisa-d1-practice-1`, `cism-d1-1`                |
| ISO 42001                     | `iso42001-{clause}`                                     | `iso42001-6.1`                                   |
| TRAIGA                        | `traiga-{article}`                                      | `traiga-art5`                                    |

NIST AI RMF and EU AI Act IDs mirror the official framework's own section numbering directly. Do not assume a `comp-*` prefix outside CMMC — each domain's scheme is authoritative only for that domain.

## The dual-write contract

An item — Cubelet or Case — is registered in the Catalog only when both of the following have happened:

1. Its content has been written to R2.
2. Its corresponding edge has been written to Neo4j.

A write to only one side is not a valid Catalog registration. See Overview for how R2 and Neo4j relate as primary store and derived index.
