Skip to content

spec: space-scoped grants, read plane, and writes — release v0.11.0 - #37

Merged
bvalosek merged 4 commits into
mainfrom
spec/space-scoped-grants
Sep 8, 2026
Merged

spec: space-scoped grants, read plane, and writes — release v0.11.0#37
bvalosek merged 4 commits into
mainfrom
spec/space-scoped-grants

Conversation

@bvalosek

@bvalosek bvalosek commented Sep 8, 2026

Copy link
Copy Markdown
Member

Summary

Three spec refreshes from the platform's external-API iteration (metalabel-dfos #3273, #3275, #3279), one minor release. Additive only — no field removed or narrowed; the only - lines in src/generated/api.ts are description edits and reordering as never method stubs give way to real operations.

  • Space-scoped grants (bc76d3c20): four space-level action tokens in the request-proof scheme's catalog — read:posts, write:upvotes, write:comments, write:posts; GET /credential gains a required attenuation: { resource, action }[].
  • Read plane (c3290d453): the two space post routes become optional-auth (security: [{}, identityProof, requestProof+credential], read:posts) with a viewer block on member projections; new gated GET /feed and GET /spaces/{space}/posts/{postId}/comments.
  • Writes (b7e11fc6f): ten write operations under write:* — PUT/DELETE upvote on posts and comments, POST/PATCH/DELETE comments, POST/PATCH/DELETE posts — each accepting identity proof or the delegated pair, declaring 400/401/403/404/409/413/415/429/503 with 409 as the jti replay verdict.

Prose

README "Signed requests" and the createDfosApi docstring both claimed the surface was anonymous except for a gated GET family with one anonymous write. Rewritten around the spec's framing: anonymous / gated / optional-auth / writes, grants name actions and places, jti on every write, 409 means re-read, one body media type. README example gains a PUT upvote (fixture mirrored). @metalabel/dfos-client devDep pinned at 0.54.0, the first release whose createApiAuthFetch attaches jti on non-GET by default.

Release

package.json → 0.11.0 (additive type surface = minor). Tag v0.11.0 after merge.

Checks

pnpm typecheck && pnpm test && pnpm build green locally; pnpm generate leaves a clean diff.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Rpq64ASTsKJ3xc2DVoQMjh

bvalosek and others added 4 commits September 8, 2026 14:45
…ion` on credential introspection

Regenerated from metalabel-dfos bc76d3c20 (#3273). Additive only: the
request-proof scheme's action catalog gains read:posts, write:upvotes,
write:comments, write:posts; GET /credential gains a required `attenuation`
array of { resource, action } — the grant itself, per resource, alongside the
flat `scopes` list. No route changes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rpq64ASTsKJ3xc2DVoQMjh
…and comments read

Regenerated from metalabel-dfos c3290d453 (#3275). Additive: the two space
post routes gain a third security alternative (anonymous, identity proof, or
credential + request proof) demanding read:posts, with a `viewer` block on
member projections; new gated GET /feed (cross-space member feed) and GET
/spaces/{space}/posts/{postId}/comments; new schemas PublicPostViewerOutput,
FeedSpaceRefOutput, FeedItemOutput, FeedPageOutput, PublicCommentOutput,
PublicCommentPageOutput. Description-only edits on the existing post routes;
no field removed or narrowed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rpq64ASTsKJ3xc2DVoQMjh
… replay discipline

Regenerated from metalabel-dfos b7e11fc6f (#3279). Additive: ten write
operations, each gated by identity proof or credential + request proof and
declaring its token — PUT/DELETE .../upvote on posts and comments
(write:upvotes), POST/PATCH/DELETE comments (write:comments), POST/PATCH/DELETE
posts (write:posts). Writes declare 400/401/403/404/409/413/415/429/503, with
409 as the jti replay verdict. New schemas PublicUpvoteStateOutput,
PublicDeletedOutput, PublicCommentWriteOutput and the write input shapes.
Existing operations survive unchanged (the `-` lines are reordering as the
`never` method stubs give way to real operations).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rpq64ASTsKJ3xc2DVoQMjh
…g, dfos-client 0.54.0 — release v0.11.0

The README "Signed requests" section and the createDfosApi docstring both
asserted the surface was anonymous except for a gated family of GETs, with
one anonymous write. The read plane and write routes falsify that. Rewrite
both around the spec's own framing: anonymous, gated, optional-auth, and
writes; a grant names actions and places; jti on every write, 409 as
"already happened", one body media type. The README example gains a PUT
upvote, mirrored in tests/readme-signed-fetch.ts. Pin @metalabel/dfos-client
at 0.54.0, the first release whose createApiAuthFetch attaches jti on
non-GET requests by default. Bump to 0.11.0: additive type surface.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rpq64ASTsKJ3xc2DVoQMjh
@bvalosek
bvalosek merged commit 8b8b36c into main Sep 8, 2026
1 check passed
@bvalosek
bvalosek deleted the spec/space-scoped-grants branch September 8, 2026 23:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant