| Placement resolution |
Go resolver with a bounded in-process cache |
This design |
Direct catalogue queries from the file service |
One dependency (vtgate); staleness made safe by the release hold |
ADR-01 |
| Stale-safe reads |
24-hour release hold on every movement |
This design |
Primary-only reads; cache invalidation |
Lets caches and replicas serve resolution without a data-loss path |
ADR-03 |
| Placement catalogue |
Vitess on MySQL 8.4, multicolumn vindex |
Open source |
TiDB; FoundationDB |
Tenant sharding, cheap point reads, online resharding, CNCF governance |
ADR-02 |
| Disk tiers |
Ceph RGW, separate clusters per tier, multisite |
Open source |
MinIO; SeaweedFS |
S3, STS, SSE-KMS and notifications at exabyte scale, with open governance |
ADR-07 |
| Tier ladder |
CUE in Git, signed with cosign |
Open source |
Hard-coded tier logic |
Prices and minimum durations as reviewed, versioned data |
ADR-06 |
| Small-object storage |
Platform pack format, one tenant and key per pack |
This design |
tar; SeaweedFS volumes |
Per-entry identity and checksum; readable without the platform |
ADR-08 |
| Archive tier |
EOS and CERN Tape Archive on LTO-10 |
Open source |
LTFS with own scheduler; dCache |
Retrieval queues, drive sharing and repack already solved at scale |
ADR-10 |
| Access telemetry |
Apache Kafka with KRaft |
Open source |
Redpanda; NATS JetStream |
Replayable partitioned log shared with CDC and decisions |
ADR-13 |
| Aggregates and analytical replica |
ClickHouse |
Open source |
Apache Druid; Trino on Iceberg |
Rollups at ingest and fast scans over billions of rows |
ADR-14 |
| Catalogue change data |
Vitess VStream into Kafka |
Open source |
Nightly snapshot to Parquet |
Shard-aware and minutes behind, with no load on primaries |
ADR-14 |
| Classification and break-even |
ClickHouse SQL and a Go evaluator |
This design |
Spark batch |
No extra cluster; the arithmetic lives in one auditable place |
ADR-19 |
| Predictive classifier (Phase 2) |
LightGBM batch scoring in Python |
Open source |
XGBoost; survival models |
Tabular features, fast scoring, importances an auditor can read |
ADR-15 |
| Freshness gate and dead-man |
Canary events, Prometheus, self-hosted Healthchecks |
Open source |
Alertmanager watchdog only |
Brake and alarm read one signal; the watcher lives outside the estate |
ADR-18 |
| Policy rollout and recall jobs |
Temporal on PostgreSQL |
Open source |
Argo Workflows; job tables |
Durable timers, signals and multi-day workflows |
ADR-22 |
| Movers and budget leases |
Go workers and a Go budget authority |
This design |
rclone; RGW sync modules |
Conditional commits and money-denominated limits need catalogue-aware code |
ADR-24 |
| Release and cleanup |
Go release gate under a separate identity |
This design |
Deletes inside movers |
The only delete permission, conditioned on committed state |
ADR-23 |
| Holds, pins, budgets |
PostgreSQL 17 with Patroni |
Open source |
Rows in Vitess |
Small relational data with approval workflows |
ADR-30 |
| Decision and movement records |
Parquet on Ceph with S3 Object Lock |
Open source |
Kafka tiered storage |
Immutable, cheap, and readable by any engine for three years |
ADR-19 |
| Workload identity and storage credentials |
SPIRE JWT-SVIDs exchanged at RGW STS |
Open source |
Static RGW keys rotated by OpenBao |
Attested, 15-minute, one-tier credentials |
ADR-29 |
| Encryption keys |
OpenBao transit for RGW SSE-KMS |
Open source |
HashiCorp Vault |
Per-tenant keys under Linux Foundation governance |
ADR-29 |
| Human identity and approvals |
Keycloak with WebAuthn |
Open source |
Dex; Authentik |
Existing OIDC provider with strong second factors |
ADR-30 |
| Drift detection |
RGW bucket notifications and a rolling scan |
Open source |
Daily full scans |
Minutes for common changes, 14 days for everything |
ADR-31 |
| Compute platform |
Kubernetes (RKE2) with Cilium, etcd witness |
Open source |
OKD; kubeadm |
Separate serving and tiering clusters with room-aware scheduling |
ADR-32 |