push: bounded NIP-9a callbacks and opt-in lettered capability advertisements - #23
Merged
Conversation
… lettered capability advertisements Registrations require member authentication and host-approved HTTPS origins. Delivery persists finite retries, rechecks current access, meters work and isolates callback latency from publication. Numeric NIP identifiers remain unchanged; lettered advertisements document client compatibility limits.
FelineStateMachine
force-pushed
the
feat/nip-9a-push
branch
from
September 4, 2026 23:54
8072133 to
a09f6dc
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
Community/inbox notifications and Git or automation hooks currently need an external listener to remain connected. Opt-in NIP-9a registrations let the relay deliver matching events to an approved callback after publication. This is relay-to-callback delivery; applications still supply their own mobile push infrastructure.
This PR is stacked on #22 (
feat/nip-ad-web-addresses). Merge #22 first, then retarget this PR tomain. The shared capability registry advertises AD only with that implementation present. NIP-86 claims (#21) is independent.Change
5a908b8dc5190a46eac47992cba5ba6d8e7fc094. Authenticated owners/members publish private kind 30390 registrations with relay, filter/ignore, callback and optional include_event tags.letteredNipsopts into mixed identifiers; push requires mixed output. The common registry covers5Awhen sites are enabled,9awhen push is enabled, and implementedAD. Numeric capabilities remain numbers. Config/schema, console and docs include the policy.Compatibility research pins PR #2218 to
b4bad62ad44a900d6800e83c1f83549f2f705c33. Amethyst explicitly accepts mixed arrays; installed nostr-tools accepts raw JSON and keeps numeric lookups working with mixed entries. Damus metadata and the inspected Rust integer decoder reject lettered values. This is not a universal compatibility claim or proof of a Damus WebSocket failure. Disable push andletteredNipsfor numeric-only metadata. Concrete sources and uncertainties are indocs/26-nip11-compatibility.md.Testing Completed
npm run typecheck: TypeScript, generated signer/console/templates, console startup, host config parity, and all relay template schemas pass.npm test -- --maxWorkers=4: 48 files, 246 tests pass on the AD baseline.Responsible AI disclosure
Implemented with Codex and subagents for research, implementation, tests and review. Codex checked source evidence, corrected research inaccuracies, and ran the project checks; human review is requested for the draft-protocol and callback trust decisions.