docs(backend): pin get_public_key as an intentional, load-bearing ACL exception (#26) #53

Merged
padreug merged 1 commit from fix/26-document-get-public-key-ungated into dev 2026-07-04 13:59:31 +00:00

1 commit

Author SHA1 Message Date
d35b98a8c9 docs(backend): pin get_public_key as an intentional, load-bearing ACL exception (#26)
Some checks failed
Docker image / build-and-push-image (push) Has been cancelled
get_public_key returns the signer pubkey without routing through
pubkeyAllowed(), unlike every other NIP-46 method. #26 flagged this as an
unaudited/ungated disclosure through the ACL seam and asked us to decide
deliberately between gating it and documenting the exception.

Verified against the live clients: gating it would BREAK production.
lnbits' _ensure_policy (remote_bunker.py DEFAULT_POLICY_RULES +
DEFAULT_POLICY_METHODS_NO_KIND) grants only sign_event(kinds) + the four
nip04/44 crypto methods — no get_public_key rule — and the client calls
get_public_key as a spec-mandated, hardcoded post-connect session step
(nip46_bunker_client.py connect()). Routing it through checkIfPubkeyAllowed
would return `undefined`, dropping that call onto the admin-approval path
and stalling session establishment → "signer unavailable" (the #41 outage
class).

So the correct resolution is #26's option A (accept + document): the pubkey
isn't secret, NIP-46 mandates it ungated during session setup, and the
clients carry no grant for it. Make the exception explicit and load-bearing
in the code so a future refactor doesn't "helpfully" gate it and reintroduce
the outage. No behavior change; tsc-clean; test:nip46 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 15:58:08 +02:00