Skip to content

[CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector - #194

Open
mateoHernandez123 wants to merge 36 commits into
mainfrom
mateoHernandez123/github-enterprise-owner-provisioning
Open

mateoHernandez123 wants to merge 36 commits into
mainfrom
mateoHernandez123/github-enterprise-owner-provisioning

Conversation

@mateoHernandez123

@mateoHernandez123 mateoHernandez123 commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Description

  • Bug fix
  • New feature

Adds Grant and Revoke for the built-in Enterprise Owner role under GitHub App authentication, which CXH-2123 asks for on behalf of DoorDash: they want that role requestable and time-bound from C1.

The ticket's implementation note pointed at a GraphQL mutation called updateEnterpriseOwnerMembership. That mutation does not exist, and the real model is more involved: GitHub has no single operation that assigns Owner. A member becomes one by accepting an invitation, and GitHub rejects that invitation outright when the user already holds an enterprise administrator role such as Billing manager. An installation token cannot read that prior role — Enterprise.ownerInfo resolves to null — so the connector refuses that case with FailedPrecondition rather than promoting in place: Revoke could only demote to UNAFFILIATED, discarding a role the grant never gave. I corrected the ticket description with what the API actually offers.

Contrary to the original support thread, this does not require a personal access token. It works with a GitHub App installed on both the enterprise account and the organization.

Sync:

  • Enterprise roles (enterprise_role) — under GitHub App authentication the connector now lists the built-in Owner role and emits its grants. Owners are read from Organization.enterpriseOwners with the organization installation token; Enterprise.members(role: OWNER) looks like the right field but returns owners of organizations inside the enterprise, not owners of the enterprise account. Under PAT authentication the resource type is unchanged.
  • Pending invitations are emitted as grants on the same assigned entitlement as accepted owners. C1 has no pending state for a grant, so an invitee is indistinguishable from a real owner until they accept or the invitation lapses. That is a deliberate trade: emitting nothing would leave the request invisible in C1 for up to seven days with no record that it was made. An access review or offboarding sweep will count an invitee as holding Owner — documented in docs/docs-info.md and in the enterprise connector docs.
  • Every other resource type is an unchanged surface.

Provisioning:

  • Grant/Revoke Enterprise Owner (NEW) — Grant invites. A user GitHub refuses to invite, because they already hold an administrator role, is rejected rather than promoted in place, since the prior role is unreadable and Revoke would discard it. Revoke clears both states rather than treating them as alternatives: it demotes an active owner to UNAFFILIATED, which keeps their enterprise membership instead of evicting them, and cancels an unaccepted invitation.
  • Idempotency: GrantAlreadyExists when the user already holds the role or already has a pending invitation, GrantAlreadyRevoked when neither is present. A NOT_FOUND from either mutation is treated as success, because it means the requested state is already in place.
  • Both operations verify the resulting state and refuse to report a grant or revoke that GitHub did not apply.

What C1 shows for each state:

C1 has no pending state for a grant — it either exists or it does not — so an invitation and an accepted owner map onto the same grant:

State in GitHub What C1 shows
Invited, not accepted yet Owner grant
Invitation accepted, active owner Owner grant, same grant ID
Invitation cancelled or lapsed Grant disappears on the next sync
Never invited No grant

The grant ID being stable across the second row matters: if it changed on acceptance, C1 would read the transition as a revoke followed by a new grant and would corrupt the history exactly where it is most useful. Nothing tracks an expiry — GitHub stops resolving an invitation once it is accepted, cancelled or expired, so it simply stops being emitted.

Every row was exercised against a live GitHub Enterprise Cloud account with the app installed on both levels, driven end to end through a full ConductorOne stack: granting to an org member created the invitation and C1 kept the grant across the following sync, a teammate accepting it turned them into an active owner under the same grant ID, and revoking cleared each state through its own mutation. Also covered live: re-granting while an invitation is pending returns GrantAlreadyExists without sending a second invitation, revoking with nothing to revoke reports success rather than an error, and revoking an active owner leaves their enterprise membership intact.

Auth:

There is no separate switch. --enterprises says the deployment has an enterprise and the credential says which API can serve it. The role is registered with Grant and Revoke on either credential; a personal access token cannot reach the enterprise administrator API, so a request made with one fails naming the credential it needs rather than the role being hidden. Licenses are registered on the token path only, since their API answers 403 to anything else. The App path needs the app installed on both the enterprise account and the organization, with the Enterprise → People: Read and write permission.

This is a behaviour change for an App deployment that already passes --enterprises. It used to report no enterprise roles; it now reads the Owner role, and fails on the first sync if the app is not installed on the enterprise account. On a hosted tenant with selective sync that sync was green before, because license carries OptInRequired and its 403 never fired — green with no enterprise data in it. The error names the remedy, and docs-info.md states the trade.

Once enabled, a missing enterprise installation fails the sync rather than emitting no owners. That is deliberate: C1 deletes every resource of a type that a completed sync did not report, so finishing the sync while reading nothing would silently drop the Owner role and every grant on it — and GitHub answers 404 for an uninstalled app, a revoked permission and a slug typo alike, so the connector cannot tell them apart. Failing keeps the sync from completing, so nothing is deleted.

Only one enterprise can be served per connector under App authentication, because owners are read through the single configured organization and an organization belongs to exactly one enterprise. A configuration naming several is rejected with an explanatory error. The PAT path still accepts a list.

Architecture highlights:

  • Pending invitations are not enumerable. Enterprise.ownerInfo.pendingAdminInvitations is the only connection GitHub offers and it is null for installation tokens, so the sync resolves invitations by asking about the enterprise members, aliasing up to 100 logins into one request — measured at a single rate-limit point. An invitation addressed to somebody outside the enterprise is therefore invisible to the sync; invitations created from C1 are always visible, because C1 grants to a user it has already synced.
  • Grants() walks owners and invitations as two phases of one page token via pagination.Bag.
  • A GraphQL transport classifies the errors GitHub returns alongside an HTTP 200, so a rate limit reaches the SDK as a retryable Unavailable. It is layered only on the enterprise clients: the shared GraphQL client is untouched because user.go detects enterprise SAML by matching that error's text. The aliased batch deliberately bypasses it, since it always carries NOT_FOUND entries, and filters those out before classifying the rest — leaving them in would let them claim the code for the whole response, and NOT_FOUND is the one code the SDK downgrades to a warning.
  • customclient now resolves URLs against the go-github client's BaseURL and escapes each path segment, so these endpoints follow --instance-url instead of hardcoding api.github.com.
  • The GraphQL endpoint derivation that existed in three places is now one helper.
  • The published capability set is now complete. The capabilities command runs without credentials, so a connector built from real config omitted every resource type its configuration did not switch on — enterprise roles and licenses need --enterprises, API keys need --sync-secrets, the usage app and its event feed need --sync-last-activity. A DefaultCapabilitiesBuilder registered for that command alone (the pattern baton-aws uses) restores them, which is what lets the catalog advertise enterprise_role as provisionable at all. Each tenant still gets the truth of its own deployment: MakeGRPCServerCommand never receives the option, and C1 overwrites the capabilities it stores from the live connector on Validate and on every sync, so a PAT deployment still reports the role as sync-only. The distinction is that the catalog describes what the connector can do once configured, while each tenant's record describes what its own deployment does. This PR also removes capabilities_and_config.yaml per review, so baton_capabilities.json and config_schema.json are regenerated by hand until baton-admin enables the managed metadata workflow for this repo (ci_workflows.capabilities is currently false); docs/docs-info.md records the procedure.
  • Not fixed here: the license resource type still cannot sync under GitHub App authentication, because GitHub does not offer the enterprise_administration permission to Apps. Pre-existing and unrelated to this change, but it means that type has to stay disabled when running the App path with enterprises configured.

Useful links:

@linear-code

linear-code Bot commented Sep 22, 2026

Copy link
Copy Markdown

CXH-2123

Comment thread pkg/connector/enterprise_role.go
Comment thread pkg/connector/connector.go Outdated
Comment thread pkg/customclient/client.go
Comment thread pkg/connector/enterprise_role.go
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit 8943329e11c5

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 0 | Suggestions: 3 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: full
View review run

Review Summary

When --enable-enterprise-owner-provisioning is set under GitHub App auth, the connector now builds per-enterprise GraphQL clients lazily. With those clients it syncs the built-in Owner role (owners, then pending invitations resolved through one aliased batch, as two phases of one pagination.Bag token) and registers a separate enterpriseRoleProvisioner that adds Grant and Revoke. Grant invites and refuses in-place promotion; Revoke demotes to UNAFFILIATED and cancels the invitation. Both re-read OwnerState to confirm the change landed. PAT and flag-off paths register the read-only syncer plus license as before. I scanned the full diff for security and correctness and re-checked all 19 prior findings against the current code. I applied the repo criteria: provisioning entity sources (principal → login, entitlement resource → enterprise, no ParentResourceId use), idempotency annotations, gRPC codes on provisioning errors (E2/E3), log levels (A), and the breaking-change gate (BP1/BP5). The new behavior is opt-in and off by default, so it is not an ungated breaking change. go.mod/go.sum are unchanged.

Security Issues

None found. The aliased invitation query passes logins only as GraphQL variables, and the customclient path segments are escaped.

Correctness Issues

None found.

Suggestions

  • Prior — still present (confidence: medium) pkg/connector/enterprise_role.go:438-445: Organization.enterpriseOwners and Enterprise.members cover the whole enterprise account, but user only syncs members of the configured org. An owner from another org in the enterprise gets a grant whose principal was never synced. The author chose to document this in docs/docs-info.md:272 rather than filter, so it stays open as a known limitation.
  • Prior — still present (confidence: medium) pkg/config/config.go:461-464: EnterprisesField and enable-enterprise-owner-provisioning now appear in this connector's GitHub App form, but the App setup steps in docs/connector.mdx (~lines 292-317) don't mention either one (D4). The author declined because enterprise setup is documented in the GitHub Enterprise connector. That argument is weaker now that both fields show up in this connector's own form.
  • Prior — still present (confidence: low) pkg/connector/connector.go:314: when consumed-licenses fails under App auth (a guaranteed later license sync failure with the flag off), the connector logs it at Debug, while repo criteria L1 calls for Warn. The Debug level is inherited from main, and the author declined because of a team-level rule against Warn.

Resolved prior findings

  • Provision capability advertised under PAT (2 threads): fixed. The capability now comes from the separate enterpriseRoleProvisioner type (pkg/connector/enterprise_role.go:284-301), which ResourceSyncers registers only when newEnterpriseRoleClients != nil (pkg/connector/connector.go:501-510).
  • appTokenRefresher held the per-RPC ctx: fixed. It now captures connectorCtx (pkg/connector/connector.go:583), which the refresher and newGitHubAppHTTPClient use.
  • Nil BaseHttpClient from uhttp.NewBaseHttpClient: fixed. Both construction sites nil-check it (pkg/connector/connector.go:661-664, pkg/connector/enterprise_administrator_client.go:106-109).
  • OwnerState fell through its page bound and reported "not an owner": fixed. It now returns codes.Internal when it hits the bound (pkg/connector/enterprise_administrator_client.go:620-624).
  • clients() error aborting the whole sync contradicted the code comment: fixed. Failing the sync is now the documented intent, and the comments at pkg/connector/enterprise_role.go:54-57/65-74 and pkg/connector/connector.go:573-578 state it and give the C1 deletion reason.
  • Unbounded installation walk; 404 skip logged at Debug; hard startup failure with two enterprises; memoized empty or permanent results; isPermanentError missing transient errors (outdated threads): obsolete.
    • listEnterpriseInstallations, isPermanentError and enterpriseClientsSet no longer exist.
    • Discovery is now one direct GetEnterpriseInstallation call per enterprise. A 404 becomes an explicit FailedPrecondition, and the multi-enterprise check is lazy and opt-in only (pkg/connector/connector.go:652-677).
    • clients() memoizes only success (pkg/connector/enterprise_role.go:85-95).
  • Stale "documented fallback" comment: fixed at pkg/connector/graphql_transport.go:3487-3490 of the diff; the comment now says Grant refuses a rejected invitation.
  • customclient comment claimed PathEscape blocks ..: fixed. The comment now says escaping covers slashes only (pkg/customclient/client.go endpoint doc).
  • GetEnterpriseInstallation error path did not close the response body: fixed. defer res.Body.Close() now runs before logBody.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `pkg/connector/enterprise_role.go`:
- Around line 438-445 (ownerGrants) and 485-495 (pendingInvitationGrants): owners and invitation candidates span the whole enterprise, while the user resource type only syncs members of the configured org, so some grants point at principals the sync never created. Either skip owners whose database ID isn't among the synced org members, or keep the documented limitation in docs/docs-info.md. Don't change behavior silently.

In `pkg/config/config.go`:
- Around line 461-464: the GitHub App field group now includes EnterprisesField and enable-enterprise-owner-provisioning. Add both optional fields to the GitHub App configuration steps in docs/connector.mdx (~lines 292-317), or point to the GitHub Enterprise integration page for them, so the docs match the fields shown in this connector's form.

In `pkg/connector/connector.go`:
- Around line 314: consumed-licenses failing under App auth means the license resource type will fail the sync. Consider logging it at Warn per repo criteria L1, or leave it at Debug if the team logging policy overrides the repo criteria.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found.

mateoHernandez123 and others added 2 commits September 22, 2026 15:36
@mateoHernandez123
mateoHernandez123 force-pushed the mateoHernandez123/github-enterprise-owner-provisioning branch from 8738a07 to 04872b2 Compare September 22, 2026 18:37
Comment thread pkg/connector/connector.go
Comment thread pkg/connector/enterprise_administrator_client.go
Comment thread pkg/customclient/client.go

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found — see review comments.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit 65fe24110d9b

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 4 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 6fc083c
View review run

Review Summary

The new commit (65fe241) only changes docs and comments. It rewrites the docs/docs-info.md sections that still described the removed --enable-enterprise-owner-provisioning flag, so they now say plainly that App deployments already passing --enterprises change behaviour on upgrade. It also updates the license-registration comment in connector.go:172-175 and renames TestEnterpriseRoleListIsInertWithoutTheOptIn → TestEnterpriseRoleListIsInertOnTheTokenPath. No runtime code changed.

I scanned the full PR diff (22 files) for security and correctness issues and audited every prior finding against the current head. The incremental artifact was complete (partial: false). The repo-local criteria were applied: BP1/BP2/BP5 (breaking-change gate) to the ungated App-path change, D1-D4 to the docs, and L1-L7 and T1-T5 to the unchanged logging and transport code. They raised nothing new beyond the items below.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium-high, blocking-correctness under BP1/BP5) pkg/connector/connector.go:500 (open thread). newEnterpriseRoleClientsFn is wired for every App deployment, and no opt-in gates it. The new docs at docs/docs-info.md:255-257 now admit this. Hosted-tenant App deployments with --enterprises set, where license is excluded by OptInRequired, "go from green to red" on upgrade if the app is not installed on the enterprise account or more than one enterprise is configured. Documenting the break does not gate it. The PR description also still says the feature is "opt-in: --enable-enterprise-owner-provisioning, off by default" and that "upgrading cannot break an existing deployment". That flag no longer exists, so the description contradicts the code (BP2). Fix: restore an opt-in gate, or update the PR description to state the break and its migration path and get explicit sign-off that it ships ungated.

Suggestions

  • New (confidence: medium) docs/docs-info.md:247: this paragraph still says that "exposing the flag" to GHES needs a deliberate decision "rather than inheriting it from this package by default". With the flag removed, baton-github-enterprise on GHES (App auth + --enterprises) now inherits the capability by default, and its sync fails at the invitation query. The wrapper needs its own gate, or this package should restrict the App path to Enterprise Cloud.
  • New (confidence: high, minor) pkg/connector/enterprise_installations_test.go:168-169: two subtest names, "pat or opt-in off" and "app auth opted in", still describe the removed flag. Rename them to "pat" and "app auth".
  • Prior — still present (confidence: medium) pkg/connector/enterprise_role.go:463: Organization.enterpriseOwners returns owners across the whole enterprise account, so grants can reference principals the org-scoped user sync never created. This is documented as a limitation.
  • Prior — still present (confidence: medium) The deleted .github/workflows/capabilities_and_config.yaml was the only job that regenerated baton_capabilities.json and config_schema.json. Until baton-admin enables its workflow, regeneration is manual (docs/docs-info.md), so generated artifacts can drift.

Resolved prior findings

  • docs/docs-info.md stale opt-in section (outdated thread): fixed in this commit. The heading is now "There is no separate switch for this capability" (docs-info.md:251). The flag paragraphs are gone, and the "fails at startup" claim was corrected to a lazy first-sync failure (docs-info.md:255). The stale comment at connector.go:172-175 and the test name/comment at enterprise_installations_test.go:99-114 were also updated.
  • All other prior threads keep the outcomes recorded in the last review, which I rechecked against the current code. Fixed: connector.mdx staleness (docs/connector.mdx:24), the provision capability advertised under PAT (connector.go:162), the per-RPC ctx in the token refresher (connectorCtx, connector.go:493), the nil BaseHttpClient guard, the OwnerState page bound erroring, the fail-closed sync comment, the PathEscape rationale (customclient/client.go:52-54) and the unclosed error body (customclient/client.go:95-96). Obsolete, replaced by a single lazy GetEnterpriseInstallation build with 404→FailedPrecondition: the license-probe log level, the unbounded installation walk, the Debug-level 404 skip, both memoization threads, the helpers.go gRPC-status gap, the startup multi-enterprise rejection and the graphql_transport.go fallback comment.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 480-510: The enterprise owner client provider is wired unconditionally for every GitHub App deployment with --enterprises, so existing hosted App deployments whose sync was green (license excluded by OptInRequired) now fail with FailedPrecondition when the app is not installed on the enterprise account or several enterprises are configured. Either reintroduce an opt-in config flag (default off) that gates setting newEnterpriseRoleClients, or keep it ungated but update the PR description: remove the claims about `--enable-enterprise-owner-provisioning` and "upgrading cannot break an existing deployment", state the break and the remedy, and get explicit maintainer sign-off.

## Suggestions

In `docs/docs-info.md`:
- Around line 247: Reword the GHES paragraph. There is no flag anymore, so baton-github-enterprise inherits the capability by default under App auth with --enterprises and its sync will fail on GHES. Say the wrapper must gate or disable it, or restrict the App enterprise path to Enterprise Cloud in this package.

In `pkg/connector/enterprise_installations_test.go`:
- Around line 168-169: Rename the subtests "pat or opt-in off" and "app auth opted in" to "pat" and "app auth", since the opt-in flag was removed.

In `pkg/connector/enterprise_role.go`:
- Around line 463: Organization.enterpriseOwners includes enterprise owners who are not members of the configured org, so emitted grants can reference users the org sync never created. Filter to synced principals or keep the documented limitation.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- baton_capabilities.json and config_schema.json no longer regenerate automatically. Enable the baton-admin managed workflow, or keep a CI check that fails on drift.

Comment thread docs/docs-info.md Outdated
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit 034425db12de

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 4 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 6fc083c
View review run

Review Summary

The new commit (65fe241) only changes docs and comments. It rewrites the docs/docs-info.md sections that still described the removed --enable-enterprise-owner-provisioning flag, so they now say plainly that App deployments already passing --enterprises change behaviour on upgrade. It also updates the license-registration comment in connector.go:172-175 and renames TestEnterpriseRoleListIsInertWithoutTheOptIn → TestEnterpriseRoleListIsInertOnTheTokenPath. No runtime code changed.

I scanned the full PR diff (22 files) for security and correctness issues and audited every prior finding against the current head. The incremental artifact was complete (partial: false). The repo-local criteria were applied: BP1/BP2/BP5 (breaking-change gate) to the ungated App-path change, D1-D4 to the docs, and L1-L7 and T1-T5 to the unchanged logging and transport code. They raised nothing new beyond the items below.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium-high, blocking-correctness under BP1/BP5) pkg/connector/connector.go:500 (open thread). newEnterpriseRoleClientsFn is wired for every App deployment, and no opt-in gates it. The new docs at docs/docs-info.md:255-257 now admit this. Hosted-tenant App deployments with --enterprises set, where license is excluded by OptInRequired, "go from green to red" on upgrade if the app is not installed on the enterprise account or more than one enterprise is configured. Documenting the break does not gate it. The PR description also still says the feature is "opt-in: --enable-enterprise-owner-provisioning, off by default" and that "upgrading cannot break an existing deployment". That flag no longer exists, so the description contradicts the code (BP2). Fix: restore an opt-in gate, or update the PR description to state the break and its migration path and get explicit sign-off that it ships ungated.

Suggestions

  • New (confidence: medium) docs/docs-info.md:247: this paragraph still says that "exposing the flag" to GHES needs a deliberate decision "rather than inheriting it from this package by default". With the flag removed, baton-github-enterprise on GHES (App auth + --enterprises) now inherits the capability by default, and its sync fails at the invitation query. The wrapper needs its own gate, or this package should restrict the App path to Enterprise Cloud.
  • New (confidence: high, minor) pkg/connector/enterprise_installations_test.go:168-169: two subtest names, "pat or opt-in off" and "app auth opted in", still describe the removed flag. Rename them to "pat" and "app auth".
  • Prior — still present (confidence: medium) pkg/connector/enterprise_role.go:463: Organization.enterpriseOwners returns owners across the whole enterprise account, so grants can reference principals the org-scoped user sync never created. This is documented as a limitation.
  • Prior — still present (confidence: medium) The deleted .github/workflows/capabilities_and_config.yaml was the only job that regenerated baton_capabilities.json and config_schema.json. Until baton-admin enables its workflow, regeneration is manual (docs/docs-info.md), so generated artifacts can drift.

Resolved prior findings

  • docs/docs-info.md stale opt-in section (outdated thread): fixed in this commit. The heading is now "There is no separate switch for this capability" (docs-info.md:251). The flag paragraphs are gone, and the "fails at startup" claim was corrected to a lazy first-sync failure (docs-info.md:255). The stale comment at connector.go:172-175 and the test name/comment at enterprise_installations_test.go:99-114 were also updated.
  • All other prior threads keep the outcomes recorded in the last review, which I rechecked against the current code. Fixed: connector.mdx staleness (docs/connector.mdx:24), the provision capability advertised under PAT (connector.go:162), the per-RPC ctx in the token refresher (connectorCtx, connector.go:493), the nil BaseHttpClient guard, the OwnerState page bound erroring, the fail-closed sync comment, the PathEscape rationale (customclient/client.go:52-54) and the unclosed error body (customclient/client.go:95-96). Obsolete, replaced by a single lazy GetEnterpriseInstallation build with 404→FailedPrecondition: the license-probe log level, the unbounded installation walk, the Debug-level 404 skip, both memoization threads, the helpers.go gRPC-status gap, the startup multi-enterprise rejection and the graphql_transport.go fallback comment.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 480-510: The enterprise owner client provider is wired unconditionally for every GitHub App deployment with --enterprises, so existing hosted App deployments whose sync was green (license excluded by OptInRequired) now fail with FailedPrecondition when the app is not installed on the enterprise account or several enterprises are configured. Either reintroduce an opt-in config flag (default off) that gates setting newEnterpriseRoleClients, or keep it ungated but update the PR description: remove the claims about `--enable-enterprise-owner-provisioning` and "upgrading cannot break an existing deployment", state the break and the remedy, and get explicit maintainer sign-off.

## Suggestions

In `docs/docs-info.md`:
- Around line 247: Reword the GHES paragraph. There is no flag anymore, so baton-github-enterprise inherits the capability by default under App auth with --enterprises and its sync will fail on GHES. Say the wrapper must gate or disable it, or restrict the App enterprise path to Enterprise Cloud in this package.

In `pkg/connector/enterprise_installations_test.go`:
- Around line 168-169: Rename the subtests "pat or opt-in off" and "app auth opted in" to "pat" and "app auth", since the opt-in flag was removed.

In `pkg/connector/enterprise_role.go`:
- Around line 463: Organization.enterpriseOwners includes enterprise owners who are not members of the configured org, so emitted grants can reference users the org sync never created. Filter to synced principals or keep the documented limitation.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- baton_capabilities.json and config_schema.json no longer regenerate automatically. Enable the baton-admin managed workflow, or keep a CI check that fails on drift.

Reviewed commit: 65fe24110d9b

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found — see the full review report

…edential decides

The GHES paragraph still framed the question as whether to expose a
flag there. With the app path chosen by the credential, a GHES
deployment under app authentication with --enterprises inherits the
Enterprise Cloud path by default and its sync fails at the invitation
query. That is not a regression, since consumed-licenses already
answered 404 there for either credential, but the decision now belongs
to the wrapper, which is the only layer that knows which kind of
instance it is pointed at.

Also renames the two subtests that still described the flag.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit 034425db12de

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 65fe241
View review run

Review Summary

The new commit changes no code. It rewrites the GHES paragraph in docs/docs-info.md:247 to say that a GHES app deployment with --enterprises now uses the Enterprise Cloud path by default and that the baton-github-enterprise wrapper must decide whether to allow it. It also renames two subtests in enterprise_installations_test.go:168-169 to "token" and "app". I scanned the full PR diff (22 files) for security and correctness and found no new issues. The incremental artifact is complete: no dropped paths and no truncation. I applied the repo-local criteria. BP1/BP2/BP5 (breaking-change gating and PR description) apply to the prior blocker. R10/I1 and the docs/generated-artifact checks apply to the suggestions. The log-level, span, JSON and provisioning-depth sections had nothing new to check, because the incremental change is docs and test names only.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium-high, blocking-correctness under BP1/BP2/BP5): pkg/connector/connector.go:500-503. newEnterpriseRoleClientsFn is still set for every GitHub App deployment, and no opt-in flag gates it. docs/docs-info.md:255-257 now openly says that hosted-tenant App deployments with --enterprises set (where license is excluded via OptInRequired) "go from green to red" on upgrade. Documenting that break does not gate it. The PR description also still says the feature is "opt-in: --enable-enterprise-owner-provisioning, off by default" and that "upgrading cannot break an existing deployment". That flag no longer exists anywhere in the code, so the description contradicts the implementation. The open thread on this line still applies, so no new inline comment was posted.

Suggestions

  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:463. Organization.enterpriseOwners returns owners from the whole enterprise account, so grants can point to users the org-scoped user sync never emitted. This is documented in docs/docs-info.md:291, so it stays a suggestion.
  • Prior — still present (confidence: medium): this PR deletes .github/workflows/capabilities_and_config.yaml, the only job that regenerated baton_capabilities.json and config_schema.json. Until baton-admin turns on its managed workflow, those files have to be regenerated by hand, following the steps in docs/docs-info.md, so they can drift.

Resolved prior findings

  • Fixed: the GHES paragraph in docs/docs-info.md that referred to a removed flag. Line 247 now describes the credential-based default and says the wrapper owns the GHES decision.
  • Fixed: the stale subtest names in pkg/connector/enterprise_installations_test.go:168-169, now "token" and "app".
  • Unchanged, rechecked against current code: the other resolved threads keep their earlier outcomes. Fixed: connector.mdx staleness, the provision capability under PAT, the per-RPC ctx in the token refresher (connectorCtx, connector.go:493), the nil BaseHttpClient guard, the OwnerState page bound, the fail-closed sync comment, the PathEscape rationale and the unclosed error body in customclient/client.go. Obsolete, because the lazy GetEnterpriseInstallation build with 404→FailedPrecondition replaced that code: the license-probe log level, the unbounded installation walk, the Debug-level 404 skip, both memoization threads, the helpers.go gRPC-status gap, the startup rejection of multiple enterprises, and the graphql_transport.go fallback comment.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 480-510: The enterprise owner client provider (newEnterpriseRoleClientsFn) is wired unconditionally for every GitHub App deployment with --enterprises. Existing hosted App deployments whose sync was green (license excluded by OptInRequired) will now fail with FailedPrecondition if the app is not installed on the enterprise account or several enterprises are configured. Either add back an opt-in config flag (default off) that gates setting newEnterpriseRoleClients, or keep it ungated and update the PR description: remove the claims about `--enable-enterprise-owner-provisioning` and "upgrading cannot break an existing deployment", state the break and its remedy, and get explicit maintainer sign-off.

## Suggestions

In `pkg/connector/enterprise_role.go`:
- Around line 463: Organization.enterpriseOwners returns owners across the whole enterprise account, so grants may point to principals the org-scoped user sync never emitted. Consider filtering owners to synced org members, or keep the documented limitation in docs/docs-info.md.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- The deleted workflow was the only automated regeneration of baton_capabilities.json and config_schema.json. Make sure baton-admin enables the managed metadata workflow for this repo (ci_workflows.capabilities), or regenerate both files by hand whenever config or capabilities change.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit df5c69fd760e

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 65fe241
View review run

Review Summary

The new commit changes no code. It rewrites the GHES paragraph in docs/docs-info.md:247 to say that a GHES app deployment with --enterprises now uses the Enterprise Cloud path by default and that the baton-github-enterprise wrapper must decide whether to allow it. It also renames two subtests in enterprise_installations_test.go:168-169 to "token" and "app". I scanned the full PR diff (22 files) for security and correctness and found no new issues. The incremental artifact is complete: no dropped paths and no truncation. I applied the repo-local criteria. BP1/BP2/BP5 (breaking-change gating and PR description) apply to the prior blocker. R10/I1 and the docs/generated-artifact checks apply to the suggestions. The log-level, span, JSON and provisioning-depth sections had nothing new to check, because the incremental change is docs and test names only.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium-high, blocking-correctness under BP1/BP2/BP5): pkg/connector/connector.go:500-503. newEnterpriseRoleClientsFn is still set for every GitHub App deployment, and no opt-in flag gates it. docs/docs-info.md:255-257 now openly says that hosted-tenant App deployments with --enterprises set (where license is excluded via OptInRequired) "go from green to red" on upgrade. Documenting that break does not gate it. The PR description also still says the feature is "opt-in: --enable-enterprise-owner-provisioning, off by default" and that "upgrading cannot break an existing deployment". That flag no longer exists anywhere in the code, so the description contradicts the implementation. The open thread on this line still applies, so no new inline comment was posted.

Suggestions

  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:463. Organization.enterpriseOwners returns owners from the whole enterprise account, so grants can point to users the org-scoped user sync never emitted. This is documented in docs/docs-info.md:291, so it stays a suggestion.
  • Prior — still present (confidence: medium): this PR deletes .github/workflows/capabilities_and_config.yaml, the only job that regenerated baton_capabilities.json and config_schema.json. Until baton-admin turns on its managed workflow, those files have to be regenerated by hand, following the steps in docs/docs-info.md, so they can drift.

Resolved prior findings

  • Fixed: the GHES paragraph in docs/docs-info.md that referred to a removed flag. Line 247 now describes the credential-based default and says the wrapper owns the GHES decision.
  • Fixed: the stale subtest names in pkg/connector/enterprise_installations_test.go:168-169, now "token" and "app".
  • Unchanged, rechecked against current code: the other resolved threads keep their earlier outcomes. Fixed: connector.mdx staleness, the provision capability under PAT, the per-RPC ctx in the token refresher (connectorCtx, connector.go:493), the nil BaseHttpClient guard, the OwnerState page bound, the fail-closed sync comment, the PathEscape rationale and the unclosed error body in customclient/client.go. Obsolete, because the lazy GetEnterpriseInstallation build with 404→FailedPrecondition replaced that code: the license-probe log level, the unbounded installation walk, the Debug-level 404 skip, both memoization threads, the helpers.go gRPC-status gap, the startup rejection of multiple enterprises, and the graphql_transport.go fallback comment.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 480-510: The enterprise owner client provider (newEnterpriseRoleClientsFn) is wired unconditionally for every GitHub App deployment with --enterprises. Existing hosted App deployments whose sync was green (license excluded by OptInRequired) will now fail with FailedPrecondition if the app is not installed on the enterprise account or several enterprises are configured. Either add back an opt-in config flag (default off) that gates setting newEnterpriseRoleClients, or keep it ungated and update the PR description: remove the claims about `--enable-enterprise-owner-provisioning` and "upgrading cannot break an existing deployment", state the break and its remedy, and get explicit maintainer sign-off.

## Suggestions

In `pkg/connector/enterprise_role.go`:
- Around line 463: Organization.enterpriseOwners returns owners across the whole enterprise account, so grants may point to principals the org-scoped user sync never emitted. Consider filtering owners to synced org members, or keep the documented limitation in docs/docs-info.md.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- The deleted workflow was the only automated regeneration of baton_capabilities.json and config_schema.json. Make sure baton-admin enables the managed metadata workflow for this repo (ci_workflows.capabilities), or regenerate both files by hand whenever config or capabilities change.

Reviewed commit: 034425db12de

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found — see the full review report

@mateoHernandez123
mateoHernandez123 dismissed stale reviews from github-actions[bot], github-actions[bot], and github-actions[bot] October 1, 2026 19:01

Declining this one with the reasoning on the inline thread. The finding is accurate — an app deployment that already passes --enterprises and is not installed on the enterprise account goes from green to red on the first sync — but neither remedy it proposes is the right trade.

Degrading instead of failing would have enterprise_role report empty on a completed sync, which is what makes C1 delete the role and every grant on it, and the connector cannot tell a deployment that never had an enterprise installation from one whose installation was just removed. Restoring the opt-in protects a configuration that produces no enterprise data at all, since the consumed-licenses fallback answers 403 under app auth.

The third option is the one taken: the break is now stated in the PR description and in docs-info.md, and both failure paths return FailedPrecondition naming the fix. The inline thread stays open so this can be argued.

@luisina-santos luisina-santos left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't review much the main connector files since it's really hard considering the behavior should be reconsidered after my initial requests - please address my comments and I'll run a second review round

Comment thread docs/connector.mdx Outdated
Comment thread pkg/config/config.go Outdated
Comment thread pkg/config/config.go Outdated
Comment thread pkg/connector/connector.go Outdated
Comment thread pkg/connector/connector.go Outdated
…ig and docs

Enterprises is defined for baton-github-enterprise to expose, and that
is the connector whose customers have an enterprise account. This one
had started advertising it: the field was added to both auth groups, and
docs/connector.mdx grew a capabilities row and a full setup path for a
role its own audience cannot use.

Both groups are now byte-identical to main again, and connector.mdx is
restored to its base state -- every line this PR had added there was
about enterprise. The field stays in the flat field list, so the command
line and baton-github-enterprise, which declares its own copy and maps
it through the shared Github struct, are unaffected.

newWithGithubPAT no longer folds repeated slugs. It never did on main;
the fold belongs to the app path, which serves one enterprise and would
otherwise reject a count the operator never chose, and the test now
covers it there.

The enterprise role is also registered with Grant and Revoke on either
credential again, rather than swapping in a read-only type for tokens.
A token cannot reach the enterprise administrator API, so a request made
with one fails naming the credential it needs -- which is more useful
than hiding a role from C1 that an app in the same tenant can grant.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit df5c69fd760e

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 4 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 034425d
View review run

Review Summary

The new commit (df5c69f) makes four changes:

  • It removes enterprises from both config field groups, so config.go and config_schema.json match base again.
  • It removes every enterprise section from docs/connector.mdx, which now matches base.
  • ResourceSyncers now always registers the provisioning-capable enterprise_role syncer, including on PAT, where Grant/Revoke fail with FailedPrecondition naming the credential.
  • The PAT constructor no longer de-duplicates enterprise slugs, which is also base behavior.

I scanned the full PR diff for security and correctness and audited all 22 prior findings against the current code. The trusted repo-local criteria applied as follows: BP1/BP2/BP5 (breaking-change gate), L1 (log levels), and the provisioning rules PR1/PR2 (I re-checked that Grant/Revoke take entity data from the principal and entitlement). The incremental artifact was complete, with no dropped paths.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium, blocking-correctness under BP1/BP5): pkg/connector/connector.go:480-503. Every GitHub App deployment with --enterprises still gets newEnterpriseRoleClientsFn, and no opt-in flag gates it.
    • Such a deployment now fails its sync with FailedPrecondition if the app is not installed on the enterprise account, or if more than one enterprise is configured.
    • The PR description and docs-info.md:255-259 now state this break honestly, which satisfies BP2.
    • With enterprises removed from this connector's field groups, hosted baton-github tenants cannot reach this path. The impact is now limited to CLI users and to baton-github-enterprise when it bumps this package.
    • BP1/BP5 still classify an ungated breaking change as blocking. To clear it, either gate it behind a config flag or have a maintainer explicitly accept the break on this PR. The existing thread covers the location.

Suggestions

  • New (confidence: high): pkg/connector/enterprise_role.go:279-289. The enterpriseRoleProvisioner doc comments still say the type is registered only where the clients can be built, so C1 does not offer the role on PAT. This commit made the opposite true.
  • Prior — still present (confidence: medium): pkg/connector/connector.go:157-161 / enterprise_role.go:686. PAT deployments now advertise CAPABILITY_PROVISION for enterprise_role again. This time it is deliberate and documented (docs-info.md:192,253; test TestResourceSyncersRegisterTheEnterpriseRoleWithProvisioning), but every request made under a PAT fails. That path is now CLI/wrapper-only.
  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:463. Organization.enterpriseOwners covers the whole enterprise account, so grants can reference users that the org-scoped user sync never emitted. This is documented in docs-info.md.
  • Prior — still present (confidence: medium): this PR deletes .github/workflows/capabilities_and_config.yaml. Until baton-admin enables ci_workflows.capabilities, baton_capabilities.json and config_schema.json have to be regenerated by hand (procedure in docs-info.md), so they can drift.

Resolved prior findings

  • Obsolete — connector.mdx staleness (docs/docs-info.md:1, pkg/config/config.go): connector.mdx and the config field groups match base again, and the enterprise surface is intentionally kept out of this connector's hosted config. So the customer doc not mentioning it is consistent, not stale.
  • Fixed, unchanged since the last review:
    • the per-RPC ctx in the token refresher (connectorCtx, connector.go:493)
    • the nil BaseHttpClient guard
    • the OwnerState page bound (enterprise_administrator_client.go)
    • the fail-closed sync behavior/comment (enterprise_role.go:177)
    • the PathEscape rationale (customclient/client.go:57)
    • the unclosed error body (customclient/client.go:100)
    • the stale flag wording in docs-info.md
  • Obsolete — replaced by the lazy clients() build plus failClosedOnUnreadableEnterprise:
    • the license-probe Debug log level (connector.go:298, now pre-existing PAT/App probe behavior)
    • the unbounded installation walk
    • the Debug-level 404 skip
    • both memoization threads
    • the helpers.go gRPC-status gap
    • the startup rejection of multiple enterprises
    • the graphql_transport.go fallback comment
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 480-503: newEnterpriseRoleClientsFn is wired for every GitHub App deployment with --enterprises and no flag gates it. Such deployments now fail sync with FailedPrecondition when the app is not installed on the enterprise account. Either add an opt-in config flag (default off) that must be set before newEnterpriseRoleClients is assigned, or get explicit maintainer acceptance of the ungated break on the PR.

## Suggestions

In `pkg/connector/enterprise_role.go`:
- Around line 279-289: Rewrite the enterpriseRoleProvisioner and EnterpriseRoleProvisioningBuilder doc comments. They claim the type is registered only when enterprise clients can be built, so PAT deployments are not offered the role. ResourceSyncers now registers it on both credentials, and PAT requests fail with FailedPrecondition.
- Around line 463: enterpriseOwners spans the whole enterprise account, so grants may reference users the org-scoped user sync did not emit. Consider filtering to synced principals, or keep the documented limitation.

In `pkg/connector/connector.go`:
- Around line 157-161: PAT deployments advertise CAPABILITY_PROVISION for enterprise_role even though every request fails. Confirm this trade-off is intended, or register the read-only EnterpriseRoleBuilder when newEnterpriseRoleClients is nil.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- The only regeneration job for baton_capabilities.json and config_schema.json was removed. Enable ci_workflows.capabilities in baton-admin, or keep a regeneration check, so the files do not drift.

Comment thread pkg/connector/enterprise_role.go Outdated
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit 5484b127b713

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 4 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 034425d
View review run

Review Summary

The new commit (df5c69f) makes four changes:

  • It removes enterprises from both config field groups, so config.go and config_schema.json match base again.
  • It removes every enterprise section from docs/connector.mdx, which now matches base.
  • ResourceSyncers now always registers the provisioning-capable enterprise_role syncer, including on PAT, where Grant/Revoke fail with FailedPrecondition naming the credential.
  • The PAT constructor no longer de-duplicates enterprise slugs, which is also base behavior.

I scanned the full PR diff for security and correctness and audited all 22 prior findings against the current code. The trusted repo-local criteria applied as follows: BP1/BP2/BP5 (breaking-change gate), L1 (log levels), and the provisioning rules PR1/PR2 (I re-checked that Grant/Revoke take entity data from the principal and entitlement). The incremental artifact was complete, with no dropped paths.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium, blocking-correctness under BP1/BP5): pkg/connector/connector.go:480-503. Every GitHub App deployment with --enterprises still gets newEnterpriseRoleClientsFn, and no opt-in flag gates it.
    • Such a deployment now fails its sync with FailedPrecondition if the app is not installed on the enterprise account, or if more than one enterprise is configured.
    • The PR description and docs-info.md:255-259 now state this break honestly, which satisfies BP2.
    • With enterprises removed from this connector's field groups, hosted baton-github tenants cannot reach this path. The impact is now limited to CLI users and to baton-github-enterprise when it bumps this package.
    • BP1/BP5 still classify an ungated breaking change as blocking. To clear it, either gate it behind a config flag or have a maintainer explicitly accept the break on this PR. The existing thread covers the location.

Suggestions

  • New (confidence: high): pkg/connector/enterprise_role.go:279-289. The enterpriseRoleProvisioner doc comments still say the type is registered only where the clients can be built, so C1 does not offer the role on PAT. This commit made the opposite true.
  • Prior — still present (confidence: medium): pkg/connector/connector.go:157-161 / enterprise_role.go:686. PAT deployments now advertise CAPABILITY_PROVISION for enterprise_role again. This time it is deliberate and documented (docs-info.md:192,253; test TestResourceSyncersRegisterTheEnterpriseRoleWithProvisioning), but every request made under a PAT fails. That path is now CLI/wrapper-only.
  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:463. Organization.enterpriseOwners covers the whole enterprise account, so grants can reference users that the org-scoped user sync never emitted. This is documented in docs-info.md.
  • Prior — still present (confidence: medium): this PR deletes .github/workflows/capabilities_and_config.yaml. Until baton-admin enables ci_workflows.capabilities, baton_capabilities.json and config_schema.json have to be regenerated by hand (procedure in docs-info.md), so they can drift.

Resolved prior findings

  • Obsolete — connector.mdx staleness (docs/docs-info.md:1, pkg/config/config.go): connector.mdx and the config field groups match base again, and the enterprise surface is intentionally kept out of this connector's hosted config. So the customer doc not mentioning it is consistent, not stale.
  • Fixed, unchanged since the last review:
    • the per-RPC ctx in the token refresher (connectorCtx, connector.go:493)
    • the nil BaseHttpClient guard
    • the OwnerState page bound (enterprise_administrator_client.go)
    • the fail-closed sync behavior/comment (enterprise_role.go:177)
    • the PathEscape rationale (customclient/client.go:57)
    • the unclosed error body (customclient/client.go:100)
    • the stale flag wording in docs-info.md
  • Obsolete — replaced by the lazy clients() build plus failClosedOnUnreadableEnterprise:
    • the license-probe Debug log level (connector.go:298, now pre-existing PAT/App probe behavior)
    • the unbounded installation walk
    • the Debug-level 404 skip
    • both memoization threads
    • the helpers.go gRPC-status gap
    • the startup rejection of multiple enterprises
    • the graphql_transport.go fallback comment
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 480-503: newEnterpriseRoleClientsFn is wired for every GitHub App deployment with --enterprises and no flag gates it. Such deployments now fail sync with FailedPrecondition when the app is not installed on the enterprise account. Either add an opt-in config flag (default off) that must be set before newEnterpriseRoleClients is assigned, or get explicit maintainer acceptance of the ungated break on the PR.

## Suggestions

In `pkg/connector/enterprise_role.go`:
- Around line 279-289: Rewrite the enterpriseRoleProvisioner and EnterpriseRoleProvisioningBuilder doc comments. They claim the type is registered only when enterprise clients can be built, so PAT deployments are not offered the role. ResourceSyncers now registers it on both credentials, and PAT requests fail with FailedPrecondition.
- Around line 463: enterpriseOwners spans the whole enterprise account, so grants may reference users the org-scoped user sync did not emit. Consider filtering to synced principals, or keep the documented limitation.

In `pkg/connector/connector.go`:
- Around line 157-161: PAT deployments advertise CAPABILITY_PROVISION for enterprise_role even though every request fails. Confirm this trade-off is intended, or register the read-only EnterpriseRoleBuilder when newEnterpriseRoleClients is nil.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- The only regeneration job for baton_capabilities.json and config_schema.json was removed. Enable ci_workflows.capabilities in baton-admin, or keep a regeneration check, so the files do not drift.

Reviewed commit: df5c69fd760e

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found — see the full review report

…er credential

Both comments still said the type is registered only where the
enterprise clients can be built, which stopped being true when the
split was removed.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit 5484b127b713

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 3 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since df5c69f
View review run

Review Summary

The new commit changes only comments. It rewrites the enterpriseRoleProvisioner / EnterpriseRoleProvisioningBuilder doc comments in pkg/connector/enterprise_role.go:277-291, which now say the provisioner is registered on either credential and that a nil provider means the token path. That matches ResourceSyncers (connector.go:157-168), which always registers the provisioner and adds license only on the token path. I scanned the full PR diff (21 files) for security and correctness and found nothing new; the incremental diff was not partial. I re-checked all 22 prior threads against the current code.

The trusted repo-local criteria were applied. The rules that matter here:

  • BP1/BP5: the breaking-change gate, which is why the one blocker stands.
  • L1–L6: log levels.
  • E2/PR2: gRPC codes and entity source in Grant/Revoke.
  • T1–T5: span safety. They don't apply, because no manual spans were added.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium, blocking-correctness under BP1/BP5): pkg/connector/connector.go:489-495, :503.
    • Every GitHub App deployment that already passes --enterprises now gets newEnterpriseRoleClientsFn, and no opt-in flag gates it.
    • Such a deployment now fails its sync with FailedPrecondition if the app is not installed on the enterprise account (:574-580) or if it names more than one enterprise (:556-561).
    • The PR body and docs-info.md state this break, which satisfies BP2. Because enterprises is no longer in this connector's hosted field groups, the impact falls on CLI users and on baton-github-enterprise when it bumps this package.
    • The open thread at connector.go:489 still describes this accurately, so I posted no duplicate inline comment.

Suggestions

  • Prior — still present (confidence: medium): pkg/connector/connector.go:157-161. PAT deployments advertise CAPABILITY_PROVISION for enterprise_role, but every Grant/Revoke under a PAT fails with FailedPrecondition. This is deliberate and documented (docs-info.md; test TestResourceSyncersRegisterTheEnterpriseRoleWithProvisioning), and the new doc comments now describe it accurately.
  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:~463. Organization.enterpriseOwners covers the whole enterprise account, so grants can name principals that the org-scoped user sync never emitted. This is documented in docs-info.md.
  • Prior — still present (confidence: medium): the PR deletes .github/workflows/capabilities_and_config.yaml. Until baton-admin enables ci_workflows.capabilities, baton_capabilities.json and config_schema.json have to be regenerated by hand, so they can drift.

Resolved prior findings

  • Fixed in this push — stale provisioner doc comment: enterprise_role.go:277-291 now says the type is registered on either credential, which matches connector.go:157-161.
  • Fixed earlier:
    • The per-RPC ctx in the token refresher: connector.go:482/:600 now use connectorCtx.
    • The nil BaseHttpClient guard: connector.go:565-568.
    • The OwnerState page bound: enterprise_administrator_client.go:708-715 now returns codes.Internal.
    • The fail-closed sync behavior: enterprise_role.go:175-177, with failClosedOnUnreadableEnterprise documented as deliberate.
    • The PathEscape rationale: customclient/client.go:52-54 no longer claims it stops ...
    • The unclosed error body: customclient/client.go:97-100 defers Close on the error path.
    • The stale opt-in/flag wording in docs-info.md, config.go and graphql_transport.go: no remnants found by grep.
  • Obsolete:
    • connector.mdx staleness: enterprises is no longer in the config field groups, so the customer doc not mentioning it is consistent.
    • License-probe Debug level (connector.go:298): license is no longer registered on the App path (connector.go:165-167), so the probe no longer predicts a sync failure. The Debug level was already there before this PR.
    • Unbounded walk, multi-enterprise startup failure, 404-skip memoization, helpers.go status gap, graphql_transport.go fallback comment: replaced by the lazy clients() build, the bounded walks, and the FailedPrecondition returns.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 489-503: newEnterpriseRoleClientsFn is wired for every GitHub App deployment that passes --enterprises. Existing App deployments therefore start reading the Owner role and fail their sync with FailedPrecondition when the app is not installed on the enterprise account or when several enterprises are configured. Per the breaking-change gate (BP1), put this behavior behind an opt-in config field that defaults to off (for example enable-enterprise-owner-provisioning). Only set newEnterpriseRoleClients when the flag is true, and keep today's behavior otherwise. If you deliberately accept the break, get explicit sign-off for it.

## Suggestions

In `pkg/connector/connector.go`:
- Around line 157-161: enterprise_role advertises CAPABILITY_PROVISION under PAT auth, where every Grant/Revoke fails with FailedPrecondition. Consider registering the read-only EnterpriseRoleBuilder on the PAT path, or confirm that this deliberate trade-off is acceptable for CLI/wrapper users.

In `pkg/connector/enterprise_role.go`:
- Around line 463: Organization.enterpriseOwners returns owners of the whole enterprise, including users outside the configured org, so grants can reference principals that the user sync never emitted. Consider filtering to synced org members, or keep the documented caveat.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- With this workflow removed, baton_capabilities.json and config_schema.json can drift until baton-admin enables ci_workflows.capabilities. Make sure that the managed workflow is enabled soon after merge.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit c4a5d206e4bc

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 3 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since df5c69f
View review run

Review Summary

The new commit changes only comments. It rewrites the enterpriseRoleProvisioner / EnterpriseRoleProvisioningBuilder doc comments in pkg/connector/enterprise_role.go:277-291, which now say the provisioner is registered on either credential and that a nil provider means the token path. That matches ResourceSyncers (connector.go:157-168), which always registers the provisioner and adds license only on the token path. I scanned the full PR diff (21 files) for security and correctness and found nothing new; the incremental diff was not partial. I re-checked all 22 prior threads against the current code.

The trusted repo-local criteria were applied. The rules that matter here:

  • BP1/BP5: the breaking-change gate, which is why the one blocker stands.
  • L1–L6: log levels.
  • E2/PR2: gRPC codes and entity source in Grant/Revoke.
  • T1–T5: span safety. They don't apply, because no manual spans were added.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium, blocking-correctness under BP1/BP5): pkg/connector/connector.go:489-495, :503.
    • Every GitHub App deployment that already passes --enterprises now gets newEnterpriseRoleClientsFn, and no opt-in flag gates it.
    • Such a deployment now fails its sync with FailedPrecondition if the app is not installed on the enterprise account (:574-580) or if it names more than one enterprise (:556-561).
    • The PR body and docs-info.md state this break, which satisfies BP2. Because enterprises is no longer in this connector's hosted field groups, the impact falls on CLI users and on baton-github-enterprise when it bumps this package.
    • The open thread at connector.go:489 still describes this accurately, so I posted no duplicate inline comment.

Suggestions

  • Prior — still present (confidence: medium): pkg/connector/connector.go:157-161. PAT deployments advertise CAPABILITY_PROVISION for enterprise_role, but every Grant/Revoke under a PAT fails with FailedPrecondition. This is deliberate and documented (docs-info.md; test TestResourceSyncersRegisterTheEnterpriseRoleWithProvisioning), and the new doc comments now describe it accurately.
  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:~463. Organization.enterpriseOwners covers the whole enterprise account, so grants can name principals that the org-scoped user sync never emitted. This is documented in docs-info.md.
  • Prior — still present (confidence: medium): the PR deletes .github/workflows/capabilities_and_config.yaml. Until baton-admin enables ci_workflows.capabilities, baton_capabilities.json and config_schema.json have to be regenerated by hand, so they can drift.

Resolved prior findings

  • Fixed in this push — stale provisioner doc comment: enterprise_role.go:277-291 now says the type is registered on either credential, which matches connector.go:157-161.
  • Fixed earlier:
    • The per-RPC ctx in the token refresher: connector.go:482/:600 now use connectorCtx.
    • The nil BaseHttpClient guard: connector.go:565-568.
    • The OwnerState page bound: enterprise_administrator_client.go:708-715 now returns codes.Internal.
    • The fail-closed sync behavior: enterprise_role.go:175-177, with failClosedOnUnreadableEnterprise documented as deliberate.
    • The PathEscape rationale: customclient/client.go:52-54 no longer claims it stops ...
    • The unclosed error body: customclient/client.go:97-100 defers Close on the error path.
    • The stale opt-in/flag wording in docs-info.md, config.go and graphql_transport.go: no remnants found by grep.
  • Obsolete:
    • connector.mdx staleness: enterprises is no longer in the config field groups, so the customer doc not mentioning it is consistent.
    • License-probe Debug level (connector.go:298): license is no longer registered on the App path (connector.go:165-167), so the probe no longer predicts a sync failure. The Debug level was already there before this PR.
    • Unbounded walk, multi-enterprise startup failure, 404-skip memoization, helpers.go status gap, graphql_transport.go fallback comment: replaced by the lazy clients() build, the bounded walks, and the FailedPrecondition returns.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 489-503: newEnterpriseRoleClientsFn is wired for every GitHub App deployment that passes --enterprises. Existing App deployments therefore start reading the Owner role and fail their sync with FailedPrecondition when the app is not installed on the enterprise account or when several enterprises are configured. Per the breaking-change gate (BP1), put this behavior behind an opt-in config field that defaults to off (for example enable-enterprise-owner-provisioning). Only set newEnterpriseRoleClients when the flag is true, and keep today's behavior otherwise. If you deliberately accept the break, get explicit sign-off for it.

## Suggestions

In `pkg/connector/connector.go`:
- Around line 157-161: enterprise_role advertises CAPABILITY_PROVISION under PAT auth, where every Grant/Revoke fails with FailedPrecondition. Consider registering the read-only EnterpriseRoleBuilder on the PAT path, or confirm that this deliberate trade-off is acceptable for CLI/wrapper users.

In `pkg/connector/enterprise_role.go`:
- Around line 463: Organization.enterpriseOwners returns owners of the whole enterprise, including users outside the configured org, so grants can reference principals that the user sync never emitted. Consider filtering to synced org members, or keep the documented caveat.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- With this workflow removed, baton_capabilities.json and config_schema.json can drift until baton-admin enables ci_workflows.capabilities. Make sure that the managed workflow is enabled soon after merge.

Reviewed commit: 5484b127b713

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found — see the full review report

@mateoHernandez123
mateoHernandez123 dismissed stale reviews from github-actions[bot] and github-actions[bot] October 1, 2026 20:03

Dismissing: the blocking item is the ungated breaking change, and its own stated way to clear it is a maintainer accepting the break on the PR. That acceptance is recorded on the inline thread at pkg/connector/connector.go.

Its latest pass also narrows the impact itself: with enterprises out of this connector field groups, hosted baton-github tenants cannot reach the path. What is left is CLI users and baton-github-enterprise, where enterprises has always been exposed in both auth groups, so naming an enterprise the credential cannot reach has always been a configuration to fix. The failure returns FailedPrecondition naming the fix.

The stale-comment suggestion from the same pass was valid and is fixed in 5484b12.

The block only described the GitHub App permission, in a section that
presents itself as being about a token. A CLI operator using a personal
access token with --enterprises needs read:enterprise, which was
documented nowhere, so the block now names what each credential
requires and what it buys.

The section heading still says token while listing app permission
names. That predates this change and is left for its own PR.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
Superseded — see the current review report for commit c4a5d206e4bc

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 3 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 5484b12
View review run

Review Summary

The new commit (c4a5d20) changes only README.md. It splits the enterprise permission block into two credentials: a GitHub App needs People: Read and Write and must be installed on both the enterprise and the org, and a PAT needs read:enterprise for enterprise roles and licenses. This matches docs/docs-info.md:103 and the code in connector.go:157-168, which registers licenses only on the token path. No code changed, so nothing new was fixed. I re-scanned the full PR diff (21 files) for security and correctness issues and re-checked every prior finding against the current code. I applied the trusted repo-local criteria: BP1/BP5 for the gating break, L1–L3 for log levels, T1–T2 for spans, and PR1–PR3 for Grant/Revoke entity sources. The new commit raises nothing new under them. The incremental artifact was complete; no paths were dropped or truncated.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium, blocking-correctness under BP1/BP5): pkg/connector/connector.go:489-495. newEnterpriseRoleClientsFn is wired for every GitHub App deployment that already passes --enterprises, and no opt-in flag gates it. Such a deployment now fails its sync with FailedPrecondition if the app is not installed on the enterprise account (:574-580) or if it names more than one enterprise (:556-561). The PR body and docs-info.md call out the break (BP2 met), but it is still default-on. The existing thread at connector.go:489 still describes this accurately (it was marked resolved, but the code is unchanged), so I posted no duplicate inline comment.

Suggestions

  • Prior — still present (confidence: medium): pkg/connector/connector.go:157-161. PAT deployments advertise CAPABILITY_PROVISION for enterprise_role, but every Grant/Revoke under a PAT fails with FailedPrecondition. This is deliberate and documented.
  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:~463. Organization.enterpriseOwners covers the whole enterprise account, so grants can name principals that the org-scoped user sync never emitted. This is documented in docs-info.md.
  • Prior — still present (confidence: medium): the PR deletes .github/workflows/capabilities_and_config.yaml. Until baton-admin enables ci_workflows.capabilities, baton_capabilities.json and config_schema.json have to be regenerated by hand, so they can drift.

Resolved prior findings

  • Fixed:
    • Per-RPC ctx in the token refresher: connector.go:482/:600 now use connectorCtx.
    • Nil BaseHttpClient guard: connector.go:565-568.
    • OwnerState page bound: enterprise_administrator_client.go:708-715 returns codes.Internal.
    • Fail-closed sync is documented as deliberate: enterprise_role.go:175-177 (failClosedOnUnreadableEnterprise).
    • PathEscape rationale corrected: customclient/client.go:52-54.
    • Error-path body close: customclient/client.go:97-98.
    • Provisioner doc comment now matches registration: enterprise_role.go:277-291.
    • No "opt-in" or flag remnants remain in docs-info.md, config.go or graphql_transport.go.
  • Obsolete:
    • connector.mdx staleness: enterprises is no longer in the hosted config field groups.
    • License-probe Debug level (connector.go:298): license is no longer registered on the App path (connector.go:165-167), and that log level predates this PR.
    • These were all replaced by the lazy clients() build, the bounded walks and the FailedPrecondition returns:
      • the unbounded walk
      • the multi-enterprise startup failure
      • the 404-skip memoization and the memoized permanent error
      • the helpers.go status gap
      • the graphql_transport.go fallback comment
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 489-495 (and 556-580): The enterprise-role clients are wired for every GitHub App deployment that passes --enterprises. Existing App deployments therefore start failing sync with FailedPrecondition when the app is not installed on the enterprise account or when more than one enterprise is configured. Gate this behind an opt-in config field (default off) so existing deployments keep today's behavior, or get an explicit sign-off that the ungated break is acceptable.

## Suggestions

In `pkg/connector/connector.go`:
- Around line 157-161: enterprise_role advertises CAPABILITY_PROVISION under PAT auth, but Grant/Revoke always fail there. If C1 should not offer provisioning on PAT tenants, register a sync-only builder on the PAT path.

In `pkg/connector/enterprise_role.go`:
- Around line 463: enterpriseOwners includes owners outside the configured org, so grants may reference principals that were never synced. Consider filtering to synced org members, or keep the documented behavior.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- baton_capabilities.json and config_schema.json must be regenerated by hand until baton-admin enables ci_workflows.capabilities. Make sure that is tracked, so the files do not drift.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Connector PR Review: [CXH-2123] - Add provisioning for the Enterprise Owner role - GitHub Connector

Blocking Issues: 1 | Suggestions: 3 | Threads Resolved: 0
Criteria: Criteria status: loaded .claude/skills/ci-review.md from trusted base 1b8c8f878539.
Review mode: incremental since 5484b12
View review run

Review Summary

The new commit (c4a5d20) changes only README.md. It splits the enterprise permission block into two credentials: a GitHub App needs People: Read and Write and must be installed on both the enterprise and the org, and a PAT needs read:enterprise for enterprise roles and licenses. This matches docs/docs-info.md:103 and the code in connector.go:157-168, which registers licenses only on the token path. No code changed, so nothing new was fixed. I re-scanned the full PR diff (21 files) for security and correctness issues and re-checked every prior finding against the current code. I applied the trusted repo-local criteria: BP1/BP5 for the gating break, L1–L3 for log levels, T1–T2 for spans, and PR1–PR3 for Grant/Revoke entity sources. The new commit raises nothing new under them. The incremental artifact was complete; no paths were dropped or truncated.

Security Issues

None found.

Correctness Issues

  • Prior — still present (confidence: medium, blocking-correctness under BP1/BP5): pkg/connector/connector.go:489-495. newEnterpriseRoleClientsFn is wired for every GitHub App deployment that already passes --enterprises, and no opt-in flag gates it. Such a deployment now fails its sync with FailedPrecondition if the app is not installed on the enterprise account (:574-580) or if it names more than one enterprise (:556-561). The PR body and docs-info.md call out the break (BP2 met), but it is still default-on. The existing thread at connector.go:489 still describes this accurately (it was marked resolved, but the code is unchanged), so I posted no duplicate inline comment.

Suggestions

  • Prior — still present (confidence: medium): pkg/connector/connector.go:157-161. PAT deployments advertise CAPABILITY_PROVISION for enterprise_role, but every Grant/Revoke under a PAT fails with FailedPrecondition. This is deliberate and documented.
  • Prior — still present (confidence: medium): pkg/connector/enterprise_role.go:~463. Organization.enterpriseOwners covers the whole enterprise account, so grants can name principals that the org-scoped user sync never emitted. This is documented in docs-info.md.
  • Prior — still present (confidence: medium): the PR deletes .github/workflows/capabilities_and_config.yaml. Until baton-admin enables ci_workflows.capabilities, baton_capabilities.json and config_schema.json have to be regenerated by hand, so they can drift.

Resolved prior findings

  • Fixed:
    • Per-RPC ctx in the token refresher: connector.go:482/:600 now use connectorCtx.
    • Nil BaseHttpClient guard: connector.go:565-568.
    • OwnerState page bound: enterprise_administrator_client.go:708-715 returns codes.Internal.
    • Fail-closed sync is documented as deliberate: enterprise_role.go:175-177 (failClosedOnUnreadableEnterprise).
    • PathEscape rationale corrected: customclient/client.go:52-54.
    • Error-path body close: customclient/client.go:97-98.
    • Provisioner doc comment now matches registration: enterprise_role.go:277-291.
    • No "opt-in" or flag remnants remain in docs-info.md, config.go or graphql_transport.go.
  • Obsolete:
    • connector.mdx staleness: enterprises is no longer in the hosted config field groups.
    • License-probe Debug level (connector.go:298): license is no longer registered on the App path (connector.go:165-167), and that log level predates this PR.
    • These were all replaced by the lazy clients() build, the bounded walks and the FailedPrecondition returns:
      • the unbounded walk
      • the multi-enterprise startup failure
      • the 404-skip memoization and the memoized permanent error
      • the helpers.go status gap
      • the graphql_transport.go fallback comment
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Correctness Issues

In `pkg/connector/connector.go`:
- Around line 489-495 (and 556-580): The enterprise-role clients are wired for every GitHub App deployment that passes --enterprises. Existing App deployments therefore start failing sync with FailedPrecondition when the app is not installed on the enterprise account or when more than one enterprise is configured. Gate this behind an opt-in config field (default off) so existing deployments keep today's behavior, or get an explicit sign-off that the ungated break is acceptable.

## Suggestions

In `pkg/connector/connector.go`:
- Around line 157-161: enterprise_role advertises CAPABILITY_PROVISION under PAT auth, but Grant/Revoke always fail there. If C1 should not offer provisioning on PAT tenants, register a sync-only builder on the PAT path.

In `pkg/connector/enterprise_role.go`:
- Around line 463: enterpriseOwners includes owners outside the configured org, so grants may reference principals that were never synced. Consider filtering to synced org members, or keep the documented behavior.

In `.github/workflows/capabilities_and_config.yaml` (deleted):
- baton_capabilities.json and config_schema.json must be regenerated by hand until baton-admin enables ci_workflows.capabilities. Make sure that is tracked, so the files do not drift.

Reviewed commit: c4a5d206e4bc

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found — see the full review report

@mateoHernandez123
mateoHernandez123 dismissed github-actions[bot]’s stale review October 1, 2026 20:15

Dismissing again: same blocking item, same acceptance. The break is default-on by design — enterprises plus the credential are the configuration, and the alternative the criteria ask for is the flag that was removed in review. A maintainer accepting the break on the PR is the other way its own criteria allow to clear it, and that acceptance is on the inline thread at pkg/connector/connector.go.

No code change is pending for it. The suggestions from this pass were addressed where valid.

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.

8 participants