Skip to content

Commit a43ffae

Browse files
committed
Release v3.16.15: voice channel-code-rotation desync fix (#5347 root cause), version display regression fix (#5369)
1 parent 015851c commit a43ffae

5 files changed

Lines changed: 33 additions & 20 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ Format follows [Keep a Changelog](https://keepachangelog.com/). Haven uses [Sema
1313

1414
## [Unreleased]
1515

16+
---
17+
18+
## [3.16.15] — 2026-05-20
19+
1620
### Fixed
21+
- **Version display regression from v3.16.14 (#5369).** The v3.16.14 release tag was created without bumping `package.json`, so servers running v3.16.14 reported version v3.16.13 via `GET /api/version` and the `session-info` socket event. Corrected in this release.
1722
- **Voice chat: ACTUAL ROOT CAUSE of the recurring self-vanish bug (#5347) — channel code rotation desync.** The new server-side `[VoiceDiag]` logs from the previous patch lit it up immediately: every time the bug hit, the server's auto-rotation timer had just rotated the channel's code (e.g. `95aa65d9 → aaeb3979`), but the voice clients still in the channel kept emitting `voice-rejoin` / `request-voice-users` / `voice-mute-state` with the OLD code. The server couldn't find the old code in the DB (because it was just updated), and the existing `channel-code-rotated` client handler only migrated `this.currentChannel` — it never touched `this.voice.currentChannel`. So every voice client was stuck holding a dead reference, the watchdog/self-heal loop ran forever, peers couldn't connect, and "everyone has to leave and rejoin to recover" was the only escape.
1823
- **Client now migrates voice-side state on rotation** (`this.voice.currentChannel` and `this.voice._softLeftChannel`), not just the text-channel state.
1924
- **Server now migrates the voice socket-room AND broadcasts the rotation event to the voice room too**, so users in voice but not viewing the text channel still receive the update.

docs/index.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1415,12 +1415,12 @@ <h2>Download Haven</h2>
14151415
</div>
14161416

14171417
<div class="download-card fade-in">
1418-
<h2>&#x2B21; Haven Server &mdash; v3.16.14</h2>
1418+
<h2>&#x2B21; Haven Server &mdash; v3.16.15</h2>
14191419
<p class="download-version">Latest stable release &middot; Windows, macOS &amp; Linux &middot; ~5 MB</p>
14201420

14211421
<div class="download-btn-group">
1422-
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.14.zip" class="btn btn-primary download-main">
1423-
<span class="icon">&#x2B07;</span> Download v3.16.14 (.zip)
1422+
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.15.zip" class="btn btn-primary download-main">
1423+
<span class="icon">&#x2B07;</span> Download v3.16.15 (.zip)
14241424
</a>
14251425
<div class="download-alt-links">
14261426
<a href="https://github.com/ancsemi/Haven" target="_blank">&#9965; View on GitHub</a>
@@ -1437,7 +1437,11 @@ <h2>&#x2B21; Haven Server &mdash; v3.16.14</h2>
14371437
<div class="version-list">
14381438
<div class="version-list-inner">
14391439
<div class="version-item">
1440-
<div><span class="v-name">v3.16.14</span><span class="v-tag latest">Latest</span> &mdash; Voice chat: server-side 4 s grace period before evicting a disconnected user so transient blips never broadcast <code>voice-user-left</code> to peers; fast-path rejoin that skips RTCPeerConnection renegotiation when the socket reconnects within the window; client-side roster watchdog that auto-fires <code>voice-rejoin</code> if we&rsquo;ve silently dropped off the server list &mdash; fixes the recurring self-vanish glitch (#5347)</div>
1440+
<div><span class="v-name">v3.16.15</span><span class="v-tag latest">Latest</span> &mdash; Voice chat: actual root cause of the recurring self-vanish glitch (#5347) fixed &mdash; channel code rotation desync caused voice clients to hold stale codes after server rotation, breaking reconnects until manual rejoin; null audioCtx crash on voice leave patched; version display regression from v3.16.14 corrected (servers reported v3.16.13 despite running v3.16.14) (#5369)</div>
1441+
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.15.zip">Download &rarr;</a>
1442+
</div>
1443+
<div class="version-item">
1444+
<div><span class="v-name">v3.16.14</span> &mdash; Voice chat: server-side 4 s grace period before evicting a disconnected user so transient blips never broadcast <code>voice-user-left</code> to peers; fast-path rejoin that skips RTCPeerConnection renegotiation when the socket reconnects within the window; client-side roster watchdog that auto-fires <code>voice-rejoin</code> if we&rsquo;ve silently dropped off the server list &mdash; fixes the recurring self-vanish glitch (#5347)</div>
14411445
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.14.zip">Download &rarr;</a>
14421446
</div>
14431447
<div class="version-item">

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "haven",
3-
"version": "3.16.13",
3+
"version": "3.16.15",
44
"description": "Haven — self-hosted private chat for your server, your rules",
55
"license": "AGPL-3.0",
66
"main": "server.js",

public/app.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<link rel="manifest" href="/manifest.webmanifest">
1111
<title>Haven</title>
1212
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cG9seWdvbiBwb2ludHM9IjUwLDMgOTMsMjggOTMsNzIgNTAsOTcgNyw3MiA3LDI4IiBmaWxsPSJub25lIiBzdHJva2U9IiM2YjRmZGIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjx0ZXh0IHg9IjUwIiB5PSI2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIzOCIgZmlsbD0iIzZiNGZkYiIgb3BhY2l0eT0iMC45NSI+SDwvdGV4dD48L3N2Zz4=">
13-
<link rel="stylesheet" href="/css/style.css?v=3.16.14">
14-
<script src="/js/theme-init.js?v=3.16.14"></script>
13+
<link rel="stylesheet" href="/css/style.css?v=3.16.15">
14+
<script src="/js/theme-init.js?v=3.16.15"></script>
1515
</head>
1616
<body>
1717

@@ -3197,14 +3197,14 @@ <h3 data-i18n="media_gallery.title">Files & Media</h3>
31973197
</div>
31983198
</div>
31993199
</div>
3200-
<script src="/js/theme.js?v=3.16.14"></script>
3201-
<script src="/js/notifications.js?v=3.16.14"></script>
3202-
<script src="/js/servers.js?v=3.16.14"></script>
3203-
<script src="/js/voice.js?v=3.16.14"></script>
3204-
<script src="/js/modmode.js?v=3.16.14"></script>
3205-
<script src="/js/e2e.js?v=3.16.14"></script>
3206-
<script type="module" src="/js/app.js?v=3.16.14"></script>
3207-
<script src="/js/plugin-loader.js?v=3.16.14"></script>
3208-
<script src="/js/modules/stream-debug.js?v=3.16.14"></script>
3200+
<script src="/js/theme.js?v=3.16.15"></script>
3201+
<script src="/js/notifications.js?v=3.16.15"></script>
3202+
<script src="/js/servers.js?v=3.16.15"></script>
3203+
<script src="/js/voice.js?v=3.16.15"></script>
3204+
<script src="/js/modmode.js?v=3.16.15"></script>
3205+
<script src="/js/e2e.js?v=3.16.15"></script>
3206+
<script type="module" src="/js/app.js?v=3.16.15"></script>
3207+
<script src="/js/plugin-loader.js?v=3.16.15"></script>
3208+
<script src="/js/modules/stream-debug.js?v=3.16.15"></script>
32093209
</body>
32103210
</html>

website/index.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1415,12 +1415,12 @@ <h2>Download Haven</h2>
14151415
</div>
14161416

14171417
<div class="download-card fade-in">
1418-
<h2>&#x2B21; Haven Server &mdash; v3.16.14</h2>
1418+
<h2>&#x2B21; Haven Server &mdash; v3.16.15</h2>
14191419
<p class="download-version">Latest stable release &middot; Windows, macOS &amp; Linux &middot; ~5 MB</p>
14201420

14211421
<div class="download-btn-group">
1422-
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.14.zip" class="btn btn-primary download-main">
1423-
<span class="icon">&#x2B07;</span> Download v3.16.14 (.zip)
1422+
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.15.zip" class="btn btn-primary download-main">
1423+
<span class="icon">&#x2B07;</span> Download v3.16.15 (.zip)
14241424
</a>
14251425
<div class="download-alt-links">
14261426
<a href="https://github.com/ancsemi/Haven" target="_blank">&#9965; View on GitHub</a>
@@ -1437,7 +1437,11 @@ <h2>&#x2B21; Haven Server &mdash; v3.16.14</h2>
14371437
<div class="version-list">
14381438
<div class="version-list-inner">
14391439
<div class="version-item">
1440-
<div><span class="v-name">v3.16.14</span><span class="v-tag latest">Latest</span> &mdash; Voice chat: server-side 4 s grace period before evicting a disconnected user so transient blips never broadcast <code>voice-user-left</code> to peers; fast-path rejoin that skips RTCPeerConnection renegotiation when the socket reconnects within the window; client-side roster watchdog that auto-fires <code>voice-rejoin</code> if we&rsquo;ve silently dropped off the server list &mdash; fixes the recurring self-vanish glitch (#5347)</div>
1440+
<div><span class="v-name">v3.16.15</span><span class="v-tag latest">Latest</span> &mdash; Voice chat: actual root cause of the recurring self-vanish glitch (#5347) fixed &mdash; channel code rotation desync caused voice clients to hold stale codes after server rotation, breaking reconnects until manual rejoin; null audioCtx crash on voice leave patched; version display regression from v3.16.14 corrected (servers reported v3.16.13 despite running v3.16.14) (#5369)</div>
1441+
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.15.zip">Download &rarr;</a>
1442+
</div>
1443+
<div class="version-item">
1444+
<div><span class="v-name">v3.16.14</span> &mdash; Voice chat: server-side 4 s grace period before evicting a disconnected user so transient blips never broadcast <code>voice-user-left</code> to peers; fast-path rejoin that skips RTCPeerConnection renegotiation when the socket reconnects within the window; client-side roster watchdog that auto-fires <code>voice-rejoin</code> if we&rsquo;ve silently dropped off the server list &mdash; fixes the recurring self-vanish glitch (#5347)</div>
14411445
<a href="https://github.com/ancsemi/Haven/archive/refs/tags/v3.16.14.zip">Download &rarr;</a>
14421446
</div>
14431447
<div class="version-item">

0 commit comments

Comments
 (0)