ADR-04: The bucket modelΒΆ
ContextΒΆ
TINO needed a way to organise documents. The options ranged from a flat file system shared across all users, to a fully hierarchical folder tree, to isolated per-project repositories.
DecisionΒΆ
Documents are organised into buckets β named, isolated workspaces. Each bucket is an independent git repository with its own file tree, commit history, and access control list. Users switch between buckets explicitly; there is no global file tree spanning multiple buckets.
ConsequencesΒΆ
PositiveΒΆ
- IsolationEach bucket is self-contained β its history, access rules, and files are independent of every other bucket.
- Per-bucket access controlViewer, editor, and committer roles are assigned at the bucket level, making fine-grained access policy straightforward.
- Clear ownershipBuckets map naturally to projects, teams, or customers β easy to reason about who owns what.
- Independent historyCommits, diffs, and restores are scoped to a single bucket, keeping history clean and relevant.
NegativeΒΆ
- No cross-bucket operationsFiles cannot be shared or referenced across buckets.Shared assets (e.g. a corporate logo) must be duplicated or managed via a Typst package.
- No hierarchyThere is no concept of nested buckets or folders of buckets β a flat list of named workspaces is all that exists at the top level.