a28183326e
- 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>