You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(permissions): rename sets to authWrite (single-segment NSID under namespace root)
The previous NSIDs `org.hypercerts.permissions.crud` / `app.certified.permissions.crud`
were INVALID: a permission set may only grant permissions under its own NSID
authority, and NSID.authority is the reversed domain of all-but-the-last
segment. The `.permissions.` segment made the authority `permissions.hypercerts.org`,
which does not parent `org.hypercerts.claim.*` — so IncludeScope.toScopes
silently expanded the set to ZERO scopes.
Rename to a single leaf directly under the namespace root, matching Bluesky's
real published permission sets (app.bsky.authViewAll / authCreatePosts /
authDeleteContent / authFullApp — single segment, auth-prefixed capability leaf)
and the spec's illustrative com.example.authFull:
- org.hypercerts.authWrite (lexicons/org/hypercerts/authWrite.json)
- app.certified.authWrite (lexicons/app/certified/authWrite.json)
Each now expands correctly to one combined repo: scope covering all its
collections (verified).
Also: replace the path-based codegen exclusion (which assumed a permissions/
subdir) with scripts/codegen-lexicon-files.js — a content-based file list
(main.type === "permission-set") shared as the single source of truth with
generate-exports.js, so the exclusion no longer breaks when set files move.
Docs/skill/changeset updated for the new NSIDs, the single-segment-NSID
rationale, and the combined-scope expansion shape. npm run check passes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: .changeset/permission-sets-crud.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
"@hypercerts-org/lexicon": minor
3
3
---
4
4
5
-
Add two permission-set lexicons — `org.hypercerts.permissions.crud` and `app.certified.permissions.crud` — each granting create/update/delete over every record collection in its namespace.
5
+
Add two permission-set lexicons — `org.hypercerts.authWrite` and `app.certified.authWrite` — each granting create/update/delete over every record collection in its namespace.
6
6
7
7
A [permission set](https://atproto.com/specs/permission#permission-sets) lets any AT Protocol app request a whole bundle of `repo:` scopes with a single `include:<nsid>` OAuth scope, instead of enumerating each collection by hand. The user's PDS resolves and expands the set during the OAuth grant; the same published set can also be consumed by services (e.g. the Certified group service) when expanding API-key scopes.
Copy file name to clipboardExpand all lines: SCHEMAS.md
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -299,6 +299,12 @@ A free-text string value (e.g. a display name, wallet address, or other identifi
299
299
300
300
---
301
301
302
+
### `org.hypercerts.permissions.crud`
303
+
304
+
**Description:** Permission set granting create, update, and delete on every Hypercerts (org.hypercerts) record collection.
305
+
306
+
---
307
+
302
308
### `org.hypercerts.workscope.cel`
303
309
304
310
**Description:** A structured, machine-evaluable work scope definition using CEL (Common Expression Language). Tags referenced in the expression correspond to org.hypercerts.workscope.tag keys. See https://github.com/google/cel-spec. Note: this is intentionally type 'object' (not 'record') so it can be directly embedded inline in union types (e.g., activity.workScope) without requiring a separate collection or strongRef indirection.
@@ -541,6 +547,12 @@ The EIP-712 typed data message that was signed by the wallet. Contains the field
541
547
542
548
---
543
549
550
+
### `app.certified.permissions.crud`
551
+
552
+
**Description:** Permission set granting create, update, and delete on every Certified (app.certified) record collection.
553
+
554
+
---
555
+
544
556
### `app.certified.signature.defs`
545
557
546
558
**Description:** Common type definitions for cryptographic signatures attached to records, per the ATProtocol Attestation Specification.
"//permissions": "permission-set lexicons (lexicons/**/permissions/*.json) are published as-is but have no TS shape; lex gen-* cannot codegen them, so they are excluded from the codegen globs below.",
"//permissions": "permission-set lexicons are published as-is but have no TS shape; lex gen-* cannot codegen them. scripts/codegen-lexicon-files.js lists the lexicons to codegen, excluding permission-sets by content (single source of truth shared with generate-exports.js).",
0 commit comments