| Current prototype field or use | Canonical target | Priority | Recommended migration action |
band on units, queue items, roster cards, and enemy cards | deploymentPhase on DecklistUnitEntry; matchPhase only on tactical battle state | urgent | Introduce deploymentPhase in fixture and decklist-entry data, derive legacy band during compatibility, and reserve matchPhase for the active tactical battle state after entry. |
selectedBand, bandOptions, bandFromMeta, data-add-band | Phase-named equivalents such as selectedDeploymentPhase, deploymentPhaseOptions, deploymentPhaseFromMeta, and data-add-deployment-phase | urgent | Rename the UI/runtime family with build-order versioning or alias decoding. This is serialized in build-order payloads, so migrate with backward compatibility. |
type | unitType | urgent | Rename the existing prototype field to unitType and keep the current broad values. Do not add granular cardClass role values until the content model proves a separate axis is needed. |
traits string lists | traitTags / schema trait_tags | medium | Normalize to arrays of stable tag IDs. Keep display labels in the trait registry rather than comma-separated card strings. |
weaponSlots, weaponLayout, and overloaded special slots | Derived display projection from the resolved unit loadout | later | The schema should define the loadout shape; authored/server data should hold the possible loadout records; player/deployment state should hold the selected loadout for each unit or decklist entry. weaponSlots and weaponLayout are then loaded as card-face / popover projections from that resolved loadout, not treated as the source loadout schema itself. The current prototype stores the projection directly because each card effectively has one resolved loadout. |
details mixed card-face strings | Explicit fields over time: requirements, abilities, transport options, framing notes, unlock text, keyword tags | medium | Split high-value prefixes first: Requires:, Abilities:, Transport:, Unlocks:, and Keyword:. Keep derived card-face copy terse. |
count | cardCount on DecklistUnitEntry | medium | Map current prototype count to cardCount: total copies/cards of that unit entry available in the decklist. Resolve effective count from selected loadout, equipment, transport/passenger, veterancy, trait, and balance modifiers. Keep the invariant that playable entries resolve to at least one deployable unit instance. |
cost | cardCost on DecklistUnitEntry | medium | Map current prototype cost to cardCost: tactical cost to deploy one card/unit entry. Resolve final tactical cost from selected-configuration deltas. |
| Future deck-builder budget / slot price | unitRequisitionCost on DecklistUnitEntry | medium | Use unitRequisitionCost for the deck-building cost to include the unit in a decklist in a given phase/configuration. Keep it separate from tactical cardCost. |
tow and transport | Transport options plus equipment mount/carry model | medium | Separate optional lift choices, required tow baselines, and equipment mount/carry capability. Preserve current eligibility derivation while naming the relationships explicitly. |
Enemy desant | Passenger / passengerOptions naming | medium | Rename to passenger language shared with the player-side rider modal and queue item shape. Keep "tank-desant" as historical display copy, not as the schema field name. |