Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
53771c8
fix(acp): preserve truncated thread context (#3340)
cameronhotchkies Jul 30, 2026
61b96c9
fix(catalog): update Amp description (#3758)
wesbillman Jul 30, 2026
06582ee
Render mobile agent mention chips (#3702)
klopez4212 Jul 30, 2026
f44b5a2
fix(desktop): reuse profiles when joining communities (#2155)
baxen Jul 30, 2026
bd0bff2
feat(desktop): add password-protected backups in settings (#3701)
tellaho Jul 30, 2026
cca8839
Make relay reconnect backoff authoritative (#3774)
wesbillman Jul 30, 2026
1dfd89e
feat(release): make desktop releases immutable (#3568)
wesbillman Jul 30, 2026
f48f3f0
Fix video reviews in thread replies (#3719)
klopez4212 Jul 30, 2026
6e419b9
Tighten continuation message rows (#3724)
klopez4212 Jul 30, 2026
bf139e8
perf(presence): reduce heartbeat frequency (#3783)
tlongwell-block Jul 30, 2026
4d47aa8
feat(desktop): improve agent activity header ui (#3321)
tellaho Jul 30, 2026
1b3ff96
Add Devin as a preset ACP harness (#3225)
fenner888 Jul 30, 2026
dba97ee
fix(db): isolate usage metrics advisory-lock test on scratch DB (#3670)
NanoRisk6 Jul 30, 2026
d40a332
feat(desktop): raise the install ceiling and make installs observable…
wpfleger96 Jul 30, 2026
b9e4ed6
test(desktop): click visible thread collapse guide (#3800)
wesbillman Jul 30, 2026
114d40d
feat(relay): gate kind 30178 team-catalog reads behind the shared tag…
wpfleger96 Jul 30, 2026
29dfe48
fix(desktop): don't gate hover affordances on the hover media query (…
sumit-m Jul 30, 2026
74cd571
fix(desktop): report authenticated relay recovery (#3812)
wesbillman Jul 30, 2026
36571f4
fix(desktop): allow linux-only media items as dead code off-linux (#3…
wpfleger96 Jul 30, 2026
23f0c26
fix(relay): align NIP-11 max_limit with REQ ceiling (#3635)
wpfleger96 Jul 30, 2026
ede2686
fix(desktop): align data deletion labels (#2230)
baxen Jul 30, 2026
9e8fcfd
fix(desktop): channel topic and membership metadata cleanup (#3642)
delkc Jul 30, 2026
f3e5e81
fix(catalog): update Amp tagline (#3806)
AJKemps Jul 30, 2026
468647a
feat(desktop): locally stored NIP-49 encrypted key backup (#2937)
tlongwell-block Jul 31, 2026
10d5a26
feat(relay): raise hosted community limit to five (#3829)
kalvinnchau Jul 31, 2026
d88313f
feat(desktop): delete a message by clearing its edit to empty (#3813)
sw-square Jul 31, 2026
d48b0e0
feat(desktop): upgrade Pocket TTS model (#3266)
johnmatthewtennant Jul 31, 2026
081f805
feat(agent): optional reply guard reminds a silent turn to publish (#…
tlongwell-block Jul 31, 2026
4632c55
feat(desktop): auto-enable huddle transcription for agents (#3180)
johnmatthewtennant Jul 31, 2026
689617a
docs: add VISION_REMOTE_AGENTS.md (#3924)
tlongwell-block Jul 31, 2026
61ba9df
refactor(voice): extract reusable Pocket primitives + Pocket voice se…
tlongwell-block Jul 31, 2026
39ce3df
fix(desktop): open profiles from avatars (#3751)
klopez4212 Jul 31, 2026
c104eec
feat(desktop): import local Pocket voices (#3259)
johnmatthewtennant Jul 31, 2026
052174a
fix(release): make immutable desktop release operable (#3943)
wesbillman Jul 31, 2026
d12b3d6
chore(release): release Buzz Desktop version 0.5.3
wesbillman Jul 31, 2026
6e02e0a
Merge pull request #3944 from block/version-bump/0.5.3
wesbillman Jul 31, 2026
209536a
docs(nips): add single-coordinate manual-unread override layer and ve…
wpfleger96 Jul 31, 2026
bb34bc4
Revert "chore(release): release Buzz Desktop version 0.5.3" (#3960)
wesbillman Jul 31, 2026
db7e84d
fix(release): make desktop tagging squash-safe (#3965)
wesbillman Jul 31, 2026
54c8ef3
fix(release): require exact-head approval for desktop tags (#3973)
wesbillman Jul 31, 2026
3a96ace
chore(release): release Buzz Desktop version 0.5.3 (#3972)
wesbillman Jul 31, 2026
e5e5bac
fix(release): preserve main in desktop PR body (#3979)
wesbillman Jul 31, 2026
cb9701c
feat(relay): accept kind:30621 multi-repo projects at ingest (#3171)
wpfleger96 Jul 31, 2026
b1b283c
fix(buzz-acp): thread cache-read tokens into NIP-AM kind:44200 events…
wpfleger96 Jul 31, 2026
eb049dd
feat(desktop): Agent Trading Cards — mintable agent-snapshot card PNG…
tlongwell-block Aug 1, 2026
45314fc
fix(desktop): preserve first huddle speech (#3962)
johnmatthewtennant Aug 1, 2026
fa1a5b1
fix(mesh): stop restarting a busy or loading shared-compute node (#3909)
micspiral Aug 1, 2026
3ade48d
fix(desktop): point Oh My Pi preset at omp.sh (#3516)
kiranmagic7 Aug 1, 2026
19d57b0
docs: add one-click Railway deploy for a hosted relay (#2733)
hmseeb Aug 1, 2026
8e81afa
fix(desktop): keep thread-open affordance in archived channels (#4012)
treywood Aug 1, 2026
909a3b2
docs: fix stale kind count, quick-start numbering, and empty Further …
SeanGearin Aug 1, 2026
3d7712c
docs: note that addressable channel events scope by d, not h (#4103)
TanskiSzymon Aug 1, 2026
5765fc7
fix(relay): allow open relays to set their NIP-11 workspace icon (kin…
tlongwell-block Aug 1, 2026
8d5afb6
docs(readme): clarify which release asset to download per platform (#…
dan-sheehan Aug 1, 2026
36cf932
docs(chart): fix ArgoCD example for native OCI sources (full artifact…
Kampe Aug 1, 2026
756dd7f
docs(nostr): document #h requirement for live reaction subscriptions …
Zigoljube Aug 1, 2026
9d6726e
chore(deps): bump nostr-relay-pool for RUSTSEC-2026-0224 (#4139)
wpfleger96 Aug 1, 2026
ac4fa13
perf(relay): serve relay-membership checks from the read replica (#4124)
tlongwell-block Aug 1, 2026
89bf03c
fix(nip-oa): accept raw Nostr tag form in parse_json_array (#4203)
amanning3390 Aug 2, 2026
28ae6cd
docs: formal spec for remote agents and their management (#3748)
tlongwell-block Aug 2, 2026
64c5b27
Revalidate workflow owners before webhooks
jmecom Jun 29, 2026
4947b74
security: protect webhooks and CLI private keys
arubi9 Aug 2, 2026
a548ca8
fix(desktop): stop the instance form offering AI-config edits it disc…
fitz2882 Aug 1, 2026
b2b0905
fix(media): allow direct inline playback
Aug 1, 2026
44074e0
feat(cli): add non-mutating buzz doctor command (#3926)
iroiro147 Aug 1, 2026
60a162a
fix(cli): classify unreachable-relay doctor probes as relay (exit 2),…
iroiro147 Aug 1, 2026
b06d6a1
buzz-acp: add structured MCP server configuration
wolfyy970 Aug 1, 2026
0a1e2da
buzz-acp: suppress serialized MCP config echoes
wolfyy970 Aug 1, 2026
d891fee
fix(cli): let doctor inspect safe key sources
arubi9 Aug 2, 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
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ RUST_LOG=buzz_relay=debug,buzz_datastore=info,buzz_db=debug,buzz_auth=debug,buzz
# Binary for an optional MCP server sidecar (e.g. buzz-dev-mcp for buzz-agent).
# BUZZ_ACP_MCP_COMMAND=

# Path to an optional version 1 JSON file defining additional stdio MCP servers.
# This file may contain credentials. Keep it out of Git and restrict it to
# its owner.
# BUZZ_ACP_MCP_CONFIG=/absolute/path/to/mcp-servers.json

# Number of parallel agent subprocesses (1–32).
# BUZZ_ACP_AGENTS=1

Expand Down
42 changes: 36 additions & 6 deletions .github/workflows/auto-tag-on-release-pr-merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ name: Auto-tag on Release PR Merge
# prefix; the main chart lane also auto-detects a Chart.yaml version bump so
# a chart feature PR can publish its own new version when merged:
#
# version-bump/<v> → tag v<v> → release.yml (desktop app)
# version-bump/<v> → tag desktop-v<v> → release.yml (desktop app)
# relay-release/<v> → tag relay-v<v> → docker.yml (relay image)
# chart-release/<v> → tag chart-v<v> → helm-chart.yml (main helm chart)
# push-chart-release/<v> → tag push-chart-v<v> → push-gateway-helm-chart.yml
Expand Down Expand Up @@ -35,6 +35,11 @@ permissions:

jobs:
auto-tag:
permissions:
contents: read
pull-requests: read
checks: read
statuses: read
if: >
github.event.pull_request.merged == true &&
github.event.pull_request.head.repo.full_name == github.repository
Expand All @@ -57,7 +62,7 @@ jobs:
case "$BRANCH" in
version-bump/*)
VERSION="${BRANCH#version-bump/}"
TAG_PREFIX="v" ;;
TAG_PREFIX="desktop-v" ;;
relay-release/*)
VERSION="${BRANCH#relay-release/}"
TAG_PREFIX="relay-v" ;;
Expand Down Expand Up @@ -85,9 +90,33 @@ jobs:
{
echo "enabled=true"
echo "tag=${TAG_PREFIX}${VERSION}"
if [[ "$TAG_PREFIX" == desktop-v ]]; then
echo "target_sha=${{ github.event.pull_request.merge_commit_sha }}"
echo "desktop=true"
else
echo "target_sha=$GITHUB_SHA"
echo "desktop=false"
fi
} >> "$GITHUB_OUTPUT"
echo "Tagging ${TAG_PREFIX}${VERSION}"


- name: Verify immutable reviewed desktop candidate
if: steps.release.outputs.desktop == 'true'
env:
GH_TOKEN: ${{ github.token }}
VERSION: ${{ steps.release.outputs.tag }}
PR_NUMBER: ${{ github.event.pull_request.number }}
PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
PR_BASE_REF: ${{ github.event.pull_request.base.ref }}
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
MERGE_SHA: ${{ github.event.pull_request.merge_commit_sha }}
run: |
VERSION="${VERSION#desktop-v}"
export VERSION
scripts/verify-desktop-release-merge.sh

- name: Create release tagger token
if: steps.release.outputs.enabled == 'true'
id: release-tagger
Expand All @@ -102,21 +131,22 @@ jobs:
env:
GH_TOKEN: ${{ steps.release-tagger.outputs.token }}
TAG: ${{ steps.release.outputs.tag }}
TARGET_SHA: ${{ steps.release.outputs.target_sha }}
run: |
set -euo pipefail
# Check gh's exit status, not its output. A missing ref returns a 404
# JSON body on stdout, which must not be mistaken for an existing tag.
if gh api "repos/$GITHUB_REPOSITORY/git/ref/tags/$TAG" --silent 2>/dev/null; then
EXISTING_SHA="$(gh api "repos/$GITHUB_REPOSITORY/commits/$TAG" --jq .sha)"
if [ "$EXISTING_SHA" = "$GITHUB_SHA" ]; then
echo "Tag $TAG already exists at $GITHUB_SHA — skipping tag creation"
if [ "$EXISTING_SHA" = "$TARGET_SHA" ]; then
echo "Tag $TAG already exists at $TARGET_SHA — skipping tag creation"
exit 0
else
echo "::error::Tag $TAG already exists at $EXISTING_SHA (expected $GITHUB_SHA)"
echo "::error::Tag $TAG already exists at $EXISTING_SHA (expected $TARGET_SHA)"
exit 1
fi
fi
gh api --method POST "repos/$GITHUB_REPOSITORY/git/refs" \
-f ref="refs/tags/$TAG" \
-f sha="$GITHUB_SHA" \
-f sha="$TARGET_SHA" \
--silent
27 changes: 26 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ jobs:
- '.github/workflows/ci.yml'
- name: Release workflow source contract
run: scripts/test-release-ref-contract.sh
- name: Desktop release candidate contract
run: scripts/test-desktop-release-candidate.sh
- name: Mobile release contract
run: |
scripts/test-mobile-release-contract.sh
Expand Down Expand Up @@ -690,6 +692,18 @@ jobs:
--run-ignored ignored-only
env:
DATABASE_URL: postgres://buzz:${{ env.BUZZ_TEST_POSTGRES_PASSWORD }}@localhost:5432/buzz
- name: Workspace profile (kind:9033) gate tests
# Call-site integration for the 9033 authorization gate: open relay
# rosterless/steward transitions and the closed-relay admin/owner rule,
# against real Postgres. #[ignore]d in the default suite, selected
# explicitly here — see handlers::relay_admin::tests.
run: |
cargo nextest run \
--archive-file target/ci/backend-integration-tests.tar.zst \
-E 'package(buzz-relay) and test(/handlers::relay_admin::tests/)' \
--run-ignored ignored-only
env:
DATABASE_URL: postgres://buzz:${{ env.BUZZ_TEST_POSTGRES_PASSWORD }}@localhost:5432/buzz
- name: NIP-ER reminder e2e
# Feature e2e for NIP-ER (Event Reminders, kind:30300): write-path
# validation, author-only read filtering, and scheduler delivery against
Expand All @@ -702,6 +716,17 @@ jobs:
--run-ignored ignored-only
env:
RELAY_URL: ws://localhost:3000
- name: NIP-MP coordinate deletion guard
# Verifies the never-delete-newer invariant of soft_delete_by_coordinate:
# a stale tombstone (created_at earlier than the live head) spares that
# head, and an equal-timestamp tombstone deletes it.
run: |
cargo nextest run \
--archive-file target/ci/backend-integration-tests.tar.zst \
-E 'package(buzz-db) and test(coordinate_delete_spares_head_newer_than_the_deletion)' \
--run-ignored ignored-only
env:
DATABASE_URL: postgres://buzz:${{ env.BUZZ_TEST_POSTGRES_PASSWORD }}@localhost:5432/buzz
- name: Upload relay log
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down Expand Up @@ -737,7 +762,7 @@ jobs:
./scripts/start-relay-for-tests.sh --no-build
- name: Relay E2E tests
run: |
cargo test -p buzz-test-client --test e2e_persona --test e2e_nostr_interop -- --ignored --nocapture
cargo test -p buzz-test-client --test e2e_persona --test e2e_team_catalog --test e2e_nostr_interop --test e2e_project -- --ignored --nocapture
cargo test -p buzz-test-client --test e2e_relay invite -- --ignored --nocapture
cargo test -p buzz-test-client --test e2e_relay nip43_membership_snapshots_are_rejected -- --ignored --nocapture
env:
Expand Down
26 changes: 26 additions & 0 deletions .github/workflows/desktop-release-candidate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Desktop Release Candidate

on:
pull_request:
branches: [main]

permissions:
contents: read

jobs:
validate:
name: Desktop Release Candidate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: false
- name: Validate immutable desktop candidate
if: startsWith(github.event.pull_request.head.ref, 'version-bump/')
env:
VERSION: ${{ github.event.pull_request.head.ref }}
run: |
VERSION="${VERSION#version-bump/}"
scripts/desktop_release.py validate --candidate HEAD --version "$VERSION" --repo "$GITHUB_REPOSITORY"
Loading
Loading