Skip to content
Belief Engines
Esc
navigateopen⌘Jpreview
On this page

Storage

A private S3 bucket is the system of record. The local mirror is a cache. No database.

Storage

Flat files in a private S3 bucket. A local mirror outside any git repo. No database — not yet, probably not for years.

  ┌──────────────────────────────────────────────────────────────┐
  │  SYSTEM OF RECORD — private S3 bucket                        │
  │  versioning on, SSE, one IAM user, one lifecycle rule        │
  │  key: transcripts/<scope>/<YYYY>/<MM>/<file>.md              │
  └───────────────────────────┬──────────────────────────────────┘
                              │  aws s3 sync, scheduled

  ┌──────────────────────────────────────────────────────────────┐
  │  CACHE — ~/transcripts/   OUTSIDE every git repo             │
  │  disposable. Delete it, sync again, lose nothing.            │
  └───────────────────────────┬──────────────────────────────────┘
                              │  Glob / Grep / Read

                          an agent

Why S3, not a private git repo

An existing standard decides it. That file was lost in the repo reorg and lives only in git history — git show 1f9bd4f:docs/standards/aws-data.md:

“No side-channel local copies as a permanent data path.”

“Raw non-code assets belong in S3 when object storage is appropriate.”

A transcript is a raw non-code asset. The mirror is allowed because it is a cache, not the permanent path.

Deletion is the second reason. S3 removes an object and its versions on request. Git cannot without filter-repo, which CLAUDE.md forbids. Git’s immutability is a feature for specs and a liability for personal data — see Consent.

The mirror lives outside any git repo. Settled, not open. A sync target inside a checkout puts a client transcript one git add from a public site. Put it at ~/transcripts/, and add a .gitignore entry as a second belt.

Not in docs/, either

Disqualified on disclosure, not cost. This wiki renders publicly today and Google sign-in is parked in unmerged PR #17. npm run validate also caps a page at 500 words; a transcript is thousands. The wiki holds the spec and the pointers. Never the text.

The number that decides it

  3 meetings/day × 3,000 words   =   9,000 words/day
  at ~6 bytes/word               =      54 KB/day
  × 250 working days             =    13.5 MB/year, ~750 files
  5 years                        =     ~68 MB, ~3,750 files

S3 charges $0.023/GB-month, so year-one storage is $0.0003/month and 750 PUTs a year is $0.004. The whole data layer costs under $0.01/month and reads as $0.00 on the bill. Every managed search product carries a monthly floor that exceeds the lifetime cost of this data. That is the shape of the answer.

Why no database

Files are the lowest-entropy state. Files to database is one evening’s script. Database to files is an export job, schema archaeology, and an argument about which one is now the source of truth.

The corpus hits 10,000 files in year thirteen. Ranking, not speed, is what eventually breaks — and the fix has a trigger attached on the growth path. Not today.

Last updated on August 27, 2026

Was this page helpful?