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
apiVersionstringYes—Must be akili/v1API version identifier
kindstringYes—Must be DataProductManifest kind
metadata.namestringYes—Pattern: [a-z0-9][a-z0-9-]*[a-z0-9]. Max 63 chars (K8s label safe).Unique product name within tenant and domain
metadata.domainstringYes—Pattern: [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.versionstringYes—Semver format: MAJOR.MINOR.PATCHProduct version. Breaking output changes require major bump.
metadata.ownerstringYes—Must match a registered team in the platformTeam identifier for ownership
metadata.descriptionstringYes—Min 10 charactersHuman-readable product description
metadata.tagsstring[]No[]Lowercase, alphanumeric + hyphensDiscovery tags for search and filtering
metadata.classificationenumYes—One of: public, internal, confidential, restrictedAccess control classification level
metadata.contactsobject[]No[]Each: name (required), role (optional), email (optional)Contact information for the product
versioningobjectNo—See 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_guidestringNo—Markdown-formattedMigration instructions for consumers upgrading versions
retentionobjectNo—See sub-fields belowData retention policy
retention.periodstringNo—Duration string (e.g., "365d", "7y")How long data is retained
retention.basisenumNo—One of: created_at, event_time, ingested_atWhich timestamp drives retention
retention.review_datestringNo—ISO 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).