chore(release): release Buzz Relay version 0.3.0 (#9362)

## Summary

Prepare Buzz Relay 0.3.0 from freshly fetched `main` at
`e5dee91c90fdc5f81f04fd609b7c99e31fa7570f`. Bump only the relay crate
version and its root lockfile entry from 0.2.1 to 0.3.0, and prepend the
relay changelog. Desktop, CLI, mobile, Helm, and dependency versions are
unchanged.

The changelog contains all 297 non-merge commits selected by the relay
release recipe from `relay-v0.2.1` through the pinned base. Internal
ticket identifiers were removed from historical subjects to follow the
repository's public-source policy; entries and PR/full-SHA source links
are preserved. [Full source
comparison](https://github.com/block/buzz/compare/relay-v0.2.1...e5dee91c90fdc5f81f04fd609b7c99e31fa7570f).

### Related issue

Release preparation request; no duplicate release 0.3.0 PR found.

### Testing

- `just bump-relay-version 0.3.0`: completed; the lockfile changes only
the `buzz-relay` version, without transitive dependency updates.
- `cargo metadata --locked --no-deps --format-version 1`: confirms relay
version 0.3.0.
- `git diff --check` and mandatory pre-commit formatting: passed.
- `bash scripts/test-release-ref-contract.sh` passed in a clean local
clone of `3def95c9435b2884c01446fe1a1f92f4fe9960fc`.
- Mandatory pre-push checks passed at
`3def95c9435b2884c01446fe1a1f92f4fe9960fc`. Independent review of the
commit and published head/body/draft state found no defects.
Repository-wide `just ci` passed at
`3def95c9435b2884c01446fe1a1f92f4fe9960fc` after reproducible dependency
setup; the worktree remains clean. [GitHub CI attempt 2
passed](https://github.com/block/buzz/actions/runs/43092559585/attempts/2)
at that exact head. The prior attempt failed before tests in three
artifact downloads; retrying the failed jobs resolved the service errors
without code changes. Local checks and independent review passed; human
acceptance remains separate. The existing ready state is preserved.
Local integration validation is blocked: Docker Desktop starts and its
daemon answers, but managed sign-in policy denies container access until
the operator signs in.

### Release hazards

Preparation only: **merging this PR automatically creates `relay-v0.3.0`
and starts image publication**, including stable version aliases and
`latest`/`debug-latest`. No merge, tag, or deployment is part of this
preparation.

The [relay
tagger](e5dee91c90/.github/workflows/auto-tag-on-release-pr-merge.yml (L64-L105))
tags the merge commit rather than the reviewed PR head. Changes arriving
on main before merge would also ship; the changelog is accurate only
while main remains at the pinned base. Regenerate and revalidate before
merging if main advances. The branch must stay `relay-release/0.3.0`:
the tagger derives the version from its name and does not compare it
with the crate manifest.

The recipe's changelog path selection omits some shipped components,
including `buzz-feature-flags`, `buzz-datastore-tracing`,
`buzz-deletion`, `buzz-relay-mesh`, `Dockerfile`, `web/`, and root
dependency lockfile changes. Use the full comparison above for the
complete source change set. The Helm chart's existing `appVersion:
"0.1.0"` remains a separate follow-up.

The release recipe's bump and changelog generation were executed in an
isolated worktree. Publication uses an ordinary push and explicit draft
PR instead of the recipe's reset/force-push/non-draft publication steps.
No release automation changes are included.

Generated with Codex

Signed-off-by: Brad Seiler <seiler@squareup.com>
Co-authored-by: Honor <e0bf479eeebe47dde1e35705212a4df70616a7bc834d907ddfb18cf0405f8b1b@seiler-test.communities.public.builderlabstaging.xyz>
This commit is contained in:
Brad Seiler
2026-11-11 17:43:44 -05:00
committed by GitHub
parent ef57fec4d2
commit 75d38b6c2d
3 changed files with 303 additions and 2 deletions

2
Cargo.lock generated
View File

@@ -1433,7 +1433,7 @@ dependencies = [
[[package]]
name = "buzz-relay"
version = "0.2.1"
version = "0.3.0"
dependencies = [
"anyhow",
"arc-swap",

View File

@@ -1,5 +1,306 @@
# Changelog
## relay-v0.3.0
- fix(relay): bound invite preview host lookup ([#9308](https://github.com/block/buzz/pull/9308)) ([`2c5c8343e`](https://github.com/block/buzz/commit/2c5c8343ef8c39cad0cb27cbc07bffc7141e345a))
- fix(relay): saturate filter limits instead of casting ([#9230](https://github.com/block/buzz/pull/9230)) ([`47674dc32`](https://github.com/block/buzz/commit/47674dc3224383b110c36ee1b752c7fd60ee3d7d))
- fix(relay): fence pending subscriptions on close or replacement ([#2382](https://github.com/block/buzz/pull/2382)) ([`30e1fa47f`](https://github.com/block/buzz/commit/30e1fa47fb9a67cbc408cfcee83dcf280ab49595))
- Serve video and poster previews for invite links ([#9306](https://github.com/block/buzz/pull/9306)) ([`773849665`](https://github.com/block/buzz/commit/773849665e0592b9f99dbfbaa2f706de01a8f5a7))
- fix(db): give the replica-fence probe its own pool and instrument it ([#9297](https://github.com/block/buzz/pull/9297)) ([`5b1698ec2`](https://github.com/block/buzz/commit/5b1698ec244d6687ff60be0c29b95348d18c610f))
- fix(relay): never close connections when cross-node fan-out falls behind ([#9302](https://github.com/block/buzz/pull/9302)) ([`dd9da3ac6`](https://github.com/block/buzz/commit/dd9da3ac6d854ec199e8b3dc661fdb84eb995a8c))
- feat(relay): let an operator mint invites for a community owner or admin ([#9265](https://github.com/block/buzz/pull/9265)) ([`2b16d0ea1`](https://github.com/block/buzz/commit/2b16d0ea1a5550146c3dbe303ad918debcf0094e))
- fix(relay): deliver slow cross-node events late instead of closing their recipients ([#9235](https://github.com/block/buzz/pull/9235)) ([`15174bc2b`](https://github.com/block/buzz/commit/15174bc2b2631531bc45d8ec72d8499f1b194660))
- [buzz] Recover database pool capacity after stalled connections ([#9267](https://github.com/block/buzz/pull/9267)) ([`22d96d94e`](https://github.com/block/buzz/commit/22d96d94ef043292803b6d5c929652abd69612dd))
- Record why relay connections close and quiet close warnings ([#9245](https://github.com/block/buzz/pull/9245)) ([`31fa53174`](https://github.com/block/buzz/commit/31fa53174d5bf7995c6cab18954514cc036125e2))
- fix(relay): say "channel owner or admin" in the call_webhook save refusal ([#9169](https://github.com/block/buzz/pull/9169)) ([`4bfe60197`](https://github.com/block/buzz/commit/4bfe60197e8c390a8701053228cd50c5391f37d3))
- fix(cli): preserve attachments across successive edits ([#9226](https://github.com/block/buzz/pull/9226)) ([`8130cd9fc`](https://github.com/block/buzz/commit/8130cd9fc7d8fce315eb34fb14207d915841e8c5))
- fix(media): revoke private channel attachment reads ([#9077](https://github.com/block/buzz/pull/9077)) ([`96af488d9`](https://github.com/block/buzz/commit/96af488d968a1ae9d961c2132bea27822735f8da))
- Manage community NIP-FI policy with enable, disable and status ([#9176](https://github.com/block/buzz/pull/9176)) ([`2cd40badb`](https://github.com/block/buzz/commit/2cd40badb85de059a6916206e133da7a0a88fb2e))
- [buzz] Recover interrupted default-channel auto-joins ([#9045](https://github.com/block/buzz/pull/9045)) ([`39d5159ca`](https://github.com/block/buzz/commit/39d5159caf748d9696646fc0c761ff639d919f0d))
- fix(db): keep retained fence proofs when a probe fails ([#9200](https://github.com/block/buzz/pull/9200)) ([`38795ada8`](https://github.com/block/buzz/commit/38795ada8749509607caddbafd4049162f8a31f9))
- fix(relay): set received_at in the system-channel fan-out test helper ([#9214](https://github.com/block/buzz/pull/9214)) ([`6c3ffd160`](https://github.com/block/buzz/commit/6c3ffd160bc0caf8946ce57f3aa50e4f5c615e8e))
- Allow operators to set initial NIP-FI policy on create ([#9211](https://github.com/block/buzz/pull/9211)) ([`446e9e076`](https://github.com/block/buzz/commit/446e9e0762a4bfe4c74e138eacf44d7d9d657ca9))
- feat(relay): runtime-tunable history-read and AUTH concurrency caps via feature flags ([#9170](https://github.com/block/buzz/pull/9170)) ([`a17243d84`](https://github.com/block/buzz/commit/a17243d846c887fbab862f494ec474821e6ca1cc))
- fix(relay): route live REQ events by each filter's own channel scope ([#8519](https://github.com/block/buzz/pull/8519)) ([`01d977860`](https://github.com/block/buzz/commit/01d9778606bd5a1bbe80a743a1c2cc659721cf12))
- fix(relay): deliver multi-node fan-out concurrently and never drop silently ([#9195](https://github.com/block/buzz/pull/9195)) ([`27ab6a085`](https://github.com/block/buzz/commit/27ab6a085a6689da5c0c81ca74ee5ccc90ed2003))
- perf(db): bound since-limited events reads with the month-floor literal ([#9197](https://github.com/block/buzz/pull/9197)) ([`0d5edb8bb`](https://github.com/block/buzz/commit/0d5edb8bb36bbcbe78180ad3d63eaca38a6fdd20))
- perf(relay): serve restriction rows for 10 s with cross-pod invalidation ([#9199](https://github.com/block/buzz/pull/9199)) ([`744f3946f`](https://github.com/block/buzz/commit/744f3946f6fe1ff7a649c132638d5af608900dbd))
- Pin sqlx to the upstream fix for a cancelled BEGIN ([#9192](https://github.com/block/buzz/pull/9192)) ([`abb2586f8`](https://github.com/block/buzz/commit/abb2586f8ca67414b5c6e796d2c468755fe26ee3))
- fix(relay): regenerate missing image thumbnails on request ([#9174](https://github.com/block/buzz/pull/9174)) ([`1bb2ad443`](https://github.com/block/buzz/commit/1bb2ad443d4ee4512dd0927888ad21a4a1c041bc))
- Cache channel memberships once per user ([#9060](https://github.com/block/buzz/pull/9060)) ([`32997e2e1`](https://github.com/block/buzz/commit/32997e2e1b57d0d1140075f644938ca1538a6309))
- fix(relay): close legacy sockets after community FI upgrades ([#8991](https://github.com/block/buzz/pull/8991)) ([`4e28176f1`](https://github.com/block/buzz/commit/4e28176f13957f4bb77f58c5b4aa0ad137017423))
- fix(relay): close a WS search whose hit hydration fails instead of sending EOSE ([#9148](https://github.com/block/buzz/pull/9148)) ([`1bb44ae9e`](https://github.com/block/buzz/commit/1bb44ae9effd78a87c684a47edf5cc335b8091a8))
- perf(db): stop the events recent pass at a ceiling for regular-kind reads ([#9157](https://github.com/block/buzz/pull/9157)) ([`8ae35c5c9`](https://github.com/block/buzz/commit/8ae35c5c92694af7488bbf6a2140c27aed9d0798))
- feat(relay): project compact viewer memberships ([#9118](https://github.com/block/buzz/pull/9118)) ([`bb3c5f717`](https://github.com/block/buzz/commit/bb3c5f7175041907db50df9640d6377a69cf9be9))
- feat(relay): log WebSocket EVENT writes on the access target ([#9154](https://github.com/block/buzz/pull/9154)) ([`fba8a7a94`](https://github.com/block/buzz/commit/fba8a7a94febd4fbfb97df90f7c6be8fb258cf4c))
- perf(db): plan multi-value #d reads with their values ([#9131](https://github.com/block/buzz/pull/9131)) ([`bd1b17dee`](https://github.com/block/buzz/commit/bd1b17dee8348b21b33abe35ee4eafa8730f8a83))
- feat(cli): send NIP-FI evidence via credential chain and Buzz desktop ([#8999](https://github.com/block/buzz/pull/8999)) ([`e3a0f3d59`](https://github.com/block/buzz/commit/e3a0f3d59dfd08696cff80badb2d80d9a5096a61))
- feat(protocol): define compact membership discovery ([#9117](https://github.com/block/buzz/pull/9117)) ([`66c3d6917`](https://github.com/block/buzz/commit/66c3d6917ddd88c98a0bc2a31663d60f209e0088))
- perf(db): hydrate search hits with exact event timestamps ([#9126](https://github.com/block/buzz/pull/9126)) ([`cec47c20a`](https://github.com/block/buzz/commit/cec47c20a3f1220961a80306209b0668fff57b6a))
- perf(db): prune post-commit push enqueue by signed event timestamp ([#9128](https://github.com/block/buzz/pull/9128)) ([`997ce3a2c`](https://github.com/block/buzz/commit/997ce3a2c9cd9e51f8168c64756782aca1c51b89))
- perf(db): use exact event timestamps for transactional deletion ([#9130](https://github.com/block/buzz/pull/9130)) ([`0cfa50ac7`](https://github.com/block/buzz/commit/0cfa50ac70b26208367c56dc5ddf3fcef61808e4))
- perf(redis): index mesh ready records and share one Redis connection ([#9113](https://github.com/block/buzz/pull/9113)) ([`b6d440314`](https://github.com/block/buzz/commit/b6d4403149af700c0c11ce07b85c3bc105a1b605))
- feat(cli): user status expiry and status read ([#8777](https://github.com/block/buzz/pull/8777)) ([`b0f68a06a`](https://github.com/block/buzz/commit/b0f68a06ad25889fb304a88889a679a7ef15b862))
- feat(relay): add kind 30180 custom emoji entry ([#8783](https://github.com/block/buzz/pull/8783)) ([`5c91e0d6f`](https://github.com/block/buzz/commit/5c91e0d6fe4e834b2aba49a3e8e9653bffafd4b4))
- feat(cli): report a message to relay moderators ([#8829](https://github.com/block/buzz/pull/8829)) ([`82bc5a47c`](https://github.com/block/buzz/commit/82bc5a47c5e58d4c4579420cd4dab16b8a3f3da3))
- buzz-db: read explicit #h sets one channel at a time ([#9110](https://github.com/block/buzz/pull/9110)) ([`0ada1d370`](https://github.com/block/buzz/commit/0ada1d37077f701507855fe58a4e78ac4e345f30))
- fix(db): end each table's maintenance transaction before the next ([#9096](https://github.com/block/buzz/pull/9096)) ([`4c7c15a9c`](https://github.com/block/buzz/commit/4c7c15a9c2b91504c7d2c2562c8c75a667199f33))
- fix(relay): read kind:39000/39001 inputs behind the replacement lock ([#9035](https://github.com/block/buzz/pull/9035)) ([`1a42b5c39`](https://github.com/block/buzz/commit/1a42b5c39cdebfc703004fec951790e363de9d9c))
- fix(db): unlock the storage-accounting lease before its session closes ([#9097](https://github.com/block/buzz/pull/9097)) ([`580caca66`](https://github.com/block/buzz/commit/580caca66714b3e09fd3e0eb2e522d6f4aa5cc12))
- test(relay,db): remove three timing races from Postgres and E2E tests ([#9098](https://github.com/block/buzz/pull/9098)) ([`a22ff133b`](https://github.com/block/buzz/commit/a22ff133b49a06a447ca341c12f00f335990c3b4))
- fix(db): keep busy-reader history reads off the writer and cap them per pod ([#9132](https://github.com/block/buzz/pull/9132)) ([`47be2e2d3`](https://github.com/block/buzz/commit/47be2e2d3f2a438b3a5fd7df0c710b81d8c0d87e))
- perf(db): split newest-first events reads at a month floor so Postgres prunes partitions ([#9091](https://github.com/block/buzz/pull/9091)) ([`74abe2f0f`](https://github.com/block/buzz/commit/74abe2f0fe1a5341c8c7637b79569dd59176be27))
- fix(relay): bound mesh dials and keep failing pods out of the mesh ([#8752](https://github.com/block/buzz/pull/8752)) ([`9b4b73eb0`](https://github.com/block/buzz/commit/9b4b73eb088dc18c58b4da8388436bea9c89fdb1))
- Expose strict code-entry pairing and live authorization bindings ([#9061](https://github.com/block/buzz/pull/9061)) ([`120d75d97`](https://github.com/block/buzz/commit/120d75d9762e0ea9876dc8df7f7bb834c3dfb042))
- perf(relay): cache the community-active check on socket admission ([#9109](https://github.com/block/buzz/pull/9109)) ([`50c10dc7b`](https://github.com/block/buzz/commit/50c10dc7b26e63dc8b02b6533b50727ce121b09c))
- fix(db): auto-migrate prebuild-guarded indexes on small databases ([#8802](https://github.com/block/buzz/pull/8802)) ([`ff15c347c`](https://github.com/block/buzz/commit/ff15c347c2f6cc688c163495125e849f85bbd55c))
- perf(db): serve single-root thread reply reads from thread_metadata ([#9075](https://github.com/block/buzz/pull/9075)) ([`aa749a862`](https://github.com/block/buzz/commit/aa749a862ef60887de5507b425a70f3024a6b61c))
- feat(db): enforce unique listed channel names with an index ([#8787](https://github.com/block/buzz/pull/8787)) ([`700e69019`](https://github.com/block/buzz/commit/700e69019321a927ce853f2572524bb6635b8834))
- Honor relay mode for community NIP-FI enforcement ([#8988](https://github.com/block/buzz/pull/8988)) ([`64d12e297`](https://github.com/block/buzz/commit/64d12e29751981ad92ab3cc8edadaf3e3b5797f3))
- refactor(relay): remove database usage-metric queries ([#9040](https://github.com/block/buzz/pull/9040)) ([`506a588f8`](https://github.com/block/buzz/commit/506a588f889b6d010705a564e91fdfa1660c06e7))
- feat(relay): persist NIP-FI upgrades ([#8985](https://github.com/block/buzz/pull/8985)) ([`a1f79e3ab`](https://github.com/block/buzz/commit/a1f79e3aba6fd6d352d53f249cf0ef0fdf83316f))
- relay: time every WebSocket read and every stored EVENT outcome ([#9052](https://github.com/block/buzz/pull/9052)) ([`4813b8cd1`](https://github.com/block/buzz/commit/4813b8cd15411355f05599e263ab15dd04e7afcc))
- fix(media): keep transparency in image thumbnails with WebP ([#9003](https://github.com/block/buzz/pull/9003)) ([`f9ef721e6`](https://github.com/block/buzz/commit/f9ef721e688847ed0c1512081160b6e42cdf92fd))
- perf(relay): keep 1 s read caches warm when the pool is saturated ([#9012](https://github.com/block/buzz/pull/9012)) ([`d21f0c0fd`](https://github.com/block/buzz/commit/d21f0c0fdbec9534b9396552b2550ab306d218df))
- feat(relay): match verified names in profile search ([#9019](https://github.com/block/buzz/pull/9019)) ([`3d26ed7df`](https://github.com/block/buzz/commit/3d26ed7dfdd237f99bb65b623070d546384c2538))
- fix(db): use ScratchDb in the storage usage delivery test ([#9032](https://github.com/block/buzz/pull/9032)) ([`865b15037`](https://github.com/block/buzz/commit/865b150371d4e15562d63f0e9837bca0c32540d7))
- feat(relay): log reads, logins and connections on access target ([#8376](https://github.com/block/buzz/pull/8376)) ([`0a06c0b3c`](https://github.com/block/buzz/commit/0a06c0b3cb1741447c122a4f2275ca4ee541014b))
- feat(relay): push per-community storage usage to kgoose ([#8714](https://github.com/block/buzz/pull/8714)) ([`fa7a3bfbd`](https://github.com/block/buzz/commit/fa7a3bfbda8300d4d9686c1d45ecd1ee649dd443))
- fix(relay): stop logging unmapped-host NIP-FI denials as server failures ([#8997](https://github.com/block/buzz/pull/8997)) ([`6847882b1`](https://github.com/block/buzz/commit/6847882b149f88f044064887791f47a488833fa0))
- fix(relay): apply kind 5 / 9005 deletions atomically ([#8944](https://github.com/block/buzz/pull/8944)) ([`88697f1c5`](https://github.com/block/buzz/commit/88697f1c597cda5790d4c702520d0651c48496c0))
- fix(db): drop a superseded head's mention rows with it ([#8948](https://github.com/block/buzz/pull/8948)) ([`b8b425e8b`](https://github.com/block/buzz/commit/b8b425e8b1bf3d6895afeba702929d7dc0bc64d5))
- perf(db): bind the channel scope as one array ([#8946](https://github.com/block/buzz/pull/8946)) ([`298a555e3`](https://github.com/block/buzz/commit/298a555e341ff7cf8faaefd833d6c6022bab6a4c))
- feat(relay): record NIP-FI enforce denials at parity with shadow ([#8974](https://github.com/block/buzz/pull/8974)) ([`f6198f699`](https://github.com/block/buzz/commit/f6198f699750a8e99b59c93df29cc7d0c325892a))
- Enable incremental artifact reads on every relay ([#8975](https://github.com/block/buzz/pull/8975)) ([`a9aa1f73b`](https://github.com/block/buzz/commit/a9aa1f73b01b37cccaaa60b615625c2fe64315ff))
- fix(relay): send membership notices on channel delete, moderation kick and moderation DM ([#8977](https://github.com/block/buzz/pull/8977)) ([`ce47aefdc`](https://github.com/block/buzz/commit/ce47aefdc3fc9b9c845eaf047a8335a421f14580))
- perf(search): rank only the newest prefix matches and plan with the real tsquery ([#8976](https://github.com/block/buzz/pull/8976)) ([`d3a4909cc`](https://github.com/block/buzz/commit/d3a4909ccad7c75a8c13ca91ccdaffd2c83024df))
- perf(relay): cut writer-pool round trips past the 48k relay ceiling ([#8846](https://github.com/block/buzz/pull/8846)) ([`d44031f41`](https://github.com/block/buzz/commit/d44031f4187b285dad9b367c114f017c7858df9b))
- fix(search): skip message prefix search below three characters ([#8947](https://github.com/block/buzz/pull/8947)) ([`d005c7bb9`](https://github.com/block/buzz/commit/d005c7bb9cff17bc7fd44587f5586e08f67e21cf))
- db: recycle pool connections after 5 minutes instead of 30 ([#8951](https://github.com/block/buzz/pull/8951)) ([`46da35810`](https://github.com/block/buzz/commit/46da35810d6575f63a92ce5917c5abc901b29f52))
- fix(relay): cap bridge searches in flight per user ([#8956](https://github.com/block/buzz/pull/8956)) ([`02925ceb6`](https://github.com/block/buzz/commit/02925ceb6e7318f2214de274050825bb1da6477c))
- fix(search): cancel abandoned searches and bound the search pool ([#8954](https://github.com/block/buzz/pull/8954)) ([`949f61dfa`](https://github.com/block/buzz/commit/949f61dfab060fa12e83f63c210b0cecd8c3ce2c))
- fix(db): preserve partition reader grants ([#8485](https://github.com/block/buzz/pull/8485)) ([`8f83c6320`](https://github.com/block/buzz/commit/8f83c6320994be69f486ba42bf69cea6d8bb9df8))
- fix(relay): refuse a second listed open channel with the same name ([#8782](https://github.com/block/buzz/pull/8782)) ([`5f8d0aab9`](https://github.com/block/buzz/commit/5f8d0aab98298f05b8676c1176d693e8db2c89d6))
- test(relay): hold the replica's second aux page and move media's DB tests ([#8740](https://github.com/block/buzz/pull/8740)) ([`322fdbf08`](https://github.com/block/buzz/commit/322fdbf086cd5fc6a7a528236446c68f372145b5))
- feat(relay): auto-join new community members to default channels ([#8594](https://github.com/block/buzz/pull/8594)) ([`cde6c1bf5`](https://github.com/block/buzz/commit/cde6c1bf5b1fa1fde6045de8ea29f6ac1c7e6867))
- feat(relay): publish NIP-FI verified profiles ([#8774](https://github.com/block/buzz/pull/8774)) ([`7d00c7080`](https://github.com/block/buzz/commit/7d00c708059df3b73bc7eb78d28066a707b7dbad))
- test(db): drop scratch databases and roles even when a test fails ([#8747](https://github.com/block/buzz/pull/8747)) ([`b7b545f09`](https://github.com/block/buzz/commit/b7b545f090bfa17c23317f243becc15f807b636d))
- feat(relay): NIP-AR sync subscriptions ([#8522](https://github.com/block/buzz/pull/8522)) ([`a56966b77`](https://github.com/block/buzz/commit/a56966b777278f703040b4686820a201bc278c57))
- feat(relay): add incremental artifact reads ([#8523](https://github.com/block/buzz/pull/8523)) ([`a57349b23`](https://github.com/block/buzz/commit/a57349b237c67c3983dd7a09af378977ccd1e3f9))
- perf(relay): route author- and #p-scoped global subscriptions by selector ([#8666](https://github.com/block/buzz/pull/8666)) ([`cc04cdca1`](https://github.com/block/buzz/commit/cc04cdca1a7a4094183dfaedbf09a52f5aa25d70))
- test(relay): fix main's build after the test-state helper rename ([#8718](https://github.com/block/buzz/pull/8718)) ([`0e8fb49bd`](https://github.com/block/buzz/commit/0e8fb49bd09c070b619d3b560a5c55b4c3cc1eb6))
- fix(db): keep lease releases durable and deflake PostgreSQL lane tests ([#8676](https://github.com/block/buzz/pull/8676)) ([`ef4130da4`](https://github.com/block/buzz/commit/ef4130da4bfeea9fe37477d621166675e0ab3ef7))
- relay: open the search pool lazily so a dead reader can't block boot ([#8662](https://github.com/block/buzz/pull/8662)) ([`efcdf0010`](https://github.com/block/buzz/commit/efcdf00101f56e11998e072a62502f1bcadc313c))
- fix: don't notify workflow owners through their attribution tag ([#8694](https://github.com/block/buzz/pull/8694)) ([`4b21a10c4`](https://github.com/block/buzz/commit/4b21a10c4b100bfccfa03ab4a0e85329c9880c9f))
- perf(relay): cut connect-burst CPU in log filtering and open-channel lookup ([#8670](https://github.com/block/buzz/pull/8670)) ([`1f16f621d`](https://github.com/block/buzz/commit/1f16f621d87cdc0b03f41105f9d4201313054664))
- Deny workflow runs for banned owners ([#8242](https://github.com/block/buzz/pull/8242)) ([`1fe120165`](https://github.com/block/buzz/commit/1fe120165f3026777c76526c4430e8ba14c76a75))
- fix(relay): close a REQ whose history read failed instead of sending EOSE ([#8692](https://github.com/block/buzz/pull/8692)) ([`76cd4294f`](https://github.com/block/buzz/commit/76cd4294f65bde33eff031315509e81deccf7c9d))
- db: warm the relay read pool toward its ceiling at boot ([#8651](https://github.com/block/buzz/pull/8651)) ([`6d719c680`](https://github.com/block/buzz/commit/6d719c680a85c98153324809988be37425fba73e))
- db: answer match-nothing event reads without taking a connection ([#8663](https://github.com/block/buzz/pull/8663)) ([`f6d31d13e`](https://github.com/block/buzz/commit/f6d31d13e433da3c70158cc24f1107b2b2ca1143))
- Add standalone owned-community deletion handlers ([#8645](https://github.com/block/buzz/pull/8645)) ([`8caf8351c`](https://github.com/block/buzz/commit/8caf8351c124a2a39f160e342587d427e8c32a51))
- fix(relay): revoke invitations and restrict claims ([#8237](https://github.com/block/buzz/pull/8237)) ([`d6196a16c`](https://github.com/block/buzz/commit/d6196a16c1eec7268e1fc5124ca89ee3d03d6d3e))
- perf(db,relay): bound thread participant scans and coalesce live summaries ([#8635](https://github.com/block/buzz/pull/8635)) ([`0a362eef1`](https://github.com/block/buzz/commit/0a362eef150ab16453993d442a8037baad766797))
- Add user deletion fence storage ([#8632](https://github.com/block/buzz/pull/8632)) ([`2c28e0713`](https://github.com/block/buzz/commit/2c28e07133d306ced204ca17f97c4cb93c916f72))
- Stop requiring the 0032 roster trigger at relay startup ([#8611](https://github.com/block/buzz/pull/8611)) ([`646ef8abf`](https://github.com/block/buzz/commit/646ef8abf9bc5ac3e698826b38811033537a4806))
- fix(relay): store a kind:9000 and its membership writes in one transaction ([#8606](https://github.com/block/buzz/pull/8606)) ([`78b5dae1f`](https://github.com/block/buzz/commit/78b5dae1f608a33850137b5be5a1909390035cce))
- feat(relay): log who and why for NIP-FI shadow would-deny ([#8634](https://github.com/block/buzz/pull/8634)) ([`24a370606`](https://github.com/block/buzz/commit/24a370606044c0c7be787cc2fd98ec0bfe1d606b))
- refactor(schema): stop auto-fencing new tables in desired-state bootstrap ([#8620](https://github.com/block/buzz/pull/8620)) ([`f33ebaafa`](https://github.com/block/buzz/commit/f33ebaafa15626e0f8bc3e23341835e08ebf4a33))
- test(relay): give group-state Postgres tests a normal acquire timeout ([#8564](https://github.com/block/buzz/pull/8564)) ([`403855d78`](https://github.com/block/buzz/commit/403855d7884971b4103ba094e3d24ba28bbf093a))
- chore(toolchain): bump Rust to 1.98.1 for macOS 27 proc-macro loading ([#8598](https://github.com/block/buzz/pull/8598)) ([`8216db1c7`](https://github.com/block/buzz/commit/8216db1c712cefdc0e2af7191d501adae03ba392))
- Generate user community inventory for the dummy deletion workflow ([#8605](https://github.com/block/buzz/pull/8605)) ([`834dca26b`](https://github.com/block/buzz/commit/834dca26bf0613581fc8199810f4693392aada3b))
- fix(db): keep the reader pool warm and drop its pre-acquire ping ([#8495](https://github.com/block/buzz/pull/8495)) ([`0e36dbc82`](https://github.com/block/buzz/commit/0e36dbc823f4754b98da64944cc015a9f7acbd6e))
- feat(relay): add an unlisted channel setting ([#8579](https://github.com/block/buzz/pull/8579)) ([`a3a47e629`](https://github.com/block/buzz/commit/a3a47e6294c29b5ce3fb7747cb0e42e45a8d5440))
- perf(push): avoid empty push delivery claims ([#8524](https://github.com/block/buzz/pull/8524)) ([`b8b1ab5b3`](https://github.com/block/buzz/commit/b8b1ab5b3cac3692f4231a32679de8d2e7113b70))
- feat(relay): verify NIP-FI agent tokens and admit agents through owners ([#8401](https://github.com/block/buzz/pull/8401)) ([`369ffa038`](https://github.com/block/buzz/commit/369ffa0380ab2a987b5321d431b9b567aa2b8b38))
- feat(relay): add several people with one kind:9000 ([#8575](https://github.com/block/buzz/pull/8575)) ([`d0dee1cb5`](https://github.com/block/buzz/commit/d0dee1cb50736c5dff4b4b2ad3dad0acf2be7794))
- Run user deletion through saved stage transitions ([#8520](https://github.com/block/buzz/pull/8520)) ([`4250014ba`](https://github.com/block/buzz/commit/4250014baee071f0f940c081afbbbf876c0d32d0))
- fix(mesh): expire dead peer records and instrument mesh boot ([#8503](https://github.com/block/buzz/pull/8503)) ([`7ce422417`](https://github.com/block/buzz/commit/7ce422417b139c2d622eccc6066b494c2e18bb9c))
- fix(db): rebuild events_pkey in declared order after pgschema apply ([#8525](https://github.com/block/buzz/pull/8525)) ([`20ba95ed8`](https://github.com/block/buzz/commit/20ba95ed8906b2b7ae1819bdddadf82c09778097))
- Add user deletion request intake ([#8496](https://github.com/block/buzz/pull/8496)) ([`2d289f720`](https://github.com/block/buzz/commit/2d289f720de0012fa36b5f6faa0e3bdd845ccfcf))
- fix(relay): apply channel setting changes atomically and lock every membership writer ([#8516](https://github.com/block/buzz/pull/8516)) ([`a2d28eb6c`](https://github.com/block/buzz/commit/a2d28eb6c478b97c371e1e67a92d43bdfb8dd7b0))
- fix(db): keep pgschema re-apply from dropping runtime partitions ([#8487](https://github.com/block/buzz/pull/8487)) ([`347ce88d5`](https://github.com/block/buzz/commit/347ce88d5dd8bc631c073f1947fea6b75d5a43c0))
- fix(db): bound every statement and the #p mention scan ([#8461](https://github.com/block/buzz/pull/8461)) ([`2f2f6e277`](https://github.com/block/buzz/commit/2f2f6e2774fb0899d2a927f5e5b1987603765f31))
- feat(relay): add announce channels with a join_role setting ([#8143](https://github.com/block/buzz/pull/8143)) ([`d97f6b4c6`](https://github.com/block/buzz/commit/d97f6b4c6ed616be0c3f1eb0e13d1eaa9e338a66))
- test(relay): cover system channels in the workflows API and push matcher ([#8509](https://github.com/block/buzz/pull/8509)) ([`c37d6b8eb`](https://github.com/block/buzz/commit/c37d6b8eb62b6b1747985092a7c9dc677da89a61))
- fix(relay): push system channel events to a lease that names them ([#8517](https://github.com/block/buzz/pull/8517)) ([`cd8a96817`](https://github.com/block/buzz/commit/cd8a9681793fef83001eb44954734b47c1938550))
- fix(relay): scope push matches with the read path's channel rule ([#8507](https://github.com/block/buzz/pull/8507)) ([`4dea51f64`](https://github.com/block/buzz/commit/4dea51f644cc5069aea24ff2f4df943f82d7b1c4))
- fix(sdk): reject malformed mention pubkeys before signing p tags ([#6372](https://github.com/block/buzz/pull/6372)) ([`a5767c67d`](https://github.com/block/buzz/commit/a5767c67deb951d64b8465b5da32c1dfc7a9ba40))
- docs(db): database target architecture and schema-change rules ([#8273](https://github.com/block/buzz/pull/8273)) ([`fcdabcf77`](https://github.com/block/buzz/commit/fcdabcf774203884c4f5b258aad000a740586eb6))
- fix(relay): advance the partition catch-all by default ([#8464](https://github.com/block/buzz/pull/8464)) ([`ca3be5501`](https://github.com/block/buzz/commit/ca3be55018a37c4e7d342057260dd773190eae68))
- feat(relay): write the NIP-43 member list in the membership transaction ([#8482](https://github.com/block/buzz/pull/8482)) ([`039e1c8d5`](https://github.com/block/buzz/commit/039e1c8d59232eb29d80e59b394d5cde825b389a))
- fix(relay): delete the startup NIP-33 d_tag backfill ([#8468](https://github.com/block/buzz/pull/8468)) ([`c99872f74`](https://github.com/block/buzz/commit/c99872f749cb1214a3e69371c83a7f2f72aef704))
- fix(mobile): restore Solo chats from channel labels ([#8466](https://github.com/block/buzz/pull/8466)) ([`c9e35f8ac`](https://github.com/block/buzz/commit/c9e35f8ac71f4f2eb7a8e256d0bc83f3518031af))
- fix(relay): show only legacy channel types to reads that name no channel ([#8469](https://github.com/block/buzz/pull/8469)) ([`25bcb791b`](https://github.com/block/buzz/commit/25bcb791b4105594940bb77cadaf556a34427a8c))
- fix(relay): take NIP-43 snapshot reconcile off the startup path ([#8467](https://github.com/block/buzz/pull/8467)) ([`e6c56ee5e`](https://github.com/block/buzz/commit/e6c56ee5ee80eace3c9eddf0bf22a020fa8f48f3))
- test(buzz-db): fix two PostgreSQL-lane timing flakes ([#8472](https://github.com/block/buzz/pull/8472)) ([`6e6173acd`](https://github.com/block/buzz/commit/6e6173acd58029bac800583c4cc7482dafed693a))
- feat(mobile): account onboarding, key recovery and hosted reconnect ([#8375](https://github.com/block/buzz/pull/8375)) ([`b6aa5539e`](https://github.com/block/buzz/commit/b6aa5539e3a44fe32a4bfe2963dfb23f10316985))
- feat(relay): tag every membership notice with its channel type ([#8406](https://github.com/block/buzz/pull/8406)) ([`cc6336d98`](https://github.com/block/buzz/commit/cc6336d9851983ca341d40cf2332052e9394a4f2))
- fix(relay): wait for the peer's Close before dropping any WebSocket ([#8426](https://github.com/block/buzz/pull/8426)) ([`91e7b469b`](https://github.com/block/buzz/commit/91e7b469b82b235c62885f82a6323b7e666e9254))
- test(auth): read the clock once in NIP-FI until test ([#8457](https://github.com/block/buzz/pull/8457)) ([`af7979e1c`](https://github.com/block/buzz/commit/af7979e1ca0c40af2ba4a8d05edad6bb5796c584))
- feat(relay): resolve NIP-FI issuer bindings from the database ([#8377](https://github.com/block/buzz/pull/8377)) ([`5b433d929`](https://github.com/block/buzz/commit/5b433d92926504370c6e12f651d5d010b5af33c2))
- feat(relay): start a channel with its members in one create ([#8421](https://github.com/block/buzz/pull/8421)) ([`3ffbfa693`](https://github.com/block/buzz/commit/3ffbfa693c6727b04b01ef727ce4848e4695ac40))
- feat(relay): store per-community NIP-FI issuer bindings ([#8372](https://github.com/block/buzz/pull/8372)) ([`6286a5432`](https://github.com/block/buzz/commit/6286a5432111f529835da320e801af1901889b03))
- fix(db): validate channel roster snapshots in the app writer ([#8316](https://github.com/block/buzz/pull/8316)) ([`97e1f6a08`](https://github.com/block/buzz/commit/97e1f6a0828d97d0031e2a31402554b679bf1146))
- fix(db): admit fleet sweeps per tenant instead of in-SQL fence predicate ([#8318](https://github.com/block/buzz/pull/8318)) ([`60de1db0b`](https://github.com/block/buzz/commit/60de1db0b8813766d8e004297798f2ff759d3089))
- buzz-db: tolerate absent universal write-fence objects (expand) ([#8322](https://github.com/block/buzz/pull/8322)) ([`2745a419a`](https://github.com/block/buzz/commit/2745a419a836fb6bc4753f0caf3c9cf9c9a4d274))
- feat(auth): support explicit mesh JWKS transport ([#8382](https://github.com/block/buzz/pull/8382)) ([`2d0f78c6e`](https://github.com/block/buzz/commit/2d0f78c6e1c43762aeb51efa633e9387fc301649))
- feat(buzz-db): retire the channel-TTL trigger ([#8210](https://github.com/block/buzz/pull/8210)) ([`c0ab78949`](https://github.com/block/buzz/commit/c0ab789499bde118a468178d23b726fd109a8e1c))
- fix(relay): confirm requested channels in one membership query ([#8378](https://github.com/block/buzz/pull/8378)) ([`d039d9a2d`](https://github.com/block/buzz/commit/d039d9a2d541fe8b767462b2ddaca73889154c69))
- fix(search): normalize profile name tiers in one place ([#8334](https://github.com/block/buzz/pull/8334)) ([`7852b1670`](https://github.com/block/buzz/commit/7852b1670c7588875fc43ef2613c8348893d5ab6))
- feat(relay): add profile search over name and display_name only ([#8301](https://github.com/block/buzz/pull/8301)) ([`f148c0f22`](https://github.com/block/buzz/commit/f148c0f22c35105524527dec8e4a7285c26804c6))
- feat(search): add newest-first sort to bridge search ([#8371](https://github.com/block/buzz/pull/8371)) ([`cdfc38ecb`](https://github.com/block/buzz/commit/cdfc38ecbd4eb1a1cf5d45de9a5e982292574d5d))
- chore(push): retire push notification database trigger ([#8352](https://github.com/block/buzz/pull/8352)) ([`676617467`](https://github.com/block/buzz/commit/6766174673b99f031a1cee7a2d5ef007b5a8e66c))
- feat(relay): let channel-state filters opt in to system channels ([#8182](https://github.com/block/buzz/pull/8182)) ([`d28f6b2f7`](https://github.com/block/buzz/commit/d28f6b2f7095b50a2c987a42e9b4ca345f8e9dac))
- feat(relay): leave system channels out of reads that do not name them ([#8181](https://github.com/block/buzz/pull/8181)) ([`cdf03f618`](https://github.com/block/buzz/commit/cdf03f618aee1fb2be91c0be9b8d5370d0e3109d))
- test: fix recurring CI flakes in desktop and Postgres lanes ([#8343](https://github.com/block/buzz/pull/8343)) ([`7b11c6147`](https://github.com/block/buzz/commit/7b11c6147df099cd28729f340ea032630bab38cc))
- feat(relay): deliver full signed events to operator listeners ([#8309](https://github.com/block/buzz/pull/8309)) ([`8b60dcf8e`](https://github.com/block/buzz/commit/8b60dcf8e3f520c651598aa13b4cccc0009bc255))
- fix(relay): match pushed-down tags by position, not containment ([#8335](https://github.com/block/buzz/pull/8335)) ([`e645918c6`](https://github.com/block/buzz/commit/e645918c6334f8a4d89638349106e73d318adff5))
- feat(relay): add the system channel type ([#8180](https://github.com/block/buzz/pull/8180)) ([`71d7aa043`](https://github.com/block/buzz/commit/71d7aa04369a6e86e158dc6d46246c8a3ce6d166))
- feat(relay): match label and creator filters before the page limit ([#8176](https://github.com/block/buzz/pull/8176)) ([`a3909acc6`](https://github.com/block/buzz/commit/a3909acc672619375669dff5274bb8e3cdfdc88b))
- feat(relay): channel labels ([#8175](https://github.com/block/buzz/pull/8175)) ([`2f79374f4`](https://github.com/block/buzz/commit/2f79374f4867035c33dace91c683440e7e011826))
- fix(relay): reject unreadable write targets as missing ([#8249](https://github.com/block/buzz/pull/8249)) ([`b3795236c`](https://github.com/block/buzz/commit/b3795236ccde4cefaebfd3da06ce4c838b76e78a))
- fix(ci): remove Detect Changed Paths timeout and deletion test race ([#8300](https://github.com/block/buzz/pull/8300)) ([`ea24a3ee3`](https://github.com/block/buzz/commit/ea24a3ee3d74679c8c489b83d351409e1b8d503e))
- test(buzz-db): drop partition scratch schemas on panic ([#8293](https://github.com/block/buzz/pull/8293)) ([`2270b66e1`](https://github.com/block/buzz/commit/2270b66e147c8955edbfc445aed4b9633f9dff6e))
- buzz-db: admit every fenced-table writer in app code ([#8219](https://github.com/block/buzz/pull/8219)) ([`d25384a4f`](https://github.com/block/buzz/commit/d25384a4f3c3a940b5b999f26105091c58ab76d6))
- feat(relay): publish channel type and creator on every channel-state event ([#8174](https://github.com/block/buzz/pull/8174)) ([`8bb49a1b6`](https://github.com/block/buzz/commit/8bb49a1b6a5ffb5b89eb2e860673ee7bff2fd29b))
- fix(buzz-db): delete workflow and membership children explicitly ([#8212](https://github.com/block/buzz/pull/8212)) ([`52d13efc0`](https://github.com/block/buzz/commit/52d13efc08ec2b80878f24672913ac465b37e148))
- feat(relay): allow HTTP operator listener delivery URLs ([#8287](https://github.com/block/buzz/pull/8287)) ([`8599efb6a`](https://github.com/block/buzz/commit/8599efb6a3cfbd3d4bc4534f6de766b4481c7fca))
- fix(relay): partition audit observability follow-ups ([#7994](https://github.com/block/buzz/pull/7994)) ([`85b733178`](https://github.com/block/buzz/commit/85b7331784804fbf9bb07df4199d4dc6a2b42ade))
- fix(relay): hide deletions of author-only events from other readers ([#8197](https://github.com/block/buzz/pull/8197)) ([`40c1c474e`](https://github.com/block/buzz/commit/40c1c474e74686cbd3218866ee926211cb3365db))
- feat(relay): accept an owner's presence for its agents (kind 20003) ([#8261](https://github.com/block/buzz/pull/8261)) ([`1d9f2c81a`](https://github.com/block/buzz/commit/1d9f2c81a5583f12be1239a088e2f0b379292dc3))
- perf(relay): drop per-pulse ban reads and owner-link writes on HTTP ([#8233](https://github.com/block/buzz/pull/8233)) ([`326e2301c`](https://github.com/block/buzz/commit/326e2301cb4b1edcb8a72d01ac4b19a83545365f))
- feat(relay): accept typing indicators over HTTP POST /events ([#8207](https://github.com/block/buzz/pull/8207)) ([`6c388bde6`](https://github.com/block/buzz/commit/6c388bde62114feabf5408729533ee52a19845a5))
- refactor(push): one app profile per gateway ([#8206](https://github.com/block/buzz/pull/8206)) ([`868e2f8f3`](https://github.com/block/buzz/commit/868e2f8f3271af6625981219b0bce2093033e7be))
- perf(relay): cache ephemeral-path serving and restriction reads ([#8208](https://github.com/block/buzz/pull/8208)) ([`bcc46fe83`](https://github.com/block/buzz/commit/bcc46fe8359a2bfd2bc26e6a7a1a1f8c29d44149))
- fix(push): isolate push enqueue and stop workers on rollback ([#8216](https://github.com/block/buzz/pull/8216)) ([`5b907b838`](https://github.com/block/buzz/commit/5b907b838a44d7985e98836177aec2903717381f))
- feat(relay): reshape read-state API to the sidebar wire format ([#8220](https://github.com/block/buzz/pull/8220)) ([`1e80066c9`](https://github.com/block/buzz/commit/1e80066c932250b87bd8a794f4143c0a88021c30))
- feat(buzz-db): run push enqueue and channel TTL refresh in app code ([#8135](https://github.com/block/buzz/pull/8135)) ([`16eb0b668`](https://github.com/block/buzz/commit/16eb0b6685a9ea5cd06275aed172903dac69f225))
- fix(push): stop backfilling messages on lease activation ([#8178](https://github.com/block/buzz/pull/8178)) ([`4db7bb0e7`](https://github.com/block/buzz/commit/4db7bb0e7f904b2f0ea232aacae6cd7f6b8a3b39))
- feat: raise hosted community limit to fifty ([#8186](https://github.com/block/buzz/pull/8186)) ([`8f66f7051`](https://github.com/block/buzz/commit/8f66f7051c68560feb27dbc74b069c851bc018bd))
- feat(db): advance an empty partition catch-all under bounded locks ([#7993](https://github.com/block/buzz/pull/7993)) ([`a8fe2b612`](https://github.com/block/buzz/commit/a8fe2b612c1c83de8f0983fa7a5cc1cb81ac7be8))
- feat(relay): record when a read-state account starts ([#8157](https://github.com/block/buzz/pull/8157)) ([`7afdc2aac`](https://github.com/block/buzz/commit/7afdc2aac930cd02001825d0b528f6f48595cd4a))
- fix(deletion): give the scheduled drain the cold-start DB connector ([#8146](https://github.com/block/buzz/pull/8146)) ([`c6340a45a`](https://github.com/block/buzz/commit/c6340a45a072c1793280cdcaec793d4a5dd82d97))
- refactor(schema): fan desired-state schema out to one file per table ([#8131](https://github.com/block/buzz/pull/8131)) ([`745501962`](https://github.com/block/buzz/commit/745501962e68041b3aee5c83fd3ea3bf5a496dbc))
- refactor(db): type-level admitted event-write transactions (AdmittedTx) ([#8130](https://github.com/block/buzz/pull/8130)) ([`f8bf2c529`](https://github.com/block/buzz/commit/f8bf2c529cdf2c193ad0be6cf333def124d182f2))
- feat(admin): add community archive commands ([#7107](https://github.com/block/buzz/pull/7107)) ([`1972b7d25`](https://github.com/block/buzz/commit/1972b7d256a5d0bb90eea6ef78e93d6b55bb1a12))
- feat(relay): add community reads to the admin API ([#8011](https://github.com/block/buzz/pull/8011)) ([`032198ce4`](https://github.com/block/buzz/commit/032198ce43680947c288bfd219d6a9b81d882348))
- perf(relay): bound fleet usage metrics collection ([#7176](https://github.com/block/buzz/pull/7176)) ([`6d07a2913`](https://github.com/block/buzz/commit/6d07a291376477942b70ba44489a47c9f6bfe006))
- buzz-db: purge retention-free deletions in the app and index mentions in the event transaction ([#8128](https://github.com/block/buzz/pull/8128)) ([`da651ad67`](https://github.com/block/buzz/commit/da651ad6726154ff1fe314fc64462031970f1106))
- feat(relay): time post-metrics-bind startup steps ([#8132](https://github.com/block/buzz/pull/8132)) ([`e097c4299`](https://github.com/block/buzz/commit/e097c42996c9a634209fd46df86998ee4a71ea48))
- feat(relay): private read-state accessory API ([#7906](https://github.com/block/buzz/pull/7906)) ([`1a2ddf9ea`](https://github.com/block/buzz/commit/1a2ddf9eaa87031a0d49ca1d882a46b5b89beb8d))
- Route serving event writes through the tenant lock ([#7828](https://github.com/block/buzz/pull/7828)) ([`d0fd96fca`](https://github.com/block/buzz/commit/d0fd96fca6704548cebe2f69d8dff0e3c80e77e2))
- feat(pairing): enter desktop codes on mobile ([#8085](https://github.com/block/buzz/pull/8085)) ([`5173fad66`](https://github.com/block/buzz/commit/5173fad6602ae82c06f338d19ef0f18eff57159b))
- fix(db): enumerate only active communities for maintenance ([#8061](https://github.com/block/buzz/pull/8061)) ([`7f6ffd5ee`](https://github.com/block/buzz/commit/7f6ffd5ee5ae1b66d660245acf465b88e17639bc))
- refactor(relay): bind HTTP tenants through one shadow-aware helper ([#8062](https://github.com/block/buzz/pull/8062)) ([`8af2d91f3`](https://github.com/block/buzz/commit/8af2d91f37270365d5cd9170ac48349baa08475e))
- feat(relay): add NIP-FI shadow mode for HTTP, WebSocket and admin ([#8034](https://github.com/block/buzz/pull/8034)) ([`df3f28a2c`](https://github.com/block/buzz/commit/df3f28a2c44f0bd258cff046717cde3fa026662e))
- Add application-owned writer lock foundations ([#7706](https://github.com/block/buzz/pull/7706)) ([`fe9e2409a`](https://github.com/block/buzz/commit/fe9e2409a02fbac415d5c66181135be3eec28a86))
- test(relay): configure a community in the Git ban-lookup fixture ([#8039](https://github.com/block/buzz/pull/8039)) ([`448407a97`](https://github.com/block/buzz/commit/448407a972ca9da0c1e13d49ee2c2170821be8a2))
- fix(relay): restore buzz-relay build after #8005 and #8028 ([#8036](https://github.com/block/buzz/pull/8036)) ([`639593bba`](https://github.com/block/buzz/commit/639593bba97b4ed1386d5128bceecfab2072df31))
- feat(nip-fi): bind assertions to the request Host's community ([#8028](https://github.com/block/buzz/pull/8028)) ([`2ebfde914`](https://github.com/block/buzz/commit/2ebfde9147140a4036b11bfc2c6b0da68688a05c))
- fix(relay): close community ban gaps across audio, agents and HTTP ([#8005](https://github.com/block/buzz/pull/8005)) ([`a38707d35`](https://github.com/block/buzz/commit/a38707d35c5d7028a83dcb4b85482a26f8b67605))
- refactor(buzz-relay): share NIP-FI assertion evaluation across adapters ([#7990](https://github.com/block/buzz/pull/7990)) ([`9b083957f`](https://github.com/block/buzz/commit/9b083957f6802fd8e0efc7414269714619139cf2))
- fix(relay): gate owner-only kinds in shared fan-out access filter ([#8006](https://github.com/block/buzz/pull/8006)) ([`24c1e702a`](https://github.com/block/buzz/commit/24c1e702a68c7b1623f4a33dd2745a39b0597098))
- fix(relay): deny channel writes when the channel lookup fails ([#8007](https://github.com/block/buzz/pull/8007)) ([`15772c54f`](https://github.com/block/buzz/commit/15772c54f36d1ed68c9c77ffb63235acb5ee8a64))
- feat(nip-fi): admin disconnect/deny API with in-memory deny-until-TTL map (S4) ([#7977](https://github.com/block/buzz/pull/7977)) ([`16839a077`](https://github.com/block/buzz/commit/16839a07738cf6189ee2f21c02d923b0f9dbe80d))
- fix(deletion): require sole owner at admission ([#7966](https://github.com/block/buzz/pull/7966)) ([`53a12100b`](https://github.com/block/buzz/commit/53a12100b34577286c89102f1875ca2b6eea61e5))
- feat(relay): add direct staff ban/timeout/delete with staff guard ([#7883](https://github.com/block/buzz/pull/7883)) ([`020193f8e`](https://github.com/block/buzz/commit/020193f8e36bede04a57e0c06ba60e26ed67612b))
- feat(buzz-relay): idempotent owner community deletion with quota reservation ([#7969](https://github.com/block/buzz/pull/7969)) ([`d7a35afa9`](https://github.com/block/buzz/commit/d7a35afa9859a0c666de93ab1cd4f8a433a1cfe8))
- fix(db): audit partition catalog before creation ([#6515](https://github.com/block/buzz/pull/6515)) ([`14a752fb2`](https://github.com/block/buzz/commit/14a752fb2445790bf4620348e485e8576371f906))
- feat(buzz-relay): NIP-FI stateless enforcement (S3) — upgrade gate, NIP-42 pairing, session lifetime, JWKS warm ([#7224](https://github.com/block/buzz/pull/7224)) ([`8519db153`](https://github.com/block/buzz/commit/8519db1532efd6cda8f72bb6454c00fc3f87cfba))
- Automate owner deletion preparation ([#7830](https://github.com/block/buzz/pull/7830)) ([`bba75a71e`](https://github.com/block/buzz/commit/bba75a71eb5a719b597479ec848053cde364befd))
- feat(relay): implement NIP-AR channel artifacts ([#7919](https://github.com/block/buzz/pull/7919)) ([`12670bd0f`](https://github.com/block/buzz/commit/12670bd0f037c66a682272bb81c46c3f254fad74))
- 🤖 perf: bound long-thread aux reads and make query deadlines terminal ([#7854](https://github.com/block/buzz/pull/7854)) ([`9b1c4f98e`](https://github.com/block/buzz/commit/9b1c4f98e2981d6d89fbfa3154b8ef0b3b6ad334))
- Add owner deletion admission control plane ([#7818](https://github.com/block/buzz/pull/7818)) ([`15d44dcce`](https://github.com/block/buzz/commit/15d44dcceee0679979991b3100f21f01fc799693))
- feat(nip-fi): harden Blossom kind-24242 verifier to NIP-FI spec ([#7288](https://github.com/block/buzz/pull/7288)) ([`f7ff4294f`](https://github.com/block/buzz/commit/f7ff4294fa95191d1fc7b29a765e6f0b48db6bd8))
- Make relay readiness process-local ([#7341](https://github.com/block/buzz/pull/7341)) ([`b37e47721`](https://github.com/block/buzz/commit/b37e477211313a94344a31aea4b180ed4effe0b8))
- fix(relay): fail startup on invalid operator listener config ([#7933](https://github.com/block/buzz/pull/7933)) ([`ebe99a46e`](https://github.com/block/buzz/commit/ebe99a46e8802b9ff20fdf6a1028ce93bdefaa43))
- fix(db): limit event transactions to listener mention kinds ([#7932](https://github.com/block/buzz/pull/7932)) ([`1846094b3`](https://github.com/block/buzz/commit/1846094b3111a059f856bb4f3466c102fad17ef7))
- feat(relay): deliver pubkey mentions to relay companions ([#7793](https://github.com/block/buzz/pull/7793)) ([`c4c86006f`](https://github.com/block/buzz/commit/c4c86006f2d67b2ea9055780129ee7ce95c54e0a))
- feat(push): support configurable HTTP(S) delivery URLs ([#7877](https://github.com/block/buzz/pull/7877)) ([`781d39510`](https://github.com/block/buzz/commit/781d39510cf23cfe224e8f521ae06a23377e06de))
- feat(relay): enforce NIP-FI assertion+NIP-98 pairing on HTTP ingress ([#7264](https://github.com/block/buzz/pull/7264)) ([`6410e685a`](https://github.com/block/buzz/commit/6410e685a80d42db0645fadc9bbe710559ef911e))
- fix(ci): run the admin disabled-mode DB test in the PostgreSQL lane ([#7900](https://github.com/block/buzz/pull/7900)) ([`b65cff31a`](https://github.com/block/buzz/commit/b65cff31a4c5f4a0af63952b60a21fd73195321a))
- fix(relay-admin): make thread deletions atomic and fence expired action leases under row lock ([#7853](https://github.com/block/buzz/pull/7853)) ([`676e8c438`](https://github.com/block/buzz/commit/676e8c43825fa478850a3a320b1367d3288cce1a))
- feat(desktop): relay admin console for the /api/admin/v1 operator surface ([#4768](https://github.com/block/buzz/pull/4768)) ([`8f8c4dfad`](https://github.com/block/buzz/commit/8f8c4dfadecb2298a9140af5d323487aaad844ab))
- chore(mesh): upgrade MeshLLM to 0.76.2 ([#7559](https://github.com/block/buzz/pull/7559)) ([`4544ba171`](https://github.com/block/buzz/commit/4544ba1713d8d7f5959d7d63886ff3927357e1ac))
- feat(relay): add opt-in newest-first thread windows ([#7823](https://github.com/block/buzz/pull/7823)) ([`5a349db91`](https://github.com/block/buzz/commit/5a349db91c23fa70c8c8aa43a3a5ba0005d8dd41))
- Use worker snapshots for relay storage metrics ([#7845](https://github.com/block/buzz/pull/7845)) ([`4142d2b84`](https://github.com/block/buzz/commit/4142d2b84e1c3230fbe6c4b2d1e994721c409092))
- feat(canvas): add version history with atomic restore ([#6780](https://github.com/block/buzz/pull/6780)) ([`b6a26556e`](https://github.com/block/buzz/commit/b6a26556ec904cdebe0fbc7e6c25b4ea2cf294d1))
- fix(audit): frame hash inputs with TLV ([#7492](https://github.com/block/buzz/pull/7492)) ([`7881447c1`](https://github.com/block/buzz/commit/7881447c193edf2ed3a860d959d11dc94f0946fb))
- feat(relay): add admin HTTP routes for member restriction management ([#7302](https://github.com/block/buzz/pull/7302)) ([`77729abfb`](https://github.com/block/buzz/commit/77729abfb692b25a0f4ec4a69add86af2e32c0dd))
- fix(relay): fire kick live side effects at convergence; persist target; fence re-add race with held lock ([#7298](https://github.com/block/buzz/pull/7298)) ([`ce41be9c4`](https://github.com/block/buzz/commit/ce41be9c4b1ca50dea0b04379333eb082826ba0f))
- feat(relay): add atomic complete read-state snapshots ([#7572](https://github.com/block/buzz/pull/7572)) ([`6a86531ac`](https://github.com/block/buzz/commit/6a86531ac9d27b5123cca14636ced581578975df))
- fix(mobile): avoid opening empty threads on message tap ([#7756](https://github.com/block/buzz/pull/7756)) ([`a61239f0d`](https://github.com/block/buzz/commit/a61239f0d8036aff58176f5c0ce7f080c66e21b7))
- fix(workflows): make deletion persistent and retryable ([#7735](https://github.com/block/buzz/pull/7735)) ([`5079c770f`](https://github.com/block/buzz/commit/5079c770fe30bb3d8204822ce6c2431eacac6d4b))
- fix(relay): exclude ephemeral activity from message quota ([#7736](https://github.com/block/buzz/pull/7736)) ([`5511b56fc`](https://github.com/block/buzz/commit/5511b56fcf0047f9d0d4887dc75125b6933a6bbd))
- feat(db): expose connection setup metrics ([#7286](https://github.com/block/buzz/pull/7286)) ([`4c2086c08`](https://github.com/block/buzz/commit/4c2086c0844c30a0956aa1e3b1c2901f0357fb56))
- Isolate S3 storage metrics from the relay ([#7543](https://github.com/block/buzz/pull/7543)) ([`6b1e45d2f`](https://github.com/block/buzz/commit/6b1e45d2f6084a3754a09bb1b800f370ce5399dd))
- feat(mobile): show build number with version in settings ([#7697](https://github.com/block/buzz/pull/7697)) ([`b36600fc4`](https://github.com/block/buzz/commit/b36600fc440615e2565f94bffc800e0495180f6b))
- Add authenticated WebSocket recovery telemetry ([#7546](https://github.com/block/buzz/pull/7546)) ([`891208914`](https://github.com/block/buzz/commit/891208914ed51c55b11ef6102f10ed08b5d9bb30))
- Instrument database pool roles ([#7356](https://github.com/block/buzz/pull/7356)) ([`213092074`](https://github.com/block/buzz/commit/213092074c269bee90c87163672f9c2b8d714cfe))
- fix(db): allow naturally expired push lease replacement ([#7653](https://github.com/block/buzz/pull/7653)) ([`c507a4d48`](https://github.com/block/buzz/commit/c507a4d488ca27796e78d876b9c24ee38442cc1b))
- feat(push): make gateway origin configurable ([#7261](https://github.com/block/buzz/pull/7261)) ([`76f7e5ef0`](https://github.com/block/buzz/commit/76f7e5ef0cc4a7d71d9562ecfb3e4a6887a51461))
- feat(git): add default-branch management to relay and CLI ([#7562](https://github.com/block/buzz/pull/7562)) ([`6146c4fd1`](https://github.com/block/buzz/commit/6146c4fd16f734b525f9ac31e1a3433ccc1ec96f))
- fix(relay): reject presence updates when Redis storage fails ([#7532](https://github.com/block/buzz/pull/7532)) ([`00209076c`](https://github.com/block/buzz/commit/00209076c7a10d9e4a475466c313e8ebecf041f5))
- feat(mesh): upgrade to mesh-llm 0.76.0-rc8 and recommend Qwen3.8 27B ([#6189](https://github.com/block/buzz/pull/6189)) ([`44316ff72`](https://github.com/block/buzz/commit/44316ff72f5f7de014c66b01cbf534298a70c249))
- refactor(relay): extract NIP-29 membership authorization ([#7285](https://github.com/block/buzz/pull/7285)) ([`cd02b693a`](https://github.com/block/buzz/commit/cd02b693aae86444b0b5636474a3d202c6fc8f26))
- feat(relay): add early startup lifecycle logs ([#7258](https://github.com/block/buzz/pull/7258)) ([`88687876f`](https://github.com/block/buzz/commit/88687876f7808a2fd742b7eb2e4b9f87d999ad8d))
- Show status and huddle indicators beside names ([#7112](https://github.com/block/buzz/pull/7112)) ([`c6ca9d94d`](https://github.com/block/buzz/commit/c6ca9d94d94230a315257a87beb8dc116fec56cc))
- feat(cli): add buzz gifs command group and NIP-30 emoji tags on messages ([#7259](https://github.com/block/buzz/pull/7259)) ([`47d068e21`](https://github.com/block/buzz/commit/47d068e2109d077414cbf2f4f1c927f6d051037a))
- Add operation-aware database pool acquisition metrics ([#7195](https://github.com/block/buzz/pull/7195)) ([`91ab9d31b`](https://github.com/block/buzz/commit/91ab9d31b8f7249ff1db141ae9d8bb3f2a20bcdd))
- chore(db): drop Phase-A NIP-FI relay-side authority ledger ([#7221](https://github.com/block/buzz/pull/7221)) ([`04babf026`](https://github.com/block/buzz/commit/04babf02655440b4dfd37f2e2df605ead0a030d8))
- feat(relay): add detailed readiness metrics ([#7149](https://github.com/block/buzz/pull/7149)) ([`beb76406c`](https://github.com/block/buzz/commit/beb76406c12ab8a7af9b2fcf7547c353e3369c34))
- feat(mobile): prepare `buzz-push-gateway` for deployment ([#7158](https://github.com/block/buzz/pull/7158)) ([`42b42447b`](https://github.com/block/buzz/commit/42b42447b0dc47c3e1a4d95caab893567dcd1677))
- feat(buzz-auth): add production NIP-FI federated assertion runtime ([#7109](https://github.com/block/buzz/pull/7109)) ([`70895b355`](https://github.com/block/buzz/commit/70895b355fcea9f99894b426c020052b715bd368))
- ci: run PostgreSQL tests in isolated lane ([#6730](https://github.com/block/buzz/pull/6730)) ([`bd7349041`](https://github.com/block/buzz/commit/bd73490418266f267d9bb3bdf13e64582adc8e80))
- feat(db): add NIP-FI identity and final-admission schema foundation ([#6994](https://github.com/block/buzz/pull/6994)) ([`9ab163190`](https://github.com/block/buzz/commit/9ab163190b4d4994a742a66d5fa4cae23c35fa4e))
- fix(relay): reject a frame on its own acknowledgement channel ([#6961](https://github.com/block/buzz/pull/6961)) ([`2f3dd850d`](https://github.com/block/buzz/commit/2f3dd850db3afe27e56f18cbcd3548eabdd9b9c2))
- fix(acp): wake agents from workflow messages ([#6953](https://github.com/block/buzz/pull/6953)) ([`93237b4a7`](https://github.com/block/buzz/commit/93237b4a745b14cb8bfe292053bf34adef652d29))
- Enforce NIP-OA authorization time bounds ([#7004](https://github.com/block/buzz/pull/7004)) ([`e47690c21`](https://github.com/block/buzz/commit/e47690c21b519128b40c917456b3e3f33f018fe4))
- feat(db): configurable writer session timeouts (lock, idle-txn, statement) ([#6229](https://github.com/block/buzz/pull/6229)) ([`3ed623bb2`](https://github.com/block/buzz/commit/3ed623bb217bf9697b0ce4562529254977e0ea04))
- feat(mobile): push notifications MVP ([#6269](https://github.com/block/buzz/pull/6269)) ([`c432a111c`](https://github.com/block/buzz/commit/c432a111ca9ddd31a85e1312d5995f8b92191b82))
- refactor(db): extract domain stores from database runtime ([#6987](https://github.com/block/buzz/pull/6987)) ([`a3730784f`](https://github.com/block/buzz/commit/a3730784fc851bb1125b40cca9b0a30788a293c1))
- refactor(relay): NIP-98 admin auth with Operator/Moderator roles and NIP-11 discovery ([#3777](https://github.com/block/buzz/pull/3777)) ([`86b9142a0`](https://github.com/block/buzz/commit/86b9142a09f2af3ba2fff7effa6a6cd53b40f51c))
- refactor(db): split channel membership store ([#6782](https://github.com/block/buzz/pull/6782)) ([`e76c81968`](https://github.com/block/buzz/commit/e76c81968b65b0755b83efdd59dc3375c59ddf40))
- feat(auth): add NIP-FI canonical assertion verifier and contracts ([#6776](https://github.com/block/buzz/pull/6776)) ([`953a1798b`](https://github.com/block/buzz/commit/953a1798b23b04289b3a225f463e60a172c1aac3))
- test(db): use canonical channel roster fixtures ([#6819](https://github.com/block/buzz/pull/6819)) ([`57216c942`](https://github.com/block/buzz/commit/57216c942f171db305135bcb6a4ede2d87e0be8a))
- fix(cli): enrich template cardinality error with per-candidate presence and profile hints ([#4825](https://github.com/block/buzz/pull/4825)) ([`0808ab485`](https://github.com/block/buzz/commit/0808ab485c39c3c12ef02af2188c65a5145eb99d))
- fix(db): disable heartbeat vacuum truncation ([#6898](https://github.com/block/buzz/pull/6898)) ([`0ccf934b8`](https://github.com/block/buzz/commit/0ccf934b88f610f5f235862ecd51e2dcbae2cb74))
- fix(db): exclude kind:30179 ciphertext from brownfield FTS ([#6822](https://github.com/block/buzz/pull/6822)) ([`b3baa56ba`](https://github.com/block/buzz/commit/b3baa56ba83d01a0b7292d81aae9370f5616c62b))
- broker: define the agent-to-broker action contract ([#6742](https://github.com/block/buzz/pull/6742)) ([`b622003f7`](https://github.com/block/buzz/commit/b622003f74aa5bf9b659786452813299a25e4897))
- feat(projects): add agent and CLI project-home support ([#6590](https://github.com/block/buzz/pull/6590)) ([`de188ebf0`](https://github.com/block/buzz/commit/de188ebf06f701ca0f47c51f859da21e19a35f04))
- refactor(db): finish replaceable event store extraction ([#6777](https://github.com/block/buzz/pull/6777)) ([`ef0d20256`](https://github.com/block/buzz/commit/ef0d2025683869418e8eee22ac5b5ac16c5198b7))
- feat(desktop): add KLIPY GIF search to composers ([#5554](https://github.com/block/buzz/pull/5554)) ([`8471049c4`](https://github.com/block/buzz/commit/8471049c430073474939336dfc6aa98272bc8762))
- Remove public relay signing key fallback ([#6729](https://github.com/block/buzz/pull/6729)) ([`ee6ca5fa2`](https://github.com/block/buzz/commit/ee6ca5fa28bce04dfecb6717de65b08a57f2ac47))
- Qualify canonical relay images for staged delivery ([#6781](https://github.com/block/buzz/pull/6781)) ([`f24971033`](https://github.com/block/buzz/commit/f24971033178926153b49d320bd876d15d9cb2bf))
- Add database pressure observability ([#6700](https://github.com/block/buzz/pull/6700)) ([`113a33b7e`](https://github.com/block/buzz/commit/113a33b7e49b7173ee1767c49ef2f49c63803034))
- Support community deletion in versioned media buckets ([#6738](https://github.com/block/buzz/pull/6738)) ([`d12dea4e6`](https://github.com/block/buzz/commit/d12dea4e67c5224a626d9c00f45e68d1def72d4c))
- Extract community persistence ([#6668](https://github.com/block/buzz/pull/6668)) ([`9d1e4b257`](https://github.com/block/buzz/commit/9d1e4b257657f382d3111ce748f3da8d063b7671))
- Centralize replaceable event persistence ([#6660](https://github.com/block/buzz/pull/6660)) ([`8d2d0ff5a`](https://github.com/block/buzz/commit/8d2d0ff5ad42733e9949442c4b6358d0ba87f9a8))
- perf(desktop): persist channel heads, collapse thread reads and reply sends ([#6572](https://github.com/block/buzz/pull/6572)) ([`2d280376a`](https://github.com/block/buzz/commit/2d280376ad36134cec1f23bead6d866d30bed147))
- Add mobile Huddles voice MVP ([#6056](https://github.com/block/buzz/pull/6056)) ([`8c0f42e18`](https://github.com/block/buzz/commit/8c0f42e187ca82d701251fc849217530178ebace))
- Repair stale large channel roster snapshots ([#6251](https://github.com/block/buzz/pull/6251)) ([`24ec6a468`](https://github.com/block/buzz/commit/24ec6a468ec9d0d425ee58fbfc4d416412c446ad))
- feat(workflows): reply in-thread from send_message action ([#6178](https://github.com/block/buzz/pull/6178)) ([`c6e3fe7df`](https://github.com/block/buzz/commit/c6e3fe7dfa751096d8c4083aaf15d6f6af296572))
- feat(workflows): add workflow editor ([#6248](https://github.com/block/buzz/pull/6248)) ([`1934e83bf`](https://github.com/block/buzz/commit/1934e83bf5a5d8cd00f0cf28b558547b8d0dffb0))
- fix(media): accept portrait video resolutions ([#6058](https://github.com/block/buzz/pull/6058)) ([`196d62f97`](https://github.com/block/buzz/commit/196d62f97c21d053ddf8715d75ef57e92bd0051f))
- Revert "fix(acp): gate relay-signed workflow messages on their attributed author" ([#6311](https://github.com/block/buzz/pull/6311)) ([`08eb46ef3`](https://github.com/block/buzz/commit/08eb46ef3c0894baa7e48d9229f45349751a4a57))
- fix(desktop): exclude archived agents from nest, order regeneration ([#5905](https://github.com/block/buzz/pull/5905)) ([`121e4b3ce`](https://github.com/block/buzz/commit/121e4b3ce7acab6ac310257f444997f58a97cb2e))
- fix(workflows): preserve multi-channel listing semantics ([#6009](https://github.com/block/buzz/pull/6009)) ([`f7a01bda7`](https://github.com/block/buzz/commit/f7a01bda7b1bf95cdbc9dc21bb69970955b14ecc))
- fix(acp): gate relay-signed workflow messages on their attributed author ([#6129](https://github.com/block/buzz/pull/6129)) ([`54f11219e`](https://github.com/block/buzz/commit/54f11219efe6b2617ba74d1ef8701fb5413956d8))
- feat(workflows): add responsive library card actions ([#6008](https://github.com/block/buzz/pull/6008)) ([`edc4a09aa`](https://github.com/block/buzz/commit/edc4a09aaa41c29e2495a28247c895febaf6587d))
- Projects v3: unify sharing, discussions, and issue ownership ([#5792](https://github.com/block/buzz/pull/5792)) ([`122a8b898`](https://github.com/block/buzz/commit/122a8b8988869f0b1a7c056a76f7d16bfb0f6fdd))
- fix(channels): return complete member rosters ([#5765](https://github.com/block/buzz/pull/5765)) ([`e0940927f`](https://github.com/block/buzz/commit/e0940927ff381f6a353c637732c7a81886f9639d))
- Make workflow run history authoritative in Desktop ([#5780](https://github.com/block/buzz/pull/5780)) ([`2693e0db1`](https://github.com/block/buzz/commit/2693e0db1fc4980a551c2492031812dc4bad985f))
- feat(deletion): add durable whole-community deletion ([#4425](https://github.com/block/buzz/pull/4425)) ([`8a2c9af2d`](https://github.com/block/buzz/commit/8a2c9af2dbe0cf315e77f43a4560d3572da5e554))
- fix(relay): stop panicking the ingest worker on reactions to project events ([#5294](https://github.com/block/buzz/pull/5294)) ([`16b7ae7ce`](https://github.com/block/buzz/commit/16b7ae7ce623a57be1461adee3b8fce4115b3c3a))
- fix(relay): log event kind on the HTTP bridge /events line ([#5291](https://github.com/block/buzz/pull/5291)) ([`e8153f8f2`](https://github.com/block/buzz/commit/e8153f8f27f5a35f56b2a578ab749190787d9e91))
- feat(tracing): add PostgreSQL tracing spans ([#3678](https://github.com/block/buzz/pull/3678)) ([`397796c5f`](https://github.com/block/buzz/commit/397796c5f343db4251198f44505b1afebe88223f))
- Fix macOS attachment picker lifecycle and allow inert HTML downloads ([#5569](https://github.com/block/buzz/pull/5569)) ([`bba3e0638`](https://github.com/block/buzz/commit/bba3e06386b8a0ca22e9867dc81aac1ca2b1b737))
- chore: mesh upgrade, clean up legacy special case code, simplify model selection for mesh ([#5289](https://github.com/block/buzz/pull/5289)) ([`240cdd3ea`](https://github.com/block/buzz/commit/240cdd3ea17a8f4d521c8398a929294210bd1e1a))
- fix(channels): restore member invitations to private channels ([#5493](https://github.com/block/buzz/pull/5493)) ([`2777189d9`](https://github.com/block/buzz/commit/2777189d960fa5b1d863166f36d6e37ff8ce0819))
- fix(search): surface exact short profile names ([#5480](https://github.com/block/buzz/pull/5480)) ([`3c76f682c`](https://github.com/block/buzz/commit/3c76f682c3c2dfe2cd296c277c5e63799d3424f9))
- feat(desktop): NIP-AM agent-usage backend — P2 emission/transport/archive + P4a aggregation/D6 ([#4000](https://github.com/block/buzz/pull/4000)) ([`5e4c05f90`](https://github.com/block/buzz/commit/5e4c05f90b062898e1827ba45cb826c6ff913741))
## relay-v0.2.1
- fix(sdk): preserve self-mention p tags in message and forum event builders ([#4975](https://github.com/block/buzz/pull/4975)) ([`78c87ae20e`](https://github.com/block/buzz/commit/78c87ae20e182fffdd99744d6c9ff99df82b159c))

View File

@@ -4,7 +4,7 @@ default-run = "buzz-relay"
# Independent version: buzz-relay ships as a pinnable artifact
# (ghcr.io/block/buzz), released on its own cadence via `just release-relay`.
# It does NOT inherit the workspace version.
version = "0.2.1"
version = "0.3.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true