tarot card icons + ranks; sig fallback for pre-sync Characters; DECKS label sizing — TDD

- migration 0011: The Nomad (0) → fa-hat-cowboy; The Schizo (1) → fa-hat-wizard
- corner_rank: non-MAJOR pip card 1 → 'A' (Ace); court unchanged (M/J/Q/K); TDD
- 17 unit model tests for corner_rank + suit_icon
- _role_select_context: my_tray_sig falls back to seat.significator when
  confirmed_char.significator is None (Characters created before natus_save sync)
- _card-deck.scss: DECKS label bigger (1rem, 0.32em letter-spacing) to fill
  stack height; sea-stack-name: opacity 0.6, scaleY(1.5), margin-top -0.4rem
  partially under face; sea-stack-face z-index:1

Code architected by Disco DeDisco <discodedisco@outlook.com>
Git commit message Co-Authored-By:
Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-04-29 00:20:55 -04:00
parent 6d75b9541f
commit 2af59b3a7f
6 changed files with 147 additions and 7 deletions

View File

@@ -1855,6 +1855,16 @@ class PickSeaRenderingTest(TestCase):
self.assertIn("user_polarity", response.context)
self.assertEqual(response.context["user_polarity"], "levity") # PC is levity
def test_my_tray_sig_falls_back_to_seat_when_char_sig_is_none(self):
"""Characters created before the sig-sync fix have significator=None; fall back to seat."""
Character.objects.create(
seat=self.pc_seat,
significator=None,
confirmed_at=timezone.now(),
)
response = self.client.get(self.url)
self.assertEqual(response.context["my_tray_sig"], self.sig_card)
def test_my_tray_sig_comes_from_character_significator_when_confirmed(self):
"""When sky_confirmed, my_tray_sig reads from Character.significator (not TableSeat)."""
char = Character.objects.create(