Stream test results and traces to Stably for analytics and AI-powered test maintenance
The Stably Reporter streams your Playwright test results, traces, and screenshots to Stably for debugging and AI-powered maintenance with stably fix.
The Stably Test Reporter is free to use — no paid plan required. It also includes built-in sensitive data scrubbing for traces — a feature not natively available in Playwright.
With the reporter enabled, you get a rich test results dashboard with detailed run history, failure analysis, and auto-heal reports that show exactly what changed and how Stably fixed your tests.
Using stably test? The reporter is automatically configured—no setup needed. Skip to Verify Setup.
1. Set environment variables in your .env file:
STABLY_API_KEY=your_api_key_here # Get from https://app.stably.ai/settings?tab=api-keySTABLY_PROJECT_ID=your_project_id_here # Find in your project URL on app.stably.ai
2. Add the reporter to playwright.config.ts:
import { defineConfig, stablyReporter } from "@stablyai/playwright-test";import dotenv from "dotenv";import path from "path";dotenv.config({ path: path.resolve(__dirname, ".env") });export default defineConfig({ reporter: [ ["list"], stablyReporter({ apiKey: process.env.STABLY_API_KEY, projectId: process.env.STABLY_PROJECT_ID, }), ], use: { trace: "on", // Required for debugging in Stably dashboard },});
Set trace: "on" instead of the default "on-first-retry" to capture traces for all runs.
The reporter enables AI-powered test maintenance. When tests fail, the reporter automatically prints a stably fix command with the run ID:
npx stably test # Run tests (results stream to Stably)# On failure, you'll see: 🔧 To auto-heal failed tests, run: stably fix <runId>stably fix # AI analyzes failures and generates fixes
stably fix auto-detects the run ID so you don’t need to copy-paste it. It checks in order: CI environment variables (GitHub Actions, Azure DevOps, Bitbucket, etc.), then the last local run saved by stably test. You can always pass an explicit run ID with stably fix <runId>. See Fix Tests (stably fix) — Run ID Detection for details.
Stably can redact sensitive strings (passwords, API keys, tokens) from Playwright traces before they are uploaded. There are two ways to enable scrubbing:
If you run tests with the --env flag, any variable marked Sensitive in your Stably Environment is automatically scrubbed from traces — no config changes needed.
stably --env Staging test
Variables marked as Sensitive on the Environments page are identified at runtime and redacted from trace data before upload. See Environments — Sensitive Variables for how to mark variables as sensitive.
If you are not using --env, or need to scrub additional values beyond what is stored in your environment, pass a sensitiveValues string array to the reporter. Each string will be redacted wherever it appears exactly in the trace.The sensitiveValues array accepts any strings — they do not have to come from process.env. Use whatever method matches your project’s configuration:
// Option 1: Reference environment variables (if available in process.env)stablyReporter({ apiKey: process.env.STABLY_API_KEY, projectId: process.env.STABLY_PROJECT_ID, sensitiveValues: [ process.env.TEST_USER_PASSWORD, process.env.API_SECRET, ],});// Option 2: Import from a config file or moduleimport { secrets } from "./test-config";stablyReporter({ apiKey: process.env.STABLY_API_KEY, projectId: process.env.STABLY_PROJECT_ID, sensitiveValues: [ secrets.testUserPassword, secrets.apiSecret, ],});// Option 3: Hardcoded strings (not recommended, but supported)stablyReporter({ apiKey: process.env.STABLY_API_KEY, projectId: process.env.STABLY_PROJECT_ID, sensitiveValues: [ "my-secret-password", ],});
Sensitive values are scrubbed from trace data, but screenshots and videos may still display secrets if they appear on screen during test execution. Avoid entering sensitive data in visible form fields when possible.Only exact string matches are scrubbed—partial matches within objects or arrays are not detected.To ensure the integrity of Playwright artifacts, the following patterns are never scrubbed—even when included in sensitiveValues:
The characters / and * (when alone)
Strings containing /artifact/, https://, http://, or *********
Pure numeric values (e.g., 123, 456789)
Values of internal keys: sha1, _sha1, pageref, downloadsPath, tracesDir, pageId, and any key ending in sha1
Complete setup including AI assertions and actions
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Stably","colors":{"primary":"#0066cc","light":"#3399ff","dark":"#004d99"},"logo":{"light":"https://mintcdn.com/stablyai/HGhEi1a2gNHuIFZi/logo/light.svg?fit=max\u0026auto=format\u0026n=HGhEi1a2gNHuIFZi\u0026q=85\u0026s=4449322f578b7c41cb15e23b398757fd","dark":"https://mintcdn.com/stablyai/HGhEi1a2gNHuIFZi/logo/dark.svg?fit=max\u0026auto=format\u0026n=HGhEi1a2gNHuIFZi\u0026q=85\u0026s=bff755e60e3feac9a76d40bae799f3a4","href":"https://stably.ai"},"favicon":"https://mintcdn.com/stablyai/i-3R7StXQiwq74f4/favicon.svg?fit=max\u0026auto=format\u0026n=i-3R7StXQiwq74f4\u0026q=85\u0026s=22bacb181d3d08f311f19036b62cf3e2","navbar":{"links":[{"href":"mailto:jinjing@stably.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.stably.ai"}},"footer":{"socials":{"x":"https://twitter.com/stablyai","github":"https://github.com/stablyai","linkedin":"https://www.linkedin.com/company/stablyai"}},"seo":{"metatags":{"og:title":"Stably - AI-native Testing Platform","og:description":"Comprehensive documentation for Stably, the AI-native testing framework that tests any application and prevents bugs with intelligent test automation.","og:type":"website","og:site_name":"Stably Documentation","twitter:site":"@stablyai","twitter:site:domain":"stably.ai","x:site":"@stablyai","x:site:domain":"stably.ai","apple-mobile-web-app-title":"Stably Docs"},"indexing":"navigable"},"contextual":{"options":["copy","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"stablyai","hasAudioNarration":false,"actualSubdomain":"stablyai","customDomains":["docs.stably.ai"],"gitSource":{"type":"github","owner":"stablyai","repo":"mintlify-docs","deployBranch":"master","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a266e3bdf569dc0dab12145","collectionId":"42c18627-465f-4567-9eb8-f1cc8ce323ff","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6a266e3bdf569dc0dab12145:success","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Documentation","count":57},{"language":"default","tag":"Guides","count":22},{"language":"default","tag":"Stably SDK","count":14},{"language":"default","tag":"Stably CLI","count":9},{"language":"default","tag":"Troubleshooting","count":8},{"language":"default","tag":"Stably Web Editor","count":7},{"language":"default","tag":"API Reference","count":5},{"language":"default","tag":"Anti-Bot Detection","count":5},{"language":"default","tag":"Resources","count":4},{"language":"default","tag":"Configuration","count":4}]},"assistantConfig":{},"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":"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":"byok-sep-25","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":"billing-updated-9-15","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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"stably/stably-test-reporter","slug":"/stably/stably-test-reporter","pageMetadata":{"title":"Stably Test Reporter","description":"Stream test results and traces to Stably for analytics and AI-powered test maintenance","href":"/stably/stably-test-reporter"},"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: \"Stream test results and traces to Stably for analytics and AI-powered test maintenance\"\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`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Frame,Heading,Info,Note,OptimizedImage,Table,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,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(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The Stably Reporter streams your Playwright test results, traces, and screenshots to Stably for debugging and AI-powered maintenance with `,_jsx(_components.code,{children:`stably fix`}),`.`]}),`\n`,_jsxs(Info,{children:[`The Stably Test Reporter is `,_jsx(_components.strong,{children:`free to use`}),` — no paid plan required. It also includes built-in `,_jsx(_components.a,{href:`#sensitive-data-scrubbing`,children:`sensitive data scrubbing`}),` for traces — a feature not natively available in Playwright.`]}),`\n`,_jsx(_components.p,{children:`With the reporter enabled, you get a rich test results dashboard with detailed run history, failure analysis, and auto-heal reports that show exactly what changed and how Stably fixed your tests.`}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=eb8a1e5ebb80369f9836df7494bc6494`,alt:`Stably Reporter Dashboard showing test results`,\"data-og-width\":`1905`,width:`1905`,\"data-og-height\":`1002`,height:`1002`,\"data-path\":`images/stably-reporter-dashboard.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?w=280\u0026fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=51a2e7edecc461ced8cc6f8d43826116 280w, https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?w=560\u0026fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=8204c658e667f77aa43e0c996120ce5d 560w, https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?w=840\u0026fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=9e44875bfd1f010d061e800fb5d7a875 840w, https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?w=1100\u0026fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=3716e22d0e99f8b48acb74fd0f063b11 1100w, https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?w=1650\u0026fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=f4cea5ed9c48ae3d9320811a75cbc9ed 1650w, https://mintcdn.com/stablyai/7_G37DLz5v1dtt56/images/stably-reporter-dashboard.png?w=2500\u0026fit=max\u0026auto=format\u0026n=7_G37DLz5v1dtt56\u0026q=85\u0026s=7c5825da849b34f49c4062f1073f8c86 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`installation`,children:`Installation`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_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:` install`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -D`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @stablyai/playwright-test@latest`})]}),`\n`]})})}),`\n`,_jsx(Note,{children:`Requires Playwright 1.52.0+`}),`\n`,_jsx(Heading,{level:`2`,id:`configuration`,children:`Configuration`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Using `,_jsx(_components.code,{children:`stably test`}),`?`]}),` The reporter is automatically configured—no setup needed. Skip to `,_jsx(_components.a,{href:`#verify-setup`,children:`Verify Setup`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`1. Set environment variables`}),` in your `,_jsx(_components.code,{children:`.env`}),` file:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`STABLY_API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your_api_key_here`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Get from https://app.stably.ai/settings?tab=api-key`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`STABLY_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your_project_id_here`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Find in your project URL on app.stably.ai`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`2. Add the reporter`}),` to `,_jsx(_components.code,{children:`playwright.config.ts`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`typescript`,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:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`18`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`defineConfig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`stablyReporter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@stablyai/playwright-test\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` dotenv`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"dotenv\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` path`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"path\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dotenv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`path:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`resolve`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`__dirname`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\".env\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) });`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` default`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` defineConfig`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` reporter:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"list\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` stablyReporter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_API_KEY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` projectId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` use:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` trace:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"on\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Required for debugging in Stably dashboard`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`})`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`trace: \"on\"`}),` instead of the default `,_jsx(_components.code,{children:`\"on-first-retry\"`}),` to capture traces for all runs.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`verify-setup`,children:`Verify Setup`}),`\n`,_jsx(_components.p,{children:`Run a test to confirm the reporter is working:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stably`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` test`})]}),`\n`]})})}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=50177e9d02a28bef4f4d6691c44c7f73`,alt:`Stably test output showing dashboard URL`,\"data-og-width\":`975`,width:`975`,\"data-og-height\":`219`,height:`219`,\"data-path\":`images/stably-test-verify-setup.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?w=280\u0026fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=3bcf5596038029cc78f980e860f25f9e 280w, https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?w=560\u0026fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=3fd4761ebfc98ed6ed682e3493d9eaa6 560w, https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?w=840\u0026fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=0ded0af78e2c01751ef369025bc53f5c 840w, https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?w=1100\u0026fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=8718a33cd43e29dbd8cab1e7c089b763 1100w, https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?w=1650\u0026fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=30ccead813d2f964d201fb1d254b78af 1650w, https://mintcdn.com/stablyai/p4XCELjP5tjf1Qba/images/stably-test-verify-setup.png?w=2500\u0026fit=max\u0026auto=format\u0026n=p4XCELjP5tjf1Qba\u0026q=85\u0026s=756e21e15655bcff2f750d0a52ecd165 2500w`})}),`\n`,_jsxs(_components.p,{children:[`You should see a dashboard URL printed after tests complete. View results at `,_jsx(_components.a,{href:`https://app.stably.ai`,children:`app.stably.ai`}),`.`]}),`\n`,_jsxs(Heading,{level:`2`,id:`using-with-stably-fix`,children:[`Using with `,_jsx(_components.code,{children:`stably fix`})]}),`\n`,_jsxs(_components.p,{children:[`The reporter enables AI-powered test maintenance. When tests fail, the reporter automatically prints a `,_jsx(_components.code,{children:`stably fix`}),` command with the run ID:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stably`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` test`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Run tests (results stream to Stably)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# On failure, you'll see: 🔧 To auto-heal failed tests, run: stably fix \u003crunId>`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`stably`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` fix`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # AI analyzes failures and generates fixes`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`stably fix`}),` auto-detects the run ID so you don’t need to copy-paste it. It checks in order: CI environment variables (GitHub Actions, Azure DevOps, Bitbucket, etc.), then the last local run saved by `,_jsx(_components.code,{children:`stably test`}),`. You can always pass an explicit run ID with `,_jsx(_components.code,{children:`stably fix \u003crunId>`}),`. See `,_jsx(_components.a,{href:`/stably-cli/fix#run-id-detection`,children:`Fix Tests (stably fix) — Run ID Detection`}),` for details.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`sensitive-data-scrubbing`,children:`Sensitive Data Scrubbing`}),`\n`,_jsx(_components.p,{children:`Stably can redact sensitive strings (passwords, API keys, tokens) from Playwright traces before they are uploaded. There are two ways to enable scrubbing:`}),`\n`,_jsxs(Heading,{level:`3`,id:`automatic-scrubbing-with-env`,children:[`Automatic scrubbing with `,_jsx(_components.code,{children:`--env`})]}),`\n`,_jsxs(_components.p,{children:[`If you run tests with the `,_jsx(_components.code,{children:`--env`}),` flag, any variable marked `,_jsx(_components.strong,{children:`Sensitive`}),` in your `,_jsx(_components.a,{href:`/stably2/environments`,children:`Stably Environment`}),` is automatically scrubbed from traces — no config changes needed.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`stably`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --env`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Staging`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` test`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Variables marked as Sensitive on the Environments page are identified at runtime and redacted from trace data before upload. See `,_jsx(_components.a,{href:`/stably2/environments#sensitive-variables`,children:`Environments — Sensitive Variables`}),` for how to mark variables as sensitive.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`manual-scrubbing-with-sensitivevalues`,children:[`Manual scrubbing with `,_jsx(_components.code,{children:`sensitiveValues`})]}),`\n`,_jsxs(_components.p,{children:[`If you are not using `,_jsx(_components.code,{children:`--env`}),`, or need to scrub additional values beyond what is stored in your environment, pass a `,_jsx(_components.code,{children:`sensitiveValues`}),` string array to the reporter. Each string will be redacted wherever it appears exactly in the trace.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`sensitiveValues`}),` array accepts any strings — they do not have to come from `,_jsx(_components.code,{children:`process.env`}),`. Use whatever method matches your project’s configuration:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`30`,language:`typescript`,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:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`30`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Option 1: Reference environment variables (if available in process.env)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`stablyReporter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_API_KEY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` projectId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sensitiveValues:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`TEST_USER_PASSWORD`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`API_SECRET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Option 2: Import from a config file or module`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`secrets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"./test-config\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`stablyReporter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_API_KEY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` projectId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sensitiveValues:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` secrets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`testUserPassword`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` secrets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`apiSecret`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Option 3: Hardcoded strings (not recommended, but supported)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`stablyReporter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` apiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_API_KEY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` projectId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`STABLY_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` sensitiveValues:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"my-secret-password\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:`Sensitive values are scrubbed from trace data, but screenshots and videos may still display secrets if they appear on screen during test execution. Avoid entering sensitive data in visible form fields when possible.`}),_jsx(_components.p,{children:`Only exact string matches are scrubbed—partial matches within objects or arrays are not detected.`}),_jsxs(_components.p,{children:[`To ensure the integrity of Playwright artifacts, the following patterns are never scrubbed—even when included in `,_jsx(_components.code,{children:`sensitiveValues`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The characters `,_jsx(_components.code,{children:`/`}),` and `,_jsx(_components.code,{children:`*`}),` (when alone)`]}),`\n`,_jsxs(_components.li,{children:[`Strings containing `,_jsx(_components.code,{children:`/artifact/`}),`, `,_jsx(_components.code,{children:`https://`}),`, `,_jsx(_components.code,{children:`http://`}),`, or `,_jsx(_components.code,{children:`*********`})]}),`\n`,_jsxs(_components.li,{children:[`Pure numeric values (e.g., `,_jsx(_components.code,{children:`123`}),`, `,_jsx(_components.code,{children:`456789`}),`)`]}),`\n`,_jsxs(_components.li,{children:[`Values of internal keys: `,_jsx(_components.code,{children:`sha1`}),`, `,_jsx(_components.code,{children:`_sha1`}),`, `,_jsx(_components.code,{children:`pageref`}),`, `,_jsx(_components.code,{children:`downloadsPath`}),`, `,_jsx(_components.code,{children:`tracesDir`}),`, `,_jsx(_components.code,{children:`pageId`}),`, and any key ending in `,_jsx(_components.code,{children:`sha1`})]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Issue`}),_jsx(_components.th,{children:`Solution`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Missing traces`}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`trace: \"on\"`}),` in config, or use `,_jsx(_components.code,{children:`stably test`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Auth errors`}),_jsxs(_components.td,{children:[`Verify `,_jsx(_components.code,{children:`STABLY_API_KEY`}),` and `,_jsx(_components.code,{children:`STABLY_PROJECT_ID`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/trouble-shooting/reporter-analytics`,children:`full troubleshooting guide`}),` for more details.`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Alerting`,icon:`bell`,href:`/run-tests/alerting`,children:_jsx(_components.p,{children:`Configure notifications for test results`})}),_jsx(Card,{title:`Fix Tests (stably fix)`,icon:`wand-magic-sparkles`,href:`/stably-cli/fix`,children:_jsx(_components.p,{children:`Automatically diagnose and repair failing tests`})}),_jsx(Card,{title:`SDK Setup Guide`,icon:`book`,href:`/getting-started/sdk-setup-guide`,children:_jsx(_components.p,{children:`Complete setup including AI assertions and actions`})})]})]})}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":"Stably Test Reporter","description":"Stream test results and traces to Stably for analytics and AI-powered test maintenance","href":"/stably/stably-test-reporter"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Installation","slug":"installation","depth":2,"children":[]},{"title":"Configuration","slug":"configuration","depth":2,"children":[]},{"title":"Verify Setup","slug":"verify-setup","depth":2,"children":[]},{"title":"Using with stably fix","slug":"using-with-stably-fix","depth":2,"children":[]},{"title":"Sensitive Data Scrubbing","slug":"sensitive-data-scrubbing","depth":2,"children":[{"title":"Automatic scrubbing with --env","slug":"automatic-scrubbing-with-env","depth":3,"children":[]},{"title":"Manual scrubbing with sensitiveValues","slug":"manual-scrubbing-with-sensitivevalues","depth":3,"children":[]}]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"stablyai","siteName":"Stably","title":"Stably - AI-native Testing Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-19T22:49:03.226Z","originalFileLocation":"stably/stably-test-reporter.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=\"Stream test results and traces to Stably for analytics and AI-powered test maintenance\">\u003cmeta data-mint-head name=\"application-name\" content=\"Stably\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_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/stablyai/6Y6TRJsMUUpTybR_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Stably - AI-native Testing Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Comprehensive documentation for Stably, the AI-native testing framework that tests any application and prevents bugs with intelligent test automation.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Stably Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.stably.ai/stably/stably-test-reporter\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://stablyai.mintlify.app/_mintlify/api/og/v2?division=Stably+Test+Reporter\u0026amp;title=Stably+Test+Reporter\u0026amp;description=Stream+test+results+and+traces+to+Stably+for+analytics+and+AI-powered+test+maintenance\u0026amp;theme=5777d4bd1a7aa93123ab1320\u0026amp;signature=217d62d6cbb3f65fccb0472b29ade08eb8f7327b1933d54cdff136a18f8dc844\">\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=\"Stably - AI-native Testing Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Comprehensive documentation for Stably, the AI-native testing framework that tests any application and prevents bugs with intelligent test automation.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://stablyai.mintlify.app/_mintlify/api/og/v2?division=Stably+Test+Reporter\u0026amp;title=Stably+Test+Reporter\u0026amp;description=Stream+test+results+and+traces+to+Stably+for+analytics+and+AI-powered+test+maintenance\u0026amp;theme=5777d4bd1a7aa93123ab1320\u0026amp;signature=217d62d6cbb3f65fccb0472b29ade08eb8f7327b1933d54cdff136a18f8dc844\">\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/stablyai/6Y6TRJsMUUpTybR_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Stably Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0066cc\">\u003cmeta data-mint-head name=\"twitter:site:domain\" content=\"stably.ai\">\u003cmeta data-mint-head name=\"x:site\" content=\"@stablyai\">\u003cmeta data-mint-head name=\"x:site:domain\" content=\"stably.ai\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.stably.ai/stably/stably-test-reporter\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/stably/stably-test-reporter.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.stably.ai/#organization\",\"name\":\"Stably\",\"url\":\"https://docs.stably.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/stablyai/HGhEi1a2gNHuIFZi/logo/light.svg?fit=max\u0026auto=format\u0026n=HGhEi1a2gNHuIFZi\u0026q=85\u0026s=4449322f578b7c41cb15e23b398757fd\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.stably.ai#website\",\"name\":\"Stably\",\"url\":\"https://docs.stably.ai\",\"publisher\":{\"@id\":\"https://docs.stably.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.stably.ai/stably/stably-test-reporter#webpage\",\"url\":\"https://docs.stably.ai/stably/stably-test-reporter\",\"name\":\"Stably Test Reporter\",\"description\":\"Stream test results and traces to Stably for analytics and AI-powered test maintenance\",\"dateModified\":\"2026-03-19T22:49:03.226Z\",\"isPartOf\":{\"@id\":\"https://docs.stably.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.stably.ai/stably/stably-test-reporter#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.stably.ai/stably/stably-test-reporter#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Stably\",\"item\":\"https://docs.stably.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stably Test Reporter\",\"item\":\"https://docs.stably.ai/stably/stably-test-reporter\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.stably.ai/stably/stably-test-reporter#article\",\"headline\":\"Stably Test Reporter\",\"name\":\"Stably Test Reporter\",\"description\":\"Stream test results and traces to Stably for analytics and AI-powered test maintenance\",\"url\":\"https://docs.stably.ai/stably/stably-test-reporter\",\"mainEntityOfPage\":{\"@id\":\"https://docs.stably.ai/stably/stably-test-reporter#webpage\"},\"dateModified\":\"2026-03-19T22:49:03.226Z\",\"publisher\":{\"@id\":\"https://docs.stably.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.stably.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Stably\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Stably","nav":{"global":null,"anchors":[{"anchor":"Documentation","icon":"book-open","groups":[{"group":"Getting started","icon":"rocket","pages":[{"title":"Quickstart","href":"/getting-started/quickstart"},{"title":"What is Stably?","href":"/what-is-stably-ai"},{"title":"Autofix for Tests","href":"/getting-started/autofix-for-tests"},{"title":"CI Integration","href":"/getting-started/ci-integration"}]},{"group":"Stably Web Editor","icon":"browser","pages":[{"title":"Overview","href":"/stably/stably-web-editor"},{"title":"Quickstart: Stably Web","href":"/stably2/web-quickstart"},{"title":"Stably GitHub Action","href":"/stably/stably-github-action"},{"group":"Bring Your Own Repo","pages":[{"title":"Bring Your Own Repo","href":"/stably2/bring-your-own-repo"},{"title":"Setup Script","href":"/stably2/setup-script"},{"title":"Private npm Registry (.npmrc)","href":"/stably2/npmrc"}]},{"title":"Capabilities","href":"/stably/capabilities"}]},{"group":"Stably CLI","icon":"terminal","pages":[{"title":"Quickstart: Stably CLI","href":"/stably-cli/quickstart"},{"title":"CLI commands","href":"/stably-cli/commands"},{"title":"Cloud Browsers for Stably CLI","href":"/stably-cli/cloud-browser"},{"title":"Test Planning (stably plan)","href":"/stably-cli/plan"},{"title":"Create Tests (stably create)","href":"/stably-cli/create"},{"title":"Run Tests (stably run)","href":"/stably-cli/run-tests"},{"title":"Fix Tests (stably fix)","href":"/stably-cli/fix"},{"title":"Run History (stably runs)","href":"/stably-cli/runs"},{"title":"Using CLI in CI","href":"/run-tests/cli-in-ci"}]},{"group":"Stably Cloud Runner","icon":"cloud","pages":[{"title":"Run Tests","href":"/run-tests/run-tests-on-cloud"},{"title":"Scheduled Test Runs","href":"/run-tests/scheduled-runs"},{"title":"Autofix","href":"/run-tests/autofix"}]},{"group":"Stably SDK","icon":"code","pages":[{"title":"Quickstart: Stably SDK","href":"/getting-started/sdk-setup-guide"},{"title":"Stably SDK Overview","href":"/stably-sdk/overview"},{"title":"Playwright AI Tests","href":"/getting-started/stably-playwright-sdk"},{"group":"Auth","pages":[{"title":"Auth with Google","href":"/stably2/auth/auth-with-google"}]},{"group":"AI Methods","pages":[{"title":"AI Agent Execute","href":"/stably-sdk/ai-agent-execute"},{"title":"AI Assertions","href":"/stably-sdk/ai-assertions"},{"title":"AI Locator","href":"/stably-sdk/ai-locator"},{"title":"AI Extraction","href":"/stably-sdk/ai-extraction"}]},{"title":"Email Inbox","href":"/stably-sdk/email-inbox"},{"title":"Create Tests with Cursor / Claude Code","href":"/stably-sdk/create-tests-with-cursor-claude"},{"group":"CI/CD","pages":[{"title":"GitHub Actions","href":"/run-tests/github-actions"},{"title":"Run Tests on GitHub","href":"/run-tests/run-tests-on-github"},{"title":"Run Tests on GitLab","href":"/run-tests/run-tests-on-gitlab"},{"title":"Run Tests Inside of Docker","description":"Containerize Stably-powered Playwright tests for reproducible local and CI execution.","href":"/run-tests/inside-of-docker"}]}]},{"group":"Stably Test Reporter","icon":"chart-line","pages":[{"title":"Stably Test Reporter","href":"/stably/stably-test-reporter"},{"title":"Alerts \u0026 Notifications","description":"Configure test result notifications and alerts to stay informed about test failures, successes, and monitoring status.","href":"/run-tests/alerting"}]},{"group":"Configuration","icon":"gear","pages":[{"title":"Environments","href":"/stably2/environments"},{"title":"STABLY.md","href":"/core-configuration/stably-md"},{"title":"Mode-Specific Rules","href":"/core-configuration/mode-rules"},{"title":"Autofix Cost Controls","href":"/core-configuration/autofix-cost-controls"}]},{"group":"Troubleshooting","icon":"wrench","pages":[{"title":"Reporter \u0026 Analytics Troubleshooting","href":"/trouble-shooting/reporter-analytics"},{"title":"Stably IP Allowlist","href":"/trouble-shooting/allowlist-stably"},{"title":"A/B Testing","href":"/trouble-shooting/a-b-testing"},{"group":"Anti-Bot Detection","pages":[{"title":"Bot Detection Issues","href":"/trouble-shooting/bot-detection/index"},{"title":"Cloudflare Bot Detection","href":"/trouble-shooting/bot-detection/cloudflare"},{"title":"Clerk Bot Detection","href":"/trouble-shooting/bot-detection/clerk"},{"title":"reCAPTCHA Bypass","href":"/trouble-shooting/bot-detection/recaptcha"},{"title":"Vercel Deployment Protection","href":"/trouble-shooting/bot-detection/vercel"}]}]},{"group":"Migration Guides","icon":"route","pages":[{"title":"Why Migrate from Classic","href":"/no-code-tests/why-migrate"},{"title":"Migrate Classic Tests to Agent 2.0","href":"/no-code-tests/migrate-to-agent-2"}]},{"group":"Resources","pages":[{"title":"Pricing","href":"/pricing"},{"title":"Changelog","href":"/changelog"},{"title":"Privacy Policy","href":"/about/privacy-policy"},{"title":"Terms of Service","href":"/about/terms-of-service"}]}]},{"anchor":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"anchor":"Guides","icon":"book-bookmark","pages":[{"title":"Guides","href":"/use-cases/verify-with-ai-agents"}]}]},"basePath":"","title":"Stably - AI-native Testing Platform","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DW6UFrUy.js","DynamicMarkdown-B62XqCSI.js","zoom-image-lightbox-eHyQ0tlO.js","lightbox-handle-r17bVUz3.js"]}