AI tool · Cognition
QA for teams writing with Windsurf
Windsurf's Cascade agent edits the codebase and runs commands under auto-execution levels from manual approval to Turbo mode. The docs now live under Devin Desktop; the release checks are the same.
Termscritical flow (a path a user takes that costs money or trust if it breaks: sign-up, checkout, invite, export) · verdict (a one-word release result (pass, pass with findings, fail) with the findings and the checklist version behind it) · CI (the pipeline that builds and tests every change before it can be merged or deployed) · client bundle (the JavaScript your app sends to the browser or ships inside the mobile app; anyone can read it) · protected branch (the git branch that cannot be pushed to directly and is the only source of production deploys) · LLM feature (a product feature that calls a large language model, such as an assistant or a summariser)
What Windsurf changes in a codebase
An editor whose Cascade agent edits the codebase and runs terminal commands; auto-execution levels decide which commands run without approval. The docs now live under Devin Desktop.
The auto-execution level is per developer unless an administrator caps it. That makes the release gate the one place where policy is consistent across the team, and the checklist the list that gate runs.
Defaults, from the docs verified 2026-09-21
| Default, from the docs | Why it matters for release testing | Source |
|---|---|---|
| Cascade "Code mode allows Cascade to create and make modifications to your codebase" with access to the terminal. | As with any local agent, what the shell can reach the agent can reach. | docs verified 2026-09-21 |
| With auto-execution disabled, "All commands require manual approval before execution." Turbo mode: "All commands are auto-executed immediately, except those in your deny list." | Turbo mode plus a missing deny entry is unattended execution; the deny list is a per-developer setting, so the release gate must not depend on it. | docs verified 2026-09-21 |
| An allowlist entry auto-executes matching commands: "if you add git, then the agent will always accept git add -A." | Broad allowlist entries (git, npm) also cover git push and npm run deploy; DR-01 checks that production deploys cannot originate this way. | docs verified 2026-09-21 |
| For Teams and Enterprise, "administrators can set a maximum allowed auto-execution level" and team-wide command lists. | The organisation-level cap is the control that makes an execution policy hold across developers. | docs verified 2026-09-21 |
| "You have the ability to revert changes that Cascade has made" and to create a named checkpoint of the project state. | Reverts cover files, not data; database and deploy rollback still need their own rehearsal. | docs verified 2026-09-21 |
Each row was read on the linked page on the date shown. Docs change; the date tells you how current the row is. Windsurf documentation.
Failure patterns most associated
- criticalAPI key shipped in the client bundle
A key meant for the server ends up in JavaScript the browser downloads, so anyone can read it and call the service as the app.
- criticalService-role key used from the front end
The database's bypass-everything key is used in client code, so row-level rules no longer protect anything.
- criticalSecret committed to the repository
A key or token is in git history, where it stays readable to anyone with repository access even after the file changes.
- criticalRow-level security off on a new table
A table created by a migration or SQL has no row-level security, so the anonymous key can read and write every row through the public API.
- criticalPolicy that allows everything
Row-level security is enabled but the policy condition is true for everyone, so isolation exists in name only.
- criticalList endpoint returns other tenants' rows
A list or search endpoint filters by the wrong column or none, so a user sees records belonging to other accounts.
- criticalObject fetched by id without an ownership check
An endpoint checks that the caller is logged in, then returns whatever id was requested.
- criticalAdmin gate enforced only in the UI
The admin page hides its buttons from ordinary users, but the underlying route or action accepts calls from anyone logged in.
How the checklist adapts
- DR-01 and DR-03 read the allowlist: broad entries like git or npm also cover push and deploy commands, so production deploys must not be reachable from a developer shell.
- The team-level maximum auto-execution level is recorded as part of DR-03's credential and control inventory.
- Secrets and access-control items run on every release regardless of execution level.
- Revert and checkpoint features cover files; DM-01 and DR-02 still rehearse data and deploy rollback.
Release checklist, five of the published items
v1.0 · verified on 2026-09-21No secret keys in client bundles
automated Scan the built client assets (JS, source maps, HTML) for known key prefixes and for every value present in the server environment file.
Zero matches for key prefixes (sk_, service_role, AKIA, whsec_, private keys) and zero server-only env values found in client assets.
Public environment prefix carries only public values
manual List every variable with a client-exposed prefix (NEXT_PUBLIC_, EXPO_PUBLIC_, VITE_, REACT_APP_) and confirm each one is meant to be public.
Every client-prefixed variable is documented as public; no variable holds a key that can write or read beyond the anonymous role.
No secrets in repository history
tool Run a secret scanner (gitleaks or equivalent) over the full git history, not only the working tree.
Scanner reports zero unrevoked findings; any historical finding has a rotation record.
Every table exposed to the client has row-level security enabled
automated Query the database catalog for tables in exposed schemas and their RLS flag (Supabase, Postgres) or list collections against rules (Firebase).
Every exposed table reports RLS enabled; the list of exemptions is empty or each exemption is a public read-only table named in the release notes.
Policies deny cross-tenant reads and writes when tested as another user
automated For every table or collection, sign in as user A, create a row, then as user B attempt select, update and delete on it through the client API.
User B receives zero rows on select and a permission error on update and delete, for every table.
Which plan fits
Growth $5,900/mo
Growth for daily releases with an API; Starter for a small web-only team.
For 8-15 engineers, daily releases, web plus API or one mobile platform. Limits, cadence and what is not included.
Questions
Windsurf AI code quality testing
AI generated code QA checklist
Get a risk list for your codebase
5 business days, $1,200, credited to the first month.