Skip to content

Data Catalog, Lineage, and Quality Operations

Last updated: 2026-05-24

Why It Matters

Fleet data becomes useful only when engineers can answer three questions quickly: what does this dataset contain, where did it come from, and is it fit for the model or safety decision being made? A catalog without lineage is a search index. Lineage without quality checks is an audit trail for bad data. Quality checks without ownership decay into dashboards nobody trusts.

This page covers operational controls for curated fleet data products: raw logs, processed events, labels, features, replay sets, training splits, and evaluation datasets. Use it with ../mlops/mlops-scale-research-scope.md and ../mlops/mlops-reference-architectures-by-scale.md when deciding how much catalog, lineage, data quality, lakehouse, or data-versioning infrastructure is justified at each MLOps scale. When a data product can affect release, the catalog entry should also point to the split-firewall pattern in ../mlops/dataset-split-leakage-controls-by-scale.md and the digest-bound attestation pattern in ../mlops/secure-artifact-attestation-profile.md.

Operating Model

  1. Define data products with named owners: raw bag archive, normalized telemetry, object labels, scenario clips, model training tables, and evaluation tables.
  2. Store large analytical datasets in snapshot-capable tables. Use Apache Iceberg snapshots, schema evolution, partition evolution, and retention policies to preserve reproducibility without freezing all storage forever.
  3. Emit lineage events from each pipeline step. OpenLineage concepts of runs, jobs, datasets, and facets map cleanly to bag extraction, decoding, label import, feature generation, and training-set assembly.
  4. Attach quality rules to the catalog entry, not only to the pipeline code. Rules should cover completeness, timestamp monotonicity, frame drops, calibration presence, label validity, class balance, split integrity, leakage reports, schema compatibility, and privacy filters.
  5. Promote data by state: raw, decoded, validated, curated, approved_for_training, approved_for_safety_evidence, deprecated.
  6. Review quality exceptions weekly with data owners and release blockers daily during model-release windows.

MLOps Scale Ladder for Data Products

The data catalog should mature with the MLOps scale. The goal is not to catalog everything immediately; the goal is to make every dataset that can influence a release reproducible, governed, and reviewable.

MLOps scaleCatalog requirementLineage requirementQuality requirementFeature/embedding requirement
S0 notebook researchManifest next to filesSource path and collection dateManual sample reviewNone
S1 repeatable prototypeSnapshot ID and fixed splitPreprocess script, config, and output digestValidation script and basic schema checksOptional offline cache
S2 production productCurated dataset entry with owner and approved useRaw -> decoded -> labels -> train/eval materialization chainScheduled rules, failure samples, waiver ownerOffline features only if reused by multiple models
S3 fleet and multi-siteSite/ODD partitions, access class, retention tierFleet trigger, site, vehicle, sensor, calibration, map, and label lineageSlice coverage, class balance, drift, privacy/redaction QAEmbedding store for mining and retrieval with snapshot IDs
S4 regulated safety-criticalEvidence-locked catalog states and legal holdFull graph from release artifact back to raw logs and reviewer decisionsQuality report tied to safety-case claim and expiryImmutable feature/embedding snapshots only
S5 platform scaleOrganization-wide catalog with policy-as-codeAutomated lineage from ingestion, labels, training, replay, and servingQuality SLOs, owner dashboards, exception workflowMulti-tenant feature/embedding service with ACLs and quotas

Architecture Options by Scale

Do not confuse the layers. A table format is not a catalog. A catalog is not lineage. Lineage is not a quality gate. A quality gate is not a release approval. Mature MLOps usually combines small, explicit contracts with a few shared services instead of one "data platform" that silently owns every decision.

Architecture layerGood fitScale triggerProsCons / controls
File manifest plus DVC/object snapshotSmall datasets, baselines, model checkpoints, fixed splitsS0-S1, narrow S2 artifactsCheap, reviewable, works offline, easy to commit next to runsWeak discovery; needs naming discipline and immutable remote storage
Lakehouse table formatLarge training/eval tables, decoded telemetry, label exports, feature materializationsS2 when datasets exceed simple manifests or need queryable snapshotsSnapshot/time-travel semantics, schema/partition evolution, scalable analyticsRetention/VACUUM policies can destroy evidence unless release snapshots are pinned
Data catalog / metadata graphMany data products, owners, access tiers, schemas, and consumersS2-S3, mandatory for S4/S5 release evidenceDiscovery, ownership, glossary/taxonomy, impact analysis, governance workflowA catalog that indexes mutable paths can create false confidence; require snapshot IDs and allowed-use state
OpenLineage-style event streamCross-pipeline lineage across Airflow, Spark, dbt, notebooks, training, labels, replayS2-S5 whenever root cause crosses toolsStandard job/run/dataset model and facets; good bridge between pipelines and catalogsNeeds producer instrumentation and stable dataset naming
Quality runnerSchema, completeness, bounds, drift, duplicate, label, and slice checksS1 for baselines; S2+ for release-affecting dataMakes quality failures reproducible and machine-readableRule sprawl if checks are not tied to owners, severity, and promotion state
Data lake version-control layerBranching, isolated backfills, rollback, experiment branches over object storageS2-S4 when backfills or cleaning jobs need atomic review before mergeGit-like review model for data changes and reproducible commitsAnother control plane to operate; do not add until backfill/review pain is real
Cloud data catalog / governance suiteEnterprise IAM, lineage, policy, and discovery across teamsS3-S5 or strict data residency/compliance needsIntegrated access control and managed operationsVendor metadata model may not express vehicle, map, calibration, labeler, and release-state semantics without custom fields

For autonomy, the strongest practical pattern is: object-store raw logs with immutable registration, lakehouse snapshots for decoded/curated products, catalog entries for ownership and allowed use, OpenLineage events for transformations, data-quality reports for promotion, and registry/release packets for any artifact that can change model, map, label, replay, or safety evidence.

Data Product Contract

A data product is not just a table. It is a reusable, owned, governed artifact with a declared consumer and allowed use. At S0 this can be a Markdown manifest; at S3-S5 it should be a cataloged object with API-visible fields.

FieldRequirementExample in autonomy
data_product_idStable ID, version, and human-readable nameapron-stand-a-decoded-lidar-2026q2
product_typeRaw log, decoded stream, clip set, label batch, feature table, embedding index, replay pack, split, evaluation set, semantic-map exportsemantic_map_training_export
producer and ownerTeam, service, and accountable human or roleData platform owner plus map owner
intended_consumersTraining jobs, evaluators, labelers, replay workers, dashboards, safety case, incident responseMap segmentation training and release replay
source_scopeRaw logs, vehicles, sensors, calibration packages, maps, telemetry schema, site/route/ODD cellVehicle IDs, LiDAR serials, map version, terminal frontage zone
schema_contractField names, types, units, coordinate frames, timing semantics, nullable fields, taxonomy versionPoint coordinates in map frame, class ID, release-state label
snapshot_identityDVC hash, object manifest digest, Iceberg/Delta snapshot/version, lakeFS commit, or catalog snapshot tagIceberg snapshot plus semantic-map manifest digest
partition_policySite, date, route, map tile, session, vehicle, privacy tier, and retention partitioningSite/date/map-tile partitions with local holdout flag
quality_policyRule suite ID, severity, sample policy, slice requirements, waiver owner, expiryMissing calibration is blocker; low intensity coverage is warning
allowed_useResearch, baseline, training, release eval, safety evidence, replay, monitoring, restricted, deprecatedapproved_for_release_eval
retention_and_deletionEvidence hold, legal hold, privacy deletion path, purge propagationRelease snapshot retained for safety-case window
lineage_entrypointParent datasets, pipeline run IDs, code/config digests, labeler/reviewer recordsRaw bag -> decoded points -> cleaned map -> pseudo-label export
change_policyWho can promote, deprecate, backfill, delete, or waiveData owner plus release owner for S2+
service_levelFreshness, quality-report latency, restore objective, incident lane if release-criticalS3 daily quality report; S4 restore proof before release

The contract should travel with the data product. A training run, evaluation report, registry record, or safety-case claim should be able to cite data_product_id, snapshot_identity, allowed_use, quality_policy, and lineage_entrypoint without reading pipeline code.

Lineage Event Design

OpenLineage's run/job/dataset/facet model maps well to autonomy if the dataset naming convention is stable. Treat each materialization boundary as a lineage event, not every tiny function call.

Lineage boundaryJob/run eventInput datasetsOutput datasetsRequired facets or custom fields
Raw upload registrationregister_bag or register_mcapVehicle upload objectRaw log data productVehicle/site/session, telemetry schema, sensor kit, access class, checksum
Decode and normalizationdecode_rosbag_to_tablesRaw logDecoded topic tables, synchronized framesCode commit, container digest, message counts, timestamp health, dropped-frame counts
Calibration/map joinjoin_pose_calibration_mapDecoded frames, calibration package, map packageMap-frame point/image productsExtrinsic/intrinsic IDs, map version, pose graph/source-map ID, projection QA
Label import or auto-labelimport_label_batch or run_labelerCandidate clips/maps/images, labeler/prompt/evaluator artifactsLabel batch or semantic layerTaxonomy, reviewer workflow, accepted/rejected counts, allowed use
Quality validationvalidate_data_productCandidate data productQuality report and promotion decisionRule suite, severity, failing rows/clips/tiles, waiver owner, expiry
Split materializationmaterialize_splitCurated dataset, labels, feature/index snapshotTrain/validation/test/replay split productsSplit ID, grouping keys, leakage report, allowed uses
Training exportbuild_training_exportSplit data, features, labels, mapsModel-ready table or tensor archiveSnapshot/digest, preprocessing config, class order, release-state mask
Replay/evidence exportbuild_replay_packClips, maps, expected labels, runtime configReplay package and evidence bundleScenario IDs, flake status, runtime contract, safety-case link

For S3-S5, lineage events should be queryable in both directions: "what raw data produced this release?" and "which models, maps, labels, features, replay packs, and safety claims consumed this invalidated source?" The second query is the one that decides incident blast radius.

Quality Gate Matrix

Quality rules should be attached to promotion states. The same failure can be a warning for research and a blocker for release evidence.

Data layerTypical checksS0-S1 actionS2-S3 actionS4-S5 action
Raw logsChecksum, metadata completeness, sensor/topic presence, upload integrityRecord limitationBlock curation if required topics are missingEvidence hold cannot start until raw registration is complete
Decoded streamsSchema, timestamp monotonicity, frame drops, calibration presence, units, coordinate framesManual reviewBlock training export on missing calibration/time healthSafety evidence requires signed quality report and retained failure samples
LabelsTaxonomy compatibility, reviewer agreement, label geometry, class balance, allowed-use stateMark candidate onlyOnly QA-passed labels enter production trainingHazard labels require expert review and audit trail
Semantic map exportsSource-map QA, release-state masks, tile coverage, dynamic residual rate, static-transient quarantineResearch-only candidateBlock map-derived training if source-map or release-state evidence is missingPublication/safety evidence requires immutable manifest and map-hygiene report
Training/eval tablesSplit ID, leakage report, duplicate/event overlap, feature-fit policy, privacy/access classBaseline warningCandidate release blocker if split or leakage is incompleteEvidence-locked holdout access and retention policy
Feature tablesPoint-in-time joins, freshness, null/bounds, online/offline parity, backfill stateRebuild noteBlock consumers during suspect backfillImmutable feature snapshot for safety evidence
Embedding/vector indicesCorpus snapshot, embedding model, index build, recall/latency, deletion propagationLocal exploration onlyBlock active-learning/replay use when recall or deletion state is unknownRetrieval supports evidence only with frozen corpus and trace
Replay packsScenario IDs, expected labels, runtime contract, flake rate, duplicate lineageSmoke onlyRelease gate only if deterministic and non-overlappingSafety-case replay needs retention, waiver, and reportability linkage

Data Product SLOs and Error Budgets

Once a data product can block release or incident response, it needs an operating target. Treat the SLO as a contract between producers and consumers, not only a dashboard.

SLOApplies whenExample targetRelease meaning
FreshnessMonitoring, active learning, drift, incident triageNew trigger clips cataloged within 24 hours at S3Stale data can delay retraining but should not silently retrain
Quality-report latencyTraining/eval/replay exportsQuality report produced in the same workflow runMissing report blocks promotion
Lineage completenessRelease-affecting products100% parent/run/dataset coverage for promoted artifactsIncomplete lineage blocks S2+ release
Restore objectiveEvidence and catalog metadataCatalog and quality reports restored within platform SLOUnrestorable metadata blocks S4 evidence claims
Deletion propagationPrivacy, customer/site offboarding, restricted dataAll derived products marked deleted/restricted within policy windowDerived artifacts remain suspect until propagation is proven
Blast-radius query timeIncidents and invalidationAffected consumers identified within incident lane targetSlow impact analysis extends containment

Error budgets should be strictest for evidence-bearing datasets, not for exploratory scratch data. A missed daily quality report on research clips is a nuisance; a missing release-eval lineage graph is a release blocker.

Promotion States

Use explicit states so downstream consumers know what a dataset may do:

StateAllowed useRequired next gate
raw_registeredForensics, replay extraction, controlled inspectionDecode and schema validation
decoded_validatedScenario mining, labeling intakeSensor/time/calibration quality report
labeled_candidateReviewer workflow, active learningLabel QA and taxonomy compatibility
curated_trainingModel training experimentsSplit integrity, leakage check, privacy/access review
approved_for_release_evalRelease metrics and regression gatesFrozen snapshot, quality report, owner approval
approved_for_safety_evidenceSafety-case evidence and auditEvidence lock, retention hold, waiver expiry
deprecated_or_invalidatedHistorical reference onlyDownstream invalidation and consumer notification

Deletion, taxonomy changes, source-map corrections, and calibration fixes must propagate through the same states. If a source dataset is invalidated, derived clips, labels, features, embeddings, splits, replay packages, and model cards need either rebuild evidence or a documented containment waiver.

For map-derived pseudo-labels, use ../mlops/map-derived-pseudo-label-invalidation-protocol.md as the required propagation pattern. The catalog entry should be able to answer which source map, semantic layer, release-state mask, calibration package, projection code, split ID, labeler/prompt artifact, model version, and release packet consumed the affected labels before a batch returns from suspect or quarantined to active.

For reusable features and embeddings, use ../mlops/feature-embedding-store-ops-by-scale.md as the store-selection and evidence pattern. Catalog entries should record feature definition IDs, event-time semantics, materialization snapshots, online/offline parity checks, embedding model, corpus snapshot, index build ID, metadata filters, deletion state, and golden-query recall before derived representations can support training, replay, active learning, or safety evidence.

For dataset splits and holdouts, use ../mlops/dataset-split-leakage-controls-by-scale.md as the split manifest and leakage-report pattern. Catalog entries should record the split ID, assignment unit, grouping keys, temporal cutoff, exclusion windows, held-out sites/routes/vehicles/map tiles, labeler or prompt scope, synthetic source assets, federated client scope, and leakage report before a data product is promoted to training, release evaluation, replay, or safety evidence.

Evidence Artifacts

ArtifactMinimum contentsOwner
Catalog entryDataset purpose, schema, ODD scope, owner, retention, access classData platform
Lineage graphSource datasets, pipeline run IDs, code version, parameters, outputsData platform
Iceberg snapshot recordTable snapshot ID, schema ID, partition spec ID, branch/tag if usedData engineer
Quality reportRule results, sample counts, failure rows, waived failures, trendData quality owner
Data contractRequired fields, units, coordinate frames, timing assumptions, valid rangesProducer and consumer
Label-schema recordTaxonomy, label versions, ontology references, compatibility notesLabel operations
Semantic-map catalog recordSemantic layer ID, manifest ID, compatibility hash, source map snapshot, map tile IDs, taxonomy ID/hash, schema URL/version, QA/evidence IDs, retention holdMapping + data platform
Data-product attestationDataset/label/replay/feature manifest digest, producer identity, lineage predicate, quality policy result, allowed-use scopeData platform
Approval decisionAccepted use, restrictions, expiry, approvers, downstream consumersData steward

Acceptance Checks

  • Every training and evaluation dataset resolves to immutable source snapshots.
  • Every promoted data product has a contract naming ID, owner, consumers, schema, snapshot identity, quality policy, allowed use, retention/deletion policy, lineage entrypoint, and change authority.
  • Every promoted training, evaluation, replay, local holdout, safety holdout, feature, embedding, or pseudo-label dataset resolves to a split manifest and leakage report appropriate to its MLOps scale.
  • Every derived dataset has machine-readable lineage back to raw logs, labels, and processing code.
  • Every release-affecting dataset, label batch, feature snapshot, embedding index, or replay pack has an immutable manifest digest and attestation link.
  • Quality checks run before promotion and store both pass/fail status and failure samples.
  • Quality rules have severity, owner, action, waiver scope, expiry, and release interpretation; dashboards without action do not count as gates.
  • Schema changes are reviewed for downstream model, feature, replay, and safety evidence impact.
  • Catalog entries identify the data owner, business purpose, access restrictions, retention class, and approved uses.
  • Data used in release evidence is marked approved_for_safety_evidence, not only approved_for_training.
  • Semantic-map datasets used for replay, training, or safety evidence resolve manifest_id, compatibility_hash, semantic_layer_id, taxonomy_id, map tile IDs, telemetry schema URL/version, and evidence IDs.
  • Lineage events exist at materialization boundaries for fleet ingest, scenario extraction, semantic-label joins, replay package creation, and safety-evidence export.
  • Dataset/schema promotion fails when telemetry schema URL/version is missing or incompatible with the consuming dashboard, replay worker, or release gate.
  • Waivers have an owner, expiry date, scope, and measurable containment rule.

Failure Modes

Failure modeConsequenceControl
Dataset name reused for mutable contentsModel release cannot be reproducedRequire snapshot IDs in manifests
Catalog indexes mutable paths but not snapshotsSearch results look governed while release inputs still driftRequire snapshot identity, manifest digest, and allowed-use state for promoted data products
Data product lacks digest-bound attestationRegistry or release gate cannot prove the dataset evaluated is the dataset deployed or reusedAttach manifest digest, lineage predicate, quality policy result, and allowed-use scope
Pipeline lineage stops at a staging tableRoot cause analysis cannot trace bad labels or corrupted logsEmit lineage at every materialization boundary
Quality tool is detached from promotion statesTeams see failures but still consume the dataAttach rule severity and promotion blockers to catalog states
Data backfill merges without reviewTraining, eval, replay, and safety evidence change under old IDsUse branch/review/merge or new snapshot IDs plus downstream impact query
Split manifest is missing or incompleteTraining data, local holdout, replay, feature corpus, or safety evidence may overlap without detectionRequire split IDs, grouping keys, allowed use, and leakage reports before promotion
Quality checks live only in notebooksFailures are not enforced in productionMove checks into scheduled pipeline gates
Schema evolution breaks consumersTraining jobs silently drop or misread fieldsData contract review before schema promotion
Semantic-map context stripped during joinsReplay or training data points to labels from the wrong map/taxonomyRequire manifest, compatibility hash, semantic layer, taxonomy, and tile IDs in catalog records
Catalog has owner gapsExceptions are never resolvedBlock promotion for ownerless data products
Quality rules ignore ODD slicesDataset passes globally but misses airport-specific defectsRequire zone, weather, lighting, sensor, and vehicle slices
Retention deletes evidence inputsSafety case cannot be reconstructedLock release evidence snapshots under retention hold
  • 50-cloud-fleet/data-platform/fleet-data-pipeline.md
  • 50-cloud-fleet/data-platform/perception-slam-fleet-data-contract.md
  • 50-cloud-fleet/data-platform/data-engine-from-bags.md
  • 50-cloud-fleet/mlops/data-flywheel-airside.md
  • 50-cloud-fleet/mlops/dataset-split-leakage-controls-by-scale.md
  • 50-cloud-fleet/mlops/feature-embedding-store-ops-by-scale.md
  • 50-cloud-fleet/mlops/secure-artifact-attestation-profile.md
  • 50-cloud-fleet/data-governance/fleet-data-privacy-governance.md
  • 60-safety-validation/safety-case/safety-case-evidence-traceability.md
  • 60-safety-validation/verification-validation/perception-slam-statistical-validity-protocol.md

Sources

Public research notes collected from public sources.