Skip to content

docs(nip46-compatibility): add stacker.news + NDK 2.x/3.x bunker:// findings#47

Open
DocNR wants to merge 1 commit into
mainfrom
docs/nip46-compat-stackernews-ndk
Open

docs(nip46-compatibility): add stacker.news + NDK 2.x/3.x bunker:// findings#47
DocNR wants to merge 1 commit into
mainfrom
docs/nip46-compat-stackernews-ndk

Conversation

@DocNR
Copy link
Copy Markdown
Owner

@DocNR DocNR commented May 9, 2026

Summary

Documents the NIP-46 bunker connect handshake bug class found while debugging stacker.news's bunker login against a Clave URI. Same bug class as the existing rust-nostr ≤ 0.44.2 entry.

  • New compatibility-matrix row for stacker.news (⚠️ Partial pre-fix)
  • New per-client notes section explaining the symptom + fix
  • New library-family entry: "NDK (@nostr-dev-kit/ndk) — bunker:// path" documenting two NIP-46 spec violations in NDK 2.x–3.0.3 on the bunker:// flow
    • First connect param is empty string (should be remote-signer-pubkey)
    • Only \"ack\" accepted (NIP-46 also allows the URI secret echoed back; Clave returns the latter per LightSigner.swift:564-568)
  • Renamed existing NDK library-family entry to "NDK (...) — nostrconnect:// path" to disambiguate; the nostrconnect flow is unaffected
  • Added both PRs to the "Open upstream issues / PRs" table
  • Changelog entry + bumped Last updated date

Companion PRs

Test plan

  • Reproduced the hang against unpatched @nostr-dev-kit/ndk@2.12.2 with a Clave-emulating mock NIP-46 bunker on a local nak serve relay → rejects in 39ms with undefined (the bug)
  • Patched override resolves in 112ms
  • Live test against real Clave bunker URI on relay.powr.build (TestFlight build) → resolves in ~2s
  • Doc renders correctly on GitHub (no broken anchor refs after switching to descriptive cross-references)

🤖 Generated with Claude Code

…indings

- New compatibility-matrix row for stacker.news (⚠️ Partial — bunker
  login hangs with Clave URI; fix at stackernews/stacker.news#2947)
- New per-client notes section explaining the symptom + fix
- New library-family entry: "NDK (@nostr-dev-kit/ndk) — bunker:// path"
  documents the two NIP-46 spec violations in NDK 2.x–3.0.3 on the
  bunker:// flow:
    1. connect([userPubkey ?? "", secret]) — sends empty first param
       for bunker URIs without ?pubkey=, contrary to spec which says
       first param is the remote-signer-pubkey
    2. only accepts response.result === "ack", rejecting the
       spec-allowed alternative (URI secret echoed back) with
       undefined
  Same bug class as rust-nostr ≤ 0.44.2. Upstream fix at
  nostr-dev-kit/ndk#390.
- Renamed existing NDK library-family entry to "NDK (...) —
  nostrconnect:// path" to disambiguate (the nostrconnect flow
  is unaffected by these bugs and works correctly on NDK 3.0.3).
- Added both PRs to the "Open upstream issues / PRs" table.
- Changelog entry + bumped Last-updated date.

Verification chain:
- Reproduced the hang against unpatched @nostr-dev-kit/ndk@2.12.2
  with a Clave-emulating mock NIP-46 bunker (returns secret echo
  per LightSigner.swift:564-568) on a local nak relay -> rejects
  in 39ms with undefined.
- Patched override resolves in 112ms.
- Live test against a real Clave bunker URI on relay.powr.build
  (TestFlight build) -> resolves in ~2s.
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