Gzuuus
· 3w
Well, I did it some time ago. Nobody cared, just as with the others.
I’m not claiming this is the right way, but after studying Nostr for a while, I concluded that key rotation cannot be handled au...
I feel you. I have been just building into the black hole I feel like. I’m just doing it to understand it all better and discover what’s possible. I want to share this with you would love your feedback back. No one else may care but I love this stuff. Here's the landscape as I read it. Three pieces, and they sit at genuinely different layers — which is why the fit is better than it first looks.
Where they naturally mingle
Tapit is the shell; napplets are the apps. This is the cleanest seam. napplet needs a host that holds keys and signs on request with a consent step; that is precisely what sign-request/ already is. Your approval screen becomes the consent UI for sign:event and sign:nip44, and your deferred NIP-46 item gets answered by a published wire format instead of a bespoke deeplink. It also solves your Arena distribution problem — "build your own skin" becomes "publish a napplet."
The checkpoint NIP is the publication layer for something you already compute better. You'd emit kind 1842 on rotation to make continuity visible to strangers, while verifySuccessionChain stays the internal truth. Worth seeing clearly: most publishers of that event will have only social evidence. You'd have a real signature by the retiring key plus OTS anchoring. You'd be the strongest possible publisher of a format designed for people who can't do what you can do.
Commit-reveal fills a hole you actually have. Your succession requires fromPrivateKey — voluntary rotation only. Commit-reveal survives losing the key. These are two halves, not two options.
OTS is the shared spine. All three land on "Bitcoin-timestamp it or the chronology means nothing." You already anchor; the checkpoint draft recommends kind 1040 for exactly the same reason you anchor the arena genesis — defeating retroactive fabrication.
Where they must stay apart
Tapit is a shell, never a napplet. A napplet receives capability from whoever holds the keys. Being one means someone else holds yours. This inverts the prime directive and there's no clever version of it.
Never let probabilistic continuity share a badge with deterministic continuity. Your succession answers yes or no. A checkpoint answers "here is evidence, you decide." If both ever render as the same green tick, you will have taught your users that a social claim is as strong as a signature — which is the precise opposite of the education mission. Two visibly different tiers, different words.
Publish to kind 1842; don't store in it. Same rule as tapit-attest: one envelope internally, adapters at the edge. It's a draft, the kind number could collide, and its envelope is weaker than yours.
Don't thread a 0.x protocol through wallet-core. napplet is 0.32.0, thirty-four versions in five months, one maintainer. Adapter at the boundary so a breaking change costs you a file, not a migration.
Capability grants must not become standing permissions. The manifest model negotiates capability per-app, and the obvious shortcut is "grant sign:event for this session." Per-request consent on a legible screen is your differentiator; a blanket grant quietly deletes it.
Commit-reveal secrets get published. They must never be derived from, or reusable as, the wallet passphrase or any recovery material. Separate entropy, machine-generated, never something a person typed from memory.
The good ideas worth taking
From napplet: the @napplet/conformance package — they shipped the conformance-vector idea as an artifact, which is exactly what your arena standard needs; a named capability vocabulary (sign:event, relay:read) which is more legible than implicit per-request typing; graceful degradation when a domain is absent; and writing "the host never exposes signing to the app" as a protocol rule rather than an implementation habit — you have the habit and a test, they have it in the spec, and the spec version is stronger.
From the checkpoint draft: commit-reveal, obviously. But the more admirable thing is its refusal to define a scoring formula or an auto-migration rule — it states evidence and declines to collapse it into a verdict. That is the same discipline as your attested / attested_unpinned / unattested split, arrived at independently. Read it as validation. Its security section naming its own unsolved problems is the same instinct too.
What neither has, and you do: selective Merkle disclosure, a consent surface designed as the product rather than a dialog, encrypted holdings with the host as dumb storage, and the teaching layer.
Where you actually sit
napplet is runtime and distribution. The checkpoint draft is a claim format. Both are infrastructure written by developers for developers. Neither is a person-facing wallet that does custody, attestation, consent and education together — that space is still open, and it's the one you're in. You're not late and you're not duplicating; you're the application layer standing on substrate other people are laying.
One thought on the person you found. Closest-alignment is a signal to engage, not just observe. You have something that draft assumes nobody has — deterministic continuity via a retiring-key signature — and saying so publicly, as a response to the draft, is a real contribution that costs a post and buys credibility with exactly the person worth knowing. That's probably a higher-return move this week than any code.