## ecency/vision-mobile — 3.5.6…3.5.7

_339+ commits._

### Features
- **feat: show Ecency source badge on post feed cards** (8246814)
- **feat(waves): native HLS reels playback on mobile (fill, aspect-aware)** (00ffdc2)
- **feat(waves): Shorts (reels) tab in mobile waves feed** (eefc957)
- **feat(waves): show tip count + already-tipped state on waves feed cards** (c2e7f83)
- **feat(tabs): use outline (non-filled) bottom-tab icons** (13e510d)
- **feat(waves): use a wavy-dash (〰️) SVG for the Waves tab icon** (ade42e5)
- **feat(waves): use a single wavy-dash (sine-wave) icon for the Waves tab** (d8cbe2f)
- **feat(waves): point the Speak player at the author/permlink endpoint** (875e78d)
- **feat(waves): native audio player for Liketu Speak voice posts** (3a087ee)
- **feat(waves): add source filter tabs to the waves picker** (e9d2e65)
- **feat(waves): unify waves tab bar with the home-feed style** (fa8da37)
- **feat(register): block exchange-like and uid-numeric usernames** (e6eaaf5)
- **feat(waves): custom trending-tag feed tabs** (2ea986a)
- **feat(waves): show Ecency source badge on wave header** (4301053)
- **feat(waves): unify feeds onto the combined cross-container endpoint** (bf5dcfb)
- **feat(register): localize signup error bodies by backend code** (255d529)
- **feat(a11y): label post action-row + overflow-menu controls for screen readers** (e7c7b2b)
- **feat(redeem): funnel low-Points users from RC top-up to in-app Points purchase** (7a01951)
- **feat(perks): Points-funded RC top-up redeem + bump @ecency/sdk to 2.3.21** (01cdea1)
- **feat: warn and surface authority on hive-uri sign confirmation** (b4b4cbb)
- **feat(chat): recognize hive:// links in messages** (a088ce2)
- **feat(waves): promoted waves, custom-feed relative time, center expander chevron** (c9f0c26)
- **feat(waves): reply-count chip on wave cards (main-feed style)** (7c6f55a)

### Fixes
- **fix(waves): stop shorts reel playback when its tab is not focused** (96fced5)
- **fix(waves): address shorts reels review feedback** (83609b3)
- **fix(gif-badge): shrink GIF label so it covers less of the media** (edd8145)
- **fix(editor): flush (not cancel) pending caret + body debounces on unmount** (d37b034)
- **fix(waves): align the wavy-dash tab icon with the other bottom-tab icons** (68322b1)
- **fix(editor): fall back missing caret to end + cancel pending caret write on unmount** (49a1b89)
- **fix(editor): carry draft caret to the new draft id on first save** (0f8be3c)
- **fix(app): don't show fatal 'change server' alert for benign startup cancellations** (ce0ba23)
- **fix(editor): clear per-account compose editor cache (incl. caret) on save/publish** (a4d192a)
- **fix(post,editor): address PR review feedback** (9e87f72)
- **fix(editor): resume draft caret position instead of jumping to end** (2c97018)
- **fix(post): show Pin to blog on the post detail screen** (ac33933)
- **fix(waves): derive Speak spinner from loading && !paused (no state race)** (60403b2)
- **fix(waves): clear loading spinner when a Speak clip is paused** (41a8909)
- **fix(waves): only one live Speak audio player at a time** (f6c0755)
- **fix(waves): gate Speak notification controls to iOS + active player only** (2a01e1b)
- **fix(waves): reliable iOS sound + single active Speak player** (0029a51)
- **fix(waves): make the Speak audio player audible on iOS** (4469ce7)
- **fix(waves): even-fill the two base tabs across the width** (5b5e738)
- **fix(waves): match the main feed's + icon exactly** (a2d369a)
- **fix(waves): even-fill 2-tab bar + visible + button** (e07bd7b)
- **fix(waves): respect vote direction when adjusting optimistic net_votes** (656d4e3)
- **fix(waves): optimistic vote count on populous waves + bump @ecency/sdk** (8ad6c89)
- **fix(register): block chain-invalid usernames before paid-account purchase** (5f3ea1e)
- **fix: handle keycap/variation-selector emoji and preserve line breaks** (d8f13fa)
- **fix: strip emoji before translation to fix language detection** (707eb17)
- **fix(waves): address review feedback on the unified-feed refactor** (403523b)
- **Merge pull request #3290 from ecency/fix/register-error-message-coherence** (3756463)
- **Merge pull request #3289 from ecency/fix/turnstile-webview-android-https-gate** (6d8ec4b)
- **fix(register): show backend signup error as-is instead of wrapping it** (5e5c7df)
- **fix(register): pin Turnstile top-frame to ecency + cloudflare hosts (review)** (90682d6)
- **fix(register): gate the Turnstile WebView by https scheme, not origin (Android)** (e668e00)
- **Merge pull request #3288 from ecency/fix/action-row-accessibility** (370ecd7)
- **fix(a11y): address review — plural counts, gate a11y state, untrack node_modules** (9751612)
- **Merge pull request #3287 from ecency/fix/turnstile-webview-ios-frame-decision** (ac43361)
- **fix(register): guard only the top frame, keep sub-frames open (review)** (988bc61)
- **Merge pull request #3286 from ecency/fix/upvote-accessibility-screenreader** (ff0ba28)
- **fix(a11y): preserve payout amount + add i18n fallbacks (review)** (0c6d07b)
- **fix(register): allow all WebView frame schemes so the Turnstile challenge completes on iOS** (a24709b)
- **Merge pull request #3285 from ecency/fix/chat-bubble-width-on-quote** (3dd1289)
- **fix(a11y): make the upvote control screen-reader accessible** (21138a8)
- **fix(chats): expand quoting message bubble to full width** (b8dc37f)
- **Merge pull request #3284 from ecency/fix/register-turnstile-about-frames** (3735ba3)
- **fix(register): let the Turnstile WebView load the challenge's about: frames** (f3dce92)
- **Merge pull request #3283 from ecency/fix/chat-reply-username-above-quote** (aab5c7c)
- **fix(chats): show replying username above the quote block** (e514674)
- **Merge pull request #3282 from ecency/fix/content-payout-display** (e1c27f5)
- **fix(payout): handle search-API total_payout + cross-post numeric payout** (c47e640)
- **fix(payout): always show payout value (match web) + numeric-payout fallback** (3b7df3f)
- **fix(redeem): order @react-navigation/native import before relative imports (eslint import/order)** (62f710f)
- **fix(redeem): refresh Points balance on focus + widen Buy Points tap area** (dcb28a3)
- **fix(feed): rename Following feed label from Friends to Following** (4f4b84b)
- **Merge pull request #3279 from ecency/fix/hive-uri-sign-missing-signatures** (14de1cf)
- **fix: hive-uri signing crash ("Cannot read property 'push' of undefined")** (b5b6e0f)
- **Merge pull request #3276 from ecency/fix/pin-profile-stale-snapshot** (6608461)
- **fix: resolve account_update2 hive-uri ops to posting authority** (8927d5d)
- **fix: merge pin-to-blog onto fresh on-chain profile, not stale Redux copy** (ecbc3cc)
- **fix(waves): refetch promoted waves on pull-to-refresh (review)** (eb62fd7)
- **fix(stats): use visits (sessions) for post/wave view count to match web** (a0df307)
- **fix(waves): filter promoted waves for mutes/bots, clarify cadence (review)** (378d37e)
- **Merge pull request #3273 from ecency/fix/waves-reply-count-chip** (ec618f4)
- **fix(waves): de-dup reply count + guard logged-out tap (review)** (24cb37a)
- **Merge pull request #3272 from ecency/fix/waves-vote-count** (b0729bf)
- **fix(waves): preserve authoritative zero vote count (review)** (e1474aa)
- **fix(waves): keep vote count from collapsing on optimistic vote (review)** (edc01b6)
- **fix(waves): correct vote count on custom waves feeds** (31e7c56)
- **Merge pull request #3271 from ecency/fix/waves-video-thumb-transparent-bars** (3e68d21)
- **fix(waves): transparent letterbox bars on portrait video thumbs** (0f9ca85)
- **Merge pull request #3270 from ecency/fix/waves-card-votes-payout** (349f72c)
- **fix(waves): coerce absent payout to 0 (avoid $NaN on declined/field-missing)** (a243d21)

### Backend
- **Merge pull request #3318 from ecency/feature/ecency-source-badge-feed** (4ac44a6)
- **Bump version to 3.5.8** (f36a6d4)
- **Address review: anchor Ecency app match to the start** (3bbc14d)
- **Merge pull request #3317 from ecency/bugfix/shorts-reel-pause-on-blur** (182c7ac)
- **Merge pull request #3316 from ecency/chore/render-helper-2.5.17** (226a167)
- **Merge branch 'development' into chore/render-helper-2.5.17** (a2d0a39)
- **Merge pull request #3315 from ecency/feature/shorts-tab** (f909b90)
- **Bump @ecency/render-helper to 2.5.17** (27cc641)
- **Merge pull request #3314 from ecency/bugfix/sdk-bump-account-null** (67369fb)
- **Merge pull request #3312 from ecency/dependabot/npm_and_yarn/linkify-it-5.0.1** (5a40fba)
- **Merge pull request #3313 from ecency/bugfix/smaller-gif-badge** (98f8147)
- **Merge pull request #3311 from ecency/feature/waves-feed-tip-count** (fd649ae)
- **address review: keep non-waves comments icon-only + refresh feed after tip** (4c9c1b4)
- **Merge pull request #3310 from ecency/bugfix/outline-tab-icons** (06411b6)
- **Merge pull request #3309 from ecency/bugfix/waves-icon-and-caret-followups** (de90ec9)
- **Merge pull request #3308 from ecency/bugfix/pin-blog-and-draft-caret** (7418d18)
- **Merge pull request #3307 from ecency/bugfix/speak-single-live-player** (9ef59ae)
- **Merge pull request #3306 from ecency/bugfix/speak-audio-ios-playback** (d81e8db)
- **Merge pull request #3305 from ecency/bugfix/speak-audio-ios-sound** (5abe9ca)
- **Merge pull request #3304 from ecency/feature/waves-speak-audio-player** (3a691fb)
- **Merge pull request #3303 from ecency/feature/waves-source-tabs** (7be8771)
- **Merge pull request #3302 from ecency/bugfix/waves-tabs-evenfill** (ebe26a0)
- **Merge pull request #3301 from ecency/feature/unify-waves-feed-tabbar** (027dc53)
- **waves: address review on tab-bar unification** (7109bc3)
- **Merge pull request #3300 from ecency/bugfix/waves-tabbar-layout** (ff715e5)
- **waves: select Ionicons default explicitly for the + icon** (b406e08)
- **Merge pull request #3299 from ecency/bugfix/block-exchange-like-usernames** (af0147c)
- **Merge pull request #3298 from ecency/bugfix/waves-vote-count-optimistic** (1fc35da)
- **Merge pull request #3297 from ecency/feature/waves-custom-tag-tabs** (9b4e921)
- **waves: use combined waves-specific trending tags in the picker** (5c01b35)
- **Merge pull request #3296 from ecency/feature/wave-ecency-source-badge** (6fec632)
- **waves: address review on Ecency source badge** (f07e801)
- **Merge pull request #3295 from ecency/chore/bump-render-helper-2.5.15** (102a0f2)
- **Merge pull request #3294 from ecency/bugfix/iap-username-validation** (ceade51)
- **Merge pull request #3293 from ecency/bugfix/translate-strip-emoji** (8f53cf0)
- **Merge pull request #3292 from ecency/feature/waves-unified-feed** (a9d531a)
- **Merge pull request #3291 from ecency/feat/register-error-codes-i18n** (572633d)
- **Merge pull request #3281 from ecency/feature/rc-topup-buy-points-funnel** (b6421bd)
- **Merge pull request #3280 from ecency/feature/rc-delegation** (ff8d1da)
- **Merge pull request #3278 from ecency/dependabot/npm_and_yarn/undici-6.27.0** (a4241ee)
- **Merge pull request #3277 from ecency/dependabot/bundler/concurrent-ruby-1.3.7** (b0da91d)
- **harden: guard resolveTxRequiredAuthority against non-array input** (e80d0cc)
- **Merge pull request #3275 from ecency/chore/sdk-2.3.19-unify-waves** (6c68561)
- **Merge pull request #3274 from ecency/feat/waves-feed-polish** (d66943c)

### Docs
- **docs(register): clarify brand-core guards; cover bitget brand core in tests** (a1a0204)

### Chore
- **chore(deps): bump @ecency/sdk to 2.3.27** (a17615d)
- **chore(deps): bump linkify-it from 5.0.0 to 5.0.1** (db944b8)
- **chore(deps): bump @ecency/render-helper to 2.5.16** (9c180ac)
- **chore: bump @ecency/render-helper to 2.5.15** (c5bfa6f)
- **chore(deps): bump @ecency/sdk to 2.3.22** (a8548cf)
- **refactor: drop app-side ensureSignableTx guard, rely on @ecency/sdk 2.3.21** (80963dd)
- **chore: bump @ecency/sdk to 2.3.21** (d0c08b7)
- **chore(deps): bump undici from 6.24.1 to 6.27.0** (fba0829)
- **chore(deps): bump concurrent-ruby from 1.3.3 to 1.3.7** (927188e)
- **chore: bump @ecency/sdk to 2.3.20** (82b8072)
- **chore(waves): bump @ecency/sdk to 2.3.19, drop redundant client-side created mapping** (8f8dc8a)
- **chore(deps): bump @ecency/sdk to 2.3.18** (28e3ac3)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/ecency/vision-mobile?utm_source=github-action)._