Skip to content

docs(game-data): correct the v3.0.0 migration changelog - #83

Merged
ChessMess merged 2 commits into
mainfrom
fix/game-data-v3-changelog
Aug 4, 2026
Merged

ChessMess merged 2 commits into
mainfrom
fix/game-data-v3-changelog

Conversation

@ChessMess

Copy link
Copy Markdown
Owner

Found while reviewing what PR #58 would publish. ultimatedarktowerdata 2.2.0 →
3.0.0 is a genuine major that removes the whole gameContent namespace, so
.changeset/hero-record-merge.md becomes the published CHANGELOG — and
packages/game-data ships CHANGELOG.md in its files list, so this text is
the migration doc external consumers actually receive.

1. The hero count was wrong

Through v2 the same 14 heroes existed twice

heroes.ts has 14 rows, but only 10 carry bannerAction, and the removed
gameContent.ts held 10 hero sheets. The same document already says "all 10
hero sheets transferred byte-identical" and "four heroes genuinely have no
sheet" (the unreleased Expeditions heroes).

A reader hitting "14 existed twice" and then "four have no sheet" concludes data
was dropped in the merge. Nothing was. Corrected to "10 of the 14".

2. Adversary → Foe was an unremarked type collapse

The migration table maps three types onto two in a single cell:

Removed Use instead
gameContent.Foe / .Adversary / .Companion Foe / CompanionCard

Nothing says adversaries are now modelled as Foe — ADVERSARY_ROSTER is a
readonly Foe[] and ALL_FOES is [...FOES, ...ADVERSARY_ROSTER]. A consumer
with let a: gameContent.Adversary can't guess Foe from that row. Added a
short paragraph after the table.

3. Two stale source comments from the same removal

  • boxInventory.ts — "Gameplay content lives in gameContent.ts" (that file is
    deleted).
  • companionCards.ts — "gameContent.COMPANIONS holds the same 10 quest
    companions", present tense.

What I verified but did not change

Every replacement name in the migration table resolves against the real v3
export surface (HERO_BY_NAME, HERO_BY_ID, HEROES, FOES,
ADVERSARY_ROSTER, COMPANION_CARDS, KINGDOM_VIRTUES, kingdomVirtues,
KingdomDirection, Virtue, Hero, Foe, CompanionCard, ContentSource) —
no dangling references. gameContent was a named export of ., never a
subpath, so the import { gameContent } diff has the right shape. Nothing in
the repo still imports it, and virtues.test.ts asserts it stays gone.

Verification

pnpm run ci passes (exit 0). pnpm --filter ultimatedarktowerdata test — 326
passed / 13 files. pnpm changeset status still resolves ultimatedarktowerdata
to major.

Merging this regenerates the "Version Packages" PR (#58) with the corrected text.

The pending major changeset said "the same 14 heroes existed twice". heroes.ts
has 14 rows but only 10 carry the gameplay sheet, and the removed gameContent.ts
held 10 -- the same file already said "all 10 hero sheets transferred" and "four
heroes genuinely have no sheet". A reader hitting 14-then-4 concludes data was
dropped. This text ships to npm as the 3.0.0 CHANGELOG (it is in the published
tarball's files list), so it is the migration doc consumers actually get.

Also notes that gameContent.Adversary collapses into Foe. The migration table
mapped three types onto two in one cell with no explanation; ADVERSARY_ROSTER is
a readonly Foe[], which a consumer would not guess from that row.

Plus two stale source comments left by the same removal: boxInventory.ts pointed
at the deleted gameContent.ts, and companionCards.ts described it in the present
tense.
The "same 14 heroes existed twice" claim appeared in three places, not one.
heroes.ts's header comment ships in dist/*.d.ts, so it reaches consumers too.
@ChessMess
ChessMess merged commit 95da263 into main Aug 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant