From 95d993bb6f22783c0231424a7d624aed3fd36346 Mon Sep 17 00:00:00 2001 From: Byeonghoon Yoo Date: Tue, 3 Nov 2026 21:20:33 +0900 Subject: [PATCH 1/3] chore(release): prepare v0.18.2 changelog --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c6761d0..fd62756f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,44 @@ Notable changes per release. Format loosely follows minor versions may ship breaking changes (see [SemVer §4](https://semver.org/#spec-item-4)). ## Unreleased -- **Local watcher recovery releases resources.** Recreated directories are re-registered, and macOS watcher shutdown no longer retains file descriptors. +## v0.18.2 — 2026-11-03 + +Update your devices for targeted watcher scans, and update self-hosted hubs for +the co-editing and MCP changes. A single-process hub needs no Redis setting. +For co-editing across processes, configure `collab.redis` and use shared project +storage that supports conditional writes. + +- **Co-editing across hub processes.** An optional Redis Streams relay carries + document updates between processes, while a storage lease chooses the one + that writes each room's snapshots. Processes share the document's seed and + rebuild from its newest stored history, avoiding duplicate seeding and replay + of edits that an outside revert removed. Without the relay, a second process + refuses a room another holds so the browser can retry on the holder. (#325) +- **Conditional writes for local hub storage.** The `file://` backend now + supports compare-and-swap under a filesystem lock, used by leases, room + history, and the hub's existing conditional journal-append path. This relies + on local-filesystem locking, not shared network-filesystem guarantees. (#325) +- **Save live co-editing rooms on graceful shutdown.** `bdrive serve` snapshots + rooms on SIGTERM or SIGINT before closing the HTTP server. Shutdown is best + effort within an eight-second budget; a hard kill cannot flush live rooms. + (#325) +- **MCP tool titles and safety hints.** Every tool has a human-readable title + and closed-world annotations. Read tools declare read-only and idempotent + behavior; tools that change files declare destructive behavior. These are + hints for clients, not a replacement for permission checks. (#330) - **Local watcher wakes scan only affected paths.** Materialization echoes no longer trigger extra full-tree scans, and transient macOS watcher `ENOENT` races recover without stopping the watcher. Full scans remain the safety path for startup, policy changes, uncertain batches, and the one-minute deadline. (#328) -- **Malformed collab Redis settings no longer expose credentials.** BearDrive still refuses to start with an invalid setting. +- **Malformed collab Redis settings no longer expose credentials.** Parse + errors omit the URL and input values. BearDrive still refuses to start with + an invalid setting; the error is generic, so the parser's detailed diagnosis + is no longer available. - **Shutdowns no longer hang on a busy local file remote.** A canceled file CAS lock wait returns without disturbing the other writer, while normal graceful shutdowns still save live co-editing changes. +- **Website and setup references are easier to find.** The README links + directly to the website and documentation, and the CLI and hub configuration + references explain targeted scans and the optional Redis relay. (#327) + +## v0.18.1 — 2026-10-27 + +- **Local watcher recovery releases resources.** Recreated directories are re-registered, and macOS watcher shutdown no longer retains file descriptors. - **Share links no longer run out because your team synced.** The hub reported every byte a device pulled through `/store/*` to `QuotaProvider.RecordEgress`, the counter a managed hub enforces its monthly share-link transfer cap against, so ordinary syncing used up the allowance and every `/s/*` link in the org answered "This link has exceeded its transfer limit". `RecordEgress` now reports share-link transfers only, and sync traffic goes to `RecordSyncEgress` on a provider that implements the new optional `SyncEgressRecorder` — measured, never enforced. Existing providers keep compiling and simply aren't told. From a2d8d38afefad7cfcf812463584f802e1164af4d Mon Sep 17 00:00:00 2001 From: Byeonghoon Yoo Date: Tue, 3 Nov 2026 22:19:27 +0900 Subject: [PATCH 2/3] docs(release): clarify shutdown and prior release scope --- CHANGELOG.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd62756f..326c9112 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,10 +22,11 @@ storage that supports conditional writes. supports compare-and-swap under a filesystem lock, used by leases, room history, and the hub's existing conditional journal-append path. This relies on local-filesystem locking, not shared network-filesystem guarantees. (#325) -- **Save live co-editing rooms on graceful shutdown.** `bdrive serve` snapshots - rooms on SIGTERM or SIGINT before closing the HTTP server. Shutdown is best - effort within an eight-second budget; a hard kill cannot flush live rooms. - (#325) +- **Snapshot live co-editing rooms on graceful shutdown.** `bdrive serve` + attempts to snapshot live rooms on SIGTERM or SIGINT before HTTP shutdown. + It supplies an eight-second shutdown context, but storage I/O and lock + acquisition are not uniformly deadline-aware. A hard kill can interrupt + saving. (#325) - **MCP tool titles and safety hints.** Every tool has a human-readable title and closed-world annotations. Read tools declare read-only and idempotent behavior; tools that change files declare destructive behavior. These are @@ -42,6 +43,10 @@ storage that supports conditional writes. ## v0.18.1 — 2026-10-27 +The entries below preserve two fixes already included in v0.18.1. See the +[original release](https://github.com/runbear-io/beardrive/releases/tag/v0.18.1) +for the full commit list. + - **Local watcher recovery releases resources.** Recreated directories are re-registered, and macOS watcher shutdown no longer retains file descriptors. - **Share links no longer run out because your team synced.** The hub reported every byte a device pulled through `/store/*` to `QuotaProvider.RecordEgress`, the counter a managed hub enforces its monthly share-link transfer cap against, so ordinary syncing used up the allowance and every `/s/*` link in the org answered "This link has exceeded its transfer limit". `RecordEgress` now reports share-link transfers only, and sync traffic goes to `RecordSyncEgress` on a provider that implements the new optional `SyncEgressRecorder` — measured, never enforced. Existing providers keep compiling and simply aren't told. From 8b07f79fdec38ba36082ef1151d6bfa4d785f5ef Mon Sep 17 00:00:00 2001 From: Byeonghoon Yoo Date: Wed, 4 Nov 2026 04:53:38 +0900 Subject: [PATCH 3/3] docs(release): describe shutdown cancellation accurately --- CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 326c9112..484ddf11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,9 +24,8 @@ storage that supports conditional writes. on local-filesystem locking, not shared network-filesystem guarantees. (#325) - **Snapshot live co-editing rooms on graceful shutdown.** `bdrive serve` attempts to snapshot live rooms on SIGTERM or SIGINT before HTTP shutdown. - It supplies an eight-second shutdown context, but storage I/O and lock - acquisition are not uniformly deadline-aware. A hard kill can interrupt - saving. (#325) + The shutdown context now cancels local file-lock waits; storage backends + outside that local path and a hard kill can still interrupt saving. (#325) - **MCP tool titles and safety hints.** Every tool has a human-readable title and closed-world annotations. Read tools declare read-only and idempotent behavior; tools that change files declare destructive behavior. These are