sea affinity prose reversals + reelhouse sea/sky reel-up swipe machine + SCROLL gear OK close — TDD

Three threads:

1. Reversal-aware SEA_DRAWN prose. The affinity clause now reads "the {orientation}
   of the {card}" — "emanation" upright, "reversal" when the drawn card is reversed
   — and a reversed card's abbrev gains a ℞ (U+211E, the sky wheel's retrograde
   glyph) <sub> subscript inside the existing no-wrap span, e.g. "(Q ♥℞)".
   _sea_affinity_for now carries the per-card `reversed` flag (it was in the hand
   entry but discarded) → event.data → to_prose via d.get("reversed", False).
   _card_abbrev gains reversed_flag=False so the shared SIG_READY caller is
   untouched (significators are picked, never drawn reversed). TDD: drama ITs +2
   (reversal orientation + ℞; upright emanation w.o ℞), epic IT +1 (reversed flows
   end-to-end), existing SEA_DRAWN prose tests updated to "emanation of the".

2. Reelhouse sea/sky reel-up swipe machine. The burger Sea/Sky reopen btns are
   .active from anywhere in the reelhouse, but opening a felt while parked on the
   reelhouse pane pinned the aperture there (html.*-open freezes the scroll) with
   the felt stranded off-screen in the hex pane (scroll-locked; NVM was the only
   escape). New RoomViews.scrollToHex(cb): from the reelhouse it reels the aperture
   UP to the ROOM hex, then fires the open cb on settle (the banner h2 reel follows
   via the existing IO); already at the hex → synchronous (in-hex CAST SKY / DRAW
   SEA unchanged). afterDescent (scrollend + 700ms ceiling) hoisted out of the Text
   sub-btn machine + shared. Both sub-btn handlers (burger-btn.js sky, _sea_overlay
   sea) route through it. Pinned in Jasmine (RoomViewsSpec +2) per the headless-
   drops-delayed-scroll trap — the delayed-vs-synchronous DECISION, not real scroll.

3. SCROLL gear OK now closes the menu. room-scroll.js's filter-submit handler
   referenced an UNDECLARED `roomMenu` → ReferenceError thrown AFTER applyFilter
   ran, so the filter applied but the menu never closed. Look it up via
   getElementById (mirrors the ATLAS OK / applets close). FT +1.

506 Jasmine specs + 8 room-scroll FTs + 61 drama + 649 epic/billboard ITs green.

[[project-sea-select-scroll-provenance]] [[feedback-headless-delayed-scroll-dropped]]

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-06-09 01:27:03 -04:00
parent 80391b37c2
commit 011e4b2d5a
11 changed files with 202 additions and 43 deletions

View File

@@ -507,7 +507,14 @@ via epic:sea_save. `?seat` threads the CARTE-selected seat onto the action URLs.
if (!seaSubBtn) return;
seaSubBtn.addEventListener('click', function () {
if (!seaSubBtn.classList.contains('active')) return;
openSea();
// Reel the aperture UP to the hex FIRST when down in the reelhouse (else the
// felt opens stranded off-screen + the aperture scroll-locks). scrollToHex
// fires synchronously when already at the hex, so an in-room click is unchanged.
if (window.RoomViews && window.RoomViews.scrollToHex) {
window.RoomViews.scrollToHex(openSea);
} else {
openSea();
}
});
}
if (document.readyState === 'loading') {