Skip to content
GitLab

product.yaml

Declares who owns the data product, what it is called, its domain, and its data classification level. This file changes least frequently.

apiVersion: akili/v1
kind: DataProduct
metadata:
name: outlet-daily-sales
domain: retail
version: 1.0.0
owner: retail-analytics
description: >
Aggregates raw POS transactions by outlet and day.
Feeds executive dashboards and territory planning.
tags:
- sales
- daily
- fmcg
classification: internal
contacts:
- name: Jane Mwangi
role: product-owner
email: jane.mwangi@acme.co.ke
FieldTypeRequiredDefaultValidationDescription
apiVersionstringYesMust be akili/v1API version identifier
kindstringYesMust be DataProductManifest kind
metadata.namestringYesPattern: [a-z0-9][a-z0-9-]*[a-z0-9]. Max 63 chars (K8s label safe).Unique product name within tenant and domain
metadata.domainstringYesPattern: [a-z][a-z0-9-]{0,62}. Starts with letter. 1-63 chars.DDD bounded context. Auto-creates on first use. Immutable after creation.
metadata.versionstringYesSemver format: MAJOR.MINOR.PATCHProduct version. Breaking output changes require major bump.
metadata.ownerstringYesMust match a registered team in the platformTeam identifier for ownership
metadata.descriptionstringYesMin 10 charactersHuman-readable product description
metadata.tagsstring[]No[]Lowercase, alphanumeric + hyphensDiscovery tags for search and filtering
metadata.classificationenumYesOne of: public, internal, confidential, restrictedAccess control classification level
metadata.contactsobject[]No[]Each: name (required), role (optional), email (optional)Contact information for the product
versioningobjectNoSee sub-fields belowVersion lifecycle configuration
versioning.deprecation_windowstringNo"90d"Duration string (e.g., "30d", "180d"). Max "180d".How long previous major version remains active
versioning.migration_guidestringNoMarkdown-formattedMigration instructions for consumers upgrading versions
retentionobjectNoSee sub-fields belowData retention policy
retention.periodstringNoDuration string (e.g., "365d", "7y")How long data is retained
retention.basisenumNoOne of: created_at, event_time, ingested_atWhich timestamp drives retention
retention.review_datestringNoISO 8601 dateNext scheduled retention review

Classification drives access control across all enforcement points (API gateway, control plane, PostgreSQL RLS, serving service, Superset RLS).

LevelWho Can AccessPropagation Rule
publicAny authenticated user in the tenant
internalAny team member in the tenant
confidentialExplicit team grant requiredOutput >= max(input classifications)
restrictedNamed individuals only, audit loggedOutput >= max(input classifications)

The propagation rule is enforced at deploy time: if any input is confidential, the output cannot be public or internal. This prevents data laundering through aggregation.

  • Domain auto-creates on first use (no need to register domains separately).
  • Products cannot move between domains once created. Domain is immutable.
  • Product names are unique within a domain, not globally. Two domains can each have a product named raw-orders.
  • The domain prefix _platform is reserved for platform-internal canary products (XVAL-030).