Disco DeDisco 011e4b2d5a 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>
2026-06-09 01:27:03 -04:00
feat: import Minchiate Fiorentine 1860-1890 deck assets (98 PNGs, alpha-channel transparent bg) + naming convention v2 + pngquant optimization tooling. Public-domain 1860-1890 lithograph scans sourced from Wikimedia (single download series + trump 11 Il Gobbo individually-sourced from same era series); user removed white backgrounds in Photoshop to leave irregular card-shape with transparent canvas. Filenames v2-conformant per [[reference-card-image-naming-convention]] (revised from v1 of 2026-05-24): deck slug carries -1860-1890 publication-year suffix so future Minchiate Fiorentine variants from different publishers/eras coexist cleanly; courts use rank-number-prefix (batons-11-page not batons-page) for linear sort key; trumps carry both numeric rank AND italian-name suffix (trumps-01-papa-uno, trumps-11-il-gobbo) for forensic identification across variant decks the user plans to sell. Il Matto (unnumbered Fool in Minchiate tradition) assigned rank 00 to give it a sortable position. Five trump filenames had elided-apostrophe slugs restored from the download source (-lacqua-l-acqua etc.). Card-back at <deck-slug>-back.png sorts alphabetically before all suit categories — no separate card-back/ subdir needed. pngquant 2.17.0 installed at C:\Users\adamc\AppData\Local\Programs\pngquant\, added to user PATH (effective next session) for future deck imports; ran with --quality=65-85 --speed=1 --strip --skip-if-larger for 57.6% size reduction (86.6 MB → 36.7 MB total, 935 KB → 383 KB avg). Second pass at --quality=40-65 hit pngquant's floor (only 0.5% further reduction — re-quantizing an already-quantized image has little headroom). Il Gobbo from Wikimedia was a dimensional outlier (1426x2366 vs siblings ~620x1024) — resized via System.Drawing HighQualityBicubic to 620x1029 before optimization. Format32bppArgb alpha channel verified intact across samples after optimization pass. Visually validated by user: cards must fill entire screen before any pixelization visible. Sprint A precursor — DeckVariant.has_card_images toggle + image-rendering template branch per [[project-image-based-deck-face-rendering]] follows in subsequent commits, will consume these assets in 6 surfaces (my_sign, my_sea, both billboard applets, room, game_kit). Asset set also unblocks downstream Sprint C+B [[project-deck-segment-model]] (admin form will require image upload + enforce naming convention) and Sprint D [[project-card-deck-icon]] (uses -back.png as the deck-stack icon's repeating card-face). Future: when Sprint B's admin form ships, wire pngquant into an optimize_card_images management command so admin uploads auto-optimize on save. Gitignore line src/apps/epic/static/apps/epic/images/cards-faces/minchiate-fiorentine/ dropped — v1 staging dir deleted (was only ever the rename-staging set; superseded by v2-named optimized set). Total disk delta: +36.7 MB binary content. No code changes — pure asset + convention import
2026-05-24 22:39:21 -04:00
2026-01-13 20:58:25 -05:00
Description
No description provided
160 MiB
Languages
Python 45.5%
JavaScript 36.1%
HTML 9.6%
SCSS 8.6%
Jinja 0.1%