{"slug":"scarlet-riverboat-masquerade","total":36,"limit":100,"offset":0,"since":null,"commits":[{"hash":"a5a2c5a","date":"2026-09-04 22:38:51 -0700","author":"Steve","subject":"snapshot before restart: preserve in-flight work","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011gbmuMHgCLDEPM4TpfAr4G"},{"hash":"ab81288","date":"2026-09-02 11:55:24 -0700","author":"Steve Abrams","subject":"riverboat: Phase 1 archive.org reliability — cap year-count fetches at 5 concurrent, polite retry/backoff/breaker, localStorage count cache (kills the false \"0\" tiles)","body":"buildMap fired all 31 per-year count queries at archive.org at once; archive\ndrops ~40% of that burst as steady-state, so ~40% of tiles rendered a false \"0\"\n(a failed fetch became n:-1 then cached/painted as 0). Phase 1:\n\n- mrPool: cap the count-fetch burst at 5 concurrent (was unbounded Promise.all).\n- mrFetchCount: max 2 retries, jittered backoff, 429 backs off HARDER than a\n  timeout; r.ok/status===429 checked BEFORE r.json() so a 429 is never parsed as\n  success; batch-shared circuit breaker opens after 6 consecutive failures and\n  short-circuits the rest instead of hammering a struggling nonprofit. Count\n  timeout tightened to 6s (counts return in ~0.18s) to bound time-to-error.\n- mrCacheLoad/Save: per-source+year localStorage cache; NEVER persists a\n  failed/zero/negative count (a cached 0 is a poisoned read), current calendar\n  year always re-fetches, ~30-day TTL. buildMap paints known-good cached counts\n  instantly then refreshes live via the capped pool; a live failure NEVER\n  overwrites a good cached value with 0.\n- failed tiles show a non-destructive \"—\" error state, never a false 0.\n\nTests (global playwright via PW env, no npm deps):\n- tests/mock-reliability.cjs: route-interception mock proving concurrency cap\n  (saturates at 5, never exceeds), no false \"0\" under a 40% failure mix, bounded\n  retries + circuit-breaker halt (no retry storm), and 429 backing off harder\n  than a timeout. 14/14.\n- tests/live-happy.cjs: real archive.org, no regression — 31 GD tiles populate\n  (1994=460), D&C source loads, no false 0, no page errors. 7/7.\n\nAudio/playback, source selector, and UI markup unchanged. No Relisten (Phase 2).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012k4CBzSCAmou3w8SYxQJLb"},{"hash":"9899b13","date":"2026-09-02 09:36:16 -0700","author":"Steve Abrams","subject":"contrarian FIX FIRST: per-build AbortController cancels stale year-fetch batch on source-switch; drop dead sort ternary; report reflects BLOCKED-on-live-verify not DONE","body":""},{"hash":"111f196","date":"2026-09-02 09:01:48 -0700","author":"Steve Abrams","subject":"5x: report — 2 sweeps clean after archive.org fetch-timeout hardening (sweep 2 fix)","body":""},{"hash":"d2d1341","date":"2026-09-02 08:59:47 -0700","author":"Steve Abrams","subject":"5x sweep 2: abort-timeout on archive.org fetches so a hung/down archive fails into the graceful error state (no infinite '…'); accurate error copy","body":""},{"hash":"6b0db05","date":"2026-09-02 08:40:01 -0700","author":"Steve Abrams","subject":"riverboat: rebuild year browse per UX review — tappable 44px year-tile grid (no more 11px bars), Source selector (Grateful Dead + Dead & Company), heat-colored tiles, loading/error states, mobile one-tap player, bigger transport controls","body":""},{"hash":"6ceafcc","date":"2026-09-02 07:50:37 -0700","author":"Steve Abrams","subject":"riverboat: interactive touring-history year map (bars sized by shows/year) replaces year dropdown","body":""},{"hash":"394ecd1","date":"2026-09-02 07:44:29 -0700","author":"Steve Abrams","subject":"Music controller: full-archive browse — loads the most-played Dead shows by default (18k+ shows), a Year selector (1965-1995) to browse any year, plus search; shows total count","body":""},{"hash":"ced8032","date":"2026-09-02 07:17:08 -0700","author":"Steve Abrams","subject":"Back-link: room now links '← The Main Stage' (stage.agentabrams.com) instead of the DEAD homepage","body":""},{"hash":"4adfed7","date":"2026-09-02 06:44:38 -0700","author":"Steve Abrams","subject":"Add 3D Three.js orb floating over the riverboat — beat-reactive wireframe icosahedron that pulses to the LIVE Dead stream (via the react analyser), warm ember palette; gentle idle when music is off","body":""},{"hash":"88dc7e0","date":"2026-09-01 22:53:53 -0700","author":"Steve Abrams","subject":"Riverboat room: searchable full Grateful Dead archive — type anything (date/city/venue/song) to search the entire archive.org GratefulDead collection and play any show; curated 5 kept as quick picks; venue marquee shows searched venues","body":""},{"hash":"546a5e7","date":"2026-09-01 22:30:12 -0700","author":"Steve Abrams","subject":"Replace emoji motifs with original DRAWN animated song-items: flickering flames, spinning flowers, twinkling stars, rotating snowflakes, water drops, spinning wheels, flapping birds, + musical notes default — keyed to the current track title, floating up through the scene","body":""},{"hash":"c67e4f5","date":"2026-09-01 22:24:06 -0700","author":"Steve Abrams","subject":"Concert venue backdrops (per-show stage-light beams + venue marquee: Fillmore/Veneta/Jai-Alai/Barton Hall/Nassau, key v) + song-motif layer that floats item glyphs matching the current track title (fire/mountain, sugar/rose, cat, train, rain/snow...)","body":""},{"hash":"91da570","date":"2026-09-01 22:15:59 -0700","author":"Steve Abrams","subject":"Beef up the bear dance: bigger sway + always-grooving bounce + bigger arm waves/leg steps + stronger beat hop; more sensitive beat detector so hops fire more often against live music","body":""},{"hash":"cf28d81","date":"2026-09-01 22:12:19 -0700","author":"Steve Abrams","subject":"Collapse all control panels on load; add master ☰ Controls toggle (key c) to reveal/hide the dock, cameras, chapters, and music room — art leads first, user opens controls","body":""},{"hash":"ab9d551","date":"2026-09-01 22:08:45 -0700","author":"Steve Abrams","subject":"Bears spread onto the boat decks too: 3 dancing bears join the revelers on deck (density-gated, beat-synced) alongside the shoreline troupe","body":""},{"hash":"7a9cd0e","date":"2026-09-01 22:06:59 -0700","author":"Steve Abrams","subject":"Add Dancing Bears slider (1-10): user-sized troupe auto-distributed + scaled across the shoreline, 10-color palette, each dancing + beat-synced","body":""},{"hash":"ef794b8","date":"2026-09-01 22:02:42 -0700","author":"Steve Abrams","subject":"Colorful dancing-bear troupe synced to the music: rose/gold/teal bears, arms raised overhead, hip sway + dance steps, HOP on the beat when React is on. Original design (not the GD trademark)","body":""},{"hash":"77a4578","date":"2026-09-01 21:58:41 -0700","author":"Steve Abrams","subject":"Restyle bear puppet festive + original (brighter cinnamon fur, cream belly, chunkier, big cute eyes w/ highlights, rosy cheeks, smile) — captures the joyful dancing-bear spirit without copying the trademarked Grateful Dead bear. Rig intact","body":""},{"hash":"09054a7","date":"2026-09-01 19:44:25 -0700","author":"Steve Abrams","subject":"Rig fix: connect head-to-body with a neck, raise arms to proper shoulders (add Left/Right Shoulder joints) so the bear reads as one connected puppet","body":""},{"hash":"5f0a7a7","date":"2026-09-01 19:38:03 -0700","author":"Steve Abrams","subject":"Add Character-Animator-ready rigged bear puppet .psd (assets/dancing-bear-puppet.psd): per-part named layers (Head/Body/Left+Right Arm+Leg, eyes with pupils+blinks+eyebrows, 14 mouth visemes for lip-sync, +draggable handles). Adobe-source asset, not part of the web build","body":""},{"hash":"00634a9","date":"2026-09-01 19:32:53 -0700","author":"Steve Abrams","subject":"Upgrade cubs to articulated puppet-style dancing bears: jointed swinging arms/legs, hip sway, head bob, muzzle+ears+belly, beat-reactive. Adobe-Character-Animator-style articulation, done live in-canvas (original bears, not the GD trademark)","body":""},{"hash":"cda7b3e","date":"2026-09-01 19:28:05 -0700","author":"Steve Abrams","subject":"Museum label completeness: document A (react), P (pterodactyl), click-to-fire in the keyboard help; describe the full cutout cast (cubs, songbirds, pterodactyl) + paper-grain style","body":""},{"hash":"b44db4f","date":"2026-09-01 18:58:27 -0700","author":"Steve Abrams","subject":"Add singing songbirds: cutout shoreline birds with ♪♫♬ note-bubbles that pop rhythmically (and on the beat when reactive). Original glyphs, no lyrics — copyright-safe","body":""},{"hash":"9486ed3","date":"2026-09-01 18:46:28 -0700","author":"Steve Abrams","subject":"Full cutout pass: flat-fill + bold outlines on dancers (with mask bands) and the riverboat (hull/decks/stacks/pilot house). Complete South-Park-cutout art direction across the cast + boat","body":""},{"hash":"1842974","date":"2026-09-01 18:40:51 -0700","author":"Steve Abrams","subject":"Cutout/South-Park art pass: flat-color fills + bold dark outlines on the animal cast (fox/heron/rabbit/bear/cubs) + construction-paper grain overlay. Dancers stay silhouettes per the brief","body":""},{"hash":"1043c03","date":"2026-09-01 18:35:33 -0700","author":"Steve Abrams","subject":"Keep animals/cubs grounded (lower hop/bounce); add pterodactyl fly-over (button + key p) soaring across the canyon","body":""},{"hash":"b8b147f","date":"2026-09-01 18:32:28 -0700","author":"Steve Abrams","subject":"Add Photoshop-composited canyon-backdrop.png asset + two dancing bear cubs beside the conductor bear (bob/rock, beat-reactive)","body":""},{"hash":"6f9809b","date":"2026-09-01 18:27:44 -0700","author":"Steve Abrams","subject":"Sync objects to the music: beat detection drives pulsating lamps + fireworks bursts on the beat; click/tap anywhere launches a firework (Model Arena style). Additive, react-gated","body":""},{"hash":"3e917c7","date":"2026-09-01 18:15:11 -0700","author":"Steve Abrams","subject":"Add optional 'React to Music' mode: Web Audio AnalyserNode on the live archive.org stream (CORS-open) drives lantern bloom, firefly flare, dancer bounce + boat bob on the beat. Additive — authored motion stays the default; museum note updated","body":""},{"hash":"6aa7d78","date":"2026-09-01 17:45:58 -0700","author":"Steve Abrams","subject":"Harden music room per codex review: fetch race-token guard, per-track audio-error skip (ignore benign ABORTED), keyboard guard for form fields, drop role=application","body":""},{"hash":"2b38b3c","date":"2026-09-01 17:11:16 -0700","author":"Steve Abrams","subject":"Add conditional DEAD back-link (shown only when served as /room of dead.agentabrams.com)","body":""},{"hash":"85c6c77","date":"2026-09-01 17:06:22 -0700","author":"Steve Abrams","subject":"Add Music Room: stream the Grateful Dead Live Music Archive (archive.org) — reuses the dead-agentabrams curated catalog; native transport, set list, seek, source attribution, embed fallback. Motion stays authored (no audio analysis).","body":""},{"hash":"8187692","date":"2026-09-01 16:34:57 -0700","author":"Steve Abrams","subject":"Harden shade(): clamp t to [0,1] and channels to [0,255] (codex review)","body":""},{"hash":"f968af5","date":"2026-09-01 16:34:21 -0700","author":"Steve Abrams","subject":"Fix NaN-color crash that froze the render loop (pal() rgb strings fed to hexToRgb); add shade() helper, deeper canyon parallax, favicon","body":""},{"hash":"a1ca1d2","date":"2026-09-01 16:30:01 -0700","author":"Steve Abrams","subject":"Scarlet Riverboat Masquerade: working single-file animated gallery","body":""}]}