OXYGENHUB

Strata design: the data sovereignty case (refs #63) 82504d09aefe

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-10-03 10:54 UTC
Signature
✔ signed by Andy McCall
Hash
82504d09aefe20a3fb11283182d573d87a0ae926bb91d88bd2e8e77d08388636
Depends on
a70dce536476
Depended on by
ac4af91530fc
In bookmarks
agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
In tags
v0.10.0 v0.11.0 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
Edits
1 atom, 0 tree operations, 1 file

Browse the tree at this change

modified docs/stores.md +31 −0
…
27 unchanged lines
28 28
Performance is "good enough" for one engineer today. This work is about
29 29
where a repository can live, not about speed.
30 30
31 +
## 1a. The driving case: data sovereignty
32 +
33 +
UK Government work requires data to be kept on UK shores. On GitLab SaaS
34 +
that meant waiting for GitLab to build UK data centres, and it was still
35 +
unclear where runners kept their data, so the runners were self-hosted.
36 +
37 +
Strata answers that for repositories: they live in the customer's own
38 +
bucket, in their region, encrypted with their own KMS key. A sovereign
39 +
forge needs the same for everything else:
40 +
41 +
- **Flow artifacts, logs and caches** in the customer's bucket. Today
42 +
  artifacts are kept in the hub's store and logs in its database. This is
43 +
  the next gap after Strata.
44 +
- **Forge records** (issues, proposals, reviews) in a database in the
45 +
  customer's region.
46 +
- **Keys held by the customer:** KMS for storage, developers' own keys
47 +
  for signing.
48 +
49 +
The model to aim for is **control plane anywhere, data plane in the
50 +
customer's account**:
51 +
- **Content is never trusted to the operator.** It is hash-verified and
52 +
  signed, so it stays tamper-evident whoever runs the hub.
53 +
- **Crypto-shredding.** Revoking the customer's KMS key makes the data
54 +
  unreadable everywhere, including backups. That is a clean exit and
55 +
  deletion guarantee.
56 +
- **The customer audits the vendor.** Every read the hub makes appears in
57 +
  the customer's own CloudTrail or GCS audit logs.
58 +
- **Rendering stays in-region.** Rendering code for the browser needs
59 +
  plaintext, so a store-and-render node runs inside the customer's
60 +
  account, and only orchestration and the UI shell run outside it.
61 +
31 62
## 2. What users see
32 63
33 64
Storage must be transparent: a bucket behaves like any other remote, with
…
163 unchanged lines