Complete release record
Complete v1.5.2 Release Notes
2026-06-22 · Full v1.5.2 release-note record with 395 release-note entries across 5 sections.
395 release-note entries
This page expands the curated v1.5.2 overview into the full release-note record used during the long beta cycle.
Beta Notes
- Route beta/TestFlight builds through the isolated
wordflow-betaenvironment, including beta native Firebase config selection before Capacitor sync, beta Firebase project settings, beta hosting/cosmetics URLs, beta vocabulary uploads, beta admin hosting, and beta Cloud Run API deploy configuration. - Keep no-internet cold launches actionable by showing Play offline on the login splash instead of blocking on auth/profile/vocabulary startup work.
- Add standalone Airplane Mode routing through
/airplane-mode/hub, including offline game-over return-to-hub behavior and safe return to the online startup/lobby path after reconnecting or closing offline mode. - Add Flow League backend/domain settlement, security rules, leaderboard streams, arena/leaderboard UI, rank identity, and audience/metric switching so beta testers can validate the new weekly competitive loop end to end.
- Add five rare campaign prestige badges for beta validation: two first-10 no-deadline races, two fresh-start pace badges that count from campaign level 1, and one rolling 14-day Momentum Trial badge.
- Add rare badge progress tracking, redacted public race status, private winner-list protection, and stale momentum-window cleanup so locked badge details can show meaningful progress without exposing private race data.
- Add golden founder-style rare badge artwork with bright gem accents across Prestige Vault cards, reveals, detail sheets, and profile/leaderboard badge showcases.
- Add prestige badge achievement reveals, weekly leaderboard badge awards, vault catalog/localization, lobby return retry behavior, leaderboard showcases, and prestige vault presentation polish.
- Auto-grant achieved-but-unclaimed Letter Bloom reward tiers on the next daily refresh so stale daily reward state does not block a new Letter Bloom run.
- Refine leaderboard audience titles, Flow League metric presentation, and prestige vault layout details so leaderboard/vault identity stays readable on phone.
- Show an already-submitted message in Acrostiche du jour when a player re-enters a valid word that already filled an acrostic letter, while preserving the existing no-extra-progress rule.
- Replace the dense mode rules help modal with swipeable visual instruction carousels that use static board screenshots, callouts, slide dots, localized copy, and manual pre-play access from campaign, Daily, and standalone mode help buttons.
- Keep visual help review separate from starting a mode: lobby stage help, Daily Hub help, and Game Modes Hub help now open the carousel without launching or consuming the selected play.
- Reduce duplicate onboarding by suppressing the generic in-game coach lessons for modes now covered by the visual instruction carousel.
- Add a first-run setup FTUE that appears before the welcome tutorial, preselects the device language with no skip path, shows the generated player name, and lets testers keep it for now or change it before onboarding continues.
- Add a top-level Wordflow Admin Achievements workbench with cached achievement snapshot totals, banner-reward metadata, reached-versus-claimed/owned drop-off, player drilldowns, and source-health warnings for malformed achievement documents.
- Add admin level setup support for tester trophy counts so League matchmaking and intro trophy metrics can be seeded directly.
- Smooth the first lobby load by keeping lobby preparation on the splash progress bar, revealing the lobby only after its first frame is ready, fading the lobby in together, and avoiding the extra framed/static island surface before the 3D island loads.
- Fix the lobby 3D island reveal so removing the static fallback no longer leaves the stage area blank or transparent after the island asset URL resolves.
- Harden startup language/profile loading so English-device players with an in-app French preference keep French localization, startup vocabulary, and saved level unlocks from their real profile instead of sometimes seeing English level-one gates.
- Gate player initialization on finalized Auth state so sign-in, logout, and profile reset flows do not briefly create or load anonymous level-one profile state before the account settles.
- Polish the Google Magic playable ad so the opening demo hand is read-only, hint pulses follow the intended word order, board letters include enough vowels for reachable plays, and the final outro appears once with readable CTA timing.
- Unlock Cascade through the Daily slate so Daily players see a playable Cascade entry with real daily puzzle content.
- Scale Daily Secret Word by player level so level 30+ players sometimes see six-letter targets and level 60+ players can sometimes see six- or seven-letter targets, with fallback when a language lacks long candidates.
- Resume same-day Daily Secret Word sessions and reset Daily availability on the player's local day.
- Harden leaderboard replay launches so opening the first replay from a leaderboard player's profile re-seeds replay context at the final route owner and shows
/game/replaycontrols. - Expand replay playback presentations so Normal, Zen, Focus, Speed, Mots limités, Gating, Timed Gating, Fire & Ice Flux, Seal, Defuse, Boss, Battle, Endless, and Secret Word replays show mode-specific controls and context.
- Filter vocabulary profile Replays to launchable modes only, hiding Cascade and Daily Cascade rows until those modes have playable replay playback.
- Fix leaderboard-launched vocabulary profile replays so starting a replay from the lobby leaderboard popup dismisses the leaderboard before the replay route renders.
- Fix vocabulary profile Replays so profiles without equipped banners do not leave an empty banner gap, replay rows stay inside phone viewports, and word counts/mode labels use localized text.
- Fix vocabulary profile replay launch so tapping a replay opens the replay player instead of failing when playback starts without prebuilt board state.
- Require letter upgrades to have both enough fragments and enough lifetime plays with that specific letter, and show the play progress in the letter collection before an upgrade becomes ready.
- Show letter detail progress as separate fragment and lifetime-play rows, so testers can see both the fragment gate and counts such as
Jouée 14 / 15before upgrading. - Track actual submitted tile usage at run completion so letter play progress comes from played words, not from fragment ownership alone.
- Ignore malformed, decimal, negative, or unsafe seeded letter play counts when deciding upgrade eligibility.
- Add Cascade no-swaps refresh feedback so blocked refresh attempts explain why the board stayed put instead of feeling unresponsive.
- Clarify weekly award chest routing, stale campaign launch chest recovery, LMPLPL completion, and Connected Words required-word eligibility.
- Keep Modifier Climb back and close controls reachable inside phone safe areas, with clean return navigation after exiting.
- Stop the Social friend-code refresh/regenerate control from flickering when duplicate ready states arrive.
- Add generated image banners to the Store catalog and daily/weekly banner rotation alongside the existing SVG/pattern banners.
- Restore the reviewed high-quality imagegen world-country and world-city banner artwork to the Store rotation with matching wide and 5:4 intro-panel assets.
- Add a spectrum-balanced generated banner batch to improve color variety across Store, Locker, leaderboard, and intro surfaces.
- Refresh cached Store banner rotations whenever the banner catalog changes, so newly deployed image banners appear without waiting on stale SVG-only rotation documents.
- Show premium image banner purchase confirmations as wide artwork previews with premium effects in both Store and Locker before the tester confirms the gem purchase.
- Map generated image banners to 5:4 intro-panel artwork for Boss, Battle, and League intro screens so player identity appears in the correct format behind names and metrics.
- Add a Wordflow Admin banner inventory view that shows the current Store rotation, the full banner catalog, and generated banners' 5:4 intro-panel previews beside their wide artwork.
- Clean up League intro identity so player and opponent names stay centered over shop banners, trophy metrics remain visible, League Bot names do not repeat rank in the name, and the Vous/Adversaire role captions are removed.
- Remove the dotted/parallax dust layer from generated premium banner effects so the artwork stays cleaner across Store, Locker, leaderboard, and intro previews.
- Show localized IAP price labels across Store offer cards instead of fallback placeholders.
- Fix daily game language coverage so English LMPLPL validates against the English dictionary and every supported app language can load Daily Hub games with native lists or supported fallback puzzle pools.
- Simplify the Daily Hub around one Today’s Chest loop: Pouch at 25 progress, Daily Chest at 100, Grand Chest at 150, Acrostiche and rotating games grant +25, Mot du jour grants +50, and earned chests sit under the meter.
- Support generated image banners in the locker and leaderboard, while keeping color customization limited to SVG/pattern banners.
- Show leaderboard entries as centered banner nameplates with generated image/SVG artwork, lighter readability overlay, and premium web effects.
- Revamp Store navigation so premium banner offers live in a clear banner area and coin/gem balance taps open the matching currency tab.
- Remove the combined Store currency shell on phone so Gemmes and Pièces have full-width direct sections and the 100,000 coin pack no longer overlaps its price.
- Restore rich Store tab artwork with generated banner and currency tab images while keeping the first Store tab focused on premium banner image rotation.
- Add premium locker banner artwork and daily achievement prestige banner rewards to the tester-facing reward/locker flow.
- Show compact campaign difficulty pills on every lobby stage, while Boss stages keep their Boss label and IQ details in the same ribbon.
- Refine the lobby stage header so the translated mode title sits above a display-only level ribbon, the difficulty chip attaches to the ribbon top edge, the old standalone mode icon is gone, and a dedicated help button beside the title opens mode rules.
- Show Boss difficulty and IQ in the lobby stage ribbon for campaign Boss stages so testers can see the fight strength before starting.
- Tighten Boss phone layout so the close control shares the score-comparison band and the board, powers, and bottom actions stay in frame.
- Route lobby achievement claim rows to Achievements before collection, then refresh player-level progress after XP rewards through the shared reward-claim handler.
- Keep high-XP quest and achievement claims from leaving the level/progress UI stale after the reward moment.
- Add a non-blocking Daily Word Connect hidden-word celebration and clear stale celebration timers when leaving the game.
- Require the expected slotted daily chest before showing claimed state, preventing stale daily chest reward state.
- Refresh Letter Bloom mobile UX: help is out of the header without extra native safe-area gaps, the page no longer scrolls vertically, Indice sits beside the current selection, and Effacer/Valider are the only wide bottom actions.
- Keep the Letter Bloom honeycomb in a clean 2-3-2 geometry with the lower outer letters aligned under the top row.
- Fix achievement tier claim rows so testers can claim directly from the lobby and see both the achievement track and tier title.
- Teach campaign-only mode rules with in-game coach marks while keeping the pre-game splash as a lightweight teaser.
- Keep Daily Secret Word on its existing one-step mode explanation path.
- Add Space, City, Jungle, Ocean, Jardin, and Magic outcome videos for 1/2/3-star victories and defeats.
- Keep Fire & Ice Flux result summaries and mode tutorial resume behavior aligned with the latest gameplay fixes.
- Update beta tester notes with outcome-video coverage and recent release-history checkpoints before publishing to master.
Features
- Add isolated beta release environment wiring for TestFlight/Play Internal builds, including native Firebase config selection, beta Firebase/Hosting/Admin targets, beta Cloud Run API routing, and beta deploy configuration.
- Add offline startup handling so no-internet launches keep the splash actionable, expose Play offline, and resume online setup when connectivity returns.
- Add
/airplane-mode/hubas a standalone offline entry with safe close/back handling and offline game-over return support. - Add the Flow League competitive loop with backend settlement, shared domain contracts, security coverage, leaderboard streams, arena shell, and leaderboard metric controls.
- Add five rare campaign Prestige Vault badges: Launch Vanguard for the first 10 players to campaign level 500, Launch Starbound for the first 10 players to 1,000 campaign stars, First Week Climber for reaching campaign level 100 within 7 days from level 1, Thirty-Day Ascent for reaching campaign level 250 within 30 days from level 1, and Momentum Trial for completing 100 distinct campaign levels inside any rolling 14-day window.
- Add rare campaign badge proof tracking for campaign start time, milestone pace windows, rolling distinct level completions, and public redacted first-10 race status.
- Add golden founder-style rare badge assets with bright purple, blue, red, and green gem accents for the Prestige Vault, reveal flow, badge detail sheets, and profile/leaderboard showcase surfaces.
- Add prestige badge progression, reveal, vault catalog, vault presentation, and leaderboard showcase support.
- Add Letter Bloom prior-day auto-grant behavior for achieved reward tiers left unclaimed at daily reset.
- Add a Daily Acrostic duplicate-word feedback event and word-reaction notice for already-submitted valid words.
- Add a visual mode-instructions carousel for campaign, Daily, and standalone mode help flows, with static screenshots, callouts, swipe/dot navigation, and localized slide copy.
- Add manual help entry points that open the carousel before play from lobby stage cards, Daily Hub cards, and the Game Modes Hub without starting the selected mode.
- Add mode-instruction coverage tests for lobby, Daily Hub, and Game Modes Hub journeys.
- Add first-run setup before the welcome tutorial so new players confirm language and generated name from a dedicated lobby popup.
- Add a Wordflow Admin Achievements workbench for reviewing achievement tier adoption, banner-reward gaps, cached snapshot freshness, progress distributions, and per-state player drilldowns.
- Add admin trophy-count setup for League testing.
- Add a lobby readiness gate that snapshots first-frame level, mission, energy, and stage data before the lobby is revealed from the splash flow.
- Add lobby first-frame readiness checks around the island scene so the lobby can reveal coherently without a second framed fallback surface.
- Add mode-specific replay presentations for Normal, Zen, Focus, Speed, Mots limités, Gating, Timed Gating, Fire & Ice Flux, Seal, Defuse, Boss, Battle, Endless, and Secret Word.
- Add a polished Google Magic playable ad flow with guided demo pacing, word-order hint pulses, balanced board letters, and a single final outro.
- Add Daily Cascade availability through the Daily slate for players with Daily games unlocked.
- Add level-aware Daily Secret Word selection with deterministic six- and seven-letter target days for higher-level players.
- Add same-day Daily Secret Word resume handling and local-day Daily reset behavior.
- Add lifetime letter play requirements to letter leveling, paired with existing fragment costs and collection progress display.
- Add separate fragment and lifetime-play requirement rows to the letter detail modal.
- Track per-letter tile usage from submitted words and persist it as lifetime letter play progress after each completed run.
- Add Cascade no-swaps refresh feedback for blocked swap/refresh attempts in campaign and daily play.
- Add clearer weekly award chest routing and recovered launch chest handling.
- Add generated image banner assets to the banner catalog, daily/weekly offer rotation, locker previews, and leaderboard row presentation.
- Add reviewed imagegen world-country and world-city banner artwork back into the active generated banner catalog and shipped cosmetics manifest.
- Add a color-balanced generated banner artwork batch.
- Add 5:4 generated banner intro-panel manifest mappings for Boss, Battle, and League intro presentations.
- Add a Wordflow Admin Store Economy banner inventory page with current Store rotation cards, full catalog filtering, wide banner previews, and 5:4 intro-panel previews.
- Add leaderboard banner nameplates with centered player text and premium web effect support across image and SVG banners.
- Add Store banner and currency sections with direct coin/gem tab targeting from shared balance controls.
- Add localized Store price labels for purchase offers.
- Add generated Store tab artwork assets for the banner and combined currency sections.
- Add Catalan, Polish, and Swedish Daily Secret Word answer lists sourced from playable dictionaries.
- Add direct Store currency tab targeting from the main header gem and coin shortcuts, with coin shortcuts scrolling to coin packs.
- Add premium banner catalog artwork and purchase presentation.
- Add a simplified Daily Hub fixed-progress chest loop with always-present Acrostiche and Mot du jour plus rotating Daily games contributing progress points.
- Add daily achievement prestige banner reward definitions and locker presentation.
- Add compact lobby difficulty pills for every campaign stage.
- Add lobby stage mode titles above the display-only level ribbon for regular and Boss campaign stages.
- Add a dedicated lobby stage mode help button beside the mode title while keeping the level ribbon display-only.
- Add lobby Boss difficulty previews showing difficulty and IQ from the campaign Boss config.
- Add a shared reward-claim result handler so XP-granting reward claims can refresh player-level progress from one post-claim seam.
- Add a Daily Word Connect hidden-word celebration for newly accepted bonus words.
- Refresh the Letter Bloom rank progress card and mobile board controls.
- Add campaign-specific mode lesson sequences for Boss, Defuse Bomb, Secret Word, Cascade, Letter Bloom, Word Limit, and Modifier Climb.
- Add localized campaign mode lesson copy for supported languages.
- Add themed outcome videos for Space, City, Jungle, Ocean, Jardin, and Magic campaign worlds
- Add gating to airplane mode with help icon
- Add lobby FTUE callout for gating mode
- Add gating game page, game-over integration, analytics & i18n
- Add gate HUD component
- Register gating mode in campaign type system
- Add GatingGameMediator with segment tracking
- Add deterministic segment generator
- Add gate types and validation logic
- 3D tactile SUBMIT button, BACK on right, ENTER removed from keyboard
- Add kid mode to lobby FAB
- Rename Sessions to Journeys, finalize 7-tab header, add category colors
- Add real-time live feed page with Firestore streaming
- Add feature health auto-dashboard page
- Add analytics test data seed script for emulator
- Add generic cached event metrics Cloud Function and client service
- Add event registry with type inference, migrate all events, delete old files
- Handle openModal query param on lobby page
- Integrate LobbyFabComponent into lobby, remove standalone airplane button
- Add LobbyFabComponent with expandable mode picker
- Add lobby FAB analytics event names
- Add RouterAnalyticsService for automatic page view tracking
- Type-safe trackEvent with per-event property validation
- Create type-safe event files with per-event property maps
- Add chest drop animation with particles, SFX, and lobby integration
- Add dedicated pages for cascade, spelling-bee, lmplpl, and wordle
- Add random world background + theme to airplane Wordle page
- Add random world background + theme to daily Wordle page
- Add world background + theme to campaign Wordle page
- Add Wordle color tokens to WorldTheme system
- Frosted glass keyboard with world-themed feedback colors
- Update grid tiles to use world theme CSS vars + frosted glass
- Add npm script for local dashboard generation
- Add main CLI entry point for CI integration
- Add HTML dashboard generator with 3-tab layout
- Add history manager with rolling window
- Add Playwright result parser with tests
- Add downloadable language packs with IndexedDB caching
- Add offline auto-suggest overlay on lobby
- Add analytics tracking for hub, game start, and game end
- Add i18n translations for all supported languages
- Add airplane icon entry point on lobby
- Implement airplane hub page with game cards and highscores
- Add dedicated airplane game-over page
- Add airplane game page wrapping <app-game>
- Add puzzle pack types, generation script, and loader service
- Add AirplaneGameMediator (offline BaseGameMediator subclass)
- Add highscore service with localStorage persistence
- Add AirplaneResultService for hub-game-gameover context
- Enhance NetworkService with reactive isOnline signal
- Add AirplaneUnlockService with mock IAP
- Scaffold module with routes and hub placeholder
- Add _game-over-shell.scss shared mixins and keyframes
- Add SpellingBeeDailyService implementing DailyGameServiceContract
- Add PlayerProfileStream for shared player_profiles listener
- Add shared parseLeveledProgress utility for level-based progress
- Split LmplplService into GameEngine + DailyService
- Add createDailyProgress composition factory
- Add mapFn to createFirestoreStream factory
- Create <app-hub-card> presentational component
- Add createBalanceFacade composition factory
- Initialize letter pity bias in WOTD game pages
- Wire board bias into BaseGameMediator word submission flow
- Add drought tracking to WordSessionTracker
- Thread WotdBoardBias through drawRefillLetters pipeline
- Add board bias types and pure functions for letter pity system
- Add canDismiss option to ModalService
- Add IAP store spec for sandbox purchases, cancellation, and restore
- Add push notification spec for foreground, tap, and cold start
- Add deep link routing spec
- Add safe area visual regression spec
- Add deep link helpers for iOS and Android
- Add screenshot comparison helper with pixelmatch
- Add push notification simulation helpers for iOS and Android
- Add WebView/native context switching helper
- Add GameOverShellComponent with 3-zone layout
- Add ModalService facade with typed props and results
- Add AppErrorHandler service with categorization and toasts
- Add createAsyncGuard and createConcurrentGuard utilities
Bug Fixes
- Select the correct native Firebase files before beta and production Capacitor syncs so TestFlight builds do not accidentally carry a stale production or local
GoogleService-Info.plist. - Keep beta Firebase, vocabulary, admin hosting, and Cloud Run deploy steps pointed at
wordflow-betarelease configuration and service endpoints instead of production. - Keep rare badge first-10 winner lists private by mirroring only redacted race status to public client-readable documents.
- Avoid fabricating fresh-start rare badge proof from legacy campaign progress when the player's level-1 start time is not known.
- Clear stale campaign momentum entries outside the rolling award window so the 14-day badge does not keep outdated completion proof alive.
- Explain repeated Daily Acrostic words with an already-submitted notice instead of silently rejecting extra acrostic progress.
- Guard first-run setup lobby handoff against missed Ionic enter events, modal presentation failure, late player loading, profile reset, and active account switches so the welcome chain does not duplicate or disappear.
- Keep first-load lobby work on the splash progress bar so players do not wait once on the splash and again on a staggered lobby, and reset readiness on logout/profile-reset paths to avoid stale first-frame state.
- Remove the static lobby island fallback frame so the world background art no longer appears as a scrollable rounded panel while the 3D island loads.
- Reveal the lobby 3D island model as soon as its resolved GLB URL is available, preventing the model layer from remaining opacity-zero after the fallback removal.
- Bound optional splash and mission-readiness work so slow banner, arena, letter-fragment, quest, or achievement sources cannot trap the splash at 100%.
- Use full-bleed portrait splash artwork for iPad/tablet portrait while preserving the desktop splash treatment for desktop browsers.
- Keep startup language, vocabulary, and progression coherent for English-device players whose app profile is set to French, even when stale cached level-one profile data is present.
- Wait for finalized Auth state before creating or loading player initialization data, preventing transient anonymous level-one state during sign-in and reset handoffs.
- Keep League intro names centered on their banner panels while removing role captions and duplicate rank text from League Bot display names.
- Re-seed replay context at the final leaderboard, lobby, and social replay route owners so selected leaderboard replays open with visible controls instead of a blank expanded replay surface.
- Hide Cascade and Daily Cascade attempts from vocabulary profile Replays while those modes do not have supported playback routes.
- Prevent the Google Magic playable ad outro from stacking or replaying duplicate final states, and slow the demo hand enough for players to read the sequence.
- Resume Daily Secret Word sessions for the same local day instead of restarting or showing stale completion.
- Use local-day reset timing for Daily availability.
- Dismiss the lobby leaderboard/profile overlay stack before navigating to a selected replay, preventing the replay board and controls from rendering behind the leaderboard popup.
- Collapse the empty banner area in vocabulary profile Replays when the viewed player has no banner, and prevent replay row metadata from overflowing or exposing raw i18n keys.
- Open selected vocabulary profile replays reliably by rebuilding missing replay board state before playback and surfacing load failures in the profile.
- Show lifetime letter-play progress inside the letter detail modal instead of only showing fragment progress.
- Reject malformed or unsafe letter play counts instead of flooring them into upgrade-eligible progress.
- Surface feedback for Cascade no-swaps refresh attempts so the board does not appear stalled.
- Route weekly award chest actions through the correct reward context.
- Recover stale campaign launch chest state without blocking the run.
- Record LMPLPL completion cleanly and filter Connected Words required candidates through playable dictionary metadata.
- Keep Modifier Climb navigation controls inside phone safe areas and return cleanly after exiting.
- Prevent Social friend-code refresh controls from flickering during duplicate ready-state emissions.
- Keep banner color customization scoped to SVG/pattern banners while generated image banners keep fixed artwork.
- Keep generated banner artwork color variety broader with the spectrum-balanced batch.
- Load the English LMPLPL dictionary on the server and resolve unsupported Daily Hub languages to playable puzzle/index content instead of missing daily data.
- Regenerate Store banner rotation documents when the catalog changes, preventing old SVG-only cached rotations from hiding generated image banners after deploy.
- Replace the retired low-quality world-country and world-city generated fallback assets with reviewed high-quality imagegen artwork in Store, Locker, and intro-panel manifests.
- Populate generated banner intro-panel paths in the shipped cosmetics manifests so intro screens no longer fall back to cropping the old wide banner artwork.
- Show Store and Locker banner purchase confirmations with a wide selected-banner preview and premium effect layer instead of the old compact thumbnail treatment.
- Retire dotted/parallax dust artifacts from generated premium banner effects while keeping the banner artwork readable on Store, Locker, leaderboard, and intro surfaces.
- Surface localized Store prices on offer cards instead of placeholders.
- Reduce the dark overlay on leaderboard banner rows so generated image and SVG artwork remains visible behind centered player names.
- Keep Boss campaign rounds from cropping on phone by sharing the top score/close-control band and trimming vertical spacing.
- Remove the redundant lobby stage mode icon and prevent Boss stage difficulty chips from repeating the Boss label now that the mode title is shown above the ribbon.
- Stop the lobby level ribbon from acting as the game-rules entry point; rules now open from the explicit title-adjacent help button.
- Keep Store banner offers, coin packs, and gem packs separated so testers land on the intended purchase surface.
- Remove the extra combined currency card/container around Gemmes and Pièces to preserve phone-width space for large coin offers and prices.
- Restore the Store tab bar from plain icon-only tabs to themed image artwork across Store and Store overlay entry points.
- Remove Daily Hub rarity, odds, perfect-bonus, and booster-prompt surfaces so Daily games simply grant fixed progress toward today's chest rewards.
- Keep earned Daily chests beside the chest meter and hide the old empty vault placeholder so the page no longer has a detached saved-chest section.
- Route claimable achievement lobby rows to Achievements before collection instead of opening the reward directly from the lobby.
- Refresh player-level progress after positive-XP quest and achievement reward claims.
- Prevent daily chest rewards from showing claimed state before the expected slotted chest exists.
- Clear pending Daily Word Connect hidden-word celebration timers when the game page is destroyed.
- Move Letter Bloom help out of the header and keep the header focused on back/title/finish.
- Remove the extra native safe-area gap above Letter Bloom help/rank content and prevent vertical page scrolling.
- Move Letter Bloom hints beside the current selection instead of using a third bottom honeycomb action.
- Keep Letter Bloom delete and submit as the only bottom actions and size them as a two-button row.
- Fix achievement tier claim state repair so already-claimed tiers do not leave stale lobby claim rows.
- Show achievement track names in lobby claim rows so tier labels are not ambiguous.
- Keep the pre-game mode splash from completing campaign mode FTUE before gameplay starts.
- Keep Daily Secret Word on the one-step daily mode explanation instead of the campaign lesson path.
- Correct Fire & Ice Flux game-over summary context
- Require an explicit tap before resuming gameplay from mode splash tutorials
- Update missions and profile-review-card specs for new dependencies
- Move safe-area-inset-bottom to keyboard area, handle SUBMIT key
- Move bottom safe area from child elements to main container
- Add box-sizing border-box to full-height game containers with safe-area padding
- Swap wordle keyboard buttons and fix safe area padding
- Remove download gate from airplane mode hub — packs are bundled
- Airplane wordle game now ends after 6 tries and advances word on back
- Standardize wordle tile colors to green/yellow across all worlds
- Use macos-latest runner for iOS → TestFlight deploy job
- Prevent 2nd game going straight to game-over and fix reaction layout shift
- Add missing Firestore composite index for player_events
- Use draft release status for unpublished Play Store app
- Separate emulator logs from Playwright output in E2E runs
- Auto-rollout Android builds to internal testers
- Restore GameSfxService provider in lobby spec
- Fix seed script data compatibility with Cloud Functions
- Make GAME_MEDIATOR injection optional in GameOverPage
- Rewrite analytics dashboard tests with fake auth bootstrap
- Add missing properties to 16 registry events with empty definitions
- Restore daily rewards card in Quests tab
- Add missing event property types to fix build errors
- Fix data compatibility between seed script and dashboard pages
- Seed vocabulary local assets before Firebase emulators start
- Resolve analytics event type mismatches and test isolation issues
- Pass playwright project inside emulators:exec script to prevent project ID override
- Resolve TypeScript errors in analytics spec file
- Use face image instead of closed chest in drop animation
- Use localhost instead of 127.0.0.1 for Firebase emulator hosts
- Add missing events and properties to typed event maps
- Increase webServer timeout and cache Firebase emulators
- Add workflow_dispatch to on: triggers
- Add workflow_dispatch trigger to E2E workflow
- Install functions deps and add contents:write for E2E jobs
- Cap chest slot bar width on tablets to prevent oversized slots
- Keep login keychain in search list to prevent Control Center prompts
- Include airplane-mode assets in build output
- Resolve localized testing notes aliases to actual content
- Airplane hub as popup-shell modal, airplane icon under hamburger, full-width chest slots
- Crop and normalize chest images to 1375x1250
- Add unlock duration, inline gem cost, hide tabs, enlarge chest
- Improve UX for slot-originated locked chests
- Add missing GameMediatorContext provider and E2E tests
- Add missing wordle fields to AirplaneGameContext/Result types
- Revamp help modals with PopupShell and 3D tactile design
- Revamp help modals with PopupShell and 3D tactile design
- Adapt to GameMediatorContext refactor
- Center daily game-over modals on tablet and unify CTA labels
- Remove API key requirement from testing notes scripts
- Use previous patch tag as boundary for testing notes
- Return edge-cases/subdir for edge-case feature areas
- Wire score recording, isNewBest, and Play Next context
- Resolve pre-existing test failures blocking build
- Restore original boss-vs-player winner styling and remove dead star-earned include
- Update stream spec error expectations for factory migration
- Remove unsupported presentation option from ModalService
- Add missing drought mock methods to speed-mode mediator test
- Address code review issues (deprecated API, CI booleans, Android push)
- Unify daily card state interface and fix LMPLPL/Cascade claim bugs
- Strip Markdown from testing notes before uploading to app stores
Refactoring
- Update keyboard layouts — remove ENTER, reposition BACK, add SUBMIT
- Convert hub to popup-shell pattern with E2E test
- Remove daily games section from Quests tab
- Redirect game-over screens to lobby with openModal=dailies
- Daily card navigates to lobby instead of opening modal directly
- Rename Missions tab label to Quests
- Remove deprecated trackPageView method
- Merge OnboardingAnalyticsService into main AnalyticsService
- Switch to router auto-tracking, remove manual trackPageView calls
- Delete old flat types file
- Move navigation state machine into NavigationOrchestrator
- Extract RunSummaryMapper from GameOverPage
- Inject GAME_MEDIATOR token instead of concrete NormalGameMediator
- Move campaign assist logic into CampaignAssistService
- Move WOTD mode detection from GameComponent to mediator capability
- Move navigation responsibility from GameComponent to parent pages
- Replace instanceof checks with capability methods
- Move victory particle burst into GameParticleEngine
- Move PlayerProfileStream from shared/ to src/app/core/
- Migrate speed-mode-game-over to shared star and animation mixins
- Migrate game-over-header to shared score-card, star, and animation mixins
- Migrate game-over-actions fade-in to shared keyframe
- Migrate battle-results score cards to shared mixin
- Migrate acrostic-game-over stat rows to shared mixin
- Migrate fullword-game-over stat rows to shared mixin
- Migrate cascade-daily-game-over stat rows to shared mixin
- Remove spellingBee workaround from DailyHubPage, use SpellingBeeDailyService
- Replace spellingBee workaround with SpellingBeeDailyService in DailyCompletionFacade
- Migrate WordLimitProgressStream to shared PlayerProfileStream
- Migrate SealModeProgressStream to shared PlayerProfileStream
- Migrate PlayerCosmeticsStream to shared PlayerProfileStream
- Migrate PlayerAvatarStream to shared PlayerProfileStream
- Migrate WordLimitProgressStream to shared parseLeveledProgress
- Migrate SealModeProgressStream to shared parseLeveledProgress
- Migrate ChestInventoryStream to createFirestoreStream factory
- Migrate SpellingBeeProgressStream to createFirestoreStream factory
- Migrate WotdTriesStream to createFirestoreStream factory
- Migrate consumers from LmplplService to split services
- Adopt <app-hub-card> in all collection cards
- Simplify 3 daily services with createDailyProgress factory
- Adopt <app-hub-card> in all social cards
- Migrate 5 streams to createFirestoreStream factory
- Simplify balance facades with createBalanceFacade
- Migrate all hub cards to openTabPopup()
- Add openTabPopup() convenience method
- Extract _missions-card-shell.scss from missions cards
- Adopt AppErrorHandler across tier-2 services and components
- Adopt AppErrorHandler across tier-1 user-facing services
- Address code review feedback for quest-list-card
- Adopt createAsyncGuard across 16 services and components
- Replace quests/challenges cards with generic quest-list-card
- Add generic MissionsQuestListCardComponent
- Adopt ModalService across store, progress, collection, and remaining modules
- Add QuestListCardConfig interface
- Extract shared quest assignment utilities
- Extend shared interfaces to remaining stream and card implementations
- Adopt ModalService across battle, social, and clan
- Adopt ModalService across daily game modes
- Extract shared interfaces for repeated structural patterns
- Adopt ModalService across game and game-over components
- Adopt ModalService across lobby and shell components
- Migrate game-over to shared shell
- Migrate daily game-over modal to shared shell
- Migrate fullword game-over modal to shared shell
- Migrate acrostic game-over modal to shared shell
- Migrate game-over modal to shared shell
- Migrate game-over modal to shared shell
Other Changes
- Initial plan
- Initial plan
- I18n: add lobby FAB label translations