> ## Documentation Index
> Fetch the complete documentation index at: https://docs.diversion.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# obliterate

> Permanently delete blob storage for matching file versions (org-admin only).

The `obliterate` command permanently deletes the underlying blob storage for every version of files that match a path pattern, across all branches and commits. This is **destructive and irreversible**.

For background, glob syntax, and the underlying model, see the [Obliterate guide](/advanced/obliterate).

<Warning>
  Obliterate cannot be undone. Always run `preview` first and read the plan before running `execute`.
</Warning>

Requirements:

* You must be an [**organization admin**](/basic/access-levels#organization-level-access).
* Obliterate is not supported on git-synced repositories.

## preview

Show what would be obliterated. No state changes.

```bash theme={null}
dv obliterate preview [--json] <glob> [<glob> ...]
```

`<glob>` is a path pattern anchored to the repo root (e.g. `'/assets/*.psd'`). Quote the pattern so your shell does not expand it. The argument is repeatable -- pass multiple globs to plan their combined obliteration in one call.

`--json` emits a single JSON document on stdout with the full preview response. Banners and warnings are suppressed in this mode; warnings move into a `warning` string field on the document.

The human view shows headline counts, a reclaim estimate, and the top 20 deletable / not-deleted paths sorted by bytes desc. If the full list is longer, a trailing line reads `... and N more (use --json for the full list)`. When more than one glob is passed, a per-glob block prints the files / versions / total bytes each glob matched on its own.

Example:

```bash theme={null}
dv obliterate preview '/assets/old_textures/*.psd' '/builds/.../*.pak'
```

```bash theme={null}
dv obliterate preview --json '/assets/old_textures/*.psd' | jq '.deletable_paths | length, .per_glob_summary'
```

## execute

Permanently obliterate matching blobs.

```bash theme={null}
dv obliterate execute [--yes] [--json] [--nowait] <glob> [<glob> ...]
```

`<glob>` is the same path pattern as in `preview`, and is repeatable.

`--yes` skips the destructive-confirmation prompt (for scripting). Without it, you must type the repository name or ID at the prompt to confirm.

`--json` emits a single JSON document instead of the human banner. **Requires `--yes`** -- an interactive prompt would corrupt the JSON stream.

`--nowait` enqueues the job and exits immediately without polling. Use `dv obliterate status <job_id>` afterwards.

By default, `execute` returns a `job_id` and polls the status endpoint every 3 seconds for up to **18 seconds**. The cap is fixed -- use `--nowait` to skip polling, or follow up with `status` for longer runs.

Exit codes:

| Code  | Meaning                                                                                                                                                    |
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `0`   | Polling reached a terminal state and the job completed without failures.                                                                                   |
| `2`   | Polling reached a terminal state and the job had one or more failed deletions.                                                                             |
| `101` | The 18s polling cap elapsed with the job still in progress. Lets scripts distinguish "gave up waiting" from "done"; follow up with `dv obliterate status`. |

Example:

```bash theme={null}
dv obliterate execute --yes '/assets/old_textures/*.psd'
```

## status

Show the state of a previously enqueued obliterate job.

```bash theme={null}
dv obliterate status <job_id>
```

`<job_id>` is the id returned by `dv obliterate execute` (e.g. `dv.obliterate.593d2b8a8dbf47559bcc73c8bcf54f41`).

Output includes the overall status (`queued`, `in_progress`, `succeeded`, `failed`, or `archived`), per-file counts (`pending` / `done` / `failed`), the start time, and -- for terminal states -- the end time. `failed` includes the first 20 errors with a short error message per failure. `archived` means the job has aged out of the queue but its counts are still inspectable.

A 404 means there is no obliterate job with that id in this repository.

Example:

```bash theme={null}
dv obliterate status dv.obliterate.593d2b8a8dbf47559bcc73c8bcf54f41
```

## Notes

* The server enforces a 60-second time budget on glob resolution. If your glob matches too many files, the call is rejected with an error -- narrow the pattern and split into multiple runs.
* The actual deletion runs in the background after the call returns, which is why `execute` returns quickly and why progress is tracked via the status endpoint.
* Files in shared (grouped) storage cannot be individually obliterated and are reported as skipped in the response.

For the full conceptual guide, glob syntax tables, and worked examples, see [Obliterate](/advanced/obliterate).
