Switch AtProto:ProfileScope to granular once a PDS accepts the narrow scopes #129
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/Ponente#129
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
/profile(added for #115) can edit a member's display name and avatar, but only withAtProto:ProfileScope=generic, which asks fortransition:generic— the member's whole account — to write one record.The scope the feature actually needs is
repo:app.bsky.actor.profile blob:image/*, and the code already builds and recognises it (ProfileScope, modegranular). It is not usable yet: on 2026-08-19,bsky.social,pds.ponente.appandpds.grandiras.netall advertised onlyat
/.well-known/oauth-authorization-server, and an authorization request carrying an unknown scope is rejected outright — so asking for it today breaks sign-in for everyone.What to do when the PDS image grows the scopes:
curl -s https://pds.ponente.app/.well-known/oauth-authorization-server | jq .scopes_supportedand check the same forbsky.social(members are not all on our PDS).ATPROTO_PROFILE_SCOPE=granularindeploy/.env.docs/auth.md— it is dated on purpose.No code change is expected. Worth a periodic re-check: this is the difference between Ponente holding a token that can post as a member and one that can only rename them.
Filed by Claude while working on #115 (run).
🤖 On it — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
🤖 On it — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
Re-checked the blocker. The switch is still not possible — no configuration change made.
What I measured (2026-08-21)
Identical to the 2026-08-19 measurement in the issue: no
repo:*, noblob:*. SettingATPROTO_PROFILE_SCOPE=granulartoday would still send an unknown scope in the authorization request and break sign-in for every member.I also checked whether this is just a stale image, since the answer would be different if it were:
{"version":"0.4.5027"}at/xrpc/_health.ghcr.io/bluesky-social/pds:latest(which all three compose files use) resolves toorg.opencontainers.image.version: 0.4.5027, built 2026-08-11, revision374cf1d.So the deployment is already on the newest published PDS image, and the granular scopes are not in it.
bsky.socialruns ahead of the released image (versionis a bare commit sha there) and does not advertise them either — which means members on Bluesky's own PDS would be broken too, not just ours. Nothing to pull, nothing to flip.What I changed
Branch
claude/issue-129— one paragraph indocs/auth.md. The "Nothing accepts it yet" bullet is dated on purpose, so I recorded the re-measurement rather than leaving a single 2026-08-19 reading that looks unverified two days later, and added the image-version evidence so the next person re-checking doesn't repeat the "maybe we're just on an old image" investigation. No code change, no changelog entry (nothing a member would notice).Verified with
dotnet test Ponente.sln— 380 passed, includingDocumentationTestsandProfileScopeTests.The issue should stay open: it is a standing re-check, and the trigger condition hasn't fired.
⏱ 1m 36s · 14 turns · tokens: 21.2k in / 5.6k out (+429.5k cache-read)
📜 Full session transcript
→ Opened PR: #138