Qodex’s PR review is designed for high-signal feedback on normal pull requests. These limits explain what it reviews today, what it skips, and how to work around common boundaries.
The PR review settings (the Settings tab on Code > PR review, or Settings > PR review) show the effective allowance for the project: how many reviewed pull requests the plan includes a month, how many reviews each pull request can have, and how many pull requests the project has used this month. The Pull requests tab shows the same monthly count in its toolbar.Monthly allowances count distinct pull requests per calendar month in UTC. The whole allowance comes back at 00:00 UTC on the 1st. On the Free PR-review tier, a project can have 20 pull requests reviewed a month and up to two reviews of each pull request.The per-pull-request limit counts every review, whoever started it: a push, a @qodex-ai review comment, or the Run review button. When a pull request has used every review its plan includes, @qodex-ai review answers “Review limit reached” and the Run review button is disabled. On a plan with a hard monthly limit, once the month’s pull requests are used, new reviews are skipped with a neutral “Qodex review skipped: plan limit” Check Run and a comment that says when reviews resume.When the plan includes a set number of pull requests, project members are emailed once when 80% of the month’s included pull requests are used and once when they are all used.Paid or custom plans can have different limits. Use the project’s PR review settings rather than a plan name as the source of truth for the active allowance, and see the pricing page for plan details.
After a review finishes, the Run review button in Qodex waits two minutes before it runs another review on the same pull request. The button counts down the time left. This guards against duplicate clicks and is not a plan limit.
The unified diff is capped at 200 KB before it is sent to the model. A PR that touches a large generated file, a vendored library, or a refactor across hundreds of files will be truncated. The agent is told the diff is truncated and is instructed to focus on what it can see. The walkthrough footer shows diff truncated at 200KB when this fires.What to do: split large PRs when possible. Qodex reviews each PR independently, so two 100 KB PRs get full review coverage where one 400 KB PR loses part of the diff.
Every finding has a confidence score between 0.7 and 1.0. Anything below 0.7 is dropped before it ever reaches your PR. The floor is not tunable per project today.What to know: this is intentional. Qodex optimizes for precision over recall so the PR thread stays useful.
Every review starts with a high-precision pass across correctness, security, performance, maintainability, style, and conventions. On a non-trivial diff that appears clean, Qodex can run a deeper follow-up pass before reporting a clean result. The walkthrough’s What Qodex checked block records the passes and filters that actually ran.What to know: no review is a proof that a change has no defects. Findings are still limited by the available diff, repository context, and configured exclusions.
A review fires on a pull request event or a request, not on a timer. If you change .qodex.yaml and want the new policy applied to an open PR, push a new commit or run @qodex-ai review. The updated policy does not retroactively re-score past findings.
A draft PR is skipped with a neutral Check Run and the reason “PR is a draft; Qodex will review on ready_for_review.” Marking the PR ready for review starts a review.
GitHub rejects inline comments on lines that are not part of the PR diff. Findings that reference a line the PR did not touch move into the walkthrough body under “Findings outside the diff” and are tagged advisory. The author still sees them.
When a finding is anchored on a comment, blank line, import, or brace-only line, Qodex strips the suggestion block and adds an Anchor uncertain badge. The check is conservative because a wrong suggestion can replace the wrong line. The description always still posts.
.qodex.yaml ships with pr_review.block_pr_merge: false. The Check Run conclusion is always neutral until the repo opts in. Even when opted in, only verified findings at or above block_on_severity flip to failure; unverified findings never block.What to know: a fresh repo with no .qodex.yaml will never gate a merge. This is the safe default.
The config file is fetched from the PR head SHA and rejected if larger than 16 KB. A larger file falls back to defaults silently with a logged warning.
A repo over 500 MB cannot be linked. The link POST returns 413 with the message “Repo is MB, exceeds 500MB cap. Subdirectory selection for monorepos is planned for v2.”
A Qodex project can link at most 10 GitHub repos. Hitting the cap returns 409 with “Project already has 10 linked repos (max). Unlink one before adding another.” This cap is per project, not per install.
Verification probes are GET-only today. Every other verb is rejected before any request is made. Non-idempotent probes are gated behind an explicit .qodex.yaml opt-in (probes.allow_non_get: true) and are on the roadmap.
A probe is one GET. There is no multi-step probe, no login-then-probe flow, no probe chaining, and no probe retries. A flaky preview environment marks probes as failed. The finding still posts, just without the verification badge.
Preview deployment must come from GitHub Deployments
Qodex discovers the preview URL through the GitHub Deployments API. Vercel, Netlify, Cloudflare Pages, Render, and Railway all set Deployments by default. Custom CI that does not write to the Deployments API will not be discovered, and probes land as skipped.
Non-GET probes (POST, PUT, PATCH, and DELETE) remain unavailable. They are reserved for preview environments where mutation can be explicitly controlled.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Qodex","colors":{"primary":"#3B82F6"},"logo":{"light":"https://mintcdn.com/qodexai/P6C0FF6uddKFEAsX/logo-coral.svg?fit=max\u0026auto=format\u0026n=P6C0FF6uddKFEAsX\u0026q=85\u0026s=4b3af197a898df33ff25e878e4209af8","dark":"https://mintcdn.com/qodexai/P6C0FF6uddKFEAsX/logo-coral.svg?fit=max\u0026auto=format\u0026n=P6C0FF6uddKFEAsX\u0026q=85\u0026s=4b3af197a898df33ff25e878e4209af8","href":"https://qodex.ai/docs/introduction"},"favicon":"https://mintcdn.com/qodexai/P6C0FF6uddKFEAsX/favicon.png?fit=max\u0026auto=format\u0026n=P6C0FF6uddKFEAsX\u0026q=85\u0026s=520beb39c30302f8496f2a2050ee9421","navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://agents.qodex.ai/dashboard"}},"search":{"prompt":"Search the docs..."},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Demo Call with CEO","icon":"phone","href":"https://cal.com/siddhant-mohan/45mins?duration=45\u0026overlayCalendar=true"},{"anchor":"Blog","icon":"newspaper","href":"https://qodex.ai/blog"},{"anchor":"Discord","icon":"message-circle","href":"https://discord.gg/h2tP328g"},{"anchor":"Changelog","icon":"scroll-text","href":"/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qodexai","hasAudioNarration":false,"actualSubdomain":"qodexai","customDomains":["qodex.ai"],"gitSource":{"type":"github","owner":"qodex-ai","repo":"docs-public","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6add0c32002829fb71da2c63","collectionId":"77df8ad4-117a-4ed7-8c5b-578b43e4fc0e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6add0c32002829fb71da2c63"},"entitlements":{},"buildId":"6add0c32002829fb71da2c63","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"Documentation","count":97},{"language":"default","tag":"Reference","count":23},{"language":"default","tag":"Run tests","count":16},{"language":"default","tag":"Common questions","count":13},{"language":"default","tag":"PR review","count":13},{"language":"default","tag":"API testing","count":12},{"language":"default","tag":"OpenQodex","count":12},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Get started","count":7},{"language":"default","tag":"In CI","count":7}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","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":"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},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"pr-review-limits-caveats","slug":"/pr-review-limits-caveats","pageMetadata":{"title":"Limits and caveats","description":"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.","icon":"ruler","href":"/pr-review-limits-caveats"},"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: \"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.\"\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={code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Heading,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`limits-and-caveats`,children:`Limits and caveats`}),`\n`,_jsx(_components.p,{children:`Qodex’s PR review is designed for high-signal feedback on normal pull requests. These limits explain what it reviews today, what it skips, and how to work around common boundaries.`}),`\n`,_jsx(Heading,{level:`2`,id:`quick-summary`,children:`Quick summary`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Large diffs are truncated at 200 KB.`}),`\n`,_jsxs(_components.li,{children:[`Findings below `,_jsx(_components.code,{children:`0.7`}),` confidence are dropped.`]}),`\n`,_jsx(_components.li,{children:`Reviews are advisory by default unless you opt in to merge blocking.`}),`\n`,_jsx(_components.li,{children:`Draft PRs, and automatic reviews on repos where they are turned off, are skipped with a neutral Check Run.`}),`\n`,_jsx(_components.li,{children:`Verification probes are GET-only and require a discoverable preview deployment.`}),`\n`,_jsx(_components.li,{children:`The project plan can limit both the number of pull requests reviewed in a calendar month and the number of reviews of one pull request.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`pr-review-plan-limits`,children:`PR-review plan limits`}),`\n`,_jsxs(_components.p,{children:[`The PR review settings (the `,_jsx(_components.strong,{children:`Settings`}),` tab on `,_jsx(_components.strong,{children:`Code > PR review`}),`, or `,_jsx(_components.strong,{children:`Settings > PR review`}),`) show the effective allowance for the project: how many reviewed pull requests the plan includes a month, how many reviews each pull request can have, and how many pull requests the project has used this month. The `,_jsx(_components.strong,{children:`Pull requests`}),` tab shows the same monthly count in its toolbar.`]}),`\n`,_jsx(_components.p,{children:`Monthly allowances count distinct pull requests per calendar month in UTC. The whole allowance comes back at 00:00 UTC on the 1st. On the Free PR-review tier, a project can have 20 pull requests reviewed a month and up to two reviews of each pull request.`}),`\n`,_jsxs(_components.p,{children:[`The per-pull-request limit counts every review, whoever started it: a push, a `,_jsx(_components.code,{children:`@qodex-ai review`}),` comment, or the `,_jsx(_components.strong,{children:`Run review`}),` button. When a pull request has used every review its plan includes, `,_jsx(_components.code,{children:`@qodex-ai review`}),` answers “Review limit reached” and the `,_jsx(_components.strong,{children:`Run review`}),` button is disabled. On a plan with a hard monthly limit, once the month’s pull requests are used, new reviews are skipped with a neutral “Qodex review skipped: plan limit” Check Run and a comment that says when reviews resume.`]}),`\n`,_jsx(_components.p,{children:`When the plan includes a set number of pull requests, project members are emailed once when 80% of the month’s included pull requests are used and once when they are all used.`}),`\n`,_jsx(_components.p,{children:`Paid or custom plans can have different limits. Use the project’s PR review settings rather than a plan name as the source of truth for the active allowance, and see the pricing page for plan details.`}),`\n`,_jsx(Heading,{level:`2`,id:`run-review-cooldown`,children:`Run review cooldown`}),`\n`,_jsxs(_components.p,{children:[`After a review finishes, the `,_jsx(_components.strong,{children:`Run review`}),` button in Qodex waits two minutes before it runs another review on the same pull request. The button counts down the time left. This guards against duplicate clicks and is not a plan limit.`]}),`\n`,_jsx(Heading,{level:`2`,id:`diff-truncation-at-200-kb`,children:`Diff truncation at 200 KB`}),`\n`,_jsxs(_components.p,{children:[`The unified diff is capped at 200 KB before it is sent to the model. A PR that touches a large generated file, a vendored library, or a refactor across hundreds of files will be truncated. The agent is told the diff is truncated and is instructed to focus on what it can see. The walkthrough footer shows `,_jsx(_components.code,{children:`diff truncated at 200KB`}),` when this fires.`]}),`\n`,_jsx(_components.p,{children:`What to do: split large PRs when possible. Qodex reviews each PR independently, so two 100 KB PRs get full review coverage where one 400 KB PR loses part of the diff.`}),`\n`,_jsx(Heading,{level:`2`,id:`confidence-floor-at-0-7`,children:`Confidence floor at 0.7`}),`\n`,_jsxs(_components.p,{children:[`Every finding has a confidence score between `,_jsx(_components.code,{children:`0.7`}),` and `,_jsx(_components.code,{children:`1.0`}),`. Anything below `,_jsx(_components.code,{children:`0.7`}),` is dropped before it ever reaches your PR. The floor is not tunable per project today.`]}),`\n`,_jsx(_components.p,{children:`What to know: this is intentional. Qodex optimizes for precision over recall so the PR thread stays useful.`}),`\n`,_jsx(Heading,{level:`2`,id:`review-depth-is-risk-based`,children:`Review depth is risk-based`}),`\n`,_jsxs(_components.p,{children:[`Every review starts with a high-precision pass across correctness, security, performance, maintainability, style, and conventions. On a non-trivial diff that appears clean, Qodex can run a deeper follow-up pass before reporting a clean result. The walkthrough’s `,_jsx(_components.strong,{children:`What Qodex checked`}),` block records the passes and filters that actually ran.`]}),`\n`,_jsx(_components.p,{children:`What to know: no review is a proof that a change has no defects. Findings are still limited by the available diff, repository context, and configured exclusions.`}),`\n`,_jsx(Heading,{level:`2`,id:`no-scheduled-re-review`,children:`No scheduled re-review`}),`\n`,_jsxs(_components.p,{children:[`A review fires on a pull request event or a request, not on a timer. If you change `,_jsx(_components.code,{children:`.qodex.yaml`}),` and want the new policy applied to an open PR, push a new commit or run `,_jsx(_components.code,{children:`@qodex-ai review`}),`. The updated policy does not retroactively re-score past findings.`]}),`\n`,_jsx(Heading,{level:`2`,id:`draft-prs-are-skipped`,children:`Draft PRs are skipped`}),`\n`,_jsxs(_components.p,{children:[`A draft PR is skipped with a `,_jsx(_components.code,{children:`neutral`}),` Check Run and the reason “PR is a draft; Qodex will review on ready_for_review.” Marking the PR ready for review starts a review.`]}),`\n`,_jsx(Heading,{level:`2`,id:`inline-comments-must-land-on-lines-in-the-diff`,children:`Inline comments must land on lines in the diff`}),`\n`,_jsx(_components.p,{children:`GitHub rejects inline comments on lines that are not part of the PR diff. Findings that reference a line the PR did not touch move into the walkthrough body under “Findings outside the diff” and are tagged advisory. The author still sees them.`}),`\n`,_jsx(Heading,{level:`2`,id:`misanchor-guard-can-strip-a-useful-suggestion`,children:`Misanchor guard can strip a useful suggestion`}),`\n`,_jsxs(_components.p,{children:[`When a finding is anchored on a comment, blank line, import, or brace-only line, Qodex strips the suggestion block and adds an `,_jsx(_components.code,{children:`Anchor uncertain`}),` badge. The check is conservative because a wrong suggestion can replace the wrong line. The description always still posts.`]}),`\n`,_jsx(Heading,{level:`2`,id:`check-run-is-advisory-by-default`,children:`Check Run is advisory by default`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`.qodex.yaml`}),` ships with `,_jsx(_components.code,{children:`pr_review.block_pr_merge: false`}),`. The Check Run conclusion is always `,_jsx(_components.code,{children:`neutral`}),` until the repo opts in. Even when opted in, only verified findings at or above `,_jsx(_components.code,{children:`block_on_severity`}),` flip to `,_jsx(_components.code,{children:`failure`}),`; unverified findings never block.`]}),`\n`,_jsxs(_components.p,{children:[`What to know: a fresh repo with no `,_jsx(_components.code,{children:`.qodex.yaml`}),` will never gate a merge. This is the safe default.`]}),`\n`,_jsxs(Heading,{level:`2`,id:`qodex-yaml-is-capped-at-16-kb`,children:[_jsx(_components.code,{children:`.qodex.yaml`}),` is capped at 16 KB`]}),`\n`,_jsx(_components.p,{children:`The config file is fetched from the PR head SHA and rejected if larger than 16 KB. A larger file falls back to defaults silently with a logged warning.`}),`\n`,_jsx(Heading,{level:`2`,id:`repo-size-cap-at-500-mb`,children:`Repo size cap at 500 MB`}),`\n`,_jsxs(_components.p,{children:[`A repo over 500 MB cannot be linked. The link POST returns 413 with the message “Repo `,` is `,`MB, exceeds 500MB cap. Subdirectory selection for monorepos is planned for v2.”`]}),`\n`,_jsx(Heading,{level:`2`,id:`10-repos-per-project`,children:`10 repos per project`}),`\n`,_jsx(_components.p,{children:`A Qodex project can link at most 10 GitHub repos. Hitting the cap returns 409 with “Project already has 10 linked repos (max). Unlink one before adding another.” This cap is per project, not per install.`}),`\n`,_jsx(Heading,{level:`2`,id:`probe-is-get-only`,children:`Probe is GET-only`}),`\n`,_jsxs(_components.p,{children:[`Verification probes are GET-only today. Every other verb is rejected before any request is made. Non-idempotent probes are gated behind an explicit `,_jsx(_components.code,{children:`.qodex.yaml`}),` opt-in (`,_jsx(_components.code,{children:`probes.allow_non_get: true`}),`) and are on the roadmap.`]}),`\n`,_jsx(Heading,{level:`2`,id:`probe-is-one-request`,children:`Probe is one request`}),`\n`,_jsxs(_components.p,{children:[`A probe is one GET. There is no multi-step probe, no login-then-probe flow, no probe chaining, and no probe retries. A flaky preview environment marks probes as `,_jsx(_components.code,{children:`failed`}),`. The finding still posts, just without the verification badge.`]}),`\n`,_jsx(Heading,{level:`2`,id:`preview-deployment-must-come-from-github-deployments`,children:`Preview deployment must come from GitHub Deployments`}),`\n`,_jsxs(_components.p,{children:[`Qodex discovers the preview URL through the GitHub Deployments API. Vercel, Netlify, Cloudflare Pages, Render, and Railway all set Deployments by default. Custom CI that does not write to the Deployments API will not be discovered, and probes land as `,_jsx(_components.code,{children:`skipped`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`on-the-roadmap`,children:`On the roadmap`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Non-GET probes (`,_jsx(_components.code,{children:`POST`}),`, `,_jsx(_components.code,{children:`PUT`}),`, `,_jsx(_components.code,{children:`PATCH`}),`, and `,_jsx(_components.code,{children:`DELETE`}),`) remain unavailable. They are reserved for preview environments where mutation can be explicitly controlled.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Troubleshooting`,icon:`life-buoy`,href:`/pr-review-troubleshooting`}),_jsx(Card,{title:`.qodex.yaml reference`,icon:`file-code`,href:`/qodex-yaml-reference`}),_jsx(Card,{title:`Verification probes`,icon:`zap`,href:`/pr-review-verification-probes`}),_jsx(Card,{title:`Check Run and merge gating`,icon:`shield-check`,href:`/pr-review-check-run`})]})]})}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":"Limits and caveats","description":"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.","icon":"ruler","href":"/pr-review-limits-caveats"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Limits and caveats","slug":"limits-and-caveats","depth":1,"children":[]},{"title":"Quick summary","slug":"quick-summary","depth":2,"children":[]},{"title":"PR-review plan limits","slug":"pr-review-plan-limits","depth":2,"children":[]},{"title":"Run review cooldown","slug":"run-review-cooldown","depth":2,"children":[]},{"title":"Diff truncation at 200 KB","slug":"diff-truncation-at-200-kb","depth":2,"children":[]},{"title":"Confidence floor at 0.7","slug":"confidence-floor-at-0-7","depth":2,"children":[]},{"title":"Review depth is risk-based","slug":"review-depth-is-risk-based","depth":2,"children":[]},{"title":"No scheduled re-review","slug":"no-scheduled-re-review","depth":2,"children":[]},{"title":"Draft PRs are skipped","slug":"draft-prs-are-skipped","depth":2,"children":[]},{"title":"Inline comments must land on lines in the diff","slug":"inline-comments-must-land-on-lines-in-the-diff","depth":2,"children":[]},{"title":"Misanchor guard can strip a useful suggestion","slug":"misanchor-guard-can-strip-a-useful-suggestion","depth":2,"children":[]},{"title":"Check Run is advisory by default","slug":"check-run-is-advisory-by-default","depth":2,"children":[]},{"title":".qodex.yaml is capped at 16 KB","slug":"qodex-yaml-is-capped-at-16-kb","depth":2,"children":[]},{"title":"Repo size cap at 500 MB","slug":"repo-size-cap-at-500-mb","depth":2,"children":[]},{"title":"10 repos per project","slug":"10-repos-per-project","depth":2,"children":[]},{"title":"Probe is GET-only","slug":"probe-is-get-only","depth":2,"children":[]},{"title":"Probe is one request","slug":"probe-is-one-request","depth":2,"children":[]},{"title":"Preview deployment must come from GitHub Deployments","slug":"preview-deployment-must-come-from-github-deployments","depth":2,"children":[]},{"title":"On the roadmap","slug":"on-the-roadmap","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"qodexai","siteName":"Qodex","title":"Limits and caveats - Qodex","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-18T06:53:02.177Z","originalFileLocation":"pr-review-limits-caveats.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=\"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Qodex\">\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/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_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/qodexai/CvWudqS8dDlB66QO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Limits and caveats - Qodex\">\u003cmeta data-mint-head property=\"og:description\" content=\"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Qodex\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://qodex.ai/docs/pr-review-limits-caveats\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qodexai.mintlify.site/docs/_mintlify/api/og/v2?division=PR+review\u0026amp;title=Limits+and+caveats\u0026amp;description=Current+PR+review+limits%2C+why+they+exist%2C+and+what+to+do+when+you+hit+them.+Plan+reviews+around+the+current+boundaries.\u0026amp;theme=9930d66f3eecbeefb92e0bc0\u0026amp;signature=2d304e81ba3889a99e8d5b99fb9c954cc65ce59b50f79fe72e7ea41a0596a534\">\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=\"Limits and caveats - Qodex\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qodexai.mintlify.site/docs/_mintlify/api/og/v2?division=PR+review\u0026amp;title=Limits+and+caveats\u0026amp;description=Current+PR+review+limits%2C+why+they+exist%2C+and+what+to+do+when+you+hit+them.+Plan+reviews+around+the+current+boundaries.\u0026amp;theme=9930d66f3eecbeefb92e0bc0\u0026amp;signature=2d304e81ba3889a99e8d5b99fb9c954cc65ce59b50f79fe72e7ea41a0596a534\">\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/qodexai/CvWudqS8dDlB66QO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Qodex\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3B82F6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://qodex.ai/docs/pr-review-limits-caveats\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/pr-review-limits-caveats.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://qodex.ai/#organization\",\"name\":\"Qodex\",\"url\":\"https://qodex.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qodexai/P6C0FF6uddKFEAsX/logo-coral.svg?fit=max\u0026auto=format\u0026n=P6C0FF6uddKFEAsX\u0026q=85\u0026s=4b3af197a898df33ff25e878e4209af8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://qodex.ai/docs#website\",\"name\":\"Qodex\",\"url\":\"https://qodex.ai/docs\",\"publisher\":{\"@id\":\"https://qodex.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://qodex.ai/docs/pr-review-limits-caveats#webpage\",\"url\":\"https://qodex.ai/docs/pr-review-limits-caveats\",\"name\":\"Limits and caveats\",\"description\":\"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.\",\"dateModified\":\"2026-09-18T06:53:02.177Z\",\"isPartOf\":{\"@id\":\"https://qodex.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://qodex.ai/docs/pr-review-limits-caveats#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://qodex.ai/docs/pr-review-limits-caveats#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"PR review\",\"item\":\"https://qodex.ai/docs/pr-review\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Limits and caveats\",\"item\":\"https://qodex.ai/docs/pr-review-limits-caveats\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://qodex.ai/docs/pr-review-limits-caveats#article\",\"headline\":\"Limits and caveats\",\"name\":\"Limits and caveats\",\"description\":\"Current PR review limits, why they exist, and what to do when you hit them. Plan reviews around the current boundaries.\",\"url\":\"https://qodex.ai/docs/pr-review-limits-caveats\",\"mainEntityOfPage\":{\"@id\":\"https://qodex.ai/docs/pr-review-limits-caveats#webpage\"},\"dateModified\":\"2026-09-18T06:53:02.177Z\",\"publisher\":{\"@id\":\"https://qodex.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://qodex.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Qodex\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Qodex","nav":{"global":{"anchors":[{"anchor":"Demo Call with CEO","icon":"phone","href":"https://cal.com/siddhant-mohan/45mins?duration=45\u0026overlayCalendar=true"},{"anchor":"Blog","icon":"newspaper","href":"https://qodex.ai/blog"},{"anchor":"Discord","icon":"message-circle","href":"https://discord.gg/h2tP328g"},{"anchor":"Changelog","icon":"scroll-text","href":"/changelog"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Introduction","icon":"sparkles","href":"/introduction"},{"title":"Quickstart","icon":"play","href":"/quickstart"},{"title":"How Qodex works","icon":"workflow","href":"/how-qodex-works"},{"title":"Operating modes","icon":"layers","href":"/operating-modes"},{"title":"How Qodex compares","icon":"scale","href":"/comparisons"}]},{"group":"Concepts","icon":"circuit-board","pages":[{"title":"How scenarios work","sidebarTitle":"Scenarios","icon":"list-checks","href":"/concepts-scenarios"},{"title":"Scripts","icon":"code","href":"/concepts-scripts"},{"title":"How findings work","sidebarTitle":"Findings","icon":"bug","href":"/concepts-findings"},{"title":"How skills work","sidebarTitle":"Skills","icon":"puzzle","href":"/concepts-skills"},{"title":"How memory works","sidebarTitle":"Memory","icon":"brain","href":"/concepts-memory"},{"title":"Projects","icon":"folder","href":"/concepts-projects"}]},{"group":"PR review","icon":"git-pull-request","pages":[{"title":"PR review","icon":"git-pull-request","href":"/pr-review"},{"title":"How a review fires","icon":"webhook","href":"/pr-review-how-it-fires"},{"title":"Walkthrough anatomy","icon":"message-square","href":"/pr-review-walkthrough-anatomy"},{"title":"Inline findings","icon":"message-square-text","href":"/pr-review-inline-findings"},{"title":"Verification probes","icon":"zap","href":"/pr-review-verification-probes"},{"title":"Check Run and merge gating","icon":"shield-check","href":"/pr-review-check-run"},{"title":"Slash commands","icon":"terminal","href":"/pr-review-slash-commands"},{"group":"Setting up","icon":"settings","pages":[{"title":"Install the GitHub App","icon":"github","href":"/pr-review-install-github-app"},{"title":"Connect a repo","icon":"link","href":"/pr-review-connect-repo"},{"title":"Disconnect a GitHub account","icon":"unplug","href":"/pr-review-disconnect"},{"title":"Multi-project routing","description":"How one GitHub repo can be linked to multiple Qodex projects, with separate reviews and findings. See how routing and isolation work.","icon":"git-fork","href":"/pr-review-multi-project-routing"}]},{"title":"Limits and caveats","icon":"ruler","href":"/pr-review-limits-caveats"},{"title":"Troubleshooting PR review","description":"Fix common PR review issues, including skipped reviews, plan limits, neutral checks, uncertain anchors, and opt-outs.","icon":"life-buoy","href":"/pr-review-troubleshooting"}]},{"group":"API testing","icon":"code","pages":[{"title":"API testing","icon":"plug","href":"/api-testing"},{"title":"Import an OpenAPI spec","icon":"file-code","href":"/api-testing-openapi-import"},{"title":"Import a Postman collection","icon":"folder-input","href":"/api-testing-postman-import"},{"title":"API test scenarios","sidebarTitle":"Scenarios","icon":"list-checks","href":"/api-testing-scenarios"},{"title":"Chaining and postscripts","icon":"link","href":"/api-testing-chaining"},{"title":"API Playground","icon":"terminal","href":"/api-testing-playground"},{"title":"Auth profiles","icon":"key","href":"/api-testing-auth-profiles"},{"title":"Auto-verification on save","icon":"circle-check","href":"/api-testing-auto-verification"},{"title":"Request data generation","icon":"sparkles","href":"/api-testing-request-data-generation"},{"title":"Test rules in plain English","icon":"check-check","href":"/api-testing-test-rules"},{"title":"Endpoint catalog","icon":"list","href":"/api-testing-endpoint-catalog"},{"title":"API governance","icon":"map","href":"/api-testing-governance"}]},{"group":"UI testing","icon":"monitor","pages":[{"title":"UI testing","icon":"monitor","href":"/ui-testing"},{"title":"Crawling and the Pages catalog","icon":"map","href":"/ui-testing-crawling"},{"title":"Intent-driven UI scenarios","icon":"wand-sparkles","href":"/ui-testing-intent-driven-scenarios"},{"title":"Replay cache and self-healing","icon":"recycle","href":"/ui-testing-replay-cache"},{"title":"Per-step artifacts","icon":"camera","href":"/ui-testing-artifacts"}]},{"group":"Security testing","icon":"shield","pages":[{"title":"Security testing","icon":"shield-check","href":"/security-testing"},{"title":"OWASP API Top 10 in Qodex","icon":"list-ordered","href":"/security-testing-owasp-api-top-10"},{"title":"Security scenarios","icon":"shield-half","href":"/security-testing-scenarios"},{"title":"Inverted semantics","icon":"arrows-up-down","href":"/security-testing-inverted-semantics"},{"title":"Sensitive endpoints","icon":"lock","href":"/security-testing-sensitive-endpoints"}]},{"group":"Load testing","icon":"gauge","pages":[{"title":"Load testing","icon":"gauge","href":"/load-testing"}]},{"group":"Run tests","icon":"play","pages":[{"title":"Run tests","icon":"play","href":"/run-tests"},{"title":"Run tests from the web app","icon":"mouse-pointer-click","href":"/run-tests-from-web-app"},{"title":"Run tests on a schedule","icon":"calendar-clock","href":"/run-tests-on-schedule"},{"title":"Run tests via webhook","icon":"webhook","href":"/run-tests-via-webhook"},{"title":"Run a single scenario","icon":"play","href":"/run-tests-single-scenario"},{"title":"Run tag-filtered scenarios","icon":"tag","href":"/run-tests-tag-filtered"},{"title":"Test groups and folders","icon":"folder","href":"/run-tests-test-groups-and-folders"},{"title":"Run the full suite","icon":"list-checks","href":"/run-tests-full-suite"},{"title":"Re-run failed tests","icon":"rotate-ccw","href":"/run-tests-rerun-failed"},{"group":"In CI","icon":"git-branch","pages":[{"title":"Run tests in CI","icon":"git-branch","href":"/run-tests-in-ci"},{"title":"Run tests in GitHub Actions","icon":"github","href":"/run-tests-ci-github-actions"},{"title":"Run tests in GitLab CI","icon":"gitlab","href":"/run-tests-ci-gitlab"},{"title":"Run tests in CircleCI","icon":"circle","href":"/run-tests-ci-circleci"},{"title":"Run tests in Buildkite","icon":"hammer","href":"/run-tests-ci-buildkite"},{"title":"Run tests in Jenkins","icon":"server","href":"/run-tests-ci-jenkins"},{"title":"Run tests with a generic shell","icon":"terminal","href":"/run-tests-ci-generic-shell"}]}]},{"group":"Autopilot","icon":"bot","pages":[{"title":"Autopilot","icon":"bot","href":"/autopilot"},{"title":"Missions and agents","icon":"target","href":"/missions"}]},{"group":"Findings","icon":"bug","pages":[{"title":"Findings","icon":"bug","href":"/findings"},{"title":"Severity model","icon":"signal","href":"/findings-severity-model"},{"title":"Failure classification","icon":"filter","href":"/findings-failure-classification"},{"title":"Triage workflow","icon":"list-checks","href":"/findings-triage-workflow"}]},{"group":"Memory","icon":"brain","pages":[{"title":"Project memory and reusable context","icon":"brain","href":"/memory"},{"title":"business.md","icon":"pencil","href":"/memory-project-md"},{"title":"Editing and curating memory","icon":"pencil","href":"/memory-editing-and-curating"}]},{"group":"Skills","icon":"blocks","pages":[{"title":"Agent skills and custom workflows","icon":"puzzle","href":"/skills"},{"title":"The .skill.md format","icon":"file-code","href":"/skills-format"},{"title":"Built-in skills","icon":"layers","href":"/skills-built-in"},{"title":"Author a skill","icon":"file-plus","href":"/skills-authoring"},{"title":"Distribute a skill","icon":"share-2","href":"/skills-distributing"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"Integrations","icon":"plug","href":"/integrations"},{"title":"GitHub integration for PR reviews","icon":"git-branch","href":"/integrations-github"},{"title":"Syncing Tests to GitHub","href":"/syncing-tests-to-github"},{"title":"GitLab","icon":"gitlab","href":"/integrations-gitlab"},{"title":"MCP","icon":"blocks","href":"/integrations-mcp"},{"title":"Slack integration for test alerts","icon":"message-square","href":"/integrations-slack"},{"title":"Generic webhook","icon":"webhook","href":"/integrations-generic-webhook"},{"title":"Bring your own key","icon":"key","href":"/integrations-byok"}]},{"group":"Self-hosted","icon":"server","pages":[{"title":"Self-hosted","icon":"server","href":"/self-hosted"},{"title":"Single-container deploy","icon":"box","href":"/self-hosted-single-container"},{"title":"Docker Compose","icon":"layers","href":"/self-hosted-docker-compose"},{"title":"AWS Terraform reference","icon":"cloud","href":"/self-hosted-aws-terraform"},{"title":"Environment variables","icon":"settings","href":"/self-hosted-environment-variables"},{"title":"Storage backends","icon":"hard-drive","href":"/self-hosted-storage-backends"},{"title":"Secret management","icon":"key","href":"/self-hosted-secret-management"}]},{"group":"Account","icon":"user","pages":[{"title":"Workspaces and projects","icon":"folder","href":"/account-workspaces-and-projects"},{"title":"Members and roles","icon":"users","href":"/account-members-and-roles"},{"title":"Plans and pricing","icon":"credit-card","href":"/account-plans-and-pricing"},{"title":"Usage and cost caps","icon":"gauge","href":"/account-usage-and-cost-caps"},{"title":"Security and data handling","icon":"lock","href":"/security-and-data-handling"}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/qodex-yaml-overview"}]},{"tab":"OpenQodex","pages":[{"title":"OpenQodex","href":"/openqodex"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Limits and caveats - Qodex","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":[],"chunks":[]}