# Old package names, new commands

> The user section of the `arcaeon` package's MIGRATION.md, for anyone who installed one of the thirteen old Arcaeon package names. HTML twin: /migrate

## If you used the old packages

Short version: nothing breaks the day you upgrade. Each old name has one last
release that installs `arcaeon` and forwards the old import and the old
command to it (how: the package's shims/README.md). The old import raises
one DeprecationWarning that names the new one. Change your imports and
commands when it suits you, before 1.0.0, when the old names stop getting
releases.

For each old package: the import to change, the command to change, and
whether an exit code moved.

| old name | old import | new import | old command | new command | exit code changed? |
|---|---|---|---|---|---|
| arcaeon-ledger | `import arcaeon_ledger` | `import arcaeon.record.ledger` | `arcaeon-ledger verify LOG`, `append LOG ROW`, `reconcile A B` | `arcaeon verify LOG`, `arcaeon log LOG ROW`, `arcaeon reconcile A B` | yes: reconcile's COULD NOT LOOK 2 -> 3. verify unchanged (3 already). |
| arcaeon-adapter | `import arcaeon_adapter` | `import arcaeon.record.adapter` | `arcaeon-adapter ...`, `arcaeon-adapter-selftest` | `arcaeon proxy ...`, `arcaeon selftest adapter` | no |
| arcaeon-receipt | `import arcaeon_receipt` | `import arcaeon.record.receipt` | `arcaeon-receipt verify R` | `arcaeon receipt verify R` | yes: failed verify 2 -> 1, flagged check 3 -> 1, COULD NOT LOOK 4 -> 3 |
| arcaeon-audit | `import arcaeon_audit` | `import arcaeon.prove.audit` | `arcaeon-audit verify LOG` | `arcaeon audit verify LOG` | yes: could not complete 2 -> 3 |
| arcaeon-mcp-vet | `import mcp_vet` | `import arcaeon.prove.vet` | `mcp-vet badge PATH` | `arcaeon vet badge PATH` (or `arcaeon badge PATH`) | yes: badge refused --sealed 4 -> 3, verify and audit-verify 2 -> 1, probe could not connect 2 -> 3 |
| arcaeon-once | `import arcaeon_once` | `import arcaeon.record.once` | `arcaeon-once receipt LOG KEY` | `arcaeon once receipt LOG KEY` | no |
| arcaeon-compact | `import arcaeon_compact` | `import arcaeon.prove.compact` | (had no command) | `arcaeon compact ROW` (new) | no |
| arcaeon-continuity | `import arcaeon_continuity` | `import arcaeon.prove.continuity` | (had no command) | (none; `python -m arcaeon.prove.continuity`) | no |
| arcaeon-baseline | `import arcaeon_baseline` | `import arcaeon.prove.baseline` | `arcaeon-baseline compare ...` | `arcaeon baseline compare ...` | no |
| arcaeon-dedup | `import arcaeon_dedup` | `import arcaeon.save.dedup` | (had no command) | `arcaeon dedup FILE` (new) | no |
| arcaeon-distill | `import arcaeon_distill` | `import arcaeon.save.distill` | (had no command) | `arcaeon distill FILE` (new) | no |
| arcaeon-meter | `import arcaeon_meter` | `import arcaeon.save.meter` | `arcaeon-meter usage ...` | `arcaeon meter usage ...` | no |
| arcaeon-all | `import arcaeon_all` | `import arcaeon` | (had no command) | `arcaeon version` lists every part | no |

Where an exit code moved, it moved on the NEW command only. The old command,
run through its shim, passes `--legacy-exit` and keeps the old code for the
0.9.x releases, so a CI gate wired to it keeps its meaning. Add
`--legacy-exit` to the new command to get the old code there too while you
rewire. Both go away in 1.0.0. The codes come from `arcaeon.verdict.LEGACY`
(reconcile's move lives in `arcaeon.prove.reconcile` itself).

One output change: `arcaeon verify` adds a `"verdict"` field (VERIFIED,
BROKEN or COULD NOT LOOK) as the first key of the report it always printed.
Every other field is unchanged. `arcaeon-ledger verify`, which now runs
`arcaeon verify`, prints it too.

A Python 3.9 user who installs an old name keeps getting that name's last
real release, because the shims need 3.10.
