Skip to content

Releases: codehs/bool-sdk

v0.4.0-next.7

v0.4.0-next.7 Pre-release
Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 17:05

The realtime rebuild: one shared RealtimeSession under the doorbell and every room (each connection scar written once), bool.room becomes callable for named rooms — bool.room("game:4") — with the identical surface, and behavior otherwise unchanged (all pre-rewrite tests pass verbatim). Verified against real infra: default-room state flow, scoped-room isolation under policy v4, and hard-drop recovery.

v0.4.0-next.6

v0.4.0-next.6 Pre-release
Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 16:28

60Hz: base send rate 16ms (one send per frame), throttle curve holds 60Hz through 10 people (tenant events ceiling raised to 10k/s on Bool's user-apps projects), per-connection eventsPerSecond declared at 500.

v0.4.0-next.5

v0.4.0-next.5 Pre-release
Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 16:15

Fixes 'works but super laggy': the adaptive throttle degraded a 10-person room to 11Hz (p50=96ms measured, mostly waiting in our own throttle) — the curve is now half as steep (full 40Hz through 8 people, ~22Hz at 10). Inbound updates now coalesce to one emit per frame with stable peer object identities, so a still peer's component never re-renders because someone else moved.

v0.4.0-next.4

v0.4.0-next.4 Pre-release
Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 15:57

setMe state now rides broadcast (reserved ~me event, throttled full-state, fire-and-forget) while presence carries membership only. Fixes frozen cursors + status flapping with 3+ people: Supabase presence is a low-frequency CRDT and stopped acking tracks within a second at cursor rates, while the identical load over broadcast sustained 97-100% delivery. Send rate now also scales down with room size instead of saturating the channel.

v0.4.0-next.3

v0.4.0-next.3 Pre-release
Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 15:33

Fixes a stack overflow on every realtime reconnect: supabase's removeChannel fires the channel's status callback with CLOSED synchronously from inside leave(), and the terminal-state recovery added in next.1 turned that into teardown → leave → CLOSED → teardown recursion. Both the room and the entity doorbell now detach the channel before leaving and ignore status callbacks from non-current channels.

v0.4.0-next.2

v0.4.0-next.2 Pre-release
Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 15:12

Reconnects immediately when the tab or network wakes up, instead of waiting out the retry backoff (up to 60s). Also fixes the broadcast size guard to measure UTF-8 bytes rather than UTF-16 code units, and makes the doorbell's teardown notify its status reset instead of assigning it silently.

0.4.0-next.1 — fix a room that lied about being live

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 14:31

Fixes the first real-world bool.room failure: a dead channel reporting "live" forever. Unhandled CLOSED (supabase-js does not auto-rejoin), status changes that skipped notification, swallowed track() failures (it resolves "timed out" rather than throwing), and an unbounded mint(). Also fixes the same latent unhandled-CLOSED bug in the doorbell.

0.4.0-next.0 — bool.room (canary)

Pre-release

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 29 Jul 00:15

The ephemeral lane: presence + events over the private room topic. See the PR and CHANGELOG for the full design record. Canary — requires the matching platform half; older platforms report the room as unavailable.

0.3.3 — fix crash when adding to a list with timestamps

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 28 Jul 23:17

An optimistic row from useQuery().create() had no created_at (the server fills it), so for the moment the write was in flight, Intl.DateTimeFormat().format(new Date(row.created_at)) threw RangeError: Invalid time value and took the screen down.

The overlay row now carries a client stamp, replaced by the server's value on settle. Not sent to the server. Also fixes sort placement under the default -created_at.

Still true: an optimistic row lacks anything else the server fills (owner_id, column defaults) — pass what your UI reads into create(...).

0.3.2 — an import that can't be tree-shaken

Choose a tag to compare

@HomemadeToast57 HomemadeToast57 released this 28 Jul 22:46

React apps should now create their client with:

import { createBoolClient } from "bool-sdk/react";

This makes arming the live hook a side effect of needing something you already need. A used binding can't be tree-shaken by any bundler under any configuration — verified against "sideEffects": false, the config that broke published apps on 0.3.0.

Nothing removed: the old import "bool-sdk/react" shape still works and is still covered by sideEffects.