Kill Report2 min read

63 GB of Data That Never Made It to Production

A sync-drift audit revealed 1,117 files (~63 GB) existing only locally, never uploaded to production. 32 common database tables had differing row counts with local exceeding production by 12.6M rows. A DigitalOcean key-naming bug duplicated source prefixes in every object path. Zero data corruption — but massive invisible drift.

LG
Lattice Graph Research

63 GB of Data That Never Made It to Production

The Audit

On April 18, 2026, we ran a comprehensive sync-drift audit comparing our local data warehouse against what was deployed to DigitalOcean production. The findings: massive invisible drift — not corruption, not data loss, but a quiet divergence where production was running on a fraction of the data we thought we'd deployed.

Object Storage Drift

BucketStatusDetail
latticegraph-derivedIn syncByte-identical
latticegraph-candidateIn syncByte-identical
latticegraph-rawMajor drift1,117 files / ~63 GB exist only locally

The 1,117 missing files break down by source:

SourceFiles Missing from Production
OCP (Open Catalyst Project)885 files
OMat24100 files
LeMat-Traj91 files
OMol2520 files
Other sources21 files

Database Drift

  • 16 production-only schemas (15 empty shells created by migrations but never populated)
  • 12 local-only tables — data that was built locally and never pushed
  • 19 production-only tables — tables created by production migrations that local hadn't run
  • 32 common tables with differing row counts — local had +12.6M rows overall

No data corruption was found. Zero content mismatches on shared files and tables. The drift was entirely about coverage — production had less data, not wrong data.

The DigitalOcean Key-Naming Bug

Every object in the DigitalOcean latticegraph-raw Spaces bucket had its source prefix duplicated. Instead of alexandria/file.parquet, the key was alexandria/alexandria/file.parquet. This doubled-prefix bug affected every uploaded file and meant that sync scripts comparing local paths against DO paths would see them as different objects — explaining part of the 1,117-file gap.

License Risk Discovery

The audit also surfaced a license-risk finding: approximately 7.5M rows of data from sources with unvetted licenses were present in the DigitalOcean production Postgres database. The highest urgency: GNoME data (CC-BY-NC-4.0) — non-commercial use only — was loaded into a production database backing a commercial API.

Why This Matters

Sync drift is invisible by default. The application runs, the API returns results, and the dashboard looks fine. But the results are computed against a subset of the data, and decisions made from those results carry hidden confidence bounds that nobody knows about.

  • Missing 885 OCP files means catalyst screening runs against incomplete adsorption data.
  • Missing 12.6M database rows means cross-source agreement scores are computed from fewer sources than expected.
  • A path-prefix bug means sync tooling silently passes when it should fail.

The fix: automated sync-drift checks as part of the deployment pipeline, comparing row counts, file counts, and path structures before marking a deployment as healthy.

See what survived our screening

Lattice Graph computationally validates materials before you commit lab time. Explore the candidates that passed stability, cost, and cycle-life gates.

Explore the Platform