fix(oauth): make permission-set lexicon resolvable by auth servers
Per the atproto Lexicon spec, NSID resolution is DNS-based (TXT record at
_lexicon.<reversed-authority> pointing at a DID, plus a schema record on
that DID's PDS) — not HTTP. Without that infrastructure, PDSes returned
`invalid_scope` for include:com.atmosphereaccount.registry.fullPermissions
and login was blocked.
- Drop the blob permission from fullPermissions.json: the permission spec
forbids blob permissions inside permission sets, so goat lex publish
would have rejected the schema. Add blob:image/* as a top-level scope
alongside the include: in lib/oauth.ts and client-metadata.json.ts —
same effective access, valid spec shape.
- Add deno tasks (lex:lint, lex:check-dns, lex:status, lex:publish,
lex:publish:update) wrapping goat for one-shot DNS verification and
publication.
- Document the full one-time setup (DNS TXT at Porkbun + app password +
goat lex publish) and day-to-day workflow in docs/PUBLISHING_LEXICONS.md.
Made-with: Cursor