Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.
Connected during onboardingThe Checksum team connects your code and tests repositories with you during onboarding. Come back here to check the connection status, review permissions, switch repositories, connect an additional repository, or reconnect after a token rotation. Your Checksum contact can also make these changes for you.
Checksum needs read-only access to your application code, and read and write access to your tests repository, where it opens pull requests. On GitHub you simply approve the Checksum app, which requests these permissions for you. On GitLab, Bitbucket, and Azure DevOps you create a token with the scopes below.
A few provider details to know. On GitHub, if one app installation covers both repositories, GitHub shows the combined request (read + write on actions, code, issues, and pull requests), but write access is only used on the tests repository. On GitLab, protected branches may need Maintainer, or a branch rule that lets Checksum merge. On Bitbucket, repository access and pull-request access are separate permissions, so grant both. Azure DevOps is supported for code repositories only; Checksum-managed tests repositories aren’t supported there.
Use these steps to connect an additional repository, move to a different Git provider, or reconnect after an app was uninstalled or a token expired. The same steps are used during onboarding.
GitHub can’t complete the install for you directly. The button reads Install and request (or Request), and GitHub emails your organization owners to approve it. Until they do, Checksum shows the app as not installed. To approve the request, an organization owner:
Opens the email notification, or goes to the organization’s Settings → Third-party Access → GitHub Apps.
Finds the pending Checksum request.
Reviews the requested repositories and permissions, adjusting the repository selection if needed.
Clicks Approve (or Install).
Organizations can restrict who installs apps. If repository admins are blocked from installing GitHub Apps, an organization owner must approve or install the Checksum app. Once approved, it shows as active in Settings → Git Integration.Installing the app also sets up the webhooks that keep the repo mirror in sync, and it enables /checksum generate comments on PRs (see Generate Tests).
If your organization lives on a dedicated *.ghe.com subdomain (e.g. acme.ghe.com), connect it from Settings → Git Integration. Connecting takes about two minutes. It installs a Checksum GitHub App on your own instance, so there are no tokens or secrets to share.
Cloud onlyThis is for GitHub Enterprise Cloud with data residency (*.ghe.com). If you’re on standard github.com, use the GitHub steps instead. GitHub Enterprise Server (self-hosted, e.g. github.your-company.com) isn’t supported yet.
TipIn the same browser, sign in to GitHub as a member of your *.ghe.com enterprise (not github.com) before you start. The flow opens a page on your enterprise instance.
1
Open Git Integration
Go to Settings → Git Integration and find Tests Repository or Code Repository. Each has its own connection, so repeat this flow for both if you need both.
2
Click "Connect GitHub Enterprise (ghe.com)"
Under Using a private GitHub Enterprise instance?, click Connect GitHub Enterprise (ghe.com). The Connect GitHub Enterprise dialog opens.
3
Enter your host and organization
Fill in both fields and click Continue.
Field
Example
Notes
GitHub Enterprise host
acme.ghe.com
Your *.ghe.com subdomain. No https://, just the host.
GitHub organization
acme-engineering
The organization within your enterprise that owns the repositories
4
Create the app on your instance
Click Open GitHub. A page on your enterprise instance opens to register the Checksum AI Code (or Checksum AI Tests) app. Checksum has already set the permissions and webhook. Confirm the app name and click Create GitHub App. GitHub then shows the new app with an Install button.
NoteThis step only registers the app. It doesn’t grant access to any repositories yet.
TipUse Open GitHub so the app is created with Checksum’s settings. If it opens on the wrong GitHub account, right-click the button to copy the link, then open it in a tab where you’re signed in as an organization owner.
5
Install the app and choose repositories
Click Install and choose All repositories or Only select repositories (you can add more later). Click Install. GitHub redirects you back to Checksum, and the enterprise integration shows as connected.
If the GitHub tab closed before you finished, reopen the dialog and use Reopen GitHub tab to return to the same page. Once connected, select your tests and code repositories exactly as you would for github.com. From there, Checksum can generate and heal tests and open pull requests against your enterprise repositories.
Create a personal or project access token. For a code repo: scopes read_api, read_repository, role Reporter. For a tests repo: scopes api, write_repository, role Developer. See GitLab: project access tokens.
2
Open Settings → Git Integration
Select GitLab.
3
Enter the token
Paste your GitLab access token. For code repositories, have the Project ID ready.
4
Select the projects
Choose the projects to connect as tests and/or code repository.
The token’s user (or the project or group token itself) needs at least the role above on the matching project. A Guest can’t clone a private project, and a Reporter can’t push branches or open merge requests.
Test the token before adding itRun git clone https://oauth2:<TOKEN>@gitlab.com/your-group/your-repo.git. If it clones, Checksum can read the repository with that token.
Change repositories: go to Settings → Git Integration and update your selection.
Remove the integration: go to Settings → Git Integration and click Remove Integration.
Removing disables deliveryRemoving the Git integration disables test generation and auto-healing, because Checksum can no longer open PRs in your repository.
Checksum works with two repositories, and they can be the same one:
Repository
What Checksum does
Access
Tests repository (required)
Opens pull requests with generated and healed tests, creates branches, comments, and may auto-merge
Read and write
Code repository (required)
Reads application code and PR context so agents understand your routes, components, and interactions. Checksum never writes to it.
Read-only
Why the code repository mattersThe code repository gives Checksum significantly faster and more accurate detection, and better generation and healing. If your tests live alongside your app code, the same repository is used for both.
GitHub won't let me create or install the app (ghe.com)
You’re either not an organization owner or signed in to the wrong GitHub account. Sign in as an owner of your *.ghe.com enterprise and reopen the GitHub tab. On shared machines, a fresh browser profile or incognito window usually fixes it.
The host field won't accept my value (ghe.com)
The host must end in .ghe.com, such as acme.ghe.com. You can paste a full URL, and the field strips https://, any path, and the port. A GitHub Enterprise Server hostname like github.your-company.com won’t work.
I finished on GitHub but Checksum still shows "not connected"
Make sure you clicked Install (not just Create GitHub App) and selected at least one repository, then refresh Settings → Git Integration. The flow is safe to repeat.
Status says "No Repositories"
The app is installed but wasn’t granted any repos. In GitHub, open the app’s installation settings and add the repositories, then refresh.
We use GitHub Enterprise Server (self-hosted)
Not supported yet. Only GitHub Enterprise Cloud with data residency (*.ghe.com) is. Contact Checksum support to discuss options.
GitHub shows the app as not installed after I requested it
403 "You are not allowed to download code from this project"
The token’s user or role can’t read the repository, for example a GitLab Guest. Recreate the token with at least the minimum role in Required permissions: Reporter for a code repository, Developer for a tests repository.
GitLab says the token is missing a scope
Recreate the token with the scopes listed for that repository in Required permissions: read_api and read_repository for a code repository, api and write_repository for a tests repository.
Checksum can't open pull requests
The token has read access but not write access on the tests repository. Grant write access: GitLab api and write_repository, or Bitbucket Repositories: Read + Write and Pull requests: Read + Write. On GitHub, make sure the app installation includes the tests repository.
Checksum can't merge into a protected GitLab branch
Use a token with the Maintainer role, or add a branch rule that lets Checksum merge.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Checksum AI","colors":{"primary":"#4b47ff","light":"#7b78ff","dark":"#3631c2"},"favicon":"https://mintcdn.com/checksum/wZyd4JkJxoxMAP-8/favicon.svg?fit=max\u0026auto=format\u0026n=wZyd4JkJxoxMAP-8\u0026q=85\u0026s=ae163ffdd590aeab0b119c3f7b57a6e7","navbar":{"primary":{"type":"button","label":"Get Started","href":"https://checksum.ai/request-demo"}},"footer":{"links":[{"header":"Support","items":[{"label":"support@checksum.ai","href":"mailto:support@checksum.ai"},{"label":"Checksum web app","href":"https://app.checksum.ai"}]}]},"fonts":{"family":"Google Sans"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"checksum","hasAudioNarration":false,"actualSubdomain":"checksum","customDomains":["checksum.ai"],"gitSource":{"type":"github","owner":"checksum-ai","repo":"checksumai-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ad65bd3dd9cbc8cb861264e","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"E2E Testing","count":26},{"language":"default","tag":"API Testing","count":13},{"language":"default","tag":"Test Generation","count":6},{"language":"default","tag":"Create \u0026 Review","count":5},{"language":"default","tag":"Test Execution","count":5},{"language":"default","tag":"Managing Your Project","count":4},{"language":"default","tag":"Run \u0026 Monitor","count":3},{"language":"default","tag":"Maintenance \u0026 Monitoring","count":3},{"language":"default","tag":"Integrations","count":3},{"language":"default","tag":"Start Here","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"#topbar-cta-button>a>span:first-child{border-radius:10rem;background-color:#4b47ff;transition:background-color 0.3s cubic-bezier(0.165, 0.84, 0.44, 1)}#topbar-cta-button>a:hover>span:first-child{background-color:#3631c2;opacity:1}#topbar-cta-button>a{padding:0.5rem 1.375rem}#topbar-cta-button>a svg{display:none}#topbar-cta-button>a>div{margin-right:0}#topbar-cta-button>a>div>span{font-weight:500;letter-spacing:0}.part{display:flex;align-items:center;gap:14px;margin:56px 0 8px;padding:16px 20px;border-radius:16px;border:1px solid rgb(224 224 230);background:rgb(245 245 250 / 0.5)}.part .part-icon{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex:none;font:700 13px ui-monospace, SFMono-Regular, Menlo, monospace;color:#4b47ff;background:rgb(75 71 255 / 0.1)}.part.ui .part-icon{color:#166534;background:#f0fdf4}.part.bg .part-icon{color:rgb(82 82 87);background:rgb(114 114 119 / 0.12);font-family:inherit}.part .part-title{font-weight:600;font-size:16px;line-height:22px;color:rgb(25 24 30)}.part .part-sub{font-size:14px;line-height:20px;color:rgb(114 114 119)}.dark .part{border-color:rgb(255 255 255 / 0.12);background:rgb(255 255 255 / 0.03)}.dark .part .part-icon{color:#7b78ff;background:rgb(123 120 255 / 0.12)}.dark .part.ui .part-icon{color:#86efac;background:rgb(22 101 52 / 0.15)}.dark .part.bg .part-icon{color:rgb(160 160 166);background:rgb(255 255 255 / 0.06)}.dark .part .part-title{color:rgb(224 224 230)}.flow{display:flex;flex-wrap:wrap;align-items:stretch;gap:8px;margin:20px 0 28px}.flow .node{flex:1 1 110px;border:1px solid rgb(224 224 230);border-radius:12px;padding:10px 12px;font-size:13px;line-height:19px}.flow .node b{display:block;font-size:14px;color:rgb(25 24 30);font-weight:600;margin-bottom:2px}.flow .node span{color:rgb(82 82 87)}.flow .node code{font-size:12px;padding:1px 5px}.flow .arrow{align-self:center;color:rgb(114 114 119)}.dark .flow .node{border-color:rgb(255 255 255 / 0.12)}.dark .flow .node b{color:rgb(224 224 230)}.dark .flow .node span{color:rgb(160 160 166)}.pill{display:inline-block;font-weight:600;font-size:12px;line-height:18px;padding:1px 8px;border-radius:8px;white-space:nowrap;vertical-align:1px;background:rgb(114 114 119 / 0.1);color:rgb(82 82 87)}.pill.app{background:rgb(75 71 255 / 0.1);color:#4b47ff}.pill.api{background:rgb(37 99 235 / 0.1);color:#2563eb}.pill.agent{background:rgb(147 51 234 / 0.1);color:#9333ea}.pill.cs{background:rgb(234 88 12 / 0.1);color:#ea580c}.pill.git{background:rgb(22 163 74 / 0.1);color:#16a34a}.dark .pill{color:rgb(160 160 166)}.dark .pill.app{color:#7b78ff}.endpoint{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0;padding:8px 12px 8px 8px;border:1px solid rgb(12 12 17 / 0.1);border-radius:12px;font:14px/20px ui-monospace, SFMono-Regular, Menlo, monospace;color:rgb(25 24 30)}.endpoint code{background:none!important;border:0!important;padding:0!important;font:inherit;color:inherit;font-weight:500}.endpoint .method{font:700 12px/1 inherit;font-family:inherit;padding:5px 8px;border-radius:8px;letter-spacing:.02em}.endpoint .method.get{color:#16a34a;background:rgb(22 163 74 / 0.12)}.endpoint .method.post{color:#2563eb;background:rgb(37 99 235 / 0.12)}.endpoint .method.put{color:#ea580c;background:rgb(234 88 12 / 0.12)}.endpoint .method.delete{color:#dc2626;background:rgb(220 38 38 / 0.12)}.dark .endpoint{border-color:rgb(255 255 255 / 0.1);color:rgb(224 224 230)}.ai-ref>details.accordion{border:1px dashed rgb(75 71 255 / 0.35)!important;background:rgb(75 71 255 / 0.03)!important}.dark .ai-ref>details.accordion{border-color:rgb(123 120 255 / 0.35)!important;background:rgb(123 120 255 / 0.05)!important}.ai-ref{margin:8px 0 32px}"}],"page":{"pagePath":"git-integration","slug":"/git-integration","pageMetadata":{"title":"Git Integration","description":"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.","href":"/git-integration"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Connected during onboarding`})}),_jsxs(_components.p,{children:[`The Checksum team connects your code and tests repositories with you during `,_jsx(_components.a,{href:`/onboarding#2-connecting-your-codebase`,children:`onboarding`}),`. Come back here to check the connection status, review permissions, switch repositories, connect an additional repository, or reconnect after a token rotation. Your Checksum contact can also make these changes for you.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`at-a-glance`,children:`At a glance`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`How Checksum connects`}),_jsx(_components.th,{children:`Can host your tests repo?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitHub`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`#github-install-or-update-the-checksum-github-app`,children:`The Checksum GitHub App`})}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`GitHub Enterprise Cloud (`,_jsx(_components.code,{children:`*.ghe.com`}),`)`]}),_jsx(_components.td,{children:_jsx(_components.a,{href:`#github-enterprise-cloud-with-data-residency`,children:`A GitHub App on your instance`})}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitLab`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`#connect-gitlab-with-an-access-token`,children:`An access token`})}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bitbucket`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`#connect-bitbucket`,children:`An access token`})}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Azure DevOps`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`#connect-azure-devops-code-repository`,children:`A personal access token`})}),_jsx(_components.td,{children:`Code repository only`})]})]})]}),`\n`,_jsx(`div`,{className:`ai-ref`,children:_jsxs(Accordion,{title:`Reference for AI: Git providers at a glance`,icon:`robot`,id:`reference-for-ai-git-providers-at-a-glance`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`Connection method`}),_jsx(_components.th,{children:`Code repository (read-only)`}),_jsx(_components.th,{children:`Tests repository (read/write)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitHub`}),_jsx(_components.td,{children:`Checksum GitHub App`}),_jsx(_components.td,{children:`Supported`}),_jsx(_components.td,{children:`Supported`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitHub Enterprise Cloud`}),_jsxs(_components.td,{children:[`GitHub App on your `,_jsx(_components.code,{children:`*.ghe.com`}),` instance`]}),_jsx(_components.td,{children:`Supported`}),_jsx(_components.td,{children:`Supported`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitLab`}),_jsx(_components.td,{children:`Personal or project access token`}),_jsx(_components.td,{children:`Supported`}),_jsx(_components.td,{children:`Supported`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bitbucket`}),_jsx(_components.td,{children:`Access token`}),_jsx(_components.td,{children:`Supported`}),_jsx(_components.td,{children:`Supported`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Azure DevOps`}),_jsx(_components.td,{children:`Personal access token (PAT)`}),_jsx(_components.td,{children:`Supported`}),_jsx(_components.td,{children:`Not supported`})]})]})]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Where: web app → `,_jsx(_components.strong,{children:`Settings → Git Integration`}),`. Checksum connects repositories during `,_jsx(_components.a,{href:`/onboarding#2-connecting-your-codebase`,children:`onboarding`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Webhooks (push, PR, installation events) are set up automatically and keep the `,_jsx(_components.a,{href:`/test-repository#the-repo-mirror`,children:`repo mirror`}),` in sync.`]}),`\n`,_jsxs(_components.li,{children:[`Not supported: GitHub Enterprise `,_jsx(_components.strong,{children:`Server`}),` (self-hosted), and tests repositories on Azure DevOps.`]}),`\n`,_jsx(_components.li,{children:`Removing the integration disables test generation and auto-healing.`}),`\n`]})]})}),`\n`,_jsxs(`div`,{className:`part dev`,children:[_jsx(`span`,{className:`part-icon`,children:`\u003c/>`}),_jsxs(`div`,{children:[_jsx(`div`,{className:`part-title`,children:`Developer guide`}),_jsx(`div`,{className:`part-sub`,children:`The access Checksum needs on each provider`})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`required-permissions`,children:`Required permissions`}),`\n`,_jsxs(_components.p,{children:[`Checksum needs `,_jsx(_components.strong,{children:`read-only`}),` access to your application code, and `,_jsx(_components.strong,{children:`read and write`}),` access to your tests repository, where it opens pull requests. On GitHub you simply approve the Checksum app, which requests these permissions for you. On GitLab, Bitbucket, and Azure DevOps you create a token with the scopes below.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`Code repository (read-only)`}),_jsx(_components.th,{children:`Tests repository (read/write)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`GitHub`}),` (GitHub App)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Metadata: Read`}),`, `,_jsx(_components.code,{children:`Contents: Read`}),`, `,_jsx(_components.code,{children:`Pull requests: Read`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Metadata: Read`}),`, `,_jsx(_components.code,{children:`Contents: Read + Write`}),`, `,_jsx(_components.code,{children:`Pull requests: Read + Write`}),`, `,_jsx(_components.code,{children:`Issues: Read + Write`}),`, `,_jsx(_components.code,{children:`Actions: Read + Write`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`GitLab`}),` (personal or project access token)`]}),_jsxs(_components.td,{children:[`Scopes `,_jsx(_components.code,{children:`read_api`}),`, `,_jsx(_components.code,{children:`read_repository`}),`; role `,_jsx(_components.code,{children:`Reporter`})]}),_jsxs(_components.td,{children:[`Scopes `,_jsx(_components.code,{children:`api`}),`, `,_jsx(_components.code,{children:`write_repository`}),`; role `,_jsx(_components.code,{children:`Developer`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Bitbucket`}),` (access token)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Repositories: Read`}),`, `,_jsx(_components.code,{children:`Pull requests: Read`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Repositories: Read + Write`}),`, `,_jsx(_components.code,{children:`Pull requests: Read + Write`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Azure DevOps`}),` (PAT)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Code (Read)`})}),_jsx(_components.td,{children:`Not supported today`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`A few provider details to know. On `,_jsx(_components.strong,{children:`GitHub`}),`, if one app installation covers both repositories, GitHub shows the combined request (read + write on actions, code, issues, and pull requests), but write access is only used on the tests repository. On `,_jsx(_components.strong,{children:`GitLab`}),`, protected branches may need `,_jsx(_components.code,{children:`Maintainer`}),`, or a branch rule that lets Checksum merge. On `,_jsx(_components.strong,{children:`Bitbucket`}),`, repository access and pull-request access are separate permissions, so grant both. `,_jsx(_components.strong,{children:`Azure DevOps`}),` is supported for code repositories only; Checksum-managed tests repositories aren’t supported there.`]}),`\n`,_jsx(`div`,{className:`ai-ref`,children:_jsxs(Accordion,{title:`Reference for AI: provider permissions`,icon:`robot`,id:`reference-for-ai-provider-permissions`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`Credential`}),_jsx(_components.th,{children:`Code repository (read-only)`}),_jsx(_components.th,{children:`Tests repository (read/write)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitHub`}),_jsx(_components.td,{children:`GitHub App (no scopes to choose)`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Metadata: Read`}),`, `,_jsx(_components.code,{children:`Contents: Read`}),`, `,_jsx(_components.code,{children:`Pull requests: Read`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Metadata: Read`}),`, `,_jsx(_components.code,{children:`Contents: Read + Write`}),`, `,_jsx(_components.code,{children:`Pull requests: Read + Write`}),`, `,_jsx(_components.code,{children:`Issues: Read + Write`}),`, `,_jsx(_components.code,{children:`Actions: Read + Write`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`GitLab`}),_jsx(_components.td,{children:`Personal or project access token`}),_jsxs(_components.td,{children:[`Scopes `,_jsx(_components.code,{children:`read_api`}),`, `,_jsx(_components.code,{children:`read_repository`}),`; role `,_jsx(_components.code,{children:`Reporter`})]}),_jsxs(_components.td,{children:[`Scopes `,_jsx(_components.code,{children:`api`}),`, `,_jsx(_components.code,{children:`write_repository`}),`; role `,_jsx(_components.code,{children:`Developer`}),` (`,_jsx(_components.code,{children:`Maintainer`}),` or a branch rule for protected branches)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bitbucket`}),_jsx(_components.td,{children:`Access token`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Repositories: Read`}),`, `,_jsx(_components.code,{children:`Pull requests: Read`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Repositories: Read + Write`}),`, `,_jsx(_components.code,{children:`Pull requests: Read + Write`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Azure DevOps`}),_jsx(_components.td,{children:`PAT`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Code (Read)`})}),_jsx(_components.td,{children:`Not supported`})]})]})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Write access is used only on the tests repository. Checksum never writes to the code repository.`}),`\n`,_jsx(_components.li,{children:`GitHub combined installations show read + write on actions, code, issues, and pull requests.`}),`\n`,_jsx(_components.li,{children:`Bitbucket: grant repository and pull-request access separately.`}),`\n`]})]})}),`\n`,_jsxs(`div`,{className:`part ui`,children:[_jsx(`span`,{className:`part-icon`,children:`▦`}),_jsxs(`div`,{children:[_jsx(`div`,{className:`part-title`,children:`In the Checksum web app`}),_jsx(`div`,{className:`part-sub`,children:`Connect providers, change repositories, and check status in Settings → Git Integration`})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`add-or-reconnect-a-repository`,children:`Add or reconnect a repository`}),`\n`,_jsx(_components.p,{children:`Use these steps to connect an additional repository, move to a different Git provider, or reconnect after an app was uninstalled or a token expired. The same steps are used during onboarding.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`GitHub`,id:`github`,\"data-child-heading-ids\":`[\"github%3A-install-or-update-the-checksum-github-app\",\"if-you%E2%80%99re-not-an-organization-owner\"]`,children:[_jsx(Heading,{level:`3`,id:`github-install-or-update-the-checksum-github-app`,children:`GitHub: install or update the Checksum GitHub App`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Open Settings → Git Integration`,children:_jsxs(_components.p,{children:[`In the Checksum web app. Under `,_jsx(_components.strong,{children:`Codebase repository`}),` (or `,_jsx(_components.strong,{children:`Tests Repository`}),`), click `,_jsx(_components.strong,{children:`Connect`}),` / `,_jsx(_components.strong,{children:`Install GitHub App`}),`.`]})}),_jsx(Step,{title:`Authorize on GitHub`,children:_jsxs(_components.p,{children:[`You’re redirected to GitHub to authorize the Checksum app. This may require an organization `,_jsx(_components.strong,{children:`owner`}),`.`]})}),_jsx(Step,{title:`Choose repositories`,children:_jsxs(_components.p,{children:[`Grant access to `,_jsx(_components.strong,{children:`only the repositories`}),` Checksum needs, then complete the installation.`]})}),_jsx(Step,{title:`Select repositories in Checksum`,children:_jsxs(_components.p,{children:[`Back in Checksum, pick the tests and code repositories (see `,_jsx(_components.a,{href:`#change-repositories`,children:`Change repositories`}),`).`]})})]}),_jsx(Frame,{caption:`Authorizing the Checksum GitHub App.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=bc9f0b847e8b8b7b9171132b5591fb45`,alt:`GitHub App authorization`,\"data-og-width\":`1786`,width:`1786`,\"data-og-height\":`1888`,height:`1888`,\"data-path\":`images/oath-access.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?w=280\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=d2f4a5566ee4910cda737852083afc29 280w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?w=560\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=7f3d5c9ee5df323a70a8e43f7e92e8c6 560w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?w=840\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=3a56ae95d75f6f54326e2243aad55848 840w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=712f2bfd474a58028babfbb9181dc249 1100w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=b1656e93d1b2355d19966cefd59158fa 1650w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/oath-access.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=e860b71f88b632522b74bd5fab11910f 2500w`})}),_jsx(Heading,{level:`4`,id:`if-you’re-not-an-organization-owner`,children:`If you’re not an organization owner`}),_jsxs(_components.p,{children:[`GitHub can’t complete the install for you directly. The button reads `,_jsx(_components.strong,{children:`Install and request`}),` (or `,_jsx(_components.strong,{children:`Request`}),`), and GitHub emails your organization owners to approve it. Until they do, Checksum shows the app as not installed. To approve the request, an organization owner:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Opens the email notification, or goes to the organization’s `,_jsx(_components.strong,{children:`Settings → Third-party Access → GitHub Apps`}),`.`]}),`\n`,_jsx(_components.li,{children:`Finds the pending Checksum request.`}),`\n`,_jsx(_components.li,{children:`Reviews the requested repositories and permissions, adjusting the repository selection if needed.`}),`\n`,_jsxs(_components.li,{children:[`Clicks `,_jsx(_components.strong,{children:`Approve`}),` (or `,_jsx(_components.strong,{children:`Install`}),`).`]}),`\n`]}),_jsxs(_components.p,{children:[`Organizations can restrict who installs apps. If repository admins are blocked from installing GitHub Apps, an organization owner must approve or install the Checksum app. Once approved, it shows as active in `,_jsx(_components.strong,{children:`Settings → Git Integration`}),`.`]}),_jsxs(_components.p,{children:[`Installing the app also sets up the webhooks that keep the `,_jsx(_components.a,{href:`/test-repository#the-repo-mirror`,children:`repo mirror`}),` in sync, and it enables `,_jsx(_components.code,{children:`/checksum generate`}),` comments on PRs (see `,_jsx(_components.a,{href:`/generate-tests`,children:`Generate Tests`}),`).`]})]}),_jsxs(Tab,{title:`GitHub Enterprise (ghe.com)`,id:`github-enterprise-ghe-com`,\"data-child-heading-ids\":`[\"github-enterprise-cloud-with-data-residency\",\"what-you%E2%80%99ll-need\"]`,children:[_jsx(Heading,{level:`3`,id:`github-enterprise-cloud-with-data-residency`,children:`GitHub Enterprise Cloud with data residency`}),_jsxs(_components.p,{children:[`If your organization lives on a dedicated `,_jsx(_components.code,{children:`*.ghe.com`}),` subdomain (e.g. `,_jsx(_components.code,{children:`acme.ghe.com`}),`), connect it from `,_jsx(_components.strong,{children:`Settings → Git Integration`}),`. Connecting takes about two minutes. It installs a Checksum GitHub App on `,_jsx(_components.strong,{children:`your own instance`}),`, so there are no tokens or secrets to share.`]}),_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Cloud only`})}),_jsxs(_components.p,{children:[`This is for GitHub Enterprise Cloud `,_jsx(_components.strong,{children:`with data residency`}),` (`,_jsx(_components.code,{children:`*.ghe.com`}),`). If you’re on standard `,_jsx(_components.code,{children:`github.com`}),`, use the GitHub steps instead. GitHub Enterprise `,_jsx(_components.strong,{children:`Server`}),` (self-hosted, e.g. `,_jsx(_components.code,{children:`github.your-company.com`}),`) isn’t supported yet.`]})]}),_jsx(Heading,{level:`4`,id:`what-you’ll-need`,children:`What you’ll need`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Requirement`}),_jsx(_components.th,{children:`Details`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`A GitHub organization owner`})}),_jsxs(_components.td,{children:[`Creating and installing a GitHub App on your organization requires the `,_jsx(_components.strong,{children:`owner`}),` role. If you aren’t an owner, ask one to run this flow.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Your instance host`})}),_jsxs(_components.td,{children:[`Your enterprise’s `,_jsx(_components.code,{children:`*.ghe.com`}),` subdomain, e.g. `,_jsx(_components.code,{children:`acme.ghe.com`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Your organization name`})}),_jsx(_components.td,{children:`The organization inside your enterprise that owns the repositories`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Access to Checksum`})}),_jsxs(_components.td,{children:[`Signed in at `,_jsx(_components.a,{href:`https://app.checksum.ai`,children:`app.checksum.ai`}),` with your project open`]})]})]})]}),_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Tip`})}),_jsxs(_components.p,{children:[`In the same browser, sign in to GitHub as a member of your `,_jsx(_components.code,{children:`*.ghe.com`}),` enterprise (not `,_jsx(_components.code,{children:`github.com`}),`) before you start. The flow opens a page on your enterprise instance.`]})]}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Open Git Integration`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Settings → Git Integration`}),` and find `,_jsx(_components.strong,{children:`Tests Repository`}),` or `,_jsx(_components.strong,{children:`Code Repository`}),`. Each has its own connection, so repeat this flow for both if you need both.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=91ec20582d387a4c5e3d6015e8023d63`,alt:`Git Integration settings with the GitHub Enterprise connect option`,\"data-og-width\":`2740`,width:`2740`,\"data-og-height\":`2056`,height:`2056`,\"data-path\":`images/ghe-connect-entry.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?w=280\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=be93cb1f2478844907a71c544c02181a 280w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?w=560\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=d137338bd06fe591d710ff4c808260f3 560w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?w=840\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=f7ac755014d40341dee098c909385864 840w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=e0426a503f25579b87650897e9d0119d 1100w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=e81d35b7581435975d16a02437943fb7 1650w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-entry.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=a41579cd5ff2e6cc702a82f52d0a4c60 2500w`})})]}),_jsx(Step,{title:`Click \"Connect GitHub Enterprise (ghe.com)\"`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Using a private GitHub Enterprise instance?`}),`, click `,_jsx(_components.strong,{children:`Connect GitHub Enterprise (ghe.com)`}),`. The `,_jsx(_components.strong,{children:`Connect GitHub Enterprise`}),` dialog opens.`]})}),_jsxs(Step,{title:`Enter your host and organization`,children:[_jsxs(_components.p,{children:[`Fill in both fields and click `,_jsx(_components.strong,{children:`Continue`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Example`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`GitHub Enterprise host`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`acme.ghe.com`})}),_jsxs(_components.td,{children:[`Your `,_jsx(_components.code,{children:`*.ghe.com`}),` subdomain. No `,_jsx(_components.code,{children:`https://`}),`, just the host.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`GitHub organization`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`acme-engineering`})}),_jsx(_components.td,{children:`The organization within your enterprise that owns the repositories`})]})]})]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=afedb499ff127bc0f98ee6167c236593`,alt:`Connect GitHub Enterprise dialog`,\"data-og-width\":`2740`,width:`2740`,\"data-og-height\":`2056`,height:`2056`,\"data-path\":`images/ghe-connect-form.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?w=280\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=b18cef5823d08cc0bfd7e130164eb474 280w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?w=560\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=4e821bb8d34b003f9727f38d2f2c3539 560w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?w=840\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=2b1ea0e76000fb2a901c38b9d734cd1a 840w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=a03ec8dac673ec06600d6af91c1fae98 1100w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=e842037af73a02c56c88d3a5a5b556c0 1650w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-connect-form.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=6616c2c7fe3b820d9e0f92188d13d722 2500w`})})]}),_jsxs(Step,{title:`Create the app on your instance`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Open GitHub`}),`. A page on your enterprise instance opens to register the `,_jsx(_components.strong,{children:`Checksum AI Code`}),` (or `,_jsx(_components.strong,{children:`Checksum AI Tests`}),`) app. Checksum has already set the permissions and webhook. Confirm the app name and click `,_jsx(_components.strong,{children:`Create GitHub App`}),`. GitHub then shows the new app with an `,_jsx(_components.strong,{children:`Install`}),` button.`]}),_jsxs(Note,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Note`})}),_jsxs(_components.p,{children:[`This step only `,_jsx(_components.strong,{children:`registers`}),` the app. It doesn’t grant access to any repositories yet.`]})]}),_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Tip`})}),_jsxs(_components.p,{children:[`Use `,_jsx(_components.strong,{children:`Open GitHub`}),` so the app is created with Checksum’s settings. If it opens on the wrong GitHub account, right-click the button to copy the link, then open it in a tab where you’re signed in as an organization owner.`]})]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=438192c245f80e3818534723bbf0d9f6`,alt:`The Checksum app registered on your enterprise instance`,\"data-og-width\":`2086`,width:`2086`,\"data-og-height\":`1206`,height:`1206`,\"data-path\":`images/ghe-create-app.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?w=280\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=e2f4dfc75a7645a3daa7641733cd240f 280w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?w=560\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=349cc6724066866f58134d8399344f0d 560w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?w=840\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=d1fdc828daf493ec77783d7e12f9dfe2 840w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=2288326069e8e857101ccaea69126199 1100w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=a66a369db0964bdcf9e719391db5de8f 1650w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-create-app.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=2155116b67dac2168886a6297bda3b6b 2500w`})})]}),_jsxs(Step,{title:`Install the app and choose repositories`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Install`}),` and choose `,_jsx(_components.strong,{children:`All repositories`}),` or `,_jsx(_components.strong,{children:`Only select repositories`}),` (you can add more later). Click `,_jsx(_components.strong,{children:`Install`}),`. GitHub redirects you back to Checksum, and the enterprise integration shows as connected.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=6db5495d80594da38e14b4dd78869dbb`,alt:`Installing the Checksum app and selecting repositories`,\"data-og-width\":`2742`,width:`2742`,\"data-og-height\":`2036`,height:`2036`,\"data-path\":`images/ghe-install.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?w=280\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=b31a7758e7b14a01971ad829b3fdb68f 280w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?w=560\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=744303f60668c9980861e4854da5ef26 560w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?w=840\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=f136a322a1bb43c9a3568342fd2aa1a2 840w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=220f56d2a5c4fabf75498d56acfc37df 1100w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=25e0ccea6d814c8eda1ecd26de14ac7a 1650w, https://mintcdn.com/checksum/Sno3sRcBVqZEH5c5/images/ghe-install.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Sno3sRcBVqZEH5c5\u0026q=85\u0026s=efe5c3dbe014bcee1582840867b5512d 2500w`})})]})]}),_jsxs(_components.p,{children:[`If the GitHub tab closed before you finished, reopen the dialog and use `,_jsx(_components.strong,{children:`Reopen GitHub tab`}),` to return to the same page. Once connected, select your tests and code repositories exactly as you would for `,_jsx(_components.code,{children:`github.com`}),`. From there, Checksum can generate and heal tests and open pull requests against your enterprise repositories.`]})]}),_jsxs(Tab,{title:`GitLab`,id:`gitlab`,\"data-child-heading-ids\":`[\"connect-gitlab-with-an-access-token\"]`,children:[_jsx(Heading,{level:`3`,id:`connect-gitlab-with-an-access-token`,children:`Connect GitLab with an access token`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create a token`,children:_jsxs(_components.p,{children:[`Create a personal or project access token. For a code repo: scopes `,_jsx(_components.code,{children:`read_api`}),`, `,_jsx(_components.code,{children:`read_repository`}),`, role `,_jsx(_components.code,{children:`Reporter`}),`. For a tests repo: scopes `,_jsx(_components.code,{children:`api`}),`, `,_jsx(_components.code,{children:`write_repository`}),`, role `,_jsx(_components.code,{children:`Developer`}),`. See `,_jsx(_components.a,{href:`https://docs.gitlab.com/user/project/settings/project_access_tokens/`,children:`GitLab: project access tokens`}),`.`]})}),_jsx(Step,{title:`Open Settings → Git Integration`,children:_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`GitLab`}),`.`]})}),_jsx(Step,{title:`Enter the token`,children:_jsxs(_components.p,{children:[`Paste your GitLab access token. For code repositories, have the `,_jsx(_components.strong,{children:`Project ID`}),` ready.`]})}),_jsx(Step,{title:`Select the projects`,children:_jsx(_components.p,{children:`Choose the projects to connect as tests and/or code repository.`})})]}),_jsxs(_components.p,{children:[`The token’s user (or the project or group token itself) needs at least the role above on the matching project. A `,_jsx(_components.strong,{children:`Guest`}),` can’t clone a private project, and a `,_jsx(_components.strong,{children:`Reporter`}),` can’t push branches or open merge requests.`]}),_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Test the token before adding it`})}),_jsxs(_components.p,{children:[`Run `,_jsx(_components.code,{children:`git clone https://oauth2:\u003cTOKEN>@gitlab.com/your-group/your-repo.git`}),`. If it clones, Checksum can read the repository with that token.`]})]})]}),_jsxs(Tab,{title:`Bitbucket`,id:`bitbucket`,\"data-child-heading-ids\":`[\"connect-bitbucket\"]`,children:[_jsx(Heading,{level:`3`,id:`connect-bitbucket`,children:`Connect Bitbucket`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Gather details`,children:_jsxs(_components.p,{children:[`Your `,_jsx(_components.strong,{children:`Workspace`}),` name and `,_jsx(_components.strong,{children:`Repository`}),` name.`]})}),_jsx(Step,{title:`Create an access token`,children:_jsxs(_components.p,{children:[`Code repo: `,_jsx(_components.code,{children:`Repositories: Read`}),`, `,_jsx(_components.code,{children:`Pull requests: Read`}),`. Tests repo: `,_jsx(_components.code,{children:`Repositories: Read + Write`}),`, `,_jsx(_components.code,{children:`Pull requests: Read + Write`}),`. See `,_jsx(_components.a,{href:`https://support.atlassian.com/bitbucket-cloud/docs/repository-access-tokens/`,children:`Atlassian: repository access tokens`}),`.`]})}),_jsx(Step,{title:`Connect in Checksum`,children:_jsxs(_components.p,{children:[`Enter the workspace, repository, and token under `,_jsx(_components.strong,{children:`Settings → Git Integration`}),`, or send them to your Checksum contact.`]})})]})]}),_jsxs(Tab,{title:`Azure DevOps`,id:`azure-devops`,\"data-child-heading-ids\":`[\"connect-azure-devops-code-repository\"]`,children:[_jsx(Heading,{level:`3`,id:`connect-azure-devops-code-repository`,children:`Connect Azure DevOps (code repository)`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Gather details`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Organization`}),`, `,_jsx(_components.strong,{children:`Project`}),`, and `,_jsx(_components.strong,{children:`Repository`}),` names.`]})}),_jsx(Step,{title:`Create a PAT`,children:_jsxs(_components.p,{children:[`Minimum scope: `,_jsx(_components.code,{children:`Code: Read`}),`. See `,_jsx(_components.a,{href:`https://learn.microsoft.com/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate`,children:`Microsoft: personal access tokens`}),`.`]})}),_jsx(Step,{title:`Connect in Checksum`,children:_jsxs(_components.p,{children:[`Enter the details under `,_jsx(_components.strong,{children:`Settings → Git Integration`}),`, or send them to your Checksum contact.`]})})]}),_jsxs(Note,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Code repositories only`})}),_jsx(_components.p,{children:`The tests repository must be on GitHub, GitLab, or Bitbucket.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`change-repositories`,children:`Change repositories`}),`\n`,_jsx(_components.p,{children:`Your repositories are selected during onboarding. To point Checksum at a different repository:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Settings → Git Integration`}),_jsx(Step,{title:`Tests Repository`,children:_jsx(_components.p,{children:`Select the repository that holds your Playwright tests. Checksum opens PRs here. Change it only if your tests move to a different repository.`})}),_jsx(Step,{title:`Code Repository (required)`,children:_jsx(_components.p,{children:`Select your application source repository. You can change it at any time.`})})]}),`\n`,_jsx(Frame,{caption:`Selecting the tests and code repositories.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=dedb006a9eb63afa0c86a390776e7f50`,alt:`Git Integration repository selection`,\"data-og-width\":`1162`,width:`1162`,\"data-og-height\":`947`,height:`947`,\"data-path\":`images/repo.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?w=280\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=89f5c62e8bc0ba83fce23c9b5c88b718 280w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?w=560\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=4ec6f724e17db5278515e86fea1b4458 560w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?w=840\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=38373d0d7cbe1c9bc718ca51b7e2e2e6 840w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=46925ea9b5e2084227ffbf178d346519 1100w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=63de9bc3d8de9b25a23030c95b1add98 1650w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/repo.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=fc06da747a6c2e8a8659d46067b67b05 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`integration-status`,children:`Integration status`}),`\n`,_jsx(_components.p,{children:`The Settings page shows the state of your integration:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Active`})}),_jsx(_components.td,{children:`Connected and working`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Not Installed`})}),_jsx(_components.td,{children:`No GitHub App or GitLab token configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`No Repositories`})}),_jsx(_components.td,{children:`The app is installed, but no repositories were granted access`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`No Selected Repository`})}),_jsx(_components.td,{children:`Repositories are available, but none has been selected yet`})]})]})]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=397d4b869bd49a6500818c9edffb9a80`,alt:`Git Integration status`,\"data-og-width\":`2220`,width:`2220`,\"data-og-height\":`1126`,height:`1126`,\"data-path\":`images/github.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?w=280\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=3df25ba856a4c79ed25622e5f259457b 280w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?w=560\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=e6d7705593dee812b71649a3e9d71b66 560w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?w=840\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=baeb1b630125ae0d3b7edff908efbb13 840w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=4ea892ee62e53cb172232ae922aeaf8d 1100w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=4e46f5cc09e5c3b9ce8d027b06252921 1650w, https://mintcdn.com/checksum/jreTwWrmFV2djRX_/images/github.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jreTwWrmFV2djRX_\u0026q=85\u0026s=3b023a3f80487c074f9e5d379a2103f9 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`change-or-remove-an-integration`,children:`Change or remove an integration`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Change repositories:`}),` go to `,_jsx(_components.strong,{children:`Settings → Git Integration`}),` and update your selection.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Remove the integration:`}),` go to `,_jsx(_components.strong,{children:`Settings → Git Integration`}),` and click `,_jsx(_components.strong,{children:`Remove Integration`}),`.`]}),`\n`]}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Removing disables delivery`})}),_jsx(_components.p,{children:`Removing the Git integration disables test generation and auto-healing, because Checksum can no longer open PRs in your repository.`})]}),`\n`,_jsxs(`div`,{className:`part bg`,children:[_jsx(`span`,{className:`part-icon`,children:`i`}),_jsxs(`div`,{children:[_jsx(`div`,{className:`part-title`,children:`How it works`}),_jsx(`div`,{className:`part-sub`,children:`What Checksum does with each repository`})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`tests-repository-and-code-repository`,children:`Tests repository and code repository`}),`\n`,_jsx(_components.p,{children:`Checksum works with two repositories, and they can be the same one:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Repository`}),_jsx(_components.th,{children:`What Checksum does`}),_jsx(_components.th,{children:`Access`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Tests repository`}),` (required)`]}),_jsx(_components.td,{children:`Opens pull requests with generated and healed tests, creates branches, comments, and may auto-merge`}),_jsx(_components.td,{children:`Read and write`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Code repository`}),` (required)`]}),_jsxs(_components.td,{children:[`Reads application code and PR context so agents understand your routes, components, and interactions. Checksum `,_jsx(_components.strong,{children:`never writes`}),` to it.`]}),_jsx(_components.td,{children:`Read-only`})]})]})]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Why the code repository matters`})}),_jsx(_components.p,{children:`The code repository gives Checksum significantly faster and more accurate detection, and better generation and healing. If your tests live alongside your app code, the same repository is used for both.`})]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`GitHub won't let me create or install the app (ghe.com)`,id:`github-wont-let-me-create-or-install-the-app-ghe-com`,children:_jsxs(_components.p,{children:[`You’re either not an `,_jsx(_components.strong,{children:`organization owner`}),` or signed in to the wrong GitHub account. Sign in as an owner of your `,_jsx(_components.code,{children:`*.ghe.com`}),` enterprise and reopen the GitHub tab. On shared machines, a fresh browser profile or incognito window usually fixes it.`]})}),_jsx(Accordion,{title:`The host field won't accept my value (ghe.com)`,id:`the-host-field-wont-accept-my-value-ghe-com`,children:_jsxs(_components.p,{children:[`The host must end in `,_jsx(_components.code,{children:`.ghe.com`}),`, such as `,_jsx(_components.code,{children:`acme.ghe.com`}),`. You can paste a full URL, and the field strips `,_jsx(_components.code,{children:`https://`}),`, any path, and the port. A GitHub Enterprise `,_jsx(_components.strong,{children:`Server`}),` hostname like `,_jsx(_components.code,{children:`github.your-company.com`}),` won’t work.`]})}),_jsx(Accordion,{title:`I finished on GitHub but Checksum still shows \"not connected\"`,id:`i-finished-on-github-but-checksum-still-shows-not-connected`,children:_jsxs(_components.p,{children:[`Make sure you clicked `,_jsx(_components.strong,{children:`Install`}),` (not just `,_jsx(_components.strong,{children:`Create GitHub App`}),`) and selected at least one repository, then refresh `,_jsx(_components.strong,{children:`Settings → Git Integration`}),`. The flow is safe to repeat.`]})}),_jsx(Accordion,{title:`Status says \"No Repositories\"`,id:`status-says-no-repositories`,children:_jsx(_components.p,{children:`The app is installed but wasn’t granted any repos. In GitHub, open the app’s installation settings and add the repositories, then refresh.`})}),_jsx(Accordion,{title:`We use GitHub Enterprise Server (self-hosted)`,id:`we-use-github-enterprise-server-self-hosted`,children:_jsxs(_components.p,{children:[`Not supported yet. Only GitHub Enterprise Cloud with data residency (`,_jsx(_components.code,{children:`*.ghe.com`}),`) is. Contact Checksum support to discuss options.`]})}),_jsx(Accordion,{title:`GitHub shows the app as not installed after I requested it`,id:`github-shows-the-app-as-not-installed-after-i-requested-it`,children:_jsxs(_components.p,{children:[`An organization owner still has to approve the installation request. See `,_jsx(_components.a,{href:`#if-you%E2%80%99re-not-an-organization-owner`,children:`If you’re not an organization owner`}),`.`]})}),_jsx(Accordion,{title:`403 \"You are not allowed to download code from this project\"`,id:`403-you-are-not-allowed-to-download-code-from-this-project`,children:_jsxs(_components.p,{children:[`The token’s user or role can’t read the repository, for example a GitLab `,_jsx(_components.strong,{children:`Guest`}),`. Recreate the token with at least the minimum role in `,_jsx(_components.a,{href:`#required-permissions`,children:`Required permissions`}),`: `,_jsx(_components.code,{children:`Reporter`}),` for a code repository, `,_jsx(_components.code,{children:`Developer`}),` for a tests repository.`]})}),_jsx(Accordion,{title:`GitLab says the token is missing a scope`,id:`gitlab-says-the-token-is-missing-a-scope`,children:_jsxs(_components.p,{children:[`Recreate the token with the scopes listed for that repository in `,_jsx(_components.a,{href:`#required-permissions`,children:`Required permissions`}),`: `,_jsx(_components.code,{children:`read_api`}),` and `,_jsx(_components.code,{children:`read_repository`}),` for a code repository, `,_jsx(_components.code,{children:`api`}),` and `,_jsx(_components.code,{children:`write_repository`}),` for a tests repository.`]})}),_jsx(Accordion,{title:`Checksum can't open pull requests`,id:`checksum-cant-open-pull-requests`,children:_jsxs(_components.p,{children:[`The token has read access but not write access on the tests repository. Grant write access: GitLab `,_jsx(_components.code,{children:`api`}),` and `,_jsx(_components.code,{children:`write_repository`}),`, or Bitbucket `,_jsx(_components.code,{children:`Repositories: Read + Write`}),` and `,_jsx(_components.code,{children:`Pull requests: Read + Write`}),`. On GitHub, make sure the app installation includes the tests repository.`]})}),_jsx(Accordion,{title:`Checksum can't merge into a protected GitLab branch`,id:`checksum-cant-merge-into-a-protected-gitlab-branch`,children:_jsxs(_components.p,{children:[`Use a token with the `,_jsx(_components.code,{children:`Maintainer`}),` role, or add a branch rule that lets Checksum merge.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Test Repository \u0026 Config`,icon:`gear`,href:`/test-repository`,children:_jsx(_components.p,{children:`How the repo mirror reads and writes.`})}),_jsx(Card,{title:`/checksum generate`,icon:`wand-magic-sparkles`,href:`/generate-tests`,children:_jsx(_components.p,{children:`Trigger generation from a PR comment.`})}),_jsx(Card,{title:`Security \u0026 Access`,icon:`shield-halved`,href:`/security-and-access`,children:_jsx(_components.p,{children:`A permissions summary for security review.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Git Integration","description":"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.","href":"/git-integration"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[6059,6153,"(`div`,{className:`part dev`,children:_j"],[6329,6330,""]]},"mdxExtracts":{"tableOfContents":[{"title":"At a glance","slug":"at-a-glance","depth":2,"children":[]},{"title":"Required permissions","slug":"required-permissions","depth":2,"children":[]},{"title":"Add or reconnect a repository","slug":"add-or-reconnect-a-repository","depth":2,"children":[{"title":"GitHub: install or update the Checksum GitHub App","slug":"github-install-or-update-the-checksum-github-app","depth":3,"children":[],"tabId":"github"},{"title":"If you’re not an organization owner","slug":"if-you’re-not-an-organization-owner","depth":4,"children":[],"tabId":"github"},{"title":"GitHub Enterprise Cloud with data residency","slug":"github-enterprise-cloud-with-data-residency","depth":3,"children":[],"tabId":"github-enterprise-ghe-com"},{"title":"What you’ll need","slug":"what-you’ll-need","depth":4,"children":[],"tabId":"github-enterprise-ghe-com"},{"title":"Connect GitLab with an access token","slug":"connect-gitlab-with-an-access-token","depth":3,"children":[],"tabId":"gitlab"},{"title":"Connect Bitbucket","slug":"connect-bitbucket","depth":3,"children":[],"tabId":"bitbucket"},{"title":"Connect Azure DevOps (code repository)","slug":"connect-azure-devops-code-repository","depth":3,"children":[],"tabId":"azure-devops"}]},{"title":"Change repositories","slug":"change-repositories","depth":2,"children":[]},{"title":"Integration status","slug":"integration-status","depth":2,"children":[]},{"title":"Change or remove an integration","slug":"change-or-remove-an-integration","depth":2,"children":[]},{"title":"Tests repository and code repository","slug":"tests-repository-and-code-repository","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"checksum","siteName":"Checksum AI","title":"Git Integration - Checksum AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-30T21:31:47.704Z","originalFileLocation":"git-integration.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Checksum AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Git Integration - Checksum AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Checksum AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://checksum.ai/docs/git-integration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://checksum.mintlify.site/docs/_mintlify/api/og/v2?division=Managing+Your+Project\u0026amp;title=Git+Integration\u0026amp;description=Checksum+reads+your+codebase+and+delivers+tests+as+pull+requests+through+a+connection+to+your+Git+provider.+It+supports+GitHub+%28including+GitHub+Enterprise+Clou\u0026amp;theme=c85aea844d07e0308e4277b6\u0026amp;signature=084f43cbe2247c958d70d6ddb1b22b5442bfc7e542d6cc93d7dbb065b04773c2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Git Integration - Checksum AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://checksum.mintlify.site/docs/_mintlify/api/og/v2?division=Managing+Your+Project\u0026amp;title=Git+Integration\u0026amp;description=Checksum+reads+your+codebase+and+delivers+tests+as+pull+requests+through+a+connection+to+your+Git+provider.+It+supports+GitHub+%28including+GitHub+Enterprise+Clou\u0026amp;theme=c85aea844d07e0308e4277b6\u0026amp;signature=084f43cbe2247c958d70d6ddb1b22b5442bfc7e542d6cc93d7dbb065b04773c2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/checksum/pmzJ8ZJkJQJFdXVv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Checksum AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4b47ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://checksum.ai/docs/git-integration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/git-integration.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://checksum.ai/#organization\",\"name\":\"Checksum AI\",\"url\":\"https://checksum.ai\"},{\"@type\":\"WebSite\",\"@id\":\"https://checksum.ai/docs#website\",\"name\":\"Checksum AI\",\"url\":\"https://checksum.ai/docs\",\"publisher\":{\"@id\":\"https://checksum.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://checksum.ai/docs/git-integration#webpage\",\"url\":\"https://checksum.ai/docs/git-integration\",\"name\":\"Git Integration\",\"description\":\"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.\",\"dateModified\":\"2026-09-30T21:31:47.704Z\",\"isPartOf\":{\"@id\":\"https://checksum.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://checksum.ai/docs/git-integration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://checksum.ai/docs/git-integration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Managing Your Project\",\"item\":\"https://checksum.ai/docs/environments\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git Integration\",\"item\":\"https://checksum.ai/docs/git-integration\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://checksum.ai/docs/git-integration#article\",\"headline\":\"Git Integration\",\"name\":\"Git Integration\",\"description\":\"Checksum reads your codebase and delivers tests as pull requests through a connection to your Git provider. It supports GitHub (including GitHub Enterprise Cloud on *.ghe.com), GitLab, Bitbucket, and Azure DevOps (code repositories only). This page explains how that connection works, and how to review it, change it, or add a repository later.\",\"url\":\"https://checksum.ai/docs/git-integration\",\"mainEntityOfPage\":{\"@id\":\"https://checksum.ai/docs/git-integration#webpage\"},\"dateModified\":\"2026-09-30T21:31:47.704Z\",\"publisher\":{\"@id\":\"https://checksum.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://checksum.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Checksum AI\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Checksum AI\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/git-integration.md","siteName":"Checksum AI","nav":{"global":null,"tabs":[{"tab":"E2E Testing","groups":[{"group":"Start Here","pages":[{"title":"Checksum AI: E2E Testing Platform","sidebarTitle":"Overview","href":"/overview"},{"title":"Onboarding \u0026 Proof of Value","href":"/onboarding"},{"title":"Key Concepts \u0026 Glossary","href":"/concepts"}]},{"group":"Managing Your Project","pages":[{"title":"Environments \u0026 Test Users","description":"Your project can test against several environments, such as staging, production, or any other environment, each with its own URL, login URL, test users, and custom variables. Developers pull these settings with the CLI, declare them in checksum.config.ts, and override them per run with envOverrides.","href":"/environments"},{"title":"Git Integration","href":"/git-integration"},{"title":"Test Repository \u0026 Config","description":"Your Playwright tests live in a repository you own. Checksum keeps a synchronized mirror of it: it reads your tests and code, and writes back only through pull requests. Checksum creates and configures this repository for you during onboarding. Use this page as a reference when you want to edit tests, adjust configuration, or understand how changes flow between your repository and Checksum.","href":"/test-repository"},{"title":"API Keys \u0026 Authentication","href":"/authentication"}]},{"group":"Test Generation","pages":[{"title":"How Test Generation Works","href":"/test-generation"},{"title":"Detect Test Flows","href":"/detect-tests"},{"title":"Generate Tests","href":"/generate-tests"},{"title":"Deep vs Standard Modes","href":"/generation-modes"},{"title":"Story \u0026 Test Format","href":"/story-and-test-format"},{"title":"Agent Sessions","href":"/agent-sessions"}]},{"group":"Test Execution","pages":[{"title":"Running Tests","href":"/running-tests"},{"title":"CI/CD Integration","href":"/ci-integration"},{"title":"CI Setup Prompts for AI Agents","href":"/ci-setup-prompts"},{"title":"Sharding","href":"/sharding"},{"title":"Results, Reports \u0026 Traces","href":"/results-and-reports"}]},{"group":"Maintenance \u0026 Monitoring","pages":[{"title":"Auto-Maintenance \u0026 Recovery","href":"/auto-maintenance"},{"title":"Auto-Healing","href":"/auto-healing"},{"title":"Feature Health Dashboard","href":"/health-dashboard"}]},{"group":"Integrations","pages":[{"title":"Coding Agents \u0026 MCP","href":"/coding-agents"},{"title":"Notifications \u0026 Slack","href":"/notifications-and-slack"},{"title":"Issue Tracker Sync","href":"/issue-tracker-sync"}]},{"group":"Security \u0026 Admin","pages":[{"title":"Security \u0026 Access","href":"/security-and-access"},{"title":"Microsoft Entra ID SSO","href":"/sso-entra"}]}]},{"tab":"API Testing","pages":[{"title":"API Testing","href":"/api-testing"}]}]},"basePath":"","title":"Git Integration - Checksum AI","buildId":"dpl_6PxPD4Fj1JDU9BJxEHvfdUmxKThw","deploymentId":"dpl_6PxPD4Fj1JDU9BJxEHvfdUmxKThw","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BI-0LlZX.js","DynamicMarkdown-JYyBNlrJ.js","zoom-image-lightbox-hIK1nklX.js","lightbox-handle-r17bVUz3.js"]}