- GET /v1/capabilities and the extended sync entity allowlist (§0, §1).
- Shared ledgers (§7): ledgers, members and hashed one-time invite codes;
X-Balance-Ledger selects the space on /v1/sync and /v1/attachments with
its own records, change stream and cursor. Personal space keeps the v1
tables and behaviour; the migration only adds tables.
- Attachments (§8): SHA-256, size and media type checks, blob files in
BALANCE_ATTACHMENTS_DIR (default: attachments next to the database),
garbage collection of unreferenced blobs with a grace period for fresh
uploads, and ledger deletion removes its blobs.
- Tests for every new endpoint and error code; API, sync, data model,
security, deployment and README docs updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Go implementation is preserved in the v1.0.0 tag. Its observable
behaviour stays the API reference: responses recorded from the Go server
live in tools/compatibility_expected.txt, and tools/compatibility.py now
compares the Rust server against them (--update re-records after an
intentional change). The Go SQLite schema is frozen in
tests/fixtures/go_schema_v1.sql for the existing-database test.
Move the web client from internal/httpapi/web to web/, drop the Go CI job
and Go version pin, and update README, AGENTS.md and docs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>