Unit Data Schema — Topic 04: Deck / Band / Card-Roster — Omega War

Stage 2 · per-topic review · topic 04 of 6 · cycle unit-data-schema · page created 2026-06-14

alignment_status: review — Stage 2 of 3, per-topic research review.
This page reviews topic 04 only — the deck-authoring layer: the Deck entity, the deployment Band A/B/C (Vanguard / Main Body / Commitment), the CardRosterEntry deck × band × card join, the CommandPost unlock surface, and the deck join that reconciles the in-match phase_band with the deck-side deployment band — compiled from the working doc research/unthinkable/_working/unit-data-schema/04-deck-band-card-roster.md. The cycle was decomposed (at the user's direction) into six per-topic docs reviewed one by one; the canonical artifact research/unthinkable/unit-data-schema.md is the later synthesis of all six topics, not this page. This page authors no canonical artifact and no glossary output, and it stays review.

Boundary (UD-A1): this topic defines shape, not values — the deck/band/roster entities, the join, and the deck-join relationship model. It assigns no magnitudes: no per-deck card counts, no command-post costs or unlock timings, no band capacities, no wonder-slot cost/cooldown numbers, no balance. The one-wonder-slot-per-playable-deck rule is authored as a structural constraint shape, not a tuned cap.
Topic-03 hand-off (read-only) — topic 03 (unit-data-schema-03-phase-vs-era-band-omega-war.html, in review, revised 2026-06-14) fixed the in-match phase_band A/B/C axis (player labels Recon / Frontline / Breakthrough) and explicitly deferred the deck join to this topic: whether the schema's phase_band and the roster's deployment-band + command-post unlock are the same axis viewed from deck-side, or two related-but-distinct gates. Topic 04 owns that reconciliation (§6). No new field is added to the card; the new entities are all deck-side.

1. Purpose & scope of this topic

Author the deck-authoring layer: the Deck entity (a faction's playable card pool), the deployment Band A/B/C that groups a deck's cards by command-post tier, the card-roster join that places each card into a band, and the command-post unlock surface that opens a band in-battle. Then resolve the deck join topic 03 deferred: how the deck-side deployment band relates to the in-match phase_band.

No new card field. Topic 01 authored the card; topic 03 authored its phase_band. This topic builds the deck that selects cards and the roster join that slots each card into a deployment band — all deck-side. Same UD-A1 discipline: entities, enums, and the join relationship as shape, not values — no card counts, no costs, no unlock timings, no balance.

2. The Deck entity — the deck-builder selection set

A deck is the player's faction-and-division-scoped pool of cards taken into a match — the deck-builder unit of selection above the individual card. Source: roster §6.2 (per-deck card-roster table, one row per playable deck) and §8 (every deck row states a status).

FieldTypeReq?Notes
idstring (stable key)requiredStable internal identifier (e.g. us_2nd_armored).
display_namestringrequiredPlayer-facing deck name (roster §6.2 deck column).
factionref FactionrequiredOwning faction; shared with topic 01's card.faction. Faction entity modeled in topic 04/synthesis.
divisionref Divisionoptional (deferred)To&E mapping — the division/deck identity link is topic 05; named here only as the slot.
card_rosterref CardRosterEntry[]requiredThe deck's roster — the deck × card join entries (§4).
statusenum DeckStatusoptionalGovernance status (roster §8.1): slice / base / conditional-base / expansion-backlog / attachment-only / flavor-only / reject.

A deck's size, its exact card list, and its release tier are content/balance values (§9). This topic fixes that a deck is a faction-scoped, status-tagged set of roster entries — not the entries' contents.

3. The DeploymentBand axis — the deck-side band

DeploymentBand ∈ {A, B, C} — the deck-authoring grouping that sorts a deck's cards by which command-post tier unlocks them in battle. Source: roster §6.1 (band contract) — the deck-side A/B/C ladder, named Vanguard / Main Body / Commitment.

MemberBand nameDeck-authoring meaning (roster §6.1)Command-post unlock surface
AVanguardRecon, scouts, forward detachments, light infantry, engineers, light armor, early team weapons.Forward Command Post / Recon Post / Assembly Area — match start or earliest tier.
BMain BodyLine squads, standard tanks/assault guns, regular artillery, AT/AA, logistics.Motor Pool / Field Workshop / Artillery Battery / Supply Dump.
CCommitmentHeavy armor, breakthrough artillery, elite reserves, air/strategic support, and the deck's required one wonder slot.Advance Command Post upgrade / Fire Direction Center / Air Liaison / Army Group Liaison.

Naming distinctness (cross-topic). This deck-side band's labels (Vanguard / Main Body / Commitment) are deliberately kept distinct from topic 03's player-facing phase_band labels (Recon / Frontline / Breakthrough). Both ladders run A/B/C underneath; the distinct names keep the deck-authoring band and the in-match window visually separable (topic 03 §6).

4. The CardRosterEntry join + CommandPost unlock

The roster is not a bare list of card refs — each entry slots a card into a deployment band within a deck and records its eligibility flags. This is the join that makes "the deck × band × card" relationship explicit. Source: roster §6.2 (cards grouped by band per deck) + §6.3/§8 (wonder eligibility).

FieldTypeReq?Notes
deckref DeckrequiredThe owning deck (back-reference; Deck.card_roster holds the forward set).
cardref cardrequiredThe topic-01 card placed by this entry.
deployment_bandenum DeploymentBandrequiredWhich band tier (A/B/C) the card sits in for this deck (§3).
cp_unlockref CommandPostoptional (shape)The command-post surface whose unlock opens this entry in-battle (§5 below). May be derived from deployment_band; modelled as a slot, resolution deferred.
wonder_eligibleboolrequired (default false)Marks the Band-C entry that fills the deck's wonder slot; the one-wonder-slot rule (roster §6.3/§8.3) constrains exactly one true per playable deck. Shape only — which card and its cost are content.

Deck-level invariant. For every playable Deck.status row, exactly one Band-C CardRosterEntry must set wonder_eligible = true. Attachment-only, flavor-only, and reject rows are outside this playable-deck obligation.

The same card can appear in different decks at different bands (a TD card that is Band B for an armor deck but an attachment for an infantry deck), so band is a property of the entry, not of the card. Card-level fields (era_band, phase_band, phase_min from topics 01/03) stay on the card; the entry adds the deck-scoped band placement on top.

CommandPost — the in-battle unlock surface

Command-post surfaces are the in-battle structures whose unlock opens a deployment band's cards. Source: roster §7.1 (naming — "Forward Command Post" as the umbrella, concrete wartime facility names beneath) and §7.2 (the unlock mapping).

FieldTypeReq?Notes
idstring (stable key)requirede.g. motor_pool, advance_command_post.
display_namestringrequiredPlayer-facing facility name (roster §7.1: Assembly Area, Motor Pool, Field Workshop, Artillery Battery, Fire Direction Center, Air Liaison, Army Group Liaison).
unlocks_bandenum DeploymentBandrequiredThe band tier this surface opens (roster §7.2: Forward CP → Band A, Motor Pool → Band B armor, Advance CP → Band C).
unlocks_scopeenum UnlockScopeoptional (shape)Coarse category opened (infantry / armor / artillery / air / logistics) — roster §7.2 design-intent column. Shape only; the exact card set is content.

Gate — roster-shape required

Approve the deck-authoring shape: Deck (§2), DeploymentBand A/B/C (§3), the CardRosterEntry deck × band × card join (§4), and the CommandPost unlock surface — with exactly one Band-C wonder slot required per playable deck as a structural constraint (magnitudes deferred under UD-A1)?

5. The deck join — phase_band vs deployment_band

The reconciliation topic 03 deferred. Two A/B/C ladders touch the same deck: phase_band (topic 03, on the card) — the in-match escalation window (Recon / Frontline / Breakthrough), a card-intrinsic property; and deployment_band (this topic, on the CardRosterEntry) — the deck-side grouping (Vanguard / Main Body / Commitment), a deck-scoped, command-post-gated property.

Two gates compose — (phase_band AND deployment_band)
Match clock (phase window) × build choice (command-post unlock). A card deploys only when both gates open.
A card deploys when BOTH gates open Gate 1 · phase_band match clock — in-match window reached card-intrinsic · same in every deck Gate 2 · deployment_band build choice — command post unlocked deck-scoped · can differ per deck AND card deployable in this match, this deck

Model: two related-but-distinct gates that compose (logical AND). A card in a deck becomes deployable when both (1) the match's phase window has reached the card's phase_band (respecting its phase_min floor, topic 03 §2.1), and (2) the command-post surface for the entry's deployment_band is unlocked in-battle. They are correlated — authors put Recon-window cards in Vanguard and Breakthrough-window cards in Commitment, and CP escalation tracks phase escalation — but not the same field: phase_band is intrinsic to the card and gated by the match clock; deployment_band is per-entry and gated by a player build choice. Keeping them distinct lets a card be phase_band A yet placed in a deck's Band B (gated behind the Motor Pool) — the two gates compose rather than collapse.

The contract: (phase_band, deployment_band) compose as an AND of two gates; neither replaces the other, and synthesis preserves both. Whether deployment_band is stored on the entry or derived from phase_band + the deck's CP layout is an open question (§7) — this topic fixes the relationship model, not the storage.

Gate — deck-join-model required

Approve resolving topic 03's deferred deck join as two related-but-distinct gates that compose (AND) — the card-intrinsic phase_band (match clock) and the deck-scoped deployment_band (command-post unlock) both gate deployment, rather than collapsing them into one axis?

6. Illustrative filled rows (shape demonstration only — NO values)

Three roster entries showing the join populated, values-free — placement, not counts or costs.

Deckcarddeployment_bandcp_unlockwonder_eligibleReading
us_2nd_armoredus_cavalry_reconA (Vanguard)forward_command_postfalseRecon screen, opens at the Forward CP — Band A. Card's phase_band A composes with the Band-A unlock.
us_2nd_armoredus_m26_pershingC (Commitment)advance_command_postfalseHeavy armor gated behind the Advance CP — Band C; its phase_band C window must also be reached.
us_2nd_armoredus_super_pershingC (Commitment)advance_command_posttrueThe deck's single wonder candidate (roster §6.3) — Band C, one-wonder-slot rule holds.

Deck/card ids are illustrative shape, not a roster assertion. Sourced from roster §6.2 / §6.3 US 2nd Armored row — labels and placements, no counts or costs.

7. Open questions & route

  1. open deployment_band storage vs derivation (§5) — whether the band is stored on each CardRosterEntry or derived from the card's phase_band plus the deck's command-post layout is a synthesis decision.
  2. open cp_unlock modelling (§4) — whether the command-post surface is a referenced entity, an enum, or a constraint derived from deployment_band is open.
  3. open Division ↔ deck identity (§2) — the Deck.division link and how To&E proportions shape a deck's roster is owned by topic 05; named here only as a slot.
  4. open Faction entityDeck.faction / card.faction share an unmodelled Faction entity; its full shape is a synthesis/topic-05 item.
  5. open Campaign evolution of decks — roster §7.3's short-vs-long-campaign deck changes (replacements, cannibalization, rebuilds) are a campaign-economy layer, deferred (not authored here).

The disposition of these open questions is carried by the route gate below.

Gate — route required

How should the cycle proceed? This also disposes the §7 open questions (they carry to synthesis unless you direct otherwise in notes).

8. Deferred-values register (this topic)

DeferredWhyWhere it lands
Per-deck card counts and exact card listsUD-A1 shape-not-values; contentcontent/balance pass
Command-post unlock costs, build times, prerequisite chainUD-A1; in-battle economyprototype balance / campaign-economy pass
Wonder-slot card identity, cost / cooldown / one-use limits (the §6.3 gates)UD-A1; content and balance; the slot itself is required per playable deckcontent/balance pass
Band capacities (how many cards per band)content (values)balance/content pass
Campaign deck-evolution magnitudes (roster §7.3)campaign economycampaign-economy pass

9. Source log (topic 04)

This is a design-synthesis topic over already-approved internal sources — "evidence" here is the source-section → schema mapping below, not external research.

10. Compile Responses

Answer the required gates above, add optional section feedback, then compile and copy the YAML into the next execution message. You may compile partial responses.