Repository navigation
Conversation
Released clients such as iOS 2.0.0 request the pre-split scope names at token exchange. The exchange kept only those names, so new sessions lost filesystem:read, providers:manage, source-control:write and the other permissions split out of them, even when the pairing grant included them. Expand a request made only of pre-split scopes by the permissions split out of each requested parent, then intersect with the grant as before. Granular requests and requests without a scope are unchanged, and stored credentials are still never widened. Fixes pingdotgg#16804 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — This compatibility fix changes authentication token exchange so legacy scope requests can produce additional granular permissions on newly issued sessions. Because it modifies sensitive authentication and authorization behavior, human review is required despite the focused scope and added tests. You can add or adjust custom eligibility rules. Learn more. |
…e-03/17341 # Conflicts: # packages/contracts/src/auth.ts
|
Taking over this one. I’m retaining @teoaliano’s legacy-request translation and original commits, merging main, and verifying the exact public permissions against existing grants. The historical request now receives 13 mapped permissions, without the three unrequested management scopes. Independent reviews and isolated HTTP proof are included; leaving it unmerged for authorization review. |
|
CI follow-up on f5b83e0f66: lint, build/typecheck, all server shards, web and release smoke passed. Generic Test stopped before tests because the Electron download could not resolve release-assets.githubusercontent.com (curl exit 6). Retrying failed jobs once on the same head; no product or CI changes. Macroscope correctness passed; its neutral approvability result still requires human authorization review. |
|
Takeover complete at f5b83e0f66. Current-head build, lint, and test jobs pass; skipped jobs remain skipped. No unresolved inline findings. One full independent review round with Claude Opus 5.5 and GPT-6-Sol found no code blockers. The PR body contains the current focused tests, headless proof, original-author credit, and platform limits. The unchanged-head rerun passed after the Electron download DNS failure. Macroscope correctness passed; its neutral approvability result explicitly requires human authorization review. Leaving unmerged. |
Released clients can request only the legacy permission vocabulary when exchanging a pairing token, leaving the new session without the corresponding split permissions. Expand explicit legacy-only requests through the existing parent mapping, then intersect with the pairing grant. Mixed and granular requests keep their exact scope; stored credentials are unchanged.
Based on teoaliano’s #17341, with original commits retained and main merged. Addresses the token-exchange portion of #16804; the other provider/UI concerns remain outside this change.
Historical requests for
orchestration:read orchestration:operate terminal:operate relay:readreceive those four permissions plus nine mapped children when granted: 13, excluding unrequestedaccess:read,access:write, andrelay:write. Omitted scopes retain the full grant, currently 16 standard permissions. A legacy parent can authorize its granted split child even if the grant omits the parent itself; that successful exchange consumes the pairing link normally.Verification on f5b83e0f66:
One full independent review round (Claude Opus 5.5 and GPT-6-Sol) found no code blockers. Human authorization review remains required before merge.
This is headless Linux auth-route/service proof. An actual old iOS binary, relay/tunnel transport, macOS, Windows, iOS, Android, and Electron desktop were not verified. No visual UI change; screenshots do not apply. Leave unmerged.
Tests: GPT-6-Astra; implementation: GPT-6.1-Sol; adversarial reviews: Claude Opus 5.5 and GPT-6-Sol. T3 Code using the Codex and Claude harnesses.