16 modules each ran CREATE TABLE IF NOT EXISTS on connect with no version tracking, so an ALTER TABLE / column rename had no safe path. FIX 7e648a6: db.migrate(conn, name, steps) — an ordered, append-only list of DDL scripts recorded per database file in a dsc_schema_version table; step i moves the schema from version i to i+1, each step and its version row commit in the SAME transaction (a crash mid-migration leaves either the old or the new version, never a half-applied step), a pre-mechanism database adopts version 1 on first contact, and it is coordinated with schema_once so two threads on first use do not both migrate. db.schema_version(conn, name) reads the recorded version. Tests: test_db_migrate.py (order, resume, failed-step-rolls-back, pre-mechanism adoption). SCOPE: the mechanism now EXISTS and is live in the container; the 16 existing modules still call ensure_schema/schema_once and opt in incrementally by replacing that with migrate(conn, name, [SCHEMA, …alters]) when they next need a column change. So this is the mechanism, not a bulk conversion. Verify: import dsc_brain.db; db.migrate / db.schema_version present (confirmed in the running 8.1.0 image).
Journey event · 9 Sep 2026
Database schema is declared across 16 modules with no migration mechanism
16 modules each ran CREATE TABLE IF NOT EXISTS on connect with no version tracking, so an ALTER TABLE / column rename had no safe path. FIX 7e648a6: db.migrate(conn, name, steps) —
● state copied from the tracker, never improved
● event date 2026-09-09
| Event date | 2026-09-09 |
| Version found | |
| Version fixed | |
| Expected kit firmware | |
| Release file | |
| SHA-256 | |
| Served count | |
| Source | https://app.notion.com/3d62b4cda37081e1b4fae05d8a2a5f29 |
All events · DSC · CannaLib · Site · Firmware releases
Empty rows are honest
A blank cell means the tracker has no value for it. Nothing on this page is filled in to look complete.
