mirror of
https://github.com/block/buzz.git
synced 2026-10-30 22:11:36 +00:00
A workflow message names its owner in a marked p tag, ["p", owner, "", "owner"], for attribution. #p live, history and push matching, operator listeners, desktop, mobile and the iOS NSE treat that tag as attribution rather than a mention. A workflow that mentions its owner adds a plain p, so the owner is notified only when actually mentioned. NOSTR.md records the #p exception. Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz> Signed-off-by: Tom Brow <tomb@squareup.com>
48 lines
2.7 KiB
Markdown
48 lines
2.7 KiB
Markdown
# Buzz push notes
|
|
|
|
Push is experimental. These notes capture current decisions; we will write a
|
|
stable specification after validating the design through launch and use.
|
|
[NIP-PL](nips/NIP-PL.md) is background, not the current Buzz contract.
|
|
|
|
- Relays advertise `buzz-push-v1`, never `nip-pl`. Updated clients require it.
|
|
- Compatible changes keep the capability name. Incompatible behavior that
|
|
clients must distinguish gets a new version.
|
|
- Each gateway serves one server-configured Apple application and APNs transport.
|
|
Enrollment, transcripts, grants, leases and discovery have no application-profile
|
|
selector. The relay advertises transport classes in `class_support`.
|
|
- Existing grants and pending enrollment records are not migrated. The new client
|
|
uses separate Keychain records and enrolls again. Keep old production push
|
|
disabled so released clients never acquire legacy push authority.
|
|
- Stop old gateway replicas before cutover. The gateway migration requires an
|
|
empty authority store because endpoint fingerprints changed. The relay migration
|
|
requires no active legacy leases. Neither migration deletes that state.
|
|
- Publish the matching gateway image and chart, update deployment configuration,
|
|
then enable the new relay capability. Verify enrollment, delivery, renewal and
|
|
revocation on a physical device before production activation.
|
|
|
|
## Channel identifier grammar
|
|
|
|
Relays advertise `h_grammar: "uuid-v4-lowercase"`. Mobile also accepts
|
|
`uuid-lowercase`, which drops the UUID version and variant restriction so
|
|
UUIDv5 starter channels can be subscribed. Against a `uuid-v4-lowercase` relay,
|
|
mobile checks positive and ignore channel filters before enrollment or
|
|
publication. It keeps the desired filters and rechecks relay capabilities every
|
|
five minutes rather than sending a lease the relay would reject.
|
|
|
|
Do not change the relay advertisement until mobile builds that only parse
|
|
`uuid-v4-lowercase` have drained. Those builds parse the descriptor before
|
|
renewal, opt-out and revocation, so a new grammar would leave their existing
|
|
leases active until expiry.
|
|
|
|
## Workflow owner attribution
|
|
|
|
The relay signs workflow messages. Their first `p` tag,
|
|
`["p", <owner>, "", "owner"]`, names the workflow owner so clients can show
|
|
who owns the message. On an event marked `["buzz:workflow", "true"]` that tag
|
|
is attribution, not a mention: `#p` filters (live, history through the mention
|
|
index, and push leases), operator listeners and the push hellthread gate all
|
|
skip it, so the owner is not notified by every run of their workflow. When a
|
|
workflow mentions its owner, the relay adds a plain `["p", <owner>]`, which
|
|
notifies them like any mention. Mobile's Activity feed, unread mention priority
|
|
and in-app notification rule apply the same rule.
|