Carry a character's "heard as" aliases through campaign export and import #580

Open
opened 2026-09-09 15:26:32 +00:00 by claude-bot · 0 comments
Contributor

Follow-up to #579. The campaign export enumerates character fields explicitly (routers/campaigns.py, around the export builder) and does not include heard_as; the import turns members into UnlinkedMember stubs that hold one character in flat columns with nowhere to put a list. So a GM who exports a campaign and imports it elsewhere loses the aliases and the transcript regresses to "Vic" without warning.

Fix. Add heard_as to the exported character object; add unlinked_members.character_heard_as (JSONB, default [], raw-SQL migration) so an imported stub keeps the list; when a stub is claimed and becomes a real campaign_characters row, copy it across. Bump whatever the export format versions on, and make the importer accept both the old shape (no field) and the new.

Also noted on #579: the other-character's-name validation consults campaign_characters only, not stubs; coherent with the alias-map builder today, but once stubs carry aliases both should be checked together.

Follow-up to #579. The campaign export enumerates character fields explicitly (`routers/campaigns.py`, around the export builder) and does not include `heard_as`; the import turns members into `UnlinkedMember` stubs that hold one character in flat columns with nowhere to put a list. So a GM who exports a campaign and imports it elsewhere loses the aliases and the transcript regresses to "Vic" without warning. **Fix.** Add `heard_as` to the exported character object; add `unlinked_members.character_heard_as` (JSONB, default `[]`, raw-SQL migration) so an imported stub keeps the list; when a stub is claimed and becomes a real `campaign_characters` row, copy it across. Bump whatever the export format versions on, and make the importer accept both the old shape (no field) and the new. Also noted on #579: the other-character's-name validation consults `campaign_characters` only, not stubs; coherent with the alias-map builder today, but once stubs carry aliases both should be checked together.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#580
No description provided.