deck contribution sprint 2 + Carte Blanche safeguards — TDD

Sprint 2 UI (game kit applet):
- _applet-game-kit.html: in-use deck → two disabled × buttons, .tt-deck-game-name;
  in-use Carte Blanche → two disabled × buttons, data-current-room-name,
  .tt-token-room-name; tooltip content mirrors kit bag panel (Default, card count,
  description, Stock version)
- gameboard.js buildMiniContent: 'In-Use' for tokens w. data-current-room-name set
- _kit_bag_panel.html: Deck section always renders (placeholder when unequipped)

View safeguards:
- select_role: look up existing deck from prior seat in same room before
  equipped_deck (Carte Blanche multi-seat); only unequip when using equipped_deck
- drop_token Carte: reject 409 if token.current_room is a different room;
  unequip from equipped_trinket on drop

ITs: SelectRoleMultiSeatTest (2), DropTokenViewTest +3 (carte drop, unequip, lock)

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-27 23:24:43 -04:00
parent 94a864b05b
commit fa68c74b51
8 changed files with 196 additions and 22 deletions

View File

@@ -1,20 +1,23 @@
{% if equipped_deck %}
<div class="kit-bag-section">
<span class="kit-bag-label">Deck</span>
<div class="kit-bag-row">
{% if equipped_deck %}
<div class="kit-bag-deck" data-deck-id="{{ equipped_deck.pk }}">
<i class="fa-regular fa-id-badge"></i>
<div class="tt">
<h4 class="tt-title">{{ equipped_deck.name }}{% if equipped_deck.is_default %} <span class="token-count">(Default)</span>{% endif %}</h4>
<p class="tt-description">{{ equipped_deck.card_count }}-card Tarot deck</p>
<p class="tt-shoptalk"><em>placeholder comment</em></p>
<p class="tt-effect">active</p>
<p class="tt-expiry">Stock version</p>
{% if equipped_deck.description %}<p class="tt-shoptalk"><em>{{ equipped_deck.description }}</em></p>{% endif %}
<p class="tt-shoptalk">Stock version <span class="tt-subcounter">(0 substitutions)</span></p>
</div>
</div>
{% else %}
<div class="kit-bag-placeholder">
<i class="fa-regular fa-id-badge"></i>
</div>
{% endif %}
</div>
</div>
{% endif %}
<div class="kit-bag-section">
<span class="kit-bag-label">Dice</span>