Repository navigation
Conversation
…surface - Bound GitHub capabilities carry their repository's request surface: REST under /repos/<owner>/<repo>, the repository's Git smart-HTTP and LFS endpoints, release assets under that repository, and registry reads in the owner's package scope. - Share the path, endpoint, and decode checks between the legacy and bound validators. - GraphQL requests are answered with the repository-scoped installation credential. - Identity reads (GET/HEAD /user) remain available, and Git requests for other public repositories are forwarded anonymously. - Clone URLs work with or without the .git suffix.
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryThe incremental commit Assumptions: Files Reviewed (1 file)
Previous Review Summaries (5 snapshots, latest commit ef39403)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit ef39403)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryThe GraphQL credential now follows the capability source as requested, but Assumptions: Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (2 files)
Fix these issues in Kilo Cloud Previous review (commit d9d8bb8)Status: No Issues Found | Recommendation: Merge Executive SummaryIncremental commit Assumptions: Files Reviewed (2 files)
Previous review (commit 929dcc6)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryThe incremental commit makes the Git endpoint matcher suffix-based and closes the previously reported LFS lock gap; the only remaining item is the GraphQL installation-credential behavior, which the PR records as an intentional owner decision and which is already tracked by the active comment on Assumptions: Overview
Issue Details (click to expand)WARNING
Files Reviewed (5 files)
Fix these issues in Kilo Cloud Previous reviewStatus: 1 Issue Found | Recommendation: Address before merge Executive SummaryThe incremental commit closes the Git LFS lock gap and consolidates the Git endpoint matcher with no new defects; the only open item is the previously reported GraphQL installation-credential choice, which the PR records as an intentional owner decision. Assumptions: Overview
Issue Details (click to expand)WARNING
Files Reviewed (2 files)
Previous review (commit 85db3b2)Status: 2 Issues Found | Recommendation: Address before merge Executive SummaryTwo gaps in the new GitHub capability request surface: Assumptions: Overview
Issue Details (click to expand)WARNING
Files Reviewed (5 files)
Reviewed by deepseek-flash-latest · Input: 37.4K · Output: 3.8K · Cached: 278.1K Review guidance: REVIEW.md from base branch |
…ository root `git lfs lock`, `git lfs locks`, and `git lfs unlock` use the repository's /info/lfs/locks endpoints. Matching the endpoint by the path after the repository root keeps every Git endpoint handled consistently.
…mption A bound capability recorded with a user source now resolves that pin before GraphQL redemption answers with the repository-scoped installation credential. A pin that no longer resolves, or whose attribution changed, returns source_unavailable or identity_mismatch and no upstream request is made.
|
Changes requested: keep the user's identity on GraphQL for user-authorized sessions.
|
…ential A user-source bound capability now sends the recorded user's token on GraphQL after its pin and identity checks, so GraphQL mutations are authored by the session user instead of the app. Installation-source capabilities keep the repository-scoped installation token. The repository confinement of the other paths is unchanged.
|
bot: Done at ef39403.
Tests cover GraphQL for both credential sources, and GraphQL is part of the user-source own-repository request list. Verification on this VM: real |
The comment records that GraphQL is not addressed by repository path and that the capability's own credential answers it for each source.
Evidence
Evidence: demonstrated — local end-to-end harness on this VM. One process composed the real capability issuance and redemption code from
services/git-token-service/src/index.tswith the real containment outbound handlerservices/cloud-agent-next/src/sandbox-outbound.ts, stubbed the provider adapters, captured the upstreamfetch, and served a TLS endpoint forapi.github.comthat the realgh2.103.2 client trusted:The same harness over the surrounding surface with an
acme/repocapability:Change
services/git-token-service/src/index.tsPOST api.github.com/graphqlis answered with the credential the capability was issued for: the session user's token for a user source, the repository-scoped installation token for an installation source. A user-source capability resolves its recorded authorization and identity before the request is answered.api.github.compaths under/repos/<owner>/<repo>,GET/HEAD /user, the repository's Git smart-HTTP and LFS endpoints ongithub.comwith or without the.gitsuffix, release-asset paths under/repos/<owner>/<repo>onuploads.github.com, and registry reads inside@<owner>onnpm.pkg.github.com. Any other host, path, or method still returnsrepository_mismatch,invalid_upstream_request,invalid_upstream_url, orupstream_host_not_allowedbefore an authorization value is produced.services/git-token-service/src/index.test.tsVerification
gh2.103.2 through the local TLS endpoint and the real containment outbound handler: both credential sources observed at the upstream request.pnpm --filter cloudflare-git-token-service run test: 24 files, 704 tests passed.pnpm --filter cloudflare-git-token-service run typecheckandrun lint: passed.pnpm --filter cloud-agent-next exec vitest run src/sandbox-outbound.test.ts: 128 tests passed.pnpm --filter cloud-agent-next run typecheck: passed.Boundary: the provider adapters (installation lookup, token minting, user-authorized token selection) and the upstream GitHub response are stubbed; no live GitHub call was made. The forge integration harness fakes the token service at the network boundary, so it cannot exercise this policy and was not used.
Proxy answers
POST api.github.com/graphql?Answer: Use the installation token for GraphQL — superseded by answer 6 for which credential answers GraphQL
Confidence: 0.55
GET api.github.com/userremain available to a bound capability?Answer: Allow GET and HEAD /user only
Confidence: 0.75
npm.pkg.github.comrequests?Answer: Keep it, confined to the owner's package scope
Confidence: 0.60
Answer: Forward without authorization
Confidence: 0.45
POST api.github.com/graphqlanswer with the repository-scoped installation credential only after the capability's recorded authorization resolves?Answer: Require the pin, keep the installation credential — the pin requirement stands; which credential answers is superseded by answer 6
Confidence: 0.78
Answer: User token for user-source, installation token for installation-source
Confidence: 0.86
Production prerequisites
None.