v0.9.0 — ### Added
- **T-011** Static roster + character aliases. `Member` and `CharacterAlias` ORM models (`db/models.py`); members are decoupled from job (job derived per fight via CombatantInfo i…
- T-011 Static roster + character aliases.
MemberandCharacterAliasORM models (db/models.py); members are decoupled from job (job derived per fight via CombatantInfo in T-107).(character_name, server)is globally unique; alias delete cascades on member delete. - Alembic migration
8f2f3edb79f7_t_011_members_character_aliases. 12 tables in dev DB. - CRUD routes:
GET/POST/PATCH/DELETE /api/members,POST /api/members/{id}/aliases,DELETE /api/aliases/{id}. Pydantic schemas + 409s on duplicates. - React
Members.jsxeditor: list / add / delete members + per-member character aliases. Wired intoApp.jsx. - 9 API tests (empty list, create-with-aliases, duplicate name 409, duplicate alias 409, patch, cascade delete, add+remove alias, 404s). 67 tests total.
Known issue
vite buildfails on#in the project folder name (Project Alpha (Name #TBD)).vite devworks locally with a warning. Folder rename required before more React lands (T-009).