Repository navigation
Description
Summary
On a hosted Buzz relay (*.communities.buzz.xyz, checked 2026-08-02), workflows with trigger: on: message_posted never execute, while webhook-triggered, scheduled, and manually-triggered workflows on the same relay/channel run fine. Because run history is also invisible to clients (see below), a dead trigger is indistinguishable from a working one, which makes this very hard for users to self-diagnose.
Environment
- Hosted relay on
communities.buzz.xyz(deployed version unknown to me — NIP-11 doc carries no version field) - Buzz Desktop 0.5.3 (macOS) and
buzzCLI from the same bundle - Could not verify against OSS HEAD locally (no Docker on this machine), so this may be deployment drift rather than a bug at
main— flagging either way since hosted users can't tell the difference.
Repro (CLI, ~2 min)
- As a channel member, create a minimal message-triggered workflow with an observable in-channel action:
name: engine_probe
enabled: true
trigger:
"on": message_posted
filter: 'str_contains(trigger_text, "probe-phrase-7793")'
steps:
- id: react
action: add_reaction
emoji: eyesbuzz workflows create --channel <uuid> --yaml "$(cat probe.yaml)" → accepted, workflow id returned.
- Post a kind:9 channel message containing
probe-phrase-7793. - Wait. Expected: 👀 reaction on the message (via the relay workflow sink). Actual: nothing (checked with
buzz reactions get --event <id>over ~10 minutes).
What DOES work on the same relay
- Manual trigger:
buzz workflows trigger --workflow <id>on the same probe workflow →accepted,run_idreturned. - Webhook-triggered workflows: a
trigger: on: webhookworkflow with asend_messagestep has fired repeatedly on this relay (relay-signed kind:9 messages with thebuzz:workflowtag are present in channel history). - Workflow saves, updates, deletes, and list queries all behave normally.
- The SEC-006 gates behave as documented (e.g.
forbidden: workflows with call_webhook actions require the owner or admin rolefor non-admin authors) — the probe above deliberately avoidscall_webhookand is owned by a member whose role passesowner_authority_allows(role, false).
Where I looked in the source
dispatch_persistent_event (crates/buzz-relay/src/handlers/event.rs:533) spawns workflow_engine.on_event(...) for stored kind:9 events, and WorkflowEngine::on_event reads enabled workflows from the DB (10s cache) before evaluating trigger_matches_event / should_fire_workflow. I couldn't find a path where the probe above should be skipped, which is why I suspect the hosted deployment predates or diverges from this wiring — but I can't confirm the deployed version.
Related papercut that made this much worse
buzz workflows runs always returns [] by design (crates/buzz-cli/src/commands/workflows.rs:63 — runs live in the workflow_runs table and kinds 46001–46003 are never emitted), and the Desktop equivalent returns a hard-coded empty list (desktop/src-tauri/src/commands/workflows.rs, get_workflow_runs TODO). So users have zero signal on whether any workflow ever fired. Even just emitting run-started/run-failed events (or a REST read) would have made this a 5-minute diagnosis instead of an afternoon.
Happy to provide more detail or run further probes on the hosted relay if useful.
Activity
juddkussrow commentedon Aug 3, 2026
I may have a counter-example, plus a possible explanation for the negative result
here.
message_posteddoes fire on a hosted relayTested today on
autom8.communities.buzz.xyz.Workflow (
ed7014d2-212c-4eb2-919b-d1d2bb001497), created via CLI:Posted
PROBE: helloto the channel. The workflow fired and posted its resultin the same second — no manual trigger involved:
All template fields resolved. So on this hosted community, at least, the
message_postedtrigger path works end to end.Why the original test may not have fired
The report describes a test workflow that adds an emoji reaction when it sees
matching text. That step is affected by a separate bug:
#2395 — "workflow: add_reaction action calls a nonexistent relay endpoint — any
workflow using it always fails"
If that's accurate, the trigger may well have fired correctly and the action
failed, which from the outside is indistinguishable from "the trigger never
executed" — especially with run history unavailable.
Worth re-testing with a
send_messagestep instead ofadd_reaction. If itposts, the trigger was never the problem.
On the diagnosis gap
Strong agreement with the secondary point in the original report. In our case,
workflows runsreturned[]throughout (#2980), and the Desktop workflowslist showed nothing at all for unrelated reasons (#2385 — multi-value
#hfilters collapsing). With triggers, actions, run history, and the list view each
failing differently and silently, there was no way to tell which layer was
broken.
We only got clarity by making the workflow post a message containing its own
trigger context — that turned the channel itself into the diagnostic surface,
which is the one thing that still worked. Might be a useful debugging suggestion
for others landing on this issue.
Happy to run further tests against this hosted community if it would help.
luthen-seas commentedon Aug 10, 2026
Second data point, and it extends the scope:
reaction_addedis affected too, so this is the whole channel-event trigger class rather thanmessage_postedspecifically.Environment
*.communities.buzz.xyz, checked 2026-08-09POST /events(kind:30620 directly), not Desktopreaction_added, no emoji filter; singlecall_webhookstepforbidden: workflows with call_webhook actions require the owner or admin role)What happened
The definition saves and reads back cleanly — a
#h-scoped kind:30620 query returns it. Reactions were then added to messages in that channel over several hours. The webhook target is an endpoint we operate, so we have full request logs rather than an inference: zero requests arrived, across two separate deployments, with the endpoint verified live and answering on other paths throughout.Same relay, same channel, same period: our own scheduled poller reading reactions over
POST /queryworks continuously, so relay ingest of the kind:7 events themselves is fine. It is specifically the workflow dispatch that never happens.On the "hard to self-diagnose" point
Strongly seconding it. Between run history returning
[](#2980) and the Desktop workflows list showing empty on hosted (#4696), there is no signal available to a user distinguishing never fired from fired and did nothing. We only established it because the webhook target was ours to instrument. Without that we would have concluded our own endpoint was at fault.One suggestion, if it's cheap: even a relay-side log line at dispatch —
workflow <id> matched/skipped for event <kind>— would collapse this from a day to a minute, independent of whether #2980 gets fixed.Happy to run any probe against the hosted relay that would help narrow it.