Circles v1 — foundation: migration + signed own publication
Steps 1+2 of the Circles federation (3rd tenancy mode alongside solo/hub):
- DB: circle_links / remote_actors / remote_posts (idempotent in initializeDatabase)
- SettingsService: tenancy now accepts 'circle'
- CircleFederation.js: per-instance Ed25519 keypair (app_settings) + actor/outbox
builders + sign/verify (SPKI-DER pubkey, signature over raw body)
- routes/federation.js: GET /.klonkt/actor.json + signed /.klonkt/outbox.json,
mounted in server.js before resolveSite
- docs/cirkels-v1-spec.md: full v1 spec
Still to do: CircleService.sync (pull+verify), Admin UI, /cirkel feed, hardening.
Ed25519 sign/verify round-trip verified in isolation; syntax clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>