mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
- Step 1: KIND_MESH_LLM_DISCOVERY = 31990 (parameterized replaceable, global-only, MessagesWrite scope) — relay members announce compute offers through the same NIP-43-gated fan-out path as messages. - Step 2: extract transport-neutral check_relay_membership returning MembershipDecision. HTTP enforce_relay_membership becomes a thin wrapper that maps Denied -> 403 JSON. Same behavior for all 6 existing HTTP callers; non-HTTP gates (iroh-relay AccessConfig) can call the core directly without a StatusCode in their return type. - Step 4: NIP-11 iroh_relay_url field, fed from new SPROUT_IROH_RELAY_PUBLIC_URL config. Absent unless configured (older clients unaffected). This is what mesh-llm sidecars read to wire their iroh endpoints to Sprout's own relay -- no out-of-band config required. - Step 5: sprout-auth::nip98_canonical_url helper. Single source of truth for the NIP-98 'u'-tag value, used by both signer and verifier. Suffix- aware path join (preserves /iroh prefix when joining /relay), localhost/ IPv6 loopback collapse, query+fragment stripping. Round-trip test signs with the helper and verifies through verify_nip98_event to prevent drift. sprout-core: 165 tests pass sprout-auth: 36 -> 48 tests pass (+12 nip98_url) sprout-relay: 190 -> 195 tests pass (+3 mesh-llm, +2 iroh_relay_url) workspace clippy -D warnings: clean workspace cargo fmt --check: clean Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com> Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>