- CloudStore (server/src/campaigns.ts): file-backed campaigns (owner + invite-code
members) and characters owned by the player who published them. Only the owner
updates a character (last-write-wins); the campaign owner gets read access to all
and may remove. Usage bytes per user for later quota tracking. +3 tests.
- API: POST/GET /api/campaigns, POST /api/campaigns/join, PUT /api/characters,
GET /api/campaigns/:id/characters, DELETE /api/characters/:id, GET /api/usage —
all bearer-authed via the existing accounts.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>