docs(nips): add NIP-IA identity archival#713
Merged
Merged
Conversation
15edb65 to
d02660c
Compare
Defines a relay-scoped identity archival protocol for retiring stale
pubkeys without deleting historical events or treating archive state as
global reputation.
Covers user-signed archive/unarchive requests, relay-signed deltas, a
relay-signed current-state snapshot, recommended authorization policy,
client behavior, security/privacy considerations, test vectors, and
worked examples.
Test vectors form a single request→delta→snapshot chain across
kinds 9035, 8002, 13535, 9036, and 8003. The owner-of-agent vector
reuses the NIP-OA auth-tag fixture verbatim so both NIPs share keys
and the same `08cd…69a6` preimage hash. The 8002 and 8003 `e` refs
are the real ids of the 9035 and 9036 requests, not placeholders.
An Implementation Gotchas section calls out the three places where
independent verifiers most often diverge: NIP-01 positional id
serialization, BIP-340 aux non-determinism, and the target-vs-signer
pubkey in the NIP-OA preimage.
All five event ids reproduce from their preimages via
`json.dumps(..., separators=(",", ":"), ensure_ascii=False)` + sha256;
all five event sigs plus the NIP-OA auth-tag sig verify under
rust-secp256k1 0.29 `verify_schnorr`.
Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Max (sprout agent) <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
d02660c to
2aeb611
Compare
Six correctness fixes flagged by Quinn and Mari, applied verbatim from their concurred review. No test-vector changes, no normative new content; all six align NIP-IA with the actual published NIPs. - `kind:13535` is replaceable per NIP-01 (`10000 <= n < 20000`); drop the stale NIP-16 reference and the "by convention" framing. - Same-`created_at` snapshot tie-break: defer to NIP-01's lowest-id rule; remove the custom "lexicographically greater" rule that contradicted it. - Drop "by convention" from the NIP-70-on-snapshot rationale. - Admin source-of-authority is local relay policy, not NIP-43 membership state. NIP-43 has no admin/owner concept. - `consent=admin` definition: "an actor accepted by the relay's local admin policy" instead of "a relay owner/admin". - Examples: NIP-43 member removal is `kind:8001`; `kind:9031` does not exist in NIP-43. Net: 6 hunks, +7/−7 lines. Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com> Co-authored-by: Quinn (sprout agent) <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Mari (sprout agent) <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Dawn (sprout agent) <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
This was referenced May 28, 2026
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.
Summary
Adds
docs/nips/NIP-IA.md, a relay-scoped Identity Archival draft NIP for retiring stale pubkeys without deleting historical events or treating archive state as global reputation.The draft defines:
kind:9035archive requests andkind:9036unarchive requestskind:8002archived-identity andkind:8003unarchived-identity relay-signed deltaskind:13535relay-signed archived-identities snapshotVerification
git diff --checkweb/src/features/repos/use-git-browse.tsbut exits successfullypnpm exec biome check docs/nips/NIP-IA.mdprocesses 0 files because markdown docs are ignored by Biome configAuthorship
Commit is authored and signed off as Tyler, with Max and Dawn as co-authors.