sea select scroll log: publish a Role<->Celtic-position affinity on the completing draw; redact + relinquish on DEL; re-publish on re-draw — TDD

The gameroom DRAW SEA phase now writes drama provenance, mirroring sig/sky. When a gamer's 6-card Celtic Cross COMPLETES, a SEA_DRAWN Scroll log publishes their affinity with the card sitting in their Role-correlated position.

- epic/views.py: ROLE_POSITION_MAP — the user's sixfold index (PC->crown, NC->leave, EC->loom, SC->cover, AC->cross, BC->lay; roles rotate each round, so a seat's CURRENT role drives it) + SEA_POSITION_LABELS (each spread's display label for a position KEY; Waite-Smith's Behind/Before/Beneath + Escape-Velocity's Leave/Loom/Lay both key to the same index). sea_save publishes SEA_DRAWN on the <6->6 completing transition only (a reload that re-POSTs the full hand can't double-publish); a re-draw first redacts the standing relinquishment, then publishes anew. sea_delete redacts the published affinity (the strikethrough) + records SEA_RELINQUISHED in its wake (the redact-pair). _sea_affinity_for mirrors SIG_READY's polarity-qualified name_title + corner abbrev; _redact_standing_sea_event tests 'not retracted' in PYTHON (the SQLite JSONField exclude-NULL trap).

- drama/models.py: SEA_DRAWN + SEA_RELINQUISHED verbs + to_prose ('draws {poss} Celtic Cross, finding affinity with the {card}{abbrev} in the {Position}.' / 'relinquishes {poss} affinity with the {card}.'); 'The ' stripped so a levity/gravity qualifier butts the proper name. The generic struck/retracted property renders the strikethrough + data-label=redact in _scroll.html unchanged.

TDD: 4 drama prose ITs (affinity statement, spread-label passthrough, relinquishment, struck-when-retracted) + 7 epic ITs (publish-on-complete, position=crown for PC, none-before-complete, no-double-publish-on-reload, DEL redacts+relinquishes, re-draw redacts-the-relinquishment+republishes, DEL-noop-when-nothing-published). 459 drama + epic-view ITs green.

- bundled (parallel work): rootvars.scss --sixUser/--sepUser/--octUser slot reassignments across the forest/khaki/blade palettes (tuning the new reelhouse h2 bgs) + a new --terMrb.

[[project-sea-select-scroll-provenance]] [[feedback-jsonfield-exclude-sqlite-null]]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-06-08 19:35:45 -04:00
parent 039152a787
commit d28046f3da
5 changed files with 228 additions and 9 deletions

View File

@@ -293,6 +293,7 @@
// polished marble (Confession)
--priMrb: 231, 233, 234;
--secMrb: 115, 116, 117;
--terMrb: 55, 56, 57;
// flaming porphyry (Satisfaction)
--priPhy: 200, 55, 66;
--secPhy: 75, 31, 48;
@@ -379,8 +380,8 @@
--quaUser: var(--priCfw);
--quiUser: var(--terCfw);
--sixUser: var(--secId);
--sepUser: var(--quaId);
--octUser: var(--terFs);
--sepUser: var(--terFs);
--octUser: var(--quaId);
--ninUser: var(--sixPu);
--decUser: var(--terPu);
}
@@ -391,9 +392,9 @@
--terUser: var(--priCfw);
--quaUser: var(--quiAu);
--quiUser: var(--secCu);
--sixUser: var(--terKhk);
--sepUser: var(--priKhk);
--octUser: var(--priPer);
--sixUser: var(--secKhk);
--sepUser: var(--terPer);
--octUser: var(--terKhk);
--ninUser: var(--sixCu);
--decUser: var(--terU);
}
@@ -404,9 +405,9 @@
--terUser: var(--priBld);
--quaUser: var(--priIce);
--quiUser: var(--quaIce);
--sixUser: var(--priTrs);
--sepUser: var(--terTrs);
--octUser: var(--terBld);
--sixUser: var(--terTrs);
--sepUser: var(--terBld);
--octUser: var(--quiTrs);
--ninUser: var(--priMst);
--decUser: var(--terMst);
}
@@ -419,7 +420,7 @@
--quiUser: var(--secPhy);
--sixUser: var(--priMrb);
--sepUser: var(--terPer);
--octUser: var(--quaAdm);
--octUser: var(--terMrb);
--ninUser: var(--sixPer);
--decUser: var(--terMrb);
}