Run destructive tests against real production data without touching production
Unit tests with mocked data miss the bugs that only appear with real data at real scale. Ardent lets you run your full test suite, including destructive operations, against an exact copy of production.
ardent branch create prints a Postgres URL for the new branch. If you need it again, run ardent branch info regression-run (or ardent branch info when that branch is already checked out).
The examples below assume your tests read DATABASE_URL (Django, SQLAlchemy, Prisma, and most pytest setups do). If yours uses a different variable or a .env file, substitute that.
# Branch from production and export the returned URLDATABASE_URL="$(ardent branch create regression-run --print-url)"if [ -z "$DATABASE_URL" ]; then echo "branch creation did not return a database URL" >&2 exit 1fiexport DATABASE_URLnpm test# or: pytest (if your tests read DATABASE_URL; some stacks use a different env var)# Tear it down: production was never touchedardent branch delete regression-run
One-liner:DATABASE_URL='…' npm test sets the variable for just that command. export is easier when you’ll run more than one.
In CI: create the branch in the job, assign the URL to DATABASE_URL (or wire it into your framework), run your test command, then delete the branch. See CI / CD for a GitHub Actions–shaped example.
Run a regression test on [describe change] against a real copy of our database.
Without the skill, paste the full directions:
Run a regression test on [describe change] against a real copy of our database.Create an Ardent branch (ardent branch create), run the tests against it,report what broke, then delete the branch.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ardent","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/ardent-48ce3428/AH2Rs53EKNDde6Qn/logo/light.svg?fit=max\u0026auto=format\u0026n=AH2Rs53EKNDde6Qn\u0026q=85\u0026s=5fc04448630908a535e6ff2ec3e536f9","dark":"https://mintcdn.com/ardent-48ce3428/AH2Rs53EKNDde6Qn/logo/dark.svg?fit=max\u0026auto=format\u0026n=AH2Rs53EKNDde6Qn\u0026q=85\u0026s=13a0c6bdad819b802b712fbb50c5576e"},"favicon":"https://mintcdn.com/ardent-48ce3428/AH2Rs53EKNDde6Qn/favicon.svg?fit=max\u0026auto=format\u0026n=AH2Rs53EKNDde6Qn\u0026q=85\u0026s=41eaa659773d3642c4f994f276e5f665","navbar":{"links":[{"href":"mailto:vikram@tryardent.com","label":"Support"}],"primary":{"type":"button","label":"Log in","href":"https://app.tryardent.com"}},"footer":{},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ardent-48ce3428","hasAudioNarration":false,"actualSubdomain":"ardent-48ce3428","customDomains":["docs.tryardent.com"],"gitSource":{"type":"github","owner":"ardentailabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a5ebfbebd7901cdf8d1cd02","collectionId":"feb12d49-9da4-4101-8839-c79dff1174cf","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a5ebfbebd7901cdf8d1cd02"},"entitlements":{},"buildId":"6ae946362537587934518ba6:success","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API reference","count":33},{"language":"default","tag":"Core resources","count":25},{"language":"default","tag":"Connectors","count":19},{"language":"default","tag":"Documentation","count":14},{"language":"default","tag":"CLI reference","count":8},{"language":"default","tag":"CLI","count":8},{"language":"default","tag":"Projects","count":6},{"language":"default","tag":"Administration","count":5},{"language":"default","tag":"API keys","count":4},{"language":"default","tag":"Branches","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":"vite-origin","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":"workflows/regression-testing","slug":"/workflows/regression-testing","pageMetadata":{"title":"Regression testing","description":"Run destructive tests against real production data without touching production","href":"/workflows/regression-testing"},"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: \"Run destructive tests against real production data without touching production\"\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Unit tests with mocked data miss the bugs that only appear with real data at real scale. Ardent lets you run your full test suite, including destructive operations, against an exact copy of production.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/cli/branches`,children:_jsx(_components.code,{children:`ardent branch create`})}),` prints a Postgres URL for the new branch. If you need it again, run `,_jsx(_components.code,{children:`ardent branch info regression-run`}),` (or `,_jsx(_components.code,{children:`ardent branch info`}),` when that branch is already checked out).`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The examples below assume your tests read `,_jsx(_components.code,{children:`DATABASE_URL`}),` (Django, SQLAlchemy, Prisma, and most pytest setups do). If yours uses a different variable or a `,_jsx(_components.code,{children:`.env`}),` file, substitute that.`]})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Branch from production and export the returned URL`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`DATABASE_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ardent`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` branch create regression-run `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`--print-url`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`)\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [ `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-z`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$DATABASE_URL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`then`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"branch creation did not return a database URL\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >\u00262`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` exit`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`fi`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` DATABASE_URL`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` test`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# or: pytest (if your tests read DATABASE_URL; some stacks use a different env var)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Tear it down: production was never touched`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ardent`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` branch`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` delete`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` regression-run`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`One-liner:`}),` `,_jsx(_components.code,{children:`DATABASE_URL='…' npm test`}),` sets the variable for just that command. `,_jsx(_components.code,{children:`export`}),` is easier when you’ll run more than one.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`In CI:`}),` create the branch in the job, assign the URL to `,_jsx(_components.code,{children:`DATABASE_URL`}),` (or wire it into your framework), run your test command, then delete the branch. See `,_jsx(_components.a,{href:`/workflows/ci-cd`,children:`CI / CD`}),` for a GitHub Actions–shaped example.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-this-unlocks`,children:`What this unlocks`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Migration safety:`}),` run `,_jsx(_components.code,{children:`ALTER TABLE`}),`, `,_jsx(_components.code,{children:`DROP COLUMN`}),`, schema changes against real data before you ship`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Destructive queries:`}),` `,_jsx(_components.code,{children:`DELETE`}),`, `,_jsx(_components.code,{children:`TRUNCATE`}),`, bulk updates; see how much damage they would do — safely`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Index validation:`}),` try a new index and see if it actually speeds up your real queries`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Data-dependent bugs:`}),` catch edge cases that only exist in production data, not fixtures`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`hand-it-to-an-ai-agent`,children:`Hand it to an AI agent`}),`\n`,_jsxs(_components.p,{children:[`With the `,_jsx(_components.a,{href:`/workflows/ai-agents#let-the-agent-drive-set-it-up-once`,children:`ardent-cli skill`}),` installed, a short ask is enough:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Run a regression test on [describe change] against a real copy of our database.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Without the skill, paste the full directions:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Run a regression test on [describe change] against a real copy of our database.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Create an Ardent branch (ardent branch create), run the tests against it,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`report what broke, then delete the branch.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]})}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":"Regression testing","description":"Run destructive tests against real production data without touching production","href":"/workflows/regression-testing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"What this unlocks","slug":"what-this-unlocks","depth":2,"children":[]},{"title":"Hand it to an AI agent","slug":"hand-it-to-an-ai-agent","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"ardent-48ce3428","siteName":"Ardent","title":"Regression testing - Ardent","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-13T18:55:38.820Z","originalFileLocation":"workflows/regression-testing.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=\"Run destructive tests against real production data without touching production\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ardent\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_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=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Regression testing - Ardent\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run destructive tests against real production data without touching production\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ardent\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tryardent.com/workflows/regression-testing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ardent-48ce3428.mintlify.site/_mintlify/api/og/v2?division=Examples\u0026amp;title=Regression+testing\u0026amp;description=Run+destructive+tests+against+real+production+data+without+touching+production\u0026amp;theme=6ae3227d4aa15492e260842a\u0026amp;signature=6b20cdff27735c7283d224cc718f19f4374ee73048964df586f3c3e1b4f60d32\">\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=\"Regression testing - Ardent\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run destructive tests against real production data without touching production\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ardent-48ce3428.mintlify.site/_mintlify/api/og/v2?division=Examples\u0026amp;title=Regression+testing\u0026amp;description=Run+destructive+tests+against+real+production+data+without+touching+production\u0026amp;theme=6ae3227d4aa15492e260842a\u0026amp;signature=6b20cdff27735c7283d224cc718f19f4374ee73048964df586f3c3e1b4f60d32\">\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=\"/mintlify-assets/_mintlify/favicons/ardent-48ce3428/7WmDvSzlybS5CNlM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ardent\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tryardent.com/workflows/regression-testing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/workflows/regression-testing.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tryardent.com/#organization\",\"name\":\"Ardent\",\"url\":\"https://docs.tryardent.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ardent-48ce3428/AH2Rs53EKNDde6Qn/logo/light.svg?fit=max\u0026auto=format\u0026n=AH2Rs53EKNDde6Qn\u0026q=85\u0026s=5fc04448630908a535e6ff2ec3e536f9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tryardent.com#website\",\"name\":\"Ardent\",\"url\":\"https://docs.tryardent.com\",\"publisher\":{\"@id\":\"https://docs.tryardent.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tryardent.com/workflows/regression-testing#webpage\",\"url\":\"https://docs.tryardent.com/workflows/regression-testing\",\"name\":\"Regression testing\",\"description\":\"Run destructive tests against real production data without touching production\",\"dateModified\":\"2026-07-13T18:55:38.820Z\",\"isPartOf\":{\"@id\":\"https://docs.tryardent.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tryardent.com/workflows/regression-testing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tryardent.com/workflows/regression-testing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Examples\",\"item\":\"https://docs.tryardent.com/workflows/ai-agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Regression testing\",\"item\":\"https://docs.tryardent.com/workflows/regression-testing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.tryardent.com/workflows/regression-testing#article\",\"headline\":\"Regression testing\",\"name\":\"Regression testing\",\"description\":\"Run destructive tests against real production data without touching production\",\"url\":\"https://docs.tryardent.com/workflows/regression-testing\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tryardent.com/workflows/regression-testing#webpage\"},\"dateModified\":\"2026-07-13T18:55:38.820Z\",\"publisher\":{\"@id\":\"https://docs.tryardent.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tryardent.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ardent\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ardent","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Documentation","icon":"book-open","groups":[{"group":"Getting started","icon":"rocket","pages":[{"title":"Ardent: Git for your data infrastructure","sidebarTitle":"Introduction","href":""},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Examples","icon":"waypoints","pages":[{"title":"AI agents","href":"/workflows/ai-agents"},{"title":"Local development","href":"/workflows/local-dev"},{"title":"CI / CD","description":"A fresh database for every PR. Isolated, production-like, torn down after merge.","href":"/workflows/ci-cd"},{"title":"Regression testing","href":"/workflows/regression-testing"}]},{"group":"Connectors","icon":"unplug","pages":[{"group":"PostgreSQL","icon":"database","expanded":true,"pages":[{"title":"Supabase","description":"The Supabase-specific parts of connecting to Ardent","href":"/connectors/supabase"},{"title":"AWS RDS","href":"/connectors/rds"},{"title":"PlanetScale","href":"/connectors/planetscale"},{"title":"Self-hosted Postgres","href":"/connectors/self-hosted"}]}]},{"group":"Concepts","icon":"layers","pages":[{"title":"Architecture","href":"/architecture"},{"title":"Security","href":"/security"}]},{"group":"Help","icon":"circle-question-mark","pages":[{"title":"FAQ","href":"/faq"},{"title":"Contact","href":"/contact"}]}]},{"tab":"CLI reference","icon":"square-terminal","pages":[{"title":"CLI reference","href":"/cli/overview"}]},{"tab":"API reference","icon":"braces","pages":[{"title":"API reference","href":"/api/overview"}]}]},"basePath":"","title":"Regression testing - Ardent","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}