mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-14 01:36:03 +00:00
The legacy pkg/persistence/migrations (DBMigration / dbmXXX) system now coexists with Alembic but accepts no new migrations — all new schema changes go through Alembic. - remove dbm026_llm_model_context_length (superseded by Alembic 0005_add_llm_context_length, which makes the identical change) - cap required_database_version at 25 (legacy chain dbm001-025 kept read-only to upgrade pre-existing 3.x DBs to the Alembic baseline) - add migrations/README.md documenting the freeze - document the Alembic-only policy and revision-id/idempotency rules in AGENTS.md
37 lines
1.6 KiB
Markdown
37 lines
1.6 KiB
Markdown
# Legacy migrations (DEPRECATED — do not add new files here)
|
|
|
|
This directory holds the **legacy 3.x database migration system**
|
|
(`DBMigration` subclasses in `dbmXXX_*.py`, registered via
|
|
`@migration.migration_class(N)` and run from `pkg/persistence/mgr.py`).
|
|
|
|
**This system is frozen. Do not add new `dbmXXX_*.py` migrations.**
|
|
|
|
The chain is capped at version 25 (`required_database_version = 25` in
|
|
`pkg/utils/constants.py`). These files exist only to upgrade pre-existing
|
|
3.x databases up to the Alembic baseline (`0001_baseline`). Removing them
|
|
would break in-place upgrades from old installations, so they are kept
|
|
read-only.
|
|
|
|
## All new schema changes use Alembic
|
|
|
|
Migrations now live in `pkg/persistence/alembic/versions/`. To create one:
|
|
|
|
```bash
|
|
uv run python -m langbot.pkg.persistence.alembic_runner autogenerate "description of your change"
|
|
```
|
|
|
|
(requires `data/config.yaml` to exist). Review and edit the generated
|
|
script before committing — Alembic migrations run automatically on startup
|
|
and must be idempotent and guard against missing tables (the test suite
|
|
runs them against empty databases).
|
|
|
|
### Rules for Alembic revision ids
|
|
|
|
- Keep the revision id **≤ 32 characters** — PostgreSQL stores
|
|
`alembic_version.version_num` as `varchar(32)` and will raise
|
|
`StringDataRightTruncationError` on overflow.
|
|
- Guard every `op` call against a missing table / missing column
|
|
(`inspector.get_table_names()` / `inspector.get_columns()`); fresh
|
|
installs create the schema via `create_all()` and stamp the baseline,
|
|
so migrations may run against tables that already match or do not exist.
|