Skip to content

Commit 4bb85b0

Browse files
Merge remote-tracking branch 'origin/main' into fizz/inline-thread-replies
Co-authored-by: Juho <juho@satunnaisotus.com> Signed-off-by: Juho <juho@satunnaisotus.com>
2 parents 9de98ad + f038cbb commit 4bb85b0

232 files changed

Lines changed: 28343 additions & 2142 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/_ci-relay.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,7 @@ jobs:
569569
cargo test -p buzz-test-client --test e2e_persona --test e2e_team_catalog --test e2e_nostr_interop --test e2e_project -- --ignored --nocapture
570570
cargo test -p buzz-test-client --test e2e_relay invite -- --ignored --nocapture
571571
cargo test -p buzz-test-client --test e2e_relay nip43_membership_snapshots_are_rejected -- --ignored --nocapture
572+
cargo test -p buzz-test-client --test e2e_relay nip29_departure_wire -- --ignored --nocapture
572573
env:
573574
RELAY_URL: ws://localhost:3000
574575
GIT_CREDENTIAL_NOSTR_BIN: ${{ github.workspace }}/target/ci/git-credential-nostr

.release/desktop-candidate.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"schema": 2,
3-
"version": "0.5.20",
4-
"base_sha": "8471049c430073474939336dfc6aa98272bc8762",
5-
"previous_tag": "desktop-v0.5.19",
6-
"previous_base_sha": "ee6ca5fa28bce04dfecb6717de65b08a57f2ac47",
7-
"previous_merge_sha": "7a1b7d8e09f96c10b6617a66bb8589e9984ffb3c",
8-
"tag": "desktop-v0.5.20",
9-
"commit_count": 4
3+
"version": "0.5.22",
4+
"base_sha": "75f101d8b4f5b4b26f9891b73b87c67fedac25a0",
5+
"previous_tag": "desktop-v0.5.20",
6+
"previous_base_sha": "8471049c430073474939336dfc6aa98272bc8762",
7+
"previous_merge_sha": "52621c09bea503f4d5860030dfabfaf9ade71bfa",
8+
"tag": "desktop-v0.5.22",
9+
"commit_count": 114
1010
}

AGENTS.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,3 +740,9 @@ Autocomplete inserts a literal full label and a separator, including multi-word
740740
names. Only autocomplete settlement may move the caret past that separator;
741741
internal label spaces and deliberate ArrowLeft/click movement must be respected.
742742
See `docs/mention-editor.md` and `desktop/tests/e2e/mention-spacing.spec.ts`.
743+
744+
Selected mention labels bind exact keys, including same-name teammates and
745+
persistent automatic addresses. Use the returned label from registration for
746+
insert/restore/remove. Ambiguous manually typed names must fail visibly without
747+
clearing the draft in chat, edit, and standalone forum consumers; never fan out
748+
silently to all identities sharing a name. See `docs/mention-editor.md`.

CHANGELOG.md

Lines changed: 246 additions & 0 deletions
Large diffs are not rendered by default.

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
members = [
33
"crates/buzz-relay",
44
"crates/buzz-core",
5+
"crates/ifc-core",
56
"crates/buzz-conformance",
67
"crates/buzz-push-gateway",
78
"crates/buzz-db",

Justfile

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,9 @@ test-unit:
369369
cargo test -p buzz-auth --doc
370370
cargo nextest run -p buzz-voice --lib
371371
cargo nextest run -p buzz-cli
372+
# buzz-acp owns the relay-to-agent trust boundary. Run its tests here so
373+
# forged relay events cannot regain a path into agent routing unnoticed.
374+
cargo nextest run -p buzz-acp
372375
# buzz-db migrator/lint tests: pure SQL-parsing unit tests (no infra).
373376
# They guard the embedded-migrator invariant (the complete checked-in
374377
# additive migration set; legacy cutover/backfill remains an operator
@@ -429,8 +432,21 @@ test-unit:
429432
# disabled_mode_regression_pin_unauthenticated_request_is_served on the
430433
# DB-free /probe route, and its Host/Origin gating is covered here by
431434
# disabled_mode_still_requires_the_correct_host / _a_matching_origin.
435+
# The second clause adds the relay's pure authorization-decision tests:
436+
# the NIP-29 channel membership grid (handlers::channel_authz), the
437+
# moderation capability grid (handlers::moderation_authz), and the pure
438+
# helpers in handlers::side_effects. They ran in NO lane before —
439+
# `test(/^api::admin::/)` never matched them, and the PostgreSQL lane
440+
# pairs `--run-ignored ignored-only` with a `postgres_tests::`
441+
# default-filter — so a red one shipped green, exactly the gap the
442+
# api::admin clause above was added to close.
443+
# Deliberately scoped to these three modules instead of all of
444+
# `handlers::`: the wider set is mostly Postgres-backed, and five of its
445+
# non-postgres_tests cases only "pass" without a database by waiting out
446+
# the ~30s sqlx acquire timeout, so they do not belong in the infra-free
447+
# unit job either.
432448
cargo nextest run -p buzz-relay --lib \
433-
-E 'test(/^api::admin::/) - test(=api::admin::tests::disabled_mode_allows_unauthenticated_requests_on_the_admin_host) - test(=api::admin::tests::nip98_mode_unrostered_signer_does_not_consume_a_replay_slot)'
449+
-E '(test(/^api::admin::/) - test(=api::admin::tests::disabled_mode_allows_unauthenticated_requests_on_the_admin_host) - test(=api::admin::tests::nip98_mode_unrostered_signer_does_not_consume_a_replay_slot)) + test(/^handlers::channel_authz::/) + test(/^handlers::moderation_authz::/) + test(/^handlers::side_effects::tests::/)'
434450
# ACP author-gate and queue tests protect the trust boundary between
435451
# relay events and agent prompts. They are infra-free; ignored lifecycle
436452
# tests remain excluded and run in their dedicated integration lanes.

TESTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ CLI-side, only two matter for testing:
358358
| Symptom | Cause | Fix |
359359
|---------|-------|-----|
360360
| `relay error 500` or `400: restricted: not a channel member` after a code change | Stale binary | Rebuild and re-export `PATH`; or `cargo run` directly |
361-
| `Address already in use` on relay start (os error 48 on macOS, 98 on Linux) | Another relay (or stale process) holding `:3000` / `:8080` / `:9102` (or your override ports) | The panic line names the failing port — read it first. Then `lsof -iTCP:3000,8080,9102 -sTCP:LISTEN` (or your override equivalents). Kill the offender (`pkill -f buzz-relay`) or use the port-override block in step 3. If you already overrode and *still* collide, a prior reviewer left a relay running on the same alt ports — kill it or pick fresh ports |
361+
| `Address already in use` on relay start (os error 48 on macOS, 98 on Linux) | Another relay (or stale process) holding `:3000` / `:8080` / `:9102` (or your override ports) | Metrics-listener failures emit a `metrics_bind` lifecycle terminal with reason `bind`. Check the configured ports with `lsof -iTCP:3000,8080,9102 -sTCP:LISTEN` (or your override equivalents). Kill the offender (`pkill -f buzz-relay`) or use the port-override block in step 3. If you already overrode and *still* collide, a prior reviewer left a relay running on the same alt ports — kill it or pick fresh ports |
362362
| `auth_error: BUZZ_PRIVATE_KEY is required` | Env not exported into the CLI's shell | `export BUZZ_PRIVATE_KEY=...` (or pass `--private-key`) |
363363
| `auth_error: BUZZ_AUTH_TAG verification failed … signature verification failed` | A stale `BUZZ_AUTH_TAG` inherited from a parent shell. The local dev relay rejects it. | `unset BUZZ_AUTH_TAG` (see the scrub block in step 1) |
364364
| `auth-required: verification failed` on a closed relay | NIP-OA attestation needed | Set `BUZZ_AUTH_TAG` to the owner-issued JSON, or relax `BUZZ_REQUIRE_RELAY_MEMBERSHIP` |

crates/buzz-acp/src/base_prompt.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
You are operating inside the Buzz platform — a Nostr-based messaging platform for human-agent collaboration. The buzz-acp harness routes channel events to your session.
1+
You are an agent operating inside Buzz — a Nostr-based messaging platform for human-agent collaboration.
2+
Buzz is a desktop and mobile collaboration app organized around channels, conversations, and shared work.
23

34
## Buzz CLI
45

crates/buzz-acp/src/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ pub struct CliArgs {
424424
pub no_memory: bool,
425425

426426
/// Disable the `<base>` platform-context section prepended to every prompt.
427-
/// When set, agents receive only the persona `<system>` prompt with no Buzz orientation.
427+
/// When set, agents receive only the persona `<agent-instructions>` prompt with no Buzz orientation.
428428
#[arg(long, env = "BUZZ_ACP_NO_BASE_PROMPT")]
429429
pub no_base_prompt: bool,
430430

@@ -493,7 +493,7 @@ pub struct CliArgs {
493493
#[arg(long, env = "BUZZ_ACP_ALLOWED_RESPOND_TO", value_delimiter = ',')]
494494
pub allowed_respond_to: Option<Vec<String>>,
495495

496-
/// Team-owned instructions layered after `<system>` and before agent memory.
496+
/// Team-owned instructions layered after `<agent-instructions>` and before agent memory.
497497
#[arg(long, env = "BUZZ_ACP_TEAM_INSTRUCTIONS")]
498498
pub team_instructions: Option<String>,
499499

0 commit comments

Comments
 (0)