Skip to main content
Meta

Meta

The Meta molecule provides sample abstract entity types for organizational modeling in SixDegree. These entities represent business concepts like Projects, Teams, Services, and Domains that aren't tied to a specific system of record.

Unlike other molecules that discover entities from external systems (GitHub, Kubernetes, etc.), the Meta molecule reads entity definitions from YAML files. This allows organizations to define their entities declaratively and link them to concrete implementations discovered by other molecules.

KindDescription
MetaProjectBusiness initiatives that span multiple services and teams
MetaTeamTeams responsible for services, components, or domains
MetaServiceLogical services (may map to multiple deployments)
MetaDomainBusiness domains / bounded contexts
MetaComponentLibraries, modules, subsystems within services
MetaAPIAPI contracts (REST, GraphQL, gRPC, events)
MetaEnvironmentDeployment environments (production, staging, dev)
MetaResourceGeneric type for custom entities
discovery:
enabled: true
settings:
paths:
- /path/to/meta-files
- /another/directory

The molecule recursively scans all configured paths for .yaml and .yml files.

Meta files use a Kubernetes-like format with apiVersion, kind, metadata, and spec:

apiVersion: meta.sixdegree.ai/v1
kind: Service
metadata:
name: payment-gateway
description: Core payment gateway service
tags:
- critical
- pci
links:
- title: Runbook
url: https://wiki.example.com/runbooks/payment-gateway
spec:
owner: payments # Team that owns this service
domain: payments # Business domain
lifecycle: production # Lifecycle stage
tier: 1 # Service tier (1 = critical)
dependsOn: # Service dependencies
- payment-processor
- fraud-detection
providesApis: # APIs this service exposes
- payments-api
consumesApis: # APIs this service consumes
- user-api
environments: # Environments where deployed
- production
- staging

Multiple documents can be in a single file, separated by ---.

These relations are created directly from YAML definitions:

RelationSourceTargetCreated From
OWNSMetaTeamService/Componentspec.owner
PART_OFServiceMetaDomainspec.domain
PART_OFComponentMetaServicespec.partOf
DEPENDS_ONServiceServicespec.dependsOn[]
PROVIDESServiceMetaAPIspec.providesApis[]
CONSUMESServiceMetaAPIspec.consumesApis[]
DEPLOYED_TOServiceMetaEnvironmentspec.environments[]

The Meta molecule provides rules to automatically link abstract entities to concrete entities from other molecules:

RuleRelationLinks To
meta-service-to-github-repoMANAGED_BYGitHubRepository
meta-service-to-k8s-deploymentIMPLEMENTED_BYK8sDeployment
meta-service-to-argo-appIMPLEMENTED_BYArgoApplication
meta-service-to-docker-imageIMPLEMENTED_BYDockerImage
meta-service-to-grafana-dashboardMONITORED_BYGrafanaDashboard
meta-service-to-pagerduty-serviceALERTED_BYPagerDutyService
meta-service-to-sentry-projectALERTED_BYSentryProject
meta-service-to-slack-channelNOTIFIESSlackChannel
RuleRelationLinks To
meta-team-to-slack-channelCOMMUNICATES_VIASlackChannel
meta-team-to-pagerduty-policyON_CALL_FORPagerDutyEscalationPolicy

Rules use name matching to infer relationships. For example, a MetaService named payment-gateway will be linked to:

  • A GitHubRepository named payment-gateway or containing payment-gateway
  • A K8sDeployment named payment-gateway or payment-gateway-*
  • A SlackChannel containing payment-gateway in its name
meta/
├── domains/
│ ├── payments.yaml
│ └── platform.yaml
├── teams/
│ ├── payments-team.yaml
│ └── platform-team.yaml
├── services/
│ ├── payment-gateway.yaml
│ ├── payment-processor.yaml
│ └── fraud-detection.yaml
├── apis/
│ └── payments-api.yaml
└── environments/
├── production.yaml
└── staging.yaml

Or consolidate into fewer files:

meta/
├── payments-domain.yaml # All payments entities
├── platform-domain.yaml # All platform entities
└── environments.yaml # All environments

The Meta molecule format is designed to be compatible with Backstage catalog files. If you have existing Backstage catalog files, they can be adapted with minimal changes:

  1. Change apiVersion from backstage.io/v1alpha1 to meta.sixdegree.ai/v1

  2. Entity kinds are the same (Service, Component, API, etc.)

  3. Most spec fields are preserved as-is

  4. Use consistent naming: Service names should match repository names, deployment names, and Slack channel names for automatic linking to work

  5. Define ownership: Always specify owner to establish team responsibility

  6. Document dependencies: Use dependsOn to capture service relationships

  7. Tag appropriately: Use tags for filtering and grouping (e.g., critical, pci, public)

  8. Add links: Include runbooks, documentation, and dashboards in metadata.links