character: significator field populated from seat on natus_save; my_tray_sig from Character when confirmed — TDD
All checks were successful
ci/woodpecker/push/pyswiss Pipeline was successful
ci/woodpecker/push/main Pipeline was successful

Character.significator was already in the model but never set. natus_save now copies
seat.significator onto the Character on every save (draft + confirm). _role_select_context
overrides my_tray_sig from Character.significator when sky_confirmed, making Character
the authoritative source for the sig card displayed in the sea overlay.

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-28 21:46:21 -04:00
parent b5fbc3d354
commit 379e0ab80c
2 changed files with 47 additions and 3 deletions

View File

@@ -352,14 +352,18 @@ def _role_select_context(room, user):
elif user_role in _GRAVITY_ROLES:
user_polarity = 'gravity'
ctx["user_polarity"] = user_polarity
sky_confirmed = bool(
_canonical_seat and Character.objects.filter(
confirmed_char = (
Character.objects.filter(
seat=_canonical_seat,
confirmed_at__isnull=False,
retired_at__isnull=True,
).exists()
).first()
if _canonical_seat else None
)
sky_confirmed = confirmed_char is not None
ctx["sky_confirmed"] = sky_confirmed
if sky_confirmed:
ctx["my_tray_sig"] = confirmed_char.significator
return ctx
@@ -1083,6 +1087,8 @@ def natus_save(request, room_id):
char.house_system = body.get('house_system', Character.PORPHYRY)
char.chart_data = body.get('chart_data')
char.significator = seat.significator
if body.get('action') == 'confirm':
char.confirmed_at = timezone.now()