## s4wave/spacewave — v0.57.26…v0.57.27

_197+ commits._

### Features
- **db/s4db: add a single-file storage engine** (9f200ce)
- **cli: add an offline ref graph repair for stopped volumes** (1545844)
- **db/volume/browser: add the browser volume on OPFS or IndexedDB** (a1e46b5)
- **db/volume/paylog: add collector hooks and segment space reclamation** (0cf1cf6)
- **app: split the add user dialog into invite flow and tab components** (a2422f5)
- **dist: embed the sources new imports reach** (eb86deb)
- **app/session: extract the add keypair panel** (1db3da2)

### Fixes
- **fix(db): batch s4db index reads in key order** (ba34836)

### Backend
- **release: update the v0.57.27 changelog** (3388b6d)
- **AGENTS: rewrite to the house English style** (af84abf)
- **local: report a Space copy that runs out of storage** (419d3d0)
- **AGENTS: no World object type is a singleton; consumers follow graph edges** (cd1d615)
- **cmd/spacewave: say space roster sets the whole dropped set** (102726a)
- **core/sobject/world/engine: chain replay span blocks** (f45c797)
- **db/block/gc: probe only removals before applying ref batches** (4b1f6ff)
- **db/s4db: decide what to punch at drain time** (37cc068)
- **db/s4db: read cached index pages in place** (154b3e3)
- **db/s4db: skip tailing this handle's own commits** (16e58df)
- **bldr/web: hold the liveness lock before registering with the ServiceWorker** (df1578c)
- **e2e/releasewasm: log ServiceWorker console with console tracing** (88d8579)
- **e2e/devwasm: select the native object menu and root buttons** (1b29248)
- **provider/spacewave: log when the session websocket stops retrying** (8f6d959)
- **cli: let a spacewave:// remote name its session** (ec1142f)
- **e2e/releasewasm: turn off async stacks in Firefox benches** (0e37a22)
- **release: v0.57.27** (0f36d24)
- **go.sum: drop sums for unused module versions** (90ed74f)
- **db/s4db: bound the overlay under a sustained writer** (c9c0880)
- **db/volume/s4db: convert bolt Volumes with parallel readers** (8e00855)
- **all: delete badger** (9e8adbe)
- **db/volume/s4db: log the bolt Volume conversion** (9f2f210)
- **db/volume/s4db: convert a bolt Volume file in place** (4a6e5cf)
- **all: run every native Volume on s4db** (329acd3)
- **db/s4db: order device writes and refuse a closed handle** (d80128d)
- **db/s4db: clear the page cache when another process checkpoints** (a167cac)
- **cmd/spacewave: hold the state-path lease in an s4db file** (95bcf59)
- **db/coord/s4db: coordinate Volume writers through the database file** (0711382)
- **db/s4db: write the reader slot only once another process writes** (0b49b2e)
- **db/volume/s4db: run the Volume on one s4db file** (f8b0d75)
- **db/s4db: checkpoint in the background and chain record checksums** (5160720)
- **bldr/e2e: run the Volume reliability checks on s4db** (41e570e)
- **db/s4db: rebuild the space after a failed step under the writer lock** (a810db0)
- **bldr/e2e: replay Volume workloads on s4db in the browser** (64b415a)
- **db/s4db: return values the caller owns from Get** (9013d2b)
- **db/s4db: open the engine on a storage device** (0cd7f04)
- **db/volume: store every browser volume in the browser volume** (3fcbe00)
- **go.mod: follow go-git main** (a2e201d)
- **githooks: check the staged go.mod ref pins** (7deff46)
- **world/engine: log the progress of a long replay** (6167fbf)
- **Update all dependencies** (ea915fd)
- **cli: count an object whose type the ref repair cannot read** (adec280)
- **cli: apply De Morgan's law in the payload restore path check** (a3b2955)
- **cli: project a local Device as session-ready and wait for its World** (acd719d)
- **go.mod: use GoScript with promoted forwarders for embedded named basic types** (745659a)
- **cli: find a Space's bucket by its config and root it in the repair** (c3a2fdb)
- **go.mod: use the QuickJS reactor built with an 8 MiB stack** (db62b09)
- **bldr/plugin/host/wazero-quickjs: provide crypto.getRandomValues** (1a89a8b)
- **bldr/plugin/host/scheduler: back off plugin restarts exponentially** (acdf6c1)
- **provider/local: wait instead of retrying a World head with unknown refs** (474bf6a)
- **db/volume/device: keep collected writes when the device refuses them** (a5cf106)
- **net/transport/webrtc: accept signals on a disconnected session** (957eab5)
- **net/transport/webrtc: retransmit an unanswered offer until its answer applies** (4c941ab)
- **lint: make every enabled rule an error** (4369149)
- **app: split the plan controls and usage bars into reactivation, portal, and spending limit hooks** (a9d0a99)
- **world/block/tx: report the payloads of object operations** (0818468)
- **clouderror: retry a gateway's server error** (f79ecbf)
- **cli: restore each write extent of an uploaded file** (894cde5)
- **app: split the v86 wizard viewer into listings, creation, source, and finalize hooks** (ced66f3)
- **app: split the unixfs file viewer into body kinds, symlink, and toolbar** (f29da57)
- **app: split the unixfs browser into state, navigation, edit, and transfer hooks** (8a58cfd)
- **app: split the shared object details into header and section components** (6ab6cdc)
- **app: split the join space dialog into field, phase panels, and result mapping** (a7b869e)
- **app: split the organization details into recovery, members, invites, and settings sections** (d84cf6a)
- **app: split the git repo viewer into load state, file status, and route body** (e0e9994)
- **app: split the git worktree viewer into resources, sources, and route panels** (9be0530)
- **app: split the display container into kiosk mount, navigation, and status parts** (e58ce93)
- **app: split the billing cancel page into stage copy, cards, and actions** (896befc)
- **app: split the canvas node into content, frame, and selection parts** (dc0331d)
- **app: split the canvas into focus, drag, insertion, menu, and input hooks** (e1ec402)
- **app: split the secret viewer into card components** (637827b)
- **app: split the documentation viewer into page hook, sidebar, drawer, and content** (9581cc4)
- **app: split the cloud setup wizard into perks and setup cards** (f4d939a)
- **app: split the sso confirm page into signup fields, flow hook, and views** (a2a1de1)
- **app: resolve the cloud root route with a pure gate function** (e8c8f4e)
- **app: split the space plugin build panel into a build hook and select fields** (6e2f549)
- **app: split the git repo wizard into clone hooks and a loading view** (57ac733)
- **app: split the create space route into a pipeline hook and progress view** (b52f60f)
- **app: split the no-active billing and verify email pages into named parts** (8fc6e0d)
- **app: split the upload progress bar rows and feedback copy into named parts** (335918c)
- **app: split the space members panel into actions hook and sections** (6168511)
- **app: split the wizard shell into header, name field, and footer** (eb75a61)
- **app: split the billing page into title, status, and loader hooks** (63ff486)
- **app: derive wizard drafts from remote state instead of syncing in effects** (8224201)
- **app: derive canvas queue and shell tab state during render instead of syncing in effects** (c337faa)
- **app: hoist nested components, label the device ticket, and split the device wizard and gallery** (025667d)
- **app: split the sql table view into filter bar and body components** (fa46d89)
- **app: split logo, graph link, and sql query views into named components and hooks** (5359bc6)
- **app: split usage, lapse banner, manifest, and sql workbench views into named components** (f70eb91)
- **app: split plan, text file, commit, release, and pairing views into named components** (edf111a)
- **app: label controls, guard IME Enter, and use native semantic elements** (120220e)
- **app: open external windows with noopener and noreferrer** (c46e499)
- **app: guard async effects with a cancelled flag and memoize the shell context** (1e7b47e)
- **app: give raw buttons an explicit type** (0f02fea)
- **vite: keep names stable and pin plugin frontends to their manifest root** (53627d2)
- **billing: group Stripe management under Plan and lay out spending** (15f891a)
- **web/ui: let owners hold Tree and List state** (9b47bfc)
- **bldr/web: cache manifest-pinned plugin files without an announced root** (2905a7f)
- **cdn/world: retry one failed pointer fetch before reporting unreachable** (a4959ba)
- **web: split file browser entry, toolbar, and object viewer into named subcomponents and hooks** (45f6b3e)
- **web: split command palette, debug, loading card, tree row, and login form by concern** (308a451)
- **plugin: split complex color and notes components into named subcomponents and hooks** (fa48b22)
- **bldr, e2e: import the boot report store directly and load the lock child as a module** (c211751)
- **web: type the remaining buttons and label debug controls** (4e4ab5a)
- **web/ui: use native semantics and explicit button types in shared controls** (f4915f7)
- **web/object: own tab rename state in the layout and memoize derived viewer inputs** (04d6d8b)
- **web/command: reset the keybinding editor while rendering and focus search on mount** (a05b658)
- **plugin/notes: key the note write state by file path** (3ef8ac2)
- **plugin/notes: make blog cards a stretched title button without link roles** (96adfac)
- **web/frame: use native button and dialog elements in the bottom bar and overlay** (c2c4f3a)
- **sdk/sync: create the tracked collection before reading its prefixes** (5497b2e)
- **app/session: split the link device wizard into step components and shared controls** (0524cfd)
- **app/session: split session details into header, display name, actions, and sections** (23c4344)
- **app/session: split the auth mutation wizard into execution, step, and nav parts** (ab29708)
- **app/session: split keypair unlock into row components and hooks** (2b11adc)
- **app/session: split the sessions list, row, and revoke dialog** (099c3c2)
- **app/session: extract the crypto identity summary** (b14201b)
- **app/session: split the desktop CLI install card** (e5a9c48)
- **app/session: rebuild the transfer wizard on recovery state and progress streams** (f6c55ca)
- **app/session: extract the organization create form** (c57a898)
- **app/session: split the pairing verification view from its status watcher** (1318854)
- **app/session: split the auth methods rows and dialogs** (778803f)
- **app/session: split the local setup wizard cards** (5bdc047)
- **app/session: split the self-enrollment popover actions and failure list** (159a1f3)
- **app/session: split the shared object route into its hooks and states** (100b960)
- **app/session: split the session selector status, state root list, and actions** (fc2e716)
- **app/session: extract the PIN fields of the session lock section** (074fd9b)
- **app/session: split the email row into its panels** (9f47362)
- **app/session: label typed confirmation fields and split the delete-space dialog** (a0511ee)
- **app/session: render SessionFrame test trees without nested components** (fc82526)
- **app/session: give every raw button an explicit type** (0699715)
- **dist: boot the announced release once, and open the cached one offline** (9de755a)
- **world/engine: stop replay at a block no connected peer holds** (b8e9dae)
- **scripts: measure how interface copy sets with copy-fit** (f9a9da4)
- **deps: update goscript for zero Chtimes times and early timers** (93c9196)

### Docs
- **docs(legal): name the providers that run the cloud service** (018a377)

### Chore
- **chore(licenses): update generated license data** (b9c198c)
- **chore(licenses): update generated license data** (57fe3d4)
- **chore(licenses): update generated license data** (71ccfef)
- **chore(licenses): update generated license data** (0a0853f)
- **style: lead Go code paragraphs with a comment** (fc10ad7)
- **chore(licenses): update generated license data** (a3c4a1f)

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