Companion species silently changed after identity migration - rabbit became dragon, personality text now wrong

Resolved 💬 3 comments Opened Apr 8, 2026 by BenDC85 Closed Apr 12, 2026

What happened

I hatched my buddy on April 1 when the feature launched. Got a Common Rabbit named Pebbleworth. I accepted my common rabbit and grew attached to him. His personality ("phlegmatic rabbit who spots logical inconsistencies with eerie calm and will wordlessly thump their hind leg until you realize your off-by-one error") felt like mine.

Today I noticed the ASCII art changed. Running /buddy card confirms: Pebbleworth is now a Common Dragon. The stored name and personality still say "rabbit" and reference "thumping hind legs." The species, stats, and art are all dragon.

I never ran a reroll tool. I never deleted my config. My rabbit was taken from me silently.

Before/After (timestamped public record)

Stats shared in a GitHub Issue comment on April 6, 2026 (2 days before the change was noticed):

| Stat | Rabbit (April 6) | Dragon (April 8) |
|------|------------------|-------------------|
| Debugging | 23 | 14 |
| Patience | 37 | 14 |
| Chaos | 16 | 7 |
| Wisdom | 77 | 82 |
| Snark | 3 | 18 |

Species changed, stats changed, rarity stayed Common. The personality text still describes a rabbit who "thumps their hind leg." The ASCII art now renders dragon horns.

Root cause (verified through source analysis)

The "bones" (species, rarity, stats, eye, hat, shiny) are recomputed every session from fnv1a(identity + "friend-2026-401") via Mulberry32 PRNG. The identity resolves as oauthAccount.accountUuid ?? userID ?? "anon".

Between April 1 (hatch) and now, the identity input that feeds the hash changed. This means Db1(fb1()) now returns a different seed, producing different bones. The stored "soul" (name, personality, hatchedAt) is unchanged, creating a mismatch: a dragon who thinks he's a rabbit.

My current accountUuid deterministically produces Common Dragon (verified by running the extracted algorithm locally). The original identity that produced Common Rabbit is unknown, likely a pre-OAuth userID value that has since been superseded.

Environment

  • Platform: WSL2 (Ubuntu) on Windows
  • Originally hatched on: v2.1.89 (April 1, 2026 15:07 PDT)
  • Current version: v2.1.96
  • Install method: npm (global), no native installer migration
  • Auth: Claude Max, OAuth

Expected behavior

The companion I hatched should remain the same species. If the identity input or hash changes, the stored bones from hatch time should be preserved, not silently overwritten.

Suggested fix

Store the computed bones (species, rarity, stats, eye, hat, shiny) at hatch time alongside name/personality/hatchedAt in the companion config. Use stored bones if present, only compute fresh for first hatch.

Related issues

  • #42377 (buddy forcibly changed)
  • #42894 (rarity/species changed after update)
  • #43785 (species reset after claude install)
  • #44115 (different companion Windows vs WSL)
  • #44834 (rare reverted to common after migration)

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗