"""a stored site_name of the old default follows the rename to Inkwell Revision ID: 0030 Revises: 0029 Create Date: 2026-10-06 The product is renamed ThoughtSync → Inkwell (Scribe note 5071), and the `site_name` registry default moves with it. On its own that only reaches servers whose settings table has no `site_name` row — and most servers have one, because the Settings page saves EVERY key on Save, not just the one that changed. An admin who opened Settings to flip registration off has persisted `"ThoughtSync"` without ever choosing it. So the row is rewritten, but only when it holds exactly the old default. A name the admin actually typed is theirs and is left alone; the old default is the one value we can be sure nobody chose. The match is on the stored JSON text (`settings.value` is `json.dumps(value)`), so `'"ThoughtSync"'` is the whole of what it looks for. ## Downgrade Puts the old default back on a row holding exactly the new one. A server where the admin typed "Inkwell" themselves between the two cannot be told apart from one this migration rewrote; on downgrade both read "ThoughtSync", which is what the old code would have shown for either. """ from alembic import op import sqlalchemy as sa revision = "0030" down_revision = "0029" branch_labels = None depends_on = None _OLD = '"ThoughtSync"' _NEW = '"Inkwell"' def _swap(old: str, new: str) -> None: op.get_bind().execute( sa.text("UPDATE settings SET value = :new WHERE key = 'site_name' AND value = :old"), {"old": old, "new": new}, ) def upgrade() -> None: _swap(_OLD, _NEW) def downgrade() -> None: _swap(_NEW, _OLD)