| Lock log (consensus store) |
etcd 3.6 line, dedicated clusters |
Open source |
Apache ZooKeeper; Consul; custom Raft on hashicorp/raft |
Leases revoked by committed entry, multi-key transactions, watch from revision, and the most heavily exercised Raft implementation in production |
ADR-05 |
| Fencing token |
(epoch, etcd revision) packed in int64 |
This design |
Per-key counter key; etcd lease ID |
Minted by the grant commit itself, never reused, no extra state per key |
ADR-02 |
| Restore safety |
Epoch record bound to etcd cluster ID |
This design |
Runbook step; wall-clock epoch |
A restore always changes the cluster ID, so the seal cannot be skipped |
ADR-03 |
| Cluster topology |
Coord tier (5) + entity shards (3 each), per region |
This design |
One large cluster; stretched multi-region quorum |
Isolates leader-election locks from entity churn; writes scale by shards, not members |
ADR-07 |
| Key homing |
Rendezvous hashing with versioned shard map |
This design |
Consistent-hash ring; manual range assignment |
Minimal key movement on shard add; each move fenced by epoch advance |
ADR-09 |
| Session and renewal |
One etcd lease per identity and TTL |
Open source |
One etcd lease per lock; application-level heartbeat keys |
Renewal cost per session, batching by construction |
ADR-10 |
| Lock arbiter |
Go service using etcd clientv3, gRPC |
This design |
Thick client straight to etcd; Java service |
Same client library etcd's own robustness tests use; small static binaries; one place for class rules and quotas |
ADR-18 |
| Client protocol |
gRPC + protobuf, buf breaking checks |
Open source |
REST/JSON; raw etcd API |
Streaming keepalive and watch on one connection; contract enforced in CI |
ADR-18 |
| Fan-in tier |
Envoy, ring-hash on lock key |
Open source |
HAProxy; NGINX; client-side load balancing |
gRPC-native, SPIFFE-aware mTLS, per-identity local rate limits, key-affine routing for queues |
ADR-18 |
| Workload identity |
SPIRE issuing X.509 SVIDs |
Open source |
cert-manager with a private CA; Kubernetes service account tokens |
Attested identity, one-hour certificates, identity survives outside Kubernetes |
ADR-19 |
| Operator identity |
Keycloak OIDC with MFA |
Open source |
Directory groups via LDAP bind; Dex |
Roles, MFA and a second-subject check without building an identity system |
ADR-20 |
| Authorisation |
Prefix grants in the class registry, evaluated in-process |
This design |
Open Policy Agent; SpiceDB |
A longest-prefix match does not need a policy engine on a 40 ms path |
ADR-19 |
| Wait queue |
In-memory FIFO on key-affine arbiter; durable /q keys per class |
This design |
Durable queue for all; client polling |
Free fairness for most classes, paid fairness where declared |
ADR-14 |
| Resource fence |
Store's own conditional write; reference for PostgreSQL and S3 conditional put |
This design |
Token-validation call on every write |
Atomic with the write, no extra hop, no new dependency |
ADR-16 |
| Audit capture |
Revision tailer on etcd watch |
This design |
Arbiter emits events to Kafka |
Captures expiries; no dual write; idempotent replay |
ADR-21 |
| Audit store and archive |
ClickHouse; MinIO with object lock |
Open source |
PostgreSQL; OpenSearch; Kafka tiered storage |
Columnar scans over hundreds of millions of events; retention enforced by the store |
ADR-21 |
| Metrics, traces, logs |
Prometheus, Grafana, Alertmanager, OTel Collector, Tempo, Loki |
Open source |
VictoriaMetrics; Jaeger; OpenSearch |
Already the platform standard; bounded label sets; redaction processor in the collector |
ADR-22 |
| Release gate |
Chaos Mesh + Porcupine linearizability checker |
Open source |
Jepsen; unit and integration tests only |
Go-native, runs in the cluster, checks real histories on every change |
ADR-23 |
| Configuration delivery |
LockClass CRDs in Gitea, synced by Argo CD |
Open source |
Admin API writes to etcd; ConfigMaps |
Reviewed by the resource owner; history, diff and rollback for free |
ADR-24 |
| Build and supply chain |
Gitea Actions, cosign, Harbor |
Open source |
Jenkins; GitLab CE |
Signed images, admission-checked, on-premises end to end |
ADR-23 |
| Disk encryption |
LUKS with Clevis and Tang |
Open source |
Self-encrypting drives; manual passphrase |
Unattended unlock inside the network, unreadable disk outside it |
ADR-06 |