---
type: KnowledgeTreeIndex
title: architecture-axis catalog
description: Root manifest for the architecture-axis catalog (RFC #75). The structural-pattern catalog's sibling one altitude up — axes are cross-cutting capability ladders selected by tier, where patterns are local shapes selected by shape. Each axis entry is an OKF Axis document. OKF-conformant per the skill tree's okf.md.
tags: [index, axes, architecture, catalog, okf, rfc-75]
timestamp: 2026-06-18T00:00:00Z
---

# Architecture-axis catalog

This is the **root OKF manifest** (`type: KnowledgeTreeIndex`) for the
architecture-axis catalog at `<docs>/axes/`. It is the **structural-pattern
catalog's sibling one altitude up** (RFC #75 §13.4): where
[`../patterns/`](../patterns/catalog.yaml) holds `structural-pattern` entries
selected by *shape*, this tree holds `architecture-axis` entries selected by
*tier*.

The conformance rules, the reserved `type` taxonomy (`Axis`), and the spec pin
live in the skill tree's
[okf.md](../../telejester-claude-skills-dev/.claude/skills/forge-manager/okf.md);
the framework prose (the three kinds, the discriminator test, the
commitment-surface taxonomy, scope/composition, and the per-axis entry schema)
lives in the skill tree's `architecture-axes.md` SkillTopic.

## What an axis is (the three-kinds taxonomy — §2)

A catalog entry's `kind` is one of three kinds of design knowledge; this tree
holds exactly one of them:

| `kind` | Is | Selected by | Lives in |
|---|---|---|---|
| `structural-pattern` | local shaping of a function/module | a *shape* | `../patterns/` |
| `architecture-axis` | a cross-cutting capability **ladder** with asymmetric migration cost | a *tier* | **here** |
| posture | a pervasive non-laddered stance | a default | here, as a **degenerate single-tier axis** (resolved OQ1 — NOT a third kind) |

**Discriminator test** — an entry is an `architecture-axis` iff all four hold:
ordered tiers (a ladder, each rung strictly adds capability); a cross-cutting
consequence bundle (schema + tools + enforcement + tests); asymmetric migration
cost (escalation expensive, de-escalation rare); requirement-keyed selection
(falsifiable predicates pick the tier). Local shaping → structural pattern;
pervasive non-laddered choice → posture (a single-tier axis here).

## Catalog index

[`catalog.yaml`](catalog.yaml) (`version: 1.0.0`) is the machine-loaded index —
`{id, file, kind, concept, applies_when?}` per axis, mirroring
`patterns/catalog.yaml`. Loaded + validated by `forge_manager_mcp.axis_catalog`.

## Axis entries (`type: Axis`)

Each axis is one `<id>.md` carrying the §6 entry schema (kind / ordered tiers
each with a commitment-delta typed by surface + admin-tool surface + enforcement
obligations + tests + forecloses + migration-cost-to-next / scope / selection
probes / applies_when / composes_with / ≥1 worked example).

All 16 axes are authored (catalog `version: 2.0.0`): 9 **deep** (5A.2 — full §6
entries with a worked example from the skill's own history) + 7 **skeleton**
(5A.4 — clear ladder + probes + commitment surface + applies_when; thin /
illustrative worked example). Every entry validates against the §6 schema
(`forge_manager_mcp.axis_catalog.validate_entry`); the `test_axis_catalog`
dogfood parses each doc's ```yaml block and validates the whole catalog.

| Axis | Covers | Depth |
|---|---|---|
| [temporality](temporality.md) | history/time ladder (none → created_at → +updated_at → +deleted_at → append-log → bitemporal) | **deep** (5A.1 exemplar → 5A.2 lead) |
| [schema-authority](schema-authority.md) | source-of-truth (code-first → schema-first → contract-first); projection-vs-canonical | **deep** |
| [schema-evolution](schema-evolution.md) | migration discipline (recreate → forward-only → reversible → online) | **deep** |
| [persistence](persistence.md) | durability (in-memory → file → embedded → networked → replicated) | **deep** |
| [distribution](distribution.md) | topology (single-process → multi-host → geo) | **deep** |
| [recovery](recovery.md) | failure handling (fail-fast → retry → circuit-breaker → compensating-saga) | **deep** |
| [extensibility](extensibility.md) | trust/plug-in (hardcoded → config → plugin → sandboxed) | **deep** |
| [observability](observability.md) | introspection (none → logging → metrics → tracing) | **deep** |
| [api-evolution](api-evolution.md) | contract evolution (unversioned → versioned → negotiated → compat-guaranteed) | **deep** |
| [principal](principal.md) | identity (singular → per-principal → RBAC → groups/ABAC); principal-type + delegation | skeleton |
| [tenancy](tenancy.md) | isolation (single → shared-multi → schema-per → DB-per) | skeleton |
| [consistency](consistency.md) | concurrency control (LWW → optimistic → pessimistic → MVCC → consensus) | skeleton |
| [collaboration](collaboration.md) | multi-writer (single-writer → optimistic-multi → CRDT/OT) | skeleton |
| [authz-granularity](authz-granularity.md) | authz granularity (none → resource → field → row-level/policy-as-data) | skeleton |
| [i18n](i18n.md) | localization (single-locale → translatable → full-i18n → per-tenant locale) | skeleton |
| [schema-flexibility](schema-flexibility.md) | shape rigidity (fixed → extension-columns → document/EAV → polymorphic) | skeleton |

## Composition — products are derived, not authored (§5)

Some concepts are **products of two (or three) axes**, not points on one
(provenance = principal × temporality). These are NOT axis entries — they are
computed per-system from the chosen tier vector + a small interaction table.
`composes_with[]` on each axis references the interaction rules.

[`interactions.yaml`](interactions.yaml) (`version: 1.0.0`, authored in 5A.3) is
the machine-loaded **interaction table** — catalog.yaml's sibling registry. It
holds the ~12 `{product, axes, derivation_note}` rules (the §5 table: provenance,
access-control, tenant-membership, per-tenant-retention, conflict-resolution,
cap-positioning, migration-complexity, right-to-erasure,
projection-vs-canonical-drift, and the audit-log triple). Loaded by
`forge_manager_mcp.axis_catalog.load_interactions`; the per-system derivation
(`derive_products`) computes the products among a system's *engaged* axes —
**O(axes + interactions) authored → O(products) derived.** Provenance is the
type-correctness anchor: `created_by`/`updated_by` hold a **principal** (typed
`human | service | system | device`), NOT a users-table FK (RFC #75 §5). It is a
machine-loaded registry (no separate `type: Axis` frontmatter doc — like
`catalog.yaml`, it is referenced from this manifest).

## Reserved filenames

- `index.md` — this manifest.
- `log.md` — chronological history (when present).

## Related trees

- **Structural-pattern catalog** — [`../patterns/`](../patterns/catalog.yaml)
  (`Pattern` entries; the altitude below).
- **Skill prose** — root manifest at
  `../../telejester-claude-skills-dev/.claude/skills/forge-manager/index.md`
  (the framework prose for this catalog).
