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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user