{"record":{"id":"b3d02a3bdf066ace","repo":"hashicorp/terraform","slug":"can-t-delete-default-state","errorCode":null,"errorMessage":"can't delete default state","messagePattern":"can't delete default state","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/backend/remote-state/azure/backend_state.go","lineNumber":70,"sourceCode":"\t\t\t}\n\n\t\t\tenvs[name] = struct{}{}\n\t\t}\n\t}\n\n\tresult := []string{backend.DefaultStateName}\n\tfor name := range envs {\n\t\tresult = append(result, name)\n\t}\n\tsort.Strings(result[1:])\n\treturn result, diags\n}\n\nfunc (b *Backend) DeleteWorkspace(name string, _ bool) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tif name == backend.DefaultStateName || name == \"\" {\n\t\treturn diags.Append(fmt.Errorf(\"can't delete default state\"))\n\t}\n\n\tctx := newCtx()\n\tclient, err := b.apiClient.getBlobClient(ctx)\n\tif err != nil {\n\t\treturn diags.Append(err)\n\t}\n\n\tif resp, err := client.Delete(ctx, b.containerName, b.path(name), blobs.DeleteInput{}); err != nil {\n\t\tif !response.WasNotFound(resp.HttpResponse) {\n\t\t\treturn diags.Append(err)\n\t\t}\n\t}\n\n\treturn diags\n}\n\nfunc (b *Backend) StateMgr(name string) (statemgr.Full, tfdiags.Diagnostics) {","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/azure/backend_state.go#L52-L88","documentation":"A deliberate guard in Backend.DeleteWorkspace (backend_state.go:69-71). Terraform protects the default workspace (named 'default' or '') from deletion, because the default state blob (keyed directly by b.keyName, not the env: prefix) is the canonical state. Attempting to delete it is refused before any storage call.","triggerScenarios":"Produced at backend_state.go:69-71 when DeleteWorkspace is called with name == backend.DefaultStateName (\"default\") or an empty string, e.g. 'terraform workspace delete default' or 'terraform workspace delete \"\"'.","commonSituations":"Running 'terraform workspace delete default' by mistake; a script that iterates over all workspace names and tries to delete each including 'default'.","solutions":["Do not delete the default workspace — it is intentionally protected","If you want a clean slate, switch to it and run 'terraform destroy' / 'terraform state rm' instead","In automation, skip the default workspace when deleting workspaces"],"exampleFix":"# before: loop deletes every workspace including default\nfor ws in $(terraform workspace list | sed 's/*//'); do\n  terraform workspace delete \"$ws\"\ndone\n\n# after: skip the default workspace\nfor ws in $(terraform workspace list | sed 's/*//'); do\n  [ \"$ws\" = \"default\" ] && continue\n  terraform workspace delete \"$ws\"\ndone","handlingStrategy":"validation","validationCode":"# Guard workspace-deletion automation against the protected default name\ndelete_workspace() {\n  local ws=\"$1\"\n  [ \"$ws\" = \"default\" ] || [ -z \"$ws\" ] && { echo \"skip: cannot delete default workspace\"; return 0; }\n  terraform workspace delete \"$ws\"\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never call 'terraform workspace delete default' in scripts","Filter 'default' out of any loop over 'terraform workspace list'","Treat the default state as permanent; use 'terraform state' subcommands to manage contents"],"tags":["azure","workspace","validation","default-state"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}