From 4ed99088d198a55473ceb8771c6361286a25b4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Thu, 25 Jun 2026 20:51:45 -0400 Subject: [PATCH 1/9] Update wisp to v0.5.6 (429/503 on WS upgrade connection-limit rejection) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7e9a0d5..a747de5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.5 -ARG WISP_COMMIT=76a3261369ff4a2b5dedb778e8b1d42184800ea4 +ARG WISP_VERSION=v0.5.6 +ARG WISP_COMMIT=15891be7b685b40099fe4704c1f678897059dfec RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 0046d41..0812b9c 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.5:0', + version: '0.5.6:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.5. No behavior change from v0.5.4: wisp now builds against the upstream http.zig and websocket.zig libraries instead of temporary forks, since all of its fixes have been merged upstream. Carries forward every prior fix: the inbound-worker crash fix, crash-safe storage, stable Spider upstream connections, no per-IP cap behind the StartOS proxy, and the diagnosable (ReleaseSafe) build.', + 'Updates wisp to v0.5.6. WebSocket upgrades rejected by the connection limiter now return HTTP 429 (per-IP cap) or 503 (server full) instead of HTTP 500, so external uptime monitors no longer report the relay as down when only a single connection is being rejected (the relay info document keeps returning 200 throughout). The rejected client IP is logged for diagnosis. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From 4a9c4b2789e3375934c8d48da932391b50cafacd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Sat, 27 Jun 2026 08:40:35 -0400 Subject: [PATCH 2/9] Update wisp to v0.5.7 (shutdown use-after-free fix) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a747de5..d2a6bde 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.6 -ARG WISP_COMMIT=15891be7b685b40099fe4704c1f678897059dfec +ARG WISP_VERSION=v0.5.7 +ARG WISP_COMMIT=ab6d9214608c2322c55fedad05f71b498d6cb054 RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 0812b9c..e2ebbe2 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.6:0', + version: '0.5.7:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.6. WebSocket upgrades rejected by the connection limiter now return HTTP 429 (per-IP cap) or 503 (server full) instead of HTTP 500, so external uptime monitors no longer report the relay as down when only a single connection is being rejected (the relay info document keeps returning 200 throughout). The rejected client IP is logged for diagnosis. Carries forward every prior fix.', + 'Updates wisp to v0.5.7. Fixes a crash (SIGSEGV) on shutdown when a query was still streaming as the relay stopped, for example during a backup: the connection worker tore down storage while a query was still reading it. Storage was never at risk (crash-safe writes), but the unclean shutdown is gone. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From 1778ea79401c27c350c1b06670a6e1ed36efcfb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Mon, 29 Jun 2026 09:55:42 -0400 Subject: [PATCH 3/9] Update wisp to v0.5.9 (churn + shutdown crash fixes; folds in v0.5.8) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index d2a6bde..770c184 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.7 -ARG WISP_COMMIT=ab6d9214608c2322c55fedad05f71b498d6cb054 +ARG WISP_VERSION=v0.5.9 +ARG WISP_COMMIT=bbea8bdd15d24ae5b9760e602fb3e2a7110e8ef0 RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index e2ebbe2..ca358eb 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.7:0', + version: '0.5.9:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.7. Fixes a crash (SIGSEGV) on shutdown when a query was still streaming as the relay stopped, for example during a backup: the connection worker tore down storage while a query was still reading it. Storage was never at risk (crash-safe writes), but the unclean shutdown is gone. Carries forward every prior fix.', + 'Updates wisp to v0.5.9 (folds in v0.5.8). Fixes two crashes: (1) a SIGSEGV every few hours during normal operation under connection churn, where a finished connection could be freed while the event loop still had a pending read for it; connections are now removed from the event loop before being freed. (2) A SIGSEGV on shutdown when a query was still being served, where connection buffers a query was reading were freed before in-flight handlers finished; the worker pool now drains before any buffers are freed. Storage was never at risk in either case. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From a519daa9e8c5cd6ffa3f619bceaf00dd55240b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Wed, 1 Jul 2026 08:51:46 -0400 Subject: [PATCH 4/9] Update wisp to v0.5.10 (build against upstream http.zig; drop fork) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 770c184..e8d0b90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.9 -ARG WISP_COMMIT=bbea8bdd15d24ae5b9760e602fb3e2a7110e8ef0 +ARG WISP_VERSION=v0.5.10 +ARG WISP_COMMIT=9e741b5ea3904976b97aa3d0eaf98e230224cdfe RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index ca358eb..ca3654e 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.9:0', + version: '0.5.10:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.9 (folds in v0.5.8). Fixes two crashes: (1) a SIGSEGV every few hours during normal operation under connection churn, where a finished connection could be freed while the event loop still had a pending read for it; connections are now removed from the event loop before being freed. (2) A SIGSEGV on shutdown when a query was still being served, where connection buffers a query was reading were freed before in-flight handlers finished; the worker pool now drains before any buffers are freed. Storage was never at risk in either case. Carries forward every prior fix.', + 'Updates wisp to v0.5.10. No behavior change from v0.5.9: wisp now builds against the upstream http.zig library instead of a temporary fork, since both crash fixes from v0.5.8 and v0.5.9 have been merged upstream. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From fe7384b69e362c6d1d4834d31c9171009759c4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Tue, 7 Jul 2026 09:02:41 -0400 Subject: [PATCH 5/9] Update wisp to v0.5.11 (NIP-16 ephemeral relay, spider + connection hardening) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index e8d0b90..06f921a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.10 -ARG WISP_COMMIT=9e741b5ea3904976b97aa3d0eaf98e230224cdfe +ARG WISP_VERSION=v0.5.11 +ARG WISP_COMMIT=4ef3ece54610fe905a6268e69ad888a9fcc9d19b RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index ca3654e..3a0bf94 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.10:0', + version: '0.5.11:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.10. No behavior change from v0.5.9: wisp now builds against the upstream http.zig library instead of a temporary fork, since both crash fixes from v0.5.8 and v0.5.9 have been merged upstream. Carries forward every prior fix.', + 'Updates wisp to v0.5.11. Ephemeral events (NIP-16) are now delivered to live subscribers in real time instead of being dropped. The Spider now detects and reconnects half-open upstream relay connections, probing quiet relays before reconnecting, and its startup no longer blocks the relay. Connection reaping is more robust, reliably reclaiming idle and half-open client connections. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From 5fe59837d1cb4365a52e22c0243ae860bdf77bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Sat, 11 Jul 2026 11:12:28 -0400 Subject: [PATCH 6/9] Update wisp to v0.5.12 (spider TLS busy-spin + connect/handshake timeout) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 06f921a..fa94029 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.11 -ARG WISP_COMMIT=4ef3ece54610fe905a6268e69ad888a9fcc9d19b +ARG WISP_VERSION=v0.5.12 +ARG WISP_COMMIT=c5b1918f93024c21f59d5c63ef35b2380db34cdd RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 3a0bf94..ea3f211 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.11:0', + version: '0.5.12:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.11. Ephemeral events (NIP-16) are now delivered to live subscribers in real time instead of being dropped. The Spider now detects and reconnects half-open upstream relay connections, probing quiet relays before reconnecting, and its startup no longer blocks the relay. Connection reaping is more robust, reliably reclaiming idle and half-open client connections. Carries forward every prior fix.', + 'Updates wisp to v0.5.12. Fixes the Spider pinning a CPU core for each quiet upstream relay it stays connected to (a busy-spin in the encrypted read path); idle connections now sleep properly. Also bounds how long the Spider will wait on connecting to an unreachable or stalling relay, so it can no longer delay shutdown long enough for StartOS to force-kill the service. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From 064219b39c53de0ddfa5ac3c5723da3d8b44aee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Wed, 15 Jul 2026 23:05:12 -0400 Subject: [PATCH 7/9] Update wisp to v0.5.13 (NIP-51/Marmot, rate-limiter sharding) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index fa94029..f4396a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.12 -ARG WISP_COMMIT=c5b1918f93024c21f59d5c63ef35b2380db34cdd +ARG WISP_VERSION=v0.5.13 +ARG WISP_COMMIT=b536bd41a17c50fe05626aaf50ac12ba9e21818f RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index ea3f211..6e4e419 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.12:0', + version: '0.5.13:0', releaseNotes: { en_US: - 'Updates wisp to v0.5.12. Fixes the Spider pinning a CPU core for each quiet upstream relay it stays connected to (a busy-spin in the encrypted read path); idle connections now sleep properly. Also bounds how long the Spider will wait on connecting to an unreachable or stalling relay, so it can no longer delay shutdown long enough for StartOS to force-kill the service. Carries forward every prior fix.', + 'Updates wisp to v0.5.13. Advertises NIP-51 (lists) support and adds relay support for Marmot MLS KeyPackage events. Reduces lock contention under load by sharding the rate limiters and reusing broadcast buffers, improving throughput on busy relays. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {}, From c2ab7bacdd0c6b5b45d69cf3821e51ca9af7693d Mon Sep 17 00:00:00 2001 From: "William K. Santiago" Date: Sun, 19 Jul 2026 14:36:26 -0400 Subject: [PATCH 8/9] Build wisp from main HEAD (7c07362) as 0.5.13:1 test build --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index f4396a6..62f9270 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.5.13 -ARG WISP_COMMIT=b536bd41a17c50fe05626aaf50ac12ba9e21818f +ARG WISP_VERSION=main +ARG WISP_COMMIT=7c07362f685edd2dbf92dd1e9086a82a3f38c7db RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 6e4e419..da6f2d3 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.13:0', + version: '0.5.13:1', releaseNotes: { en_US: - 'Updates wisp to v0.5.13. Advertises NIP-51 (lists) support and adds relay support for Marmot MLS KeyPackage events. Reduces lock contention under load by sharding the rate limiters and reusing broadcast buffers, improving throughput on busy relays. Carries forward every prior fix.', + 'Test build: wisp built from upstream main HEAD (7c07362) past the v0.5.13 tag — adds a query scan cap that bounds how many entries a query may scan, preventing full-database page-fault thrash.', }, migrations: { up: async ({ effects }) => {}, From b0e254d70703c33daad0e08f75719aa29c36f5fd Mon Sep 17 00:00:00 2001 From: "William K. Santiago" Date: Tue, 21 Jul 2026 18:40:10 -0400 Subject: [PATCH 9/9] Update wisp to v0.5.14 (query scan cap) --- Dockerfile | 4 ++-- startos/versions/current.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 62f9270..ea6db4a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=main -ARG WISP_COMMIT=7c07362f685edd2dbf92dd1e9086a82a3f38c7db +ARG WISP_VERSION=v0.5.14 +ARG WISP_COMMIT=40ec89eb5439c80a3b3508b5f52fcfd64d76cc9f RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index da6f2d3..3fc4836 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,10 +1,10 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.5.13:1', + version: '0.5.14:0', releaseNotes: { en_US: - 'Test build: wisp built from upstream main HEAD (7c07362) past the v0.5.13 tag — adds a query scan cap that bounds how many entries a query may scan, preventing full-database page-fault thrash.', + 'Updates wisp to v0.5.14. Queries are now bounded in how many stored entries they may scan, so a selective filter matching fewer events than its limit no longer walks the entire database. This fixes severe CPU and major page-fault load on large databases. The new query_scan_multiplier setting (default 20, 0 to disable) controls the bound. Carries forward every prior fix.', }, migrations: { up: async ({ effects }) => {},