Skip to content

Framework & Domain Reference

The catalog is stored as a framework file plus one file per domain, assembled by LoadFrameworkDir. JSON schemas are generated from the Go types (go run ./cmd/schemagen) and embedded via the schema package.

catalog/
├── framework.json           # Framework metadata and narratives
├── domains/
│   ├── api.json             # One file per domain
│   ├── observability.json
│   ├── platform.json
│   └── security.json
└── external/
    ├── aws-observability.json      # Third-party maturity models
    └── newrelic-observability.json

For a task-oriented walkthrough, see Catalog Authoring.

Framework

Schema: scale-framework.schema.json

{
  "$schema": "https://productbuildershq.com/schema/scale/v0/scale-framework.schema.json",
  "id": "scale",
  "name": "SCALE",
  "description": "Platform engineering maturity across five aspects.",
  "version": "0.1.0",
  "owner": "platform-engineering",
  "updated": "2026-07-25",
  "narratives": [
    {
      "id": "scale-thesis",
      "kind": "thesis",
      "title": "Why SCALE exists",
      "body": "Maturity frameworks make it cheap to generate hundreds of metrics...",
      "owner": "platform-engineering",
      "reviewBy": "2027-01-01"
    }
  ]
}
Field Required Purpose
id Yes Unique identifier; referenced by assessments as frameworkId.
name Yes Display name.
version Yes Semver; bump on breaking schema changes.
owner No Accountable team.
updated No Last-updated date.
narratives No Framework-level thesis blocks (journey/outlook live in assessments).

Domain

Schema: scale-domain.schema.json

{
  "$schema": "https://productbuildershq.com/schema/scale/v0/scale-domain.schema.json",
  "id": "observability",
  "name": "Observability",
  "description": "Telemetry coverage, golden signals, and incident response.",
  "status": "active",
  "owner": "observability-platform",
  "dimensions": [ ... ],
  "capabilities": [ ... ],
  "narratives": [ ... ]
}

Status

Status Meaning
draft Work in progress, not yet ready for assessment.
active Ready for measurement.
deprecated Being phased out.

Dimensions

Ordered lifecycle stages — the domain's story spine. Stage order is slice order — the arc is the order.

"dimensions": [
  {
    "id": "security-lifecycle",
    "name": "Security Lifecycle",
    "stages": [
      { "id": "design",      "name": "Design & Planning" },
      { "id": "development",  "name": "Development" },
      { "id": "cicd",         "name": "CI/CD Pipeline" },
      { "id": "offensive",    "name": "Offensive Validation" },
      { "id": "operations",   "name": "Operations" }
    ]
  }
]

Capabilities & metrics

A capability groups metrics within a domain. Each metric is tagged with exactly one aspect and participates in rollups only when it has both a target and an owner.

{
  "id": "otel-coverage",
  "name": "OTel Signal Coverage",
  "metrics": [
    {
      "id": "obs.consumption.otel-adoption",
      "name": "OTel Adoption",
      "aspect": "consumption",
      "consumptionKind": "adoption",
      "direction": "higher_is_better",
      "unit": "percent",
      "target": { "value": 100 },
      "owner": "observability-platform",
      "maturity": { "levels": [ ... ] }
    }
  ]
}

See Catalog Authoring → Writing Metrics for the full field list, maturity ladders, and lower-is-better handling.

External models

Schema: scale-external-model.schema.json. Codify third-party maturity models as data, with source-faithful levels, provenance, and a PRISM crosswalk. Capabilities reference them through ordinary frameworks mappings (framework = model ID, reference = level ID). See Catalog Authoring → External Models.