diff --git a/Cargo.lock b/Cargo.lock index c465548d2c..a297948f9b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1433,7 +1433,7 @@ dependencies = [ [[package]] name = "buzz-relay" -version = "0.2.1" +version = "0.3.0" dependencies = [ "anyhow", "arc-swap", diff --git a/crates/buzz-relay/CHANGELOG.md b/crates/buzz-relay/CHANGELOG.md index 7ee7e9a303..4e02e85ef9 100644 --- a/crates/buzz-relay/CHANGELOG.md +++ b/crates/buzz-relay/CHANGELOG.md @@ -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)) diff --git a/crates/buzz-relay/Cargo.toml b/crates/buzz-relay/Cargo.toml index 08f542b4c6..cd5a79e526 100644 --- a/crates/buzz-relay/Cargo.toml +++ b/crates/buzz-relay/Cargo.toml @@ -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