Skip to content

v0.3.0

Latest

Choose a tag to compare

@7331 7331 released this 11 Nov 12:16
4782c1f

Not breaking. Two new capabilities and shorter docs.

Update steps

  1. uvx copier update --trust on a clean tree.
  2. Run uvx prek run --stage pre-push --all-files and commit what it rewrites. backend/openapi.json is no longer merged by an update; the OpenAPI hook rewrites it.
  3. With Postgres, the next deploy applies template_0003 (the rate_limit_scopes table) through alembic upgrade heads. Nothing to do by hand.

What's new

  • Rate limits shared across replicas: with Postgres, request budgets live in an UNLOGGED table, so two API processes admit one budget, not two. If Postgres does not answer, each process limits on its own until it does. A check adds about 0.9 ms at p50. Without Postgres nothing changes. (#16)
  • Object storage: optional include_object_storage (Postgres only, off by default). Uploads go straight to an S3-compatible bucket through presigned URLs and are checked before they are kept. With accounts, files belong to the signed-in account; without accounts there are no file routes, only CLI commands. A local bucket server runs in compose for development only. (#17)
  • Option routers are registered in app/option_routers.py, so turning an option on later does not conflict with an app's own routers in main.py. (#17)
  • Docs: shorter READMEs, a "What it's for" section, and the first-push steps moved to one paragraph in AGENTS.md. (#15)

Known gaps

  • Still one api service in the deploy: the limiter removes the blocker for a second replica but deploy.sh has no replica count.
  • Object storage was not run against a hosted bucket.
  • An app with object storage and no accounts that turns accounts on later needs its own revision for the owner column.