# `cli.migrate_arguments`

A `jadpo migrate` command names no action, one it doesn't have, a purpose for an action that takes none, or a `--drop` of what isn't retired.

Area 14, [Tools](/docs/tooling.md); not declinable; the next step is usually the agent's.

## Why Jadpo refuses it

`jadpo migrate new` writes the next migration, `apply` runs a database's pending ones, and `status` lists them. Changing a database is never done for a word it doesn't know.

## What it looks like

The action is misspelt:


```sh
jadpo migrate aply
```

```text
error: `aply` isn't something `jadpo migrate` does
  reason: `jadpo migrate new` writes the next migration, `apply` runs a database's pending ones, and `status` lists them.
  next: Use `jadpo migrate new`, `jadpo migrate apply` or `jadpo migrate status` (agent)
  rule: cli.migrate_arguments
  help: https://jadpo.dev/docs/errors/cli.migrate_arguments
```

`(agent)` at the end of the `next:` line means your coding agent can make the fix itself.

A purpose after an action that takes none is refused rather than ignored:

```sh
jadpo migrate status add_due_date
```

```text
error: `jadpo migrate status` takes no purpose
  reason: Only `jadpo migrate new` takes a purpose; `add_due_date` would be ignored.
  next: Run `jadpo migrate status` (agent)
  rule: cli.migrate_arguments
  help: https://jadpo.dev/docs/errors/cli.migrate_arguments
```

## How to fix it

**If you meant to apply the migrations**, name `apply`:

```sh
jadpo migrate apply
```

It runs the pending migrations on the database `config.database_url` names.

**If you meant a new migration**, give the purpose to `new`:

```sh
jadpo migrate new add_due_date
```

It writes the next migration, named after its purpose.

## Related

- [`jadpo migrate`](/docs/commands-for-the-database-settings-and-translations.md#jadpo-migrate)
- [Migrations](/docs/migrations.md)
