Skip to content

docs(design): relay write-admission forward path — close the grant→relay gap (ready-3279) - #238

Open
baron-3dl wants to merge 2 commits into
mainfrom
docs/relay-write-admission-forward-path
Open

docs(design): relay write-admission forward path — close the grant→relay gap (ready-3279)#238
baron-3dl wants to merge 2 commits into
mainfrom
docs/relay-write-admission-forward-path

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Design doc for ready-3279. Written after diagnosing why a new ready writer identity has no working forward path to relay write access.

The break (concrete)

rd relay sync-allowlist (pkg/sync/allowlist.go:21) writes scripts/relay-policy/write-allowlist.json — a strfry-era file. The deployed cosmos/khatru relay (nostr-relay nostrrelay-8d2) ignores it and admits writers only via manual NIP-86 allowpubkey (admin-gated). So the designed invite→join→grant→sync path dead-ends: grant-derived keys never reach the relay.

What this doc does

  • Does not relitigate nostr-identity-model.md (owner-rooted 39301 delegation, generate-then-authorize, invite lifecycle are all DECIDED).
  • Closes the relay side of GAP-1 and reconciles with two things that shipped after those docs: the cosmos relay and the vibrant open+PoW policy.
  • Notes confidentiality is already solved (confidential-boards-envelope.md, FROZEN) and orthogonal to admission — so reads can be open.
  • Target: one capability-sourced write gate — author-self | admin | valid-39301-owner-grant | public-PoW.

Decision needed (§6)

  • A (interim): repoint sync-allowlist --apply from the dead JSON to a NIP-86 reconcile — forward path works this week, allowlist is a grant cache.
  • B (end state): relay derives admission from 39301 grants rooted at the board owner — single source of truth, instant revocation.

Recommendation: B end-state, A acceptable interim; they're compatible.

Cross-repo: enforcement code lands in ~/projects/nostr-relay/internal/cosmosstore. Vibrant open+PoW (nostr-relay nostrrelay-164, shipped 2026-08-19) already implements the public-PoW case and is forward-compatible.

🤖 Generated with Claude Code

alice and others added 2 commits August 19, 2026 16:25
…lay gap (ready-3279)

A new ready writer identity has no working forward path to relay write access:
`rd relay sync-allowlist` writes scripts/relay-policy/write-allowlist.json (a
strfry-era file), but the deployed cosmos/khatru relay ignores it and admits
only via manual NIP-86. So invite→join→grant dead-ends — grant-derived keys
never reach the relay.

Documents the target: one capability-sourced write gate (author-self | admin |
valid-39301-owner-grant | public-PoW), building on the already-DECIDED identity
model (nostr-identity-model.md) and the FROZEN confidential envelope (so reads
can be open — confidentiality is encryption, orthogonal to admission). Frames
the decision (§6): A interim (sync-allowlist → NIP-86 reconcile) vs B end-state
(relay derives admission from 39301 grants). Vibrant open+PoW (nostr-relay
nostrrelay-164) already implements the public-PoW case.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…eady-3279

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant