4.3.9
What's Changed
- Aggragated balance customizing by @feruzm in #767
- Fix transaction id extraction by @feruzm in #768
- Improve buttons/icons for screen reader by @feruzm in #769
- Post age caching, Nextjs upgrade, Redis by @feruzm in #770
- Cache logged-in users on auth-class-equivalent routes by @feruzm in #771
- Move /chats /decks /waves /perks /search to a 60s cacheable tier by @feruzm in #772
- Fix redirect loop on paths with brackets ([object Object]) by @feruzm in #773
- Fix React #418 hydration mismatch on /@user/wallet by @feruzm in #774
- Read post-age L2 (Redis) on the request path by @feruzm in #775
- Stream Mattermost channels & members instead of paginating by @feruzm in #776
- Update mattermost-channels spec for streaming fetchers by @feruzm in #777
- View more tags by @feruzm in #778
- Fix/event loop monitor zombies by @feruzm in #779
- Feeds Performance improvements by @feruzm in #780
- Release commit hash based for source map by @feruzm in #781
- Fix ReDoS in render-helper that hung SSR for >30s by @feruzm in #782
- Warn on slow markdown renders in @ecency/render-helper by @feruzm in #783
- Add scan-post-corpus.mjs to find slow renderPostBody inputs by @feruzm in #785
- Block ReDoS regexes via eslint-plugin-regexp in render-helper by @feruzm in #784
- Send idempotency_key on AI assist POST by @feruzm in #786
- Noindex NSFW posts via tag, community, and title detection by @feruzm in #787
- Consolidate post URLs onto bare /@author/permlink (canonical + redirect) by @feruzm in #788
- Search and key verification fix by @feruzm in #789
- fix: profile page dates cause Firefox hydration teardown by @feruzm in #790
- fix(images): serve images via SNI-resilient i.ecency.com host by @feruzm in #791
- fix(chat): make the Mattermost bootstrap path idempotent (fixes 502s) by @feruzm in #792
- Render helper fix, Wallet improvements by @feruzm in #793
- Similar content improved by @feruzm in #794
- perf(cwv): cut hydration-time JS & fix LCP image preload (mobile Core Web Vitals) by @feruzm in #795
- Remaining image hoster fixes by @feruzm in #796
- fix(chat): differentiate transient bootstrap failures from genuine outages by @feruzm in #798
- Reply/wave canonical model + shared isIndexable by @feruzm in #797
- SEO: abuse-blacklist + empty-content noindex signals; sitemap route handlers by @feruzm in #799
- SEO: communities sitemap shard; flatten posts shard name by @feruzm in #800
- SEO: expand static sitemap; harden seocron deploy prime by @feruzm in #801
- SEO: stale-preserving guard for posts/authors sitemap + patient RPC by @feruzm in #802
- seo: sitemap never emits third-party canonical URLs (fix GSC "URL not allowed") by @feruzm in #803
- fix(similar-entries): correct full_posts, merge both sources, render ≥2, pin HiveSense nodes by @feruzm in #804
- Memo encryption + similar-entries thumbnail/body fix by @feruzm in #805
- perf(post-renderer): chunk medium-zoom out of SSR-critical client bundle by @feruzm in #807
- build(deps): bump the npm_and_yarn group across 2 directories with 16 updates by @dependabot[bot] in #806
- fix(sentry): widen botnet filter for null/undefined document access by @sentry[bot] in #808
- fix(sentry): extend parentNode hydration error filter to Firefox/Safari by @sentry[bot] in #809
- fix(rss,sentry): cache RSS feeds and silence transient RPC noise by @feruzm in #811
- build(deps): bump the npm_and_yarn group across 2 directories with 7 updates by @dependabot[bot] in #810
- fix(sdk): widen hive-tx retry budget and deprioritise deathwing in public-nodes by @feruzm in #812
- security: close 115 of 136 open CodeQL alerts on develop by @feruzm in #813
- security: close residual CodeQL alerts (18 → 3) by @feruzm in #814
- security(api/import): pin DNS to validated IP (closes SSRF #23) by @feruzm in #815
- perf(chat): parallelize bootstrap MM provisioning + Hive subscriptions by @feruzm in #816
- fix(sdk): broadcast failover for browser errors + similar-entries limit by @feruzm in #817
- fix(web): use callRPCBroadcast for MetaMask snap broadcasts by @feruzm in #818
- Search: add Show NSFW toggle on advanced form by @feruzm in #819
- fix: route Hive RPC through @ecency/sdk + remove dead payment listener by @feruzm in #821
- build(deps): bump js-cookie from 3.0.5 to 3.0.7 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #820
- fix(keychain): surface real broadcast errors and retry via a known-good node by @feruzm in #823
- fix(web): Prevent TypeError on OnboardingFrame unmount by @sentry[bot] in #822
- Point notifications WebSocket to enotify.ecency.com by @feruzm in #824
- fix(notifications): keep notification websocket alive and respect permission by @feruzm in #825
- fix(ui/modal): only call onHide on a real open→close transition by @feruzm in #826
- fix(notifications): show in-app toast in foreground (OS notification was suppressed) by @feruzm in #827
- fix(post): guard react-tweet rendering with an error boundary + bump to 3.3.0 by @feruzm in #828
- feat(notifications): make the notification toast clickable to open related content by @feruzm in #829
- chore: remove discontinued post-boost operations by @feruzm in #830
- fix(entry-stats): show visit duration directly instead of dividing it by @feruzm in #831
- feat(entry-stats): reload-proof Views (visits) + entry-page avg visit duration by @feruzm in #832
- Show Ecency source badge on post page by @feruzm in #833
- Run a single web replica on staging by @feruzm in #835
- Daily quests tracker (SDK module + Perks UI) by @feruzm in #834
- Rename navbar Perks button label (Plus → Perks) by @feruzm in #837
- Point the streak/quests reminder notification to perks (web) by @feruzm in #838
- Leaderboard: badge for completing all daily quests by @feruzm in #839
- Content-forward home page + site-wide JSON-LD structured data by @feruzm in #840
- fix(web): ignore browser-extension window[eFuncName] error in Sentry by @feruzm in #842
- Read next: Elasticsearch More Like This + SSR prefetch by @feruzm in #841
- Read-next: short SSR timeout for /similar by @feruzm in #844
- Parallel 3Speak uploads (TUS Concatenation) by @feruzm in #843
- SEO: make bare-canonical post redirect permanent (307 → 308) by @feruzm in #845
- SEO: enrich BlogPosting JSON-LD + tune post SERP snippet by @feruzm in #846
- Sequential fallback for parallel 3Speak uploads by @feruzm in #847
- seo: canonical author URLs in sitemap + raise post-walk time budget to 90s by @feruzm in #849
- build(deps): bump the npm_and_yarn group across 2 directories with 1 update by @dependabot[bot] in #848
- fix(sentry): suppress old Chrome 'parentNode' errors in beforeSend by @sentry[bot] in #836
- perf(web): lazy-load emoji picker; stop barrelling it into shared bundles (−508KB post first-load) by @feruzm in #850
- feat(render-helper): support Skatehype video embeds by @feruzm in #851
- perf(web): bound similar-entries client fetch, lazy comment composer, fix emoji loading by @feruzm in #852
- feat(decks): gate Decks behind auth with a guided first-run by @feruzm in #853
- fix(web): restore classic editor input width after barrel de-export by @feruzm in #854
- Index menu improvements by @feruzm in #855
- fix(render-helper): proxy ecency uploads so resize, srcset, blur & WebP/AVIF apply by @feruzm in #856
- fix(web): auto-capture entry render crashes to Sentry with component stack by @feruzm in #857
- feat(render-helper): strip First Context attribution footer in cleanReply by @feruzm in #858
- fix(web): stop SW precaching deleted source maps (persistent 500s) by @feruzm in #859
- fix(web): deployment skew protection for post-deploy chunk crashes by @feruzm in #860
- fix(web): pin number-format locale to stop hydration removeChild crash (1DRM) by @feruzm in #861
- fix(web): Sentry noise cleanup (1FMZ Firefox skew, 1AA7, XA0) by @feruzm in #863
- fix(web): repair /publish link editing and select-all in composer by @feruzm in #862
- fix(web): fix /publish crash on link click (missing curated icons) by @feruzm in #864
- Engagement: easier commenting, navigation & login-on-action (desktop + mobile) by @feruzm in #865
- Engagement alpha fixes: publish header, mobile perks placement & badge by @feruzm in #866
- Mobile top navbar: full-width sticky bar + hide-on-scroll by @feruzm in #867
- Mobile nav: expanding search, pen FAB icon, scroll-to-top placement by @feruzm in #869
- Mobile search: native autoFocus (review follow-up) by @feruzm in #872
- fix(web): stop browser-translation DOM crash (insertBefore 500, 1FP9) by @feruzm in #871
- fix(deps): migrate to vitest 4 (make #868 pass) by @feruzm in #873
- chore(deps): bump the npm_and_yarn group across 5 directories with 2 updates by @dependabot[bot] in #868
- chore: upgrade to Node 24 + unify pnpm 10.34.1 (drop unused sharp) by @feruzm in #875
- Inline proposal support from the announcement banner by @feruzm in #876
- fix(web): let users pick which Hive extension signs by @feruzm in #874
- refactor(web): unify the Sign with Extension button with a shared chooser by @feruzm in #878
- Add SVG favicon (Yandex recommendation + modern browsers) by @feruzm in #879
- chore: upgrade pnpm to 11.5.0 by @feruzm in #877
- ci(i18n): on-demand label-triggered Crowdin sync (no more per-language commits) by @feruzm in #880
- fix(hosting-api): build native deps on node:24-alpine (better-sqlite3) by @feruzm in #881
- ci(i18n): fix Crowdin sync — set the project branch (download was failing) by @feruzm in #882
- chore(i18n): sync translations from Crowdin by @github-actions[bot] in #883
- chore(i18n): sync translations from Crowdin by @github-actions[bot] in #884
- feat(i18n): enable Thai & Turkish in the language picker by @feruzm in #885
- fix: build post links in bare /@author/permlink form by @feruzm in #886
- test(web): consolidate runnable co-located specs into src/specs; remove dead react-router-era specs by @feruzm in #888
- chore(i18n): sync translations from Crowdin by @github-actions[bot] in #887
- chore(i18n): remove 5 unused locale files by @feruzm in #890
- test(web): add specs for high-value untested shared components by @feruzm in #889
- fix(web): run Next directly in prod image; fail deploys on Swarm rollback by @feruzm in #891
- fix(web): enhance bare /@author/permlink post links by @feruzm in #892
- docs(cache): worker no longer performs bot gating by @feruzm in #894
- fix(nav): align mobile compose FAB and scroll-to-top as a 48px circle pair by @feruzm in #893
- perf(web): keep the post editor off the entry read page; reserve cover image box by @feruzm in #895
- fix(web): tame post-deploy Sentry noise — deploy-skew reclassification + RC-exhaustion handling by @feruzm in #896
- perf(web): make entry thumbnail SSR-discoverable to un-gate feed/profile/community LCP by @feruzm in #897
- perf(web): tree-shake shared barrel + lazy tip Transfer — evict write-flow from read pages by @feruzm in #898
- perf(web): evict bip39 wordlists from read pages (lazy key derivation + @scure/bip39) by @feruzm in #899
- fix(sentry): separate staging environment + reclassify $RS hydration-resume noise by @feruzm in #900
- fix(web): keep @user/#tag chip styles after read-page tree-shaking by @feruzm in #901
- feat(entry): merge post title into author card for prominence by @feruzm in #902
New Contributors
- @dependabot[bot] made their first contribution in #806
- @github-actions[bot] made their first contribution in #883
Full Changelog: 4.3.8...4.3.9