Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
379 commits
Select commit Hold shift + click to select a range
cd8a968
fix(relay): push system channel events to a lease that names them (#8…
loganj Oct 21, 2026
c37d6b8
test(relay): cover system channels in the workflows API and push matc…
loganj Oct 21, 2026
1a54eec
fix(mobile): keep token labels visible in authored Markdown links (#7…
masfour7 Oct 21, 2026
d97f6b4
feat(relay): add announce channels with a join_role setting (#8143)
loganj Oct 21, 2026
2f2f6e2
fix(db): bound every statement and the #p mention scan (#8461)
TheSentinel454 Oct 21, 2026
347ce88
fix(db): keep pgschema re-apply from dropping runtime partitions (#8487)
Areson Oct 22, 2026
e8781ca
fix(mobile): remove Browse channels from channel list (#8539)
klopez4212 Oct 22, 2026
a2d28eb
fix(relay): apply channel setting changes atomically and lock every m…
loganj Oct 22, 2026
2d289f7
BUZZ-301: Add user deletion request intake (#8496)
ravarora2 Oct 22, 2026
8260b6e
feat(mobile): group typing avatars into one animated indicator (#8543)
klopez4212 Oct 22, 2026
f7708d0
Polish mobile onboarding and profile setup (#8438)
klopez4212 Oct 22, 2026
20ba95e
fix(db): rebuild events_pkey in declared order after pgschema apply (…
Areson Oct 22, 2026
dc25198
Add project selection to new Solo chats on mobile (#8546)
klopez4212 Oct 22, 2026
016310d
docs(cli): drop private references from the agent format comment (#8508)
ngoodger-block Oct 23, 2026
9e8c9fc
fix(deps): bump ctutils to 0.4.5 for RUSTSEC-2026-0385 (#8560)
loganj Oct 23, 2026
d676c7b
fix(deps): bump p256 to 0.14 for RUSTSEC-2026-0387 (#8592)
baxen Oct 26, 2026
7ce4224
fix(mesh): expire dead peer records and instrument mesh boot (#8503)
TheSentinel454 Oct 26, 2026
4250014
Run user deletion through saved stage transitions (#8520)
ravarora2 Oct 26, 2026
4c7ba3b
docs: remove NIP-FI migration gate from release procedure (#8567)
brow Oct 26, 2026
d0dee1c
feat(relay): add several people with one kind:9000 (#8575)
baxen Oct 26, 2026
369ffa0
feat(relay): verify NIP-FI agent tokens and admit agents through owne…
wpfleger96 Oct 26, 2026
d727033
docs(memory): add core-as-index and source metadata; frame memory as …
salman1993 Oct 26, 2026
b8b1ab5
perf(push): avoid empty push delivery claims (#8524)
brow Oct 26, 2026
d090ac2
perf(mobile): cut idle and resume sync churn (#8490)
wesbillman Oct 26, 2026
ab73cd9
perf(mobile): restore cached channels before community sync (#8580)
wesbillman Oct 26, 2026
a3a47e6
feat(relay): add an unlisted channel setting (#8579)
baxen Oct 26, 2026
0e36dbc
fix(db): keep the reader pool warm and drop its pre-acquire ping (#8495)
TheSentinel454 Oct 26, 2026
209fcd2
fix(mobile): ignore unrelated mutes when building push subscriptions …
morgmart Oct 26, 2026
8ceca8a
perf(mobile): batch initial channel read-state seeds (#8607)
wesbillman Oct 26, 2026
834dca2
Generate user community inventory for the dummy deletion workflow (#8…
ravarora2 Oct 26, 2026
a38fedb
fix(desktop): recognize agents without NIP-OA in Huddles (#8544)
loganj Oct 26, 2026
8216db1
chore(toolchain): bump Rust to 1.98.1 for macOS 27 proc-macro loading…
matt2e Oct 26, 2026
5996e5d
fix(mobile): isolate push setup failures from app rendering (#8610)
brow Oct 27, 2026
6861e18
fix(desktop): keep FileCard inside narrow message rows (#8612)
matt2e Oct 27, 2026
b148849
Speed up mobile Solo chat creation and agent discovery (#8547)
klopez4212 Oct 27, 2026
ff9eb8f
Make mobile onboarding QR-first and synchronize scanner motion (#8599)
klopez4212 Oct 27, 2026
a4e83df
fix(mobile): open message links to public channels the user has not j…
loganj Oct 27, 2026
b77ad2e
fix(mobile): align Solo agent policy and labels with the owner's inve…
brow Oct 27, 2026
f167c4c
fix(push): accept canonical channel UUIDs across versions (#8609)
brow Oct 27, 2026
3ce3a2e
docs(nip-ap): define agenttype on agent settings (#8631)
kalvinnchau Oct 27, 2026
c477663
fix(push-gateway): log which App Attest check rejected a device (#8630)
brow Oct 27, 2026
403855d
test(relay): give group-state Postgres tests a normal acquire timeout…
loganj Oct 27, 2026
b929b2c
fix(mobile): replace a push enrollment the gateway rejected (#8629)
brow Oct 27, 2026
d4a0706
feat(mobile): manage Builderlab remote agents (#8626)
brow Oct 27, 2026
f33ebaa
refactor(schema): stop auto-fencing new tables in desired-state boots…
ngoodger-block Oct 27, 2026
5a8102e
fix(mobile): preserve invite onboarding and offer identity setup (#8617)
wesbillman Oct 27, 2026
5c2ea2e
feat(mobile): add full-screen profile setup with inline avatar editin…
klopez4212 Oct 27, 2026
24a3706
feat(relay): log who and why for NIP-FI shadow would-deny (#8634)
wpfleger96 Oct 28, 2026
3ed07e5
fix(deps): bump pulldown-cmark to 0.13.5 for RUSTSEC-2026-0414 (#8644)
matt2e Oct 28, 2026
78b5dae
fix(relay): store a kind:9000 and its membership writes in one transa…
TheSentinel454 Oct 28, 2026
646ef8a
Stop requiring the 0032 roster trigger at relay startup (#8611)
loganj Oct 28, 2026
9e18d17
fix(mobile): open new DMs without waiting for a full channel reload (…
brow Oct 28, 2026
2c28e07
BUZZ-413: Add user deletion fence storage (#8632)
ravarora2 Oct 28, 2026
b310fea
mobile: find DMs opened ahead of the list everywhere (#8646)
brow Oct 28, 2026
0a362ee
perf(db,relay): bound thread participant scans and coalesce live summ…
TheSentinel454 Oct 28, 2026
d6196a1
fix(relay): revoke invitations and restrict claims (#8237)
bradseiler Oct 28, 2026
4ff02bf
perf(mobile): sign events with native libsecp256k1 on iOS and Android…
brow Oct 28, 2026
bad9d26
fix(mobile): push every message in your own Solo chats (#8615)
brow Oct 28, 2026
974495f
fix(mobile): resume reconnect replay from the last live point and spr…
TheSentinel454 Oct 29, 2026
713b864
fix(push-gateway): log which App Attest certificate check failed (#8671)
brow Oct 29, 2026
82b2781
fix(mobile): rebuild buzz_secp256k1 when vendored headers change (#8664)
brow Oct 29, 2026
eda26b9
ci: repeat changed tests ten times on pull requests (#8613)
matt2e Oct 29, 2026
6e332f4
chore(desktop): point `just staging` at the new Block staging relay (…
matt2e Oct 29, 2026
7c165c3
Smooth profile avatar editor transitions (#8640)
klopez4212 Oct 29, 2026
39b8b2b
feat(mobile): unify Messages navigation with Solo and Team filters (#…
klopez4212 Oct 29, 2026
a7e65c9
feat(mobile): choose remote agent models and gate agents on Builderla…
brow Oct 29, 2026
770ab7f
perf(mobile): decode relay query responses off the UI isolate (#8669)
brow Oct 29, 2026
8161a7c
perf(mobile): derive public keys with native libsecp256k1 (#8655)
brow Oct 29, 2026
0d19ca6
fix(mobile): wait for app activation before browser auth (#8647)
wesbillman Oct 29, 2026
5ea5ae1
fix(desktop): always flash a linked message in the channel timeline (…
loganj Oct 29, 2026
8abcf2e
fix(mobile): keep read state across reconnects and resume (#8672)
brow Oct 29, 2026
e922dc0
Unify mobile onboarding and community entry screens (#8687)
klopez4212 Oct 29, 2026
8caf835
Add standalone owned-community deletion handlers (#8645)
ravarora2 Oct 29, 2026
aed4be8
Add a scenario-driven relay load generator (#8636)
TheSentinel454 Oct 29, 2026
ae689ab
fix(desktop): resume reconnect replay from the last live point (#8652)
TheSentinel454 Oct 29, 2026
3dbc95c
perf(mobile): compute NIP-44 ECDH with native libsecp256k1 (#8656)
brow Oct 29, 2026
cc28660
fix(buzz-acp): spread 1012 reconnects and keep replay gaps across a d…
TheSentinel454 Oct 29, 2026
f6d31d1
db: answer match-nothing event reads without taking a connection (#8663)
TheSentinel454 Oct 29, 2026
0cde1fe
Make mobile Agents a full-page owned-agent directory (#8693)
klopez4212 Oct 29, 2026
6d719c6
db: warm the relay read pool toward its ceiling at boot (#8651)
TheSentinel454 Oct 29, 2026
ff284d0
mobile: stop typing prune ticks from rebuilding channel pages (#8695)
brow Oct 29, 2026
ccfc149
perf(mobile): verify signatures with native libsecp256k1 (#8657)
brow Oct 29, 2026
fffd8ca
fix(mobile): recover Solo sync silently instead of showing a retry ba…
wesbillman Oct 29, 2026
762adad
fix(mobile): require lowercase hex in native verification (#8702)
brow Oct 29, 2026
be1ac39
perf(mobile): render inbox and search previews as plain text (#8675)
brow Oct 29, 2026
76cd429
fix(relay): close a REQ whose history read failed instead of sending …
TheSentinel454 Oct 29, 2026
f539ef4
docs(buzz-acp): fix stale prepare_reconnect doc comment (#8697)
TheSentinel454 Oct 29, 2026
1fe1201
BUZZ-272: Deny workflow runs for banned owners (#8242)
bradseiler Oct 29, 2026
c609d33
ci: pin JDK 17 for the Android lane (#8711)
brow Oct 29, 2026
050d545
perf(mobile): skip unchanged message footer layout (#8433)
brow Oct 29, 2026
1f16f62
perf(relay): cut connect-burst CPU in log filtering and open-channel …
TheSentinel454 Oct 29, 2026
4b21a10
fix: don't notify workflow owners through their attribution tag (#8694)
brow Oct 29, 2026
a94ebec
Revert "fix(mobile): push every message in your own Solo chats (#8615…
brow Oct 29, 2026
64312fa
fix(mobile): address #8650 second-pass review (#8691)
brow Oct 29, 2026
efcdf00
relay: open the search pool lazily so a dead reader can't block boot …
TheSentinel454 Oct 29, 2026
425284a
test(desktop): measure inline video controls against their player (#8…
matt2e Oct 29, 2026
428f0dc
test(desktop): settle composer edits and press hover-only row actions…
matt2e Oct 29, 2026
0052b23
test(desktop): gate flaky E2E specs on the state they assume (#8681)
matt2e Oct 29, 2026
b1f76ef
ci: cache the Tauri apt .debs and fit a cold Windows Rust run in its …
matt2e Oct 29, 2026
1893c3a
test: dedupe collect_until_eose by event id and uncap two shell tests…
matt2e Oct 29, 2026
ef4130d
fix(db): keep lease releases durable and deflake PostgreSQL lane test…
matt2e Oct 29, 2026
0e8fb49
test(relay): fix main's build after the test-state helper rename (#8718)
TheSentinel454 Oct 30, 2026
ef0fce8
ci(loadgen): publish buzz-loadgen as ghcr.io/block/buzz-loadgen (#8717)
TheSentinel454 Oct 30, 2026
d263e2c
fix(mobile): resolve iOS pushes on a fresh connection and retry a sta…
brow Oct 30, 2026
fae3f03
test(mobile): keep late callbacks and fixed sleeps from failing tests…
matt2e Oct 30, 2026
158b3bf
test(scripts): stop file-size fixtures leaking git repos and fsmonito…
matt2e Oct 30, 2026
1eb67bb
fix(desktop): fix the product races behind four E2E flakes (#8680)
matt2e Oct 30, 2026
cc04cdc
perf(relay): route author- and #p-scoped global subscriptions by sele…
TheSentinel454 Oct 30, 2026
aae0081
fix(mobile): show agent DM typing and balance reply bubble padding (#…
klopez4212 Oct 30, 2026
a57349b
feat(relay): add incremental artifact reads (#8523)
dr0uleau Oct 30, 2026
5d70622
Restyle community invitations (#8728)
klopez4212 Oct 30, 2026
7585411
fix(mobile): retain invite keys and reject incomplete onboarding (#8753)
wesbillman Oct 30, 2026
a56966b
feat(relay): NIP-AR sync subscriptions (#8522)
loganj Oct 30, 2026
4cf2a3b
feat(loadgen): add a hot-thread stressor and teardown (#8746)
TheSentinel454 Oct 30, 2026
c0c606e
Polish mobile navigation and restore community switch animation (#8732)
klopez4212 Oct 30, 2026
0c82435
Add Buzz background and flying bees to invitations (#8763)
klopez4212 Oct 30, 2026
f3a7bab
Clarify mobile community onboarding and saved identity selection (#8729)
klopez4212 Oct 30, 2026
8512505
feat(mobile): show your agents working in a thread on its root messag…
loganj Oct 30, 2026
aa5f3e7
feat(mobile): show conversation activity by the composer, as buzz-app…
loganj Oct 30, 2026
704f2b8
test(desktop): keep unit tests away from the real ~/.buzz nest (#8749)
matt2e Oct 30, 2026
d14e95f
test: stop desktop, buzz-agent and mobile tests leaking temp files (#…
matt2e Oct 30, 2026
b7b545f
test(db): drop scratch databases and roles even when a test fails (#8…
matt2e Oct 30, 2026
6e6f4e8
test(mobile): check the title fade's animation, wait 10 s for the ale…
matt2e Oct 30, 2026
547de61
fix(mobile): show channel posts before a burst of join notices (#8798)
loganj Oct 31, 2026
fc0bb77
test(desktop): settle five E2E flake classes and clear a draft by Bac…
matt2e Oct 31, 2026
eafd77e
ci: bound Hermit fetches and let relay builds run without sccache (#8…
matt2e Oct 31, 2026
9c3ba83
Simplify signed-in mobile community onboarding (#8852)
klopez4212 Oct 31, 2026
4de1b6a
Simplify mobile Solo and DM empty states (#8851)
klopez4212 Oct 31, 2026
5f13984
Bring buzz.xyz branding and animated bees to mobile welcome (#8853)
klopez4212 Oct 31, 2026
cfcaef4
Update mobile toast animations (#8855)
klopez4212 Oct 31, 2026
7d00c70
feat(relay): publish NIP-FI verified profiles (BUZZ-433) (#8774)
fsola-sq Oct 31, 2026
2ca7774
Fix mobile Add Community loading and membership restoration (#8796)
klopez4212 Oct 31, 2026
0a46f32
Fade welcome bees with the QR scanner transition (#8859)
klopez4212 Oct 31, 2026
120cbae
fix(mobile): restore inline typing groups and keep working thread lin…
klopez4212 Oct 31, 2026
d14f33a
fix(mobile): keep toasts above native navigation and sheets (#8866)
klopez4212 Oct 31, 2026
b80217d
fix(mobile): end #channel tokens at apostrophes, quotes and dashes (#…
brow Oct 31, 2026
e3b1ef0
docs(agents): mark desktop/ as legacy, not a reference for mobile (#8…
brow Oct 31, 2026
20742a2
fix(mobile): only render known channels as #channel chips (#8862)
brow Oct 31, 2026
a2540fb
Align Android profile setup with iOS steps (#8871)
klopez4212 Oct 31, 2026
a12ad1c
feat(mobile): refine agent profiles and model selection (#8773)
klopez4212 Oct 31, 2026
f59b326
Fix mobile onboarding policy loading, browser cancellation and pairin…
wesbillman Oct 31, 2026
acf56ff
fix(mobile): use the desktop agent squircle for every agent avatar (#…
brow Oct 31, 2026
db4478e
feat(mobile): organization sign-in for NIP-FI relays (#8700)
brow Nov 1, 2026
2e4aacc
fix(mobile): find open channels in search and stop the stuck spinner …
loganj Nov 1, 2026
e71fbe2
fix(mobile): keep loaded timeline visible while reconnecting (#8864)
brow Nov 1, 2026
83ec9c0
fix(mobile): show hosted community names consistently (#8872)
brow Nov 1, 2026
5f98a1f
mobile: quiet agent messages and caught-up channel highlights (#8876)
brow Nov 1, 2026
b41caeb
fix(mobile): time out relay connects that never finish the handshake …
brow Nov 1, 2026
543ecf2
fix(mobile): list the same owned agents as desktop (#8857)
brow Nov 1, 2026
90772a4
fix(mobile): keep avatars and images loading on slow links (#8879)
brow Nov 1, 2026
e18d422
fix(mobile): fill uploaded avatars on the Agents page (#8882)
klopez4212 Nov 1, 2026
21a9839
Fix mobile unread state retaining deleted messages (#8883)
klopez4212 Nov 1, 2026
cde6c1b
feat(relay): auto-join new community members to default channels (#8594)
matt2e Nov 1, 2026
634f48a
Mobile: open Solo chats with Bestie and workspace controls (#8884)
klopez4212 Nov 1, 2026
93b8b8f
Standardize mobile navigation edges (#8895)
klopez4212 Nov 1, 2026
53ca047
fix(mobile): keep mention rows still and cache directory searches (#8…
brow Nov 1, 2026
76fd0c6
fix(mobile): show Bestie as a continuous conversation (#8890)
klopez4212 Nov 1, 2026
2e0abbc
fix(mobile): let slow image downloads finish (#8881)
brow Nov 1, 2026
f6f6d9a
chore(mobile): delete dead code with no remaining UI path (#8880)
brow Nov 1, 2026
220cec6
fix(mobile): keep community icons on originals and record thumbnail 4…
brow Nov 1, 2026
985de41
feat(mobile): show NIP-FI verified names (#8858)
brow Nov 1, 2026
9d1b684
fix(mobile): show remote agent instructions from the registry (#8908)
brow Nov 2, 2026
464448c
fix(mobile): resync read state from the last fetch, not the whole wee…
brow Nov 2, 2026
d342cf1
fix(mobile): catch up unread from the newest message already seen (#8…
brow Nov 2, 2026
a83926d
test(desktop): stop four E2E specs racing scroll settles and focus (#…
matt2e Nov 2, 2026
322fdbf
test(relay): hold the replica's second aux page and move media's DB t…
matt2e Nov 2, 2026
c9b8f11
fix(deps): clear RUSTSEC-2026-0433 and RUSTSEC-2026-0429 from the dep…
TheSentinel454 Nov 2, 2026
b4509de
feat(mobile): add Buzzies and refresh agent avatar picker (#8921)
klopez4212 Nov 2, 2026
daeb463
fix(mobile): prompt Builderlab sign-in instead of labeling agents des…
brow Nov 2, 2026
9f8913d
mobile: keep a thumbnail fallback apart from a direct load of the sam…
brow Nov 2, 2026
3ae2b6a
fix(mobile): hide the Flutter debug banner (#8915)
brow Nov 2, 2026
f99807a
fix(desktop): skip a starter channel the relay will never create (#8911)
salman1993 Nov 2, 2026
da93ce3
fix(mobile): open the public Builderlab login the iOS bridge allows (…
brow Nov 2, 2026
f1ce1c5
docs(nip-fa): make assertion lifetime issuer operator policy (#8934)
wpfleger96 Nov 2, 2026
5f8d0aa
fix(relay): refuse a second listed open channel with the same name (#…
loganj Nov 2, 2026
54ca2a3
fix(mobile): render Markdown backslash escapes (#8925)
brow Nov 2, 2026
2fd5c12
fix(mobile): load earlier edits to thread replies when a thread opens…
loganj Nov 2, 2026
b5b69d3
fix(mobile): let the issuer choose relay assertion lifetime (#8935)
baxen Nov 2, 2026
35df866
fix(mobile): split escaped voice-note links into their own segment (#…
brow Nov 2, 2026
8f83c63
fix(db): preserve partition reader grants (#8485)
philazar Nov 2, 2026
97ff4e1
docs(mobile): describe the role split in the media image keys (#8932)
brow Nov 2, 2026
61b8455
fix(mobile): open unjoined channels from links and search results (#8…
brow Nov 2, 2026
fa395e9
feat(mobile): open a prefilled Create agent form from Builderlab agen…
brow Nov 2, 2026
009dc10
perf(mobile): read the channel list after live changes, not every min…
brow Nov 2, 2026
949f61d
fix(search): cancel abandoned searches and bound the search pool (#8954)
TheSentinel454 Nov 2, 2026
02925ce
fix(relay): cap bridge searches in flight per user (#8956)
TheSentinel454 Nov 3, 2026
46da358
db: recycle pool connections after 5 minutes instead of 30 (#8951)
TheSentinel454 Nov 3, 2026
0ec7483
fix(mobile): open consent for scanned and pasted invites (#8952)
johnmatthewtennant Nov 3, 2026
cdd2af1
fix(mobile): let starter setup retry after a connection failure (#8967)
johnmatthewtennant Nov 3, 2026
205ff47
fix(mobile): retry failed channel searches after reconnecting (#8968)
johnmatthewtennant Nov 3, 2026
1c143a4
fix(mobile): show the Join prompt when an invite launches Buzz (#8970)
johnmatthewtennant Nov 3, 2026
83bd8b1
fix(loadgen): sign public URLs when dialling connect_addr in plaintex…
TheSentinel454 Nov 3, 2026
6684f7e
fix(mobile): make the Join button readable in dark mode (#8969)
johnmatthewtennant Nov 3, 2026
09b21cb
fix(mobile): label community switching consistently (#8979)
johnmatthewtennant Nov 3, 2026
972e89a
fix(mobile): allow community removal without a cached push grant (#8978)
johnmatthewtennant Nov 3, 2026
ff6ab96
fix(mobile): drop the # from Solo chat names in push notifications (#…
brow Nov 3, 2026
76bc66a
mobile: hold a queued list read for the 10s gap (#8958)
brow Nov 3, 2026
478cf0a
docs(mobile): recommend Xcode 27.1 (#8949)
brow Nov 3, 2026
fc9e652
perf(mobile): format a channel timeline only when its events change (…
brow Nov 3, 2026
cad7f1d
perf(mobile): build composer channel names once per channel list (#8943)
brow Nov 3, 2026
eee75a1
perf(mobile): verify owned-agent registrations natively (#8938)
brow Nov 3, 2026
369e1ef
perf(mobile): stop re-parsing message markdown on every rebuild (#8928)
brow Nov 3, 2026
58eb36d
perf(mobile): cheaper identity-name rebuilds for large rosters (#8936)
brow Nov 3, 2026
d005c7b
fix(search): skip message prefix search below three characters (#8947)
TheSentinel454 Nov 3, 2026
d44031f
perf(relay): cut writer-pool round trips past the 48k relay ceiling (…
TheSentinel454 Nov 3, 2026
0e5a699
perf(mobile): evict verified-profile interest in constant time (#8931)
brow Nov 3, 2026
344f007
Add mobile Bestie onboarding and fix remote agent presence (#8957)
klopez4212 Nov 3, 2026
a66cb5f
Modernize mobile channel and DM creation sheets (#8942)
klopez4212 Nov 3, 2026
3f03aa0
fix(mobile): restore ordinary DM behavior for Bestie (#8987)
klopez4212 Nov 3, 2026
d3a4909
perf(search): rank only the newest prefix matches and plan with the r…
salman1993 Nov 3, 2026
33eaa73
fix(mobile): let users sign out after leaving all communities (#8993)
johnmatthewtennant Nov 3, 2026
40fe4b5
perf(mobile): evict verified-profile interest in one pass (#9007)
brow Nov 3, 2026
7d40a66
fix(ios): stop repeating an old message in push notifications (#8973)
brow Nov 3, 2026
ce47aef
fix(relay): send membership notices on channel delete, moderation kic…
wpfleger96 Nov 3, 2026
a9aa1f7
Enable incremental artifact reads on every relay (#8975)
dr0uleau Nov 3, 2026
bf13f7c
fix(ios): mint NIP-FI assertions in the notification extension (#8982)
brow Nov 3, 2026
f6198f6
feat(relay): record NIP-FI enforce denials at parity with shadow (#8974)
wpfleger96 Nov 3, 2026
298a555
perf(db): bind the channel scope as one array (#8946)
TheSentinel454 Nov 3, 2026
b8b425e
fix(db): drop a superseded head's mention rows with it (#8948)
TheSentinel454 Nov 3, 2026
88697f1
fix(relay): apply kind 5 / 9005 deletions atomically (#8944)
TheSentinel454 Nov 3, 2026
152441a
feat(loadgen): model desktop clients and large-community shape (#9005)
TheSentinel454 Nov 3, 2026
c24b0f4
Open the new Bestie's chat after creating it (#8972)
morgmart Nov 3, 2026
6847882
fix(relay): stop logging unmapped-host NIP-FI denials as server failu…
salman1993 Nov 3, 2026
8312419
fix(mobile): size reply labels correctly with Bold Text (#9013)
klopez4212 Nov 3, 2026
fa7a3bf
feat(relay): push per-community storage usage to kgoose (#8714)
shu-hui-cash Nov 3, 2026
0a06c0b
feat(relay): log reads, logins and connections on access target (#8376)
wpfleger96 Nov 3, 2026
dafe31b
feat(mobile): persist frontier-only NIP-RS read state across devices …
tlongwell-block Nov 3, 2026
9f88eb9
mobile: hide self-joins and leaves, collapse membership runs like des…
brow Nov 3, 2026
865b150
fix(db): use ScratchDb in the storage usage delivery test (#9032)
TheSentinel454 Nov 4, 2026
b14899f
docs(nip-fa): define agent grant, assertion and revocation routes (#9…
wpfleger96 Nov 4, 2026
1bef1da
fix(mobile): show newly created remote agents in the new-chat picker …
brow Nov 4, 2026
83d0bd3
fix(mobile): stop QR pairing to organization relays from hanging (#9001)
spenceral Nov 4, 2026
3d26ed7
feat(relay): match verified names in profile search (#9019)
kalvinnchau Nov 4, 2026
38a5d9a
mobile: tap the settings version footer to copy it (#9021)
brow Nov 4, 2026
1055f79
fix(mobile): show a taken channel name plainly and keep invites worki…
loganj Nov 4, 2026
069cb9a
fix(desktop): hold a deep-linked message against bottom settles (#8742)
matt2e Nov 4, 2026
14037e3
fix(mobile): show progress after pairing QR scans (#9009)
dr0uleau Nov 4, 2026
ba7d782
fix(mobile): show organization sign-in after pairing (#9028)
dr0uleau Nov 4, 2026
f04fa09
fix(mobile): close the community switcher when the org relay refuses …
brow Nov 4, 2026
0dd778f
mobile: start new agents on Sonnet at medium effort (#9034)
morgmart Nov 4, 2026
49fcab3
mobile: refine message avatars, metadata and reply gestures (#9046)
klopez4212 Nov 4, 2026
d21f0c0
perf(relay): keep 1 s read caches warm when the pool is saturated (#9…
TheSentinel454 Nov 4, 2026
f9ef721
fix(media): keep transparency in image thumbnails with WebP (#9003)
johnmatthewtennant Nov 4, 2026
0bdad8e
mobile: simplify verified profiles and prioritize full names (#9051)
klopez4212 Nov 4, 2026
5b738eb
Restyle mobile organization sign-in prompts as toasts (#9050)
klopez4212 Nov 4, 2026
25abfc4
fix(loadgen): bound desktop reads at stop, keep timely EOSEs, model p…
TheSentinel454 Nov 4, 2026
4813b8c
relay: time every WebSocket read and every stored EVENT outcome (#9052)
TheSentinel454 Nov 4, 2026
4a42132
chore(sync): merge upstream block/buzz main (4813b8cd1)
tee8z Nov 4, 2026
bcd317a
chore(gpui): sync apps/buzz-gpui to benthecarman/buzz-gpui master (7d…
tee8z Nov 4, 2026
5f9f857
fix(sync): restore patched desktop deps, drop a stale #27 prop, publi…
tee8z Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 19 additions & 2 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,17 @@ fail-fast = false
# wrapper retained one database per concurrently running test process.
test-threads = 8

[test-groups.postgres-cluster-global]
# These tests inspect cluster-wide activity or create least-privilege sessions,
# so database-per-test isolation alone cannot make them independent.
max-threads = 1

[[profile.postgres-ci.overrides]]
filter = "test(/cluster_global_/)"
# Activity scans also observe ordinary tests connecting to the same cluster.
# Reserve every worker so those tests and their wrappers cannot overlap a scan.
test-group = "postgres-cluster-global"
# The group only serializes these tests with each other. They read unfiltered,
# cluster-wide `pg_stat_activity`, so any overlapping test's session can mask
# activity; claim every worker so they run alone.
threads-required = "num-test-threads"

[[profile.postgres-ci.scripts]]
Expand All @@ -36,3 +43,13 @@ threads-required = "num-test-threads"
filter = "(test(/postgres_tests::/) or binary(/^postgres_/)) and not test(/(^|::)external_infra[^:]*::/)"
setup = "postgres-template"
run-wrapper = "postgres-isolation"

[profile.flake]
# The advisory pull-request flake lane (scripts/flake-check.mjs rust) repeats
# a selection and must see every failed repetition, so no retries; the JUnit
# report gives it per-test statuses.
retries = 0
fail-fast = false

[profile.flake.junit]
path = "junit.xml"
139 changes: 127 additions & 12 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -52,25 +52,30 @@ REDIS_URL=redis://localhost:6379
# Emergency kill switch for all automatic partition DDL, including catch-all
# advancement; audits remain enabled.
# BUZZ_PARTITION_MANAGER_CREATE_ENABLED=true
# Opt in to replacing an empty partition catch-all with six months of dedicated
# monthlies, at startup and on every audit interval (default false). Has no
# effect while the kill switch above is off.
# BUZZ_PARTITION_MANAGER_ADVANCE_ENABLED=false
# Replace an empty partition catch-all with six months of dedicated monthlies,
# at startup and on every audit interval (default true). Has no effect while the
# kill switch above is off.
# BUZZ_PARTITION_MANAGER_ADVANCE_ENABLED=true

# Writer-session Postgres timeouts for buzz-db-backed pools and the relay audit
# pool, all in milliseconds; 0 disables. The separately deployed push gateway
# owns its own database and session policy and does not consume these knobs.
# pool, all in milliseconds; 0 disables the lock and idle timeouts. The
# separately deployed push gateway owns its own database and session policy
# and does not consume these knobs.
# lock_timeout: fail a statement that waits this long on any lock instead of
# parking behind a wedged holder (default 5000).
# BUZZ_DB_LOCK_TIMEOUT_MS=5000
# idle_in_transaction_session_timeout: reap sessions idle inside an open
# transaction — bounds how long a wedged client can hold locks (default 60000).
# BUZZ_DB_IDLE_TXN_TIMEOUT_MS=60000
# statement_timeout: cap any single statement's runtime. Off by default —
# startup migrations/backfills legitimately run long statements. Warning: a
# pathologically low value (e.g. 1) also times out connection setup and can
# prevent any DB connection from establishing.
# BUZZ_DB_STATEMENT_TIMEOUT_MS=0
# statement_timeout: cap any single statement's runtime (default 120000). A
# session cannot disable it: 0 or anything above 300000 installs 300000 (5
# minutes) and logs a warning at startup. Migrations, schema destruction, and
# community-deletion inventory and purge transactions lift it for themselves.
# Generic event reads (REQ history, /query, /count) and read-replica sessions
# are further capped at 20s. Warning: a pathologically low value (e.g. 1) also
# times out connection setup and can prevent any DB connection from
# establishing.
# BUZZ_DB_STATEMENT_TIMEOUT_MS=120000

# -----------------------------------------------------------------------------
# Typesense (search)
Expand All @@ -95,6 +100,8 @@ RELAY_URL=ws://localhost:3000

# NIP-PL mobile push is an explicit deployment opt-in. A gateway URL alone
# never enables it. When enabled, the exact HTTP(S) delivery URL is required.
# Rollback requires replacing every enabled writer/worker process. Inspect and
# explicitly decide retained queue disposition before re-enabling (see docs/push-gateway-deployment.md).
BUZZ_PUSH_ENABLED=false
BUZZ_PUSH_GATEWAY_DELIVERY_URL=https://push.buzz.xyz/v1/deliveries/apns

Expand Down Expand Up @@ -148,10 +155,20 @@ BUZZ_PUSH_GATEWAY_DELIVERY_URL=https://push.buzz.xyz/v1/deliveries/apns

# Deployment-global operator-listener routes. Each configured Nostr identity
# may register target pubkeys and receives mention notifications at its URL.
# URLs may use HTTP or HTTPS. Use HTTP only for operator-controlled internal
# connections: NIP-98 signs requests but does not encrypt them, and
# notifications carry full message content.
# Format: pubkey:deliveryUrl;pubkey:deliveryUrl
# BUZZ_OPERATOR_LISTENER_TIMEOUT_MS=5000
# BUZZ_OPERATOR_LISTENERS=<64-char hex pubkey>:https://listener.example/mentions

# Optional endpoint that receives each new per-community storage snapshot
# written by `buzz-admin storage-snapshot`, in NIP-98 relay-signed POST batches
# shaped like kgoose's storage-usage record request. One relay pod checks for a
# new snapshot every 5 minutes. Receivers must treat a repeated community and
# measured_at as already recorded.
# BUZZ_STORAGE_USAGE_URL=https://kgoose.example/cash-app/goose/v1/buzz/storage-usage/record

# Optional relay-owned KLIPY key. When set, NIP-11 advertises GIF search and
# authenticated desktop clients use this relay as the metadata/search proxy.
# Keep the real value in your deployment's secret manager; never commit it.
Expand Down Expand Up @@ -223,7 +240,80 @@ BUZZ_S3_ADDRESSING_STYLE=path
RUST_LOG=buzz_relay=debug,buzz_datastore=info,buzz_db=debug,buzz_auth=debug,buzz_pubsub=debug,tower_http=debug
# Optional OpenTelemetry-only target filter. This is deliberately independent
# from RUST_LOG so log verbosity changes cannot break trace parentage.
# BUZZ_OTEL_FILTER=buzz_relay=info,buzz_datastore=info
# BUZZ_OTEL_FILTER=buzz_relay=info,buzz_relay::access=off,buzz_datastore=info
#
# Access log: the relay writes JSON lines for security-relevant actions under
# the `buzz_relay::access` target, with an `event` field of `http`, `auth`,
# `req`, `count`, `sync`, or `close`. `http` is one line per HTTP request, written
# by one layer when the response is ready (not proof the body was delivered):
# `route` is the matched route template (never the raw path), with the response
# `status` and `time_to_response_ms` on every line. It carries the login
# (`method`, `pubkey`, `pubkey_verified`) and `outcome` (`success`, `denied`,
# `failed`, `challenged`, or `undecided` when the route recorded no decision; a
# refusal is final). `/query` and `/count` add the filter summary and
# `result_count`; `/events` adds `accepted`, `kind`, `event_id` and a fixed
# `reject_reason` code; invite and admin attachment routes add their own fields
# (`invite_id`, `expires_at`, `max_uses`, `joined`, `feedback_id`,
# `attachment_sha256`). Invite codes, tokens and Blossom read hashes are never
# logged. An attachment read with admin auth disabled logs
# `method=network_trusted` and no key. A request dropped before its response
# logs `request=aborted` with no `status`.
# Every matched route is logged except `/` (non-upgrade), `/info`,
# `/.well-known/nostr.json`, `/health`, `/_liveness` and `/_readiness`.
# Requests matching no route log only at status 400 and above, as
# `route="<unmatched>"`, except that the SPA and static files the relay
# serves when enabled (web assets, invite landing pages, git web pages, the
# admin bundle) log nothing at any status, including 404. Successful WebSocket
# upgrades log no `http` line.
# `auth` is one line per WebSocket login, written when it succeeds or is
# refused; every root WebSocket `auth` line carries the TCP `peer_addr`.
# `req` / `count` / `sync` is one line per WebSocket read (a NIP-AR sync
# subscription is a `sync` read), with the same filter summary
# (search text is never logged, only `search: true`). A `sync` line is written
# when its initial set completes, not when live delivery ends: its summary is
# the registered live filter (kinds and channels, never artifact predicates)
# and `events_queued` counts the initial set. `buzz_ws_reads_total` counts
# parsed reads by `type` (`req`, `count`, `sync`). The summary lists up to
# 10 kinds, channel ids, authors and `p` values each; `kind_count`,
# `channel_count`, `author_count` and `p_count` appear only when the list is
# `*` or shows fewer values than the filters held. `close` is the
# connection's one line: duration, totals, the login's `pubkey`, `method` and
# `pubkey_verified`, and `reads_suppressed` / `auth_suppressed` for repeated
# refusals past the first 16. It is written however the connection ends, with
# `refused` (`not_admitted`, `connection_limit`) when the relay refused it
# before serving it. Refusals that arrive after `close` has been written log
# their own lines.
# Successful lines and git's credential-less first request
# (`outcome=challenged`) are INFO; refusals, error statuses and aborted
# requests are WARN. A successful `/query` or `/count` that returned nothing
# (`result_count=0`) is DEBUG, since polling clients make most of them. A
# WebSocket read is WARN only when it ends in `error`;
# refused and `aborted` reads stay INFO, since `aborted` means the read ended
# before completing: the client closed the connection or sent CLOSE, a same-ID
# REQ replaced it, or the session was cancelled, all of which are routine. Turn it down with
# `buzz_relay::access=warn` (keeps refusals, errors and aborted HTTP requests,
# and of WebSocket reads only `error` outcomes) or `buzz_relay::access=off` in
# RUST_LOG.
# It is off in the OTel export by default so lines are not shipped twice.
# Removed or renamed: `NIP-42 auth successful/failed`, `WebSocket connection
# established/closed` and the `event=connect` line (folded into `close`), `HTTP
# bridge request` (folded into the bridge's `http` line), `Event ingested via
# pipeline` (the WebSocket `Event ingested` line and the `/events` line carry
# its fields), `relay invite minted`, `relay member added via invite` and `admin
# feedback attachment read` (folded into the route's `http` line), the `addr`
# field, now `peer_addr`, and the JSON `span` field (`spans` already ends with
# the current span; a line logged under an explicit parent span loses that
# parent's fields). Git subprocess stderr moved from WARN to DEBUG because hook
# output can contain message text.

# Request header holding the real client IP, logged as `client_ip` on `http`,
# `auth`, `close` and connection-limit lines next to `peer_addr` (optional,
# case-insensitive; unset or empty turns it off). A list value logs its
# rightmost entry; a value that isn't an IP address is not logged. Set it only
# when every request reaches the relay through a proxy that overwrites this
# header (for example `cf-connecting-ip` behind Cloudflare or `x-real-ip`
# behind nginx); otherwise clients can forge it.
# BUZZ_CLIENT_IP_HEADER=x-real-ip

# OTLP tracing endpoint (optional — leave unset to disable)
# OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
Expand Down Expand Up @@ -367,3 +457,28 @@ RUST_LOG=buzz_relay=debug,buzz_datastore=info,buzz_db=debug,buzz_auth=debug,buzz
# BUZZ_TERMS_OF_SERVICE_MARKDOWN="# Terms of Service\n\nFull terms here."
# BUZZ_PRIVACY_POLICY_MARKDOWN="# Privacy Policy\n\nFull policy here."
# BUZZ_AGE_ATTESTATION_REQUIRED=true

# ── NIP-FI database community source ─────────────────────────────────────────
# Where NIP-FI communities come from: "env" (BUZZ_NIP_FI_COMMUNITIES, default)
# or "database" (bindings created by provisioning; needs
# BUZZ_NIP_FI_PROVISION_BINDING and must not be combined with
# BUZZ_NIP_FI_COMMUNITIES). See docs/operator-nip-fi-bindings.md.
# BUZZ_NIP_FI_COMMUNITY_SOURCE=env
# Most community-issuer rows one snapshot may hold (1..=10000000).
# BUZZ_NIP_FI_SNAPSHOT_MAX_ROWS=1000000
# Snapshot load timeout in ms; must be under the 30s refresh interval.
# BUZZ_NIP_FI_SNAPSHOT_REFRESH_TIMEOUT_MS=10000
# Hosts whose "not found" is cached for 5s (1..=1000000).
# BUZZ_NIP_FI_RESOLVER_NEGATIVE_CACHE_MAX=100000
# Concurrent live lookups; clamped below the database pool size.
# BUZZ_NIP_FI_RESOLVER_MAX_INFLIGHT=8

# Optional absolute legacy-v1 invite cutoff, UTC RFC3339 whole seconds.
# Unset preserves natural token expiry; never changes v2 invitations.
# BUZZ_INVITE_V1_INVALID_AFTER=2026-12-01T00:00:00Z

# Optional NIP-FI historical verified profiles (disabled by default): issuer JSON
# entries may set public_profile=true, public_issuer_label="Example Corp", and
# verified_at_refresh_seconds=3600 (integer 0..86400). Requires a stable relay
# key and NIP-FI enforcement. Profiles are historical records and are never
# retracted.
2 changes: 1 addition & 1 deletion .github/scripts/codex-security-review.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ const NO_FINDINGS_REVIEW = {

async function postReview(state, review = NO_FINDINGS_REVIEW) {
const environment = {
CODEX_MODEL: "gpt-5.6-sol",
CODEX_MODEL: "gpt-6.1-sol",
GITHUB_REPOSITORY: "block/buzz",
GITHUB_RUN_ID: "1234",
GITHUB_SERVER_URL: "https://github.com",
Expand Down
Loading
Loading