agent: code-atomiser-fix — repair sed-scar provenance from 26c7307

The Magnotia->Lumotia rebrand commit 26c7307 ran a too-greedy
s/magnotia/lumotia/g across comments that already had the correct
legacy/target distinction. The commit author caught one case in
src-tauri/src/lib.rs ("magnotia era" -> "lumotia era" restored) but
missed four others, plus a duplicated word in a Cargo description
from an earlier two-name sed.

Fixed sites:
  * crates/storage/src/database.rs        — migrate_legacy_setting_keys docstring
  * src/lib/utils/localStorageMigration.ts — file-level docstring
  * src/lib/utils/settingsMigrations.ts    — historical-key comment
  * crates/cloud-providers/Cargo.toml      — description duplication
  * src-tauri/src/lib.rs                   — data-dir migration log + doc

None of the underlying code paths were wrong; the lies were
docstring-only. Risk: future maintainer reading any of these
comments at incident time could invert the migration direction or
conclude no migration ran.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-13 14:27:24 +01:00
parent 2491c7a7dd
commit ab5f6ab995
5 changed files with 20 additions and 14 deletions

View File

@@ -2,7 +2,7 @@
name = "lumotia-cloud-providers" name = "lumotia-cloud-providers"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
description = "Provider trait and BYOK cloud STT scaffolding for Lumotia (Lumotia)" description = "Provider trait and BYOK cloud STT scaffolding for Lumotia"
[dependencies] [dependencies]
lumotia-core = { path = "../core" } lumotia-core = { path = "../core" }

View File

@@ -905,14 +905,16 @@ pub async fn get_setting(pool: &SqlitePool, key: &str) -> Result<Option<String>>
Ok(row.map(|r| r.get("value"))) Ok(row.map(|r| r.get("value")))
} }
/// One-shot key rename for settings rows carried over from the lumotia era /// One-shot key rename for settings rows carried over from the magnotia era
/// (`magnotia_preferences`, `magnotia_morning_triage_last_shown`, etc.). /// (`magnotia_preferences`, `magnotia_morning_triage_last_shown`, etc.) to
/// the lumotia naming convention.
/// ///
/// Idempotent. Returns `(renamed, orphans_deleted)`: /// Idempotent. Returns `(renamed, orphans_deleted)`:
/// * `renamed` — rows where only the lumotia key existed; the row's key /// * `renamed` — rows where only the legacy (magnotia) key existed; the
/// is updated to the lumotia equivalent. /// row's key is updated to the lumotia equivalent.
/// * `orphans_deleted` — rows where BOTH keys existed; the lumotia row is /// * `orphans_deleted` — rows where BOTH keys existed; the new (lumotia)
/// authoritative and the lumotia row is deleted to avoid silent debt. /// row is authoritative and the legacy (magnotia) row is deleted to
/// avoid silent debt.
pub async fn migrate_legacy_setting_keys(pool: &SqlitePool) -> Result<(u64, u64)> { pub async fn migrate_legacy_setting_keys(pool: &SqlitePool) -> Result<(u64, u64)> {
let mut tx = pool.begin().await.map_err(|source| Error::Query { let mut tx = pool.begin().await.map_err(|source| Error::Query {
operation: "migrate_legacy_setting_keys:begin".into(), operation: "migrate_legacy_setting_keys:begin".into(),

View File

@@ -12,7 +12,9 @@ use sqlx::SqlitePool;
use tauri::Manager; use tauri::Manager;
use tracing_subscriber::EnvFilter; use tracing_subscriber::EnvFilter;
use lumotia_core::paths::{migrate_legacy_data_dir, MigrationStatus}; use lumotia_core::paths::{
check_target_ambiguity, migrate_legacy_data_dir, MigrationStatus,
};
use lumotia_core::types::EngineName; use lumotia_core::types::EngineName;
use lumotia_llm::LlmEngine; use lumotia_llm::LlmEngine;
use lumotia_storage::{ use lumotia_storage::{
@@ -224,7 +226,7 @@ pub fn run() {
builder builder
.setup(|app| { .setup(|app| {
// One-shot legacy data-dir migration: rename ~/.local/share/lumotia // One-shot legacy data-dir migration: rename ~/.local/share/magnotia
// (and macOS/Windows equivalents) to the convention-preserving // (and macOS/Windows equivalents) to the convention-preserving
// lumotia path on first launch after the rebrand. Idempotent — // lumotia path on first launch after the rebrand. Idempotent —
// safe to call on every boot. A migration error is fatal: silently // safe to call on every boot. A migration error is fatal: silently
@@ -238,7 +240,7 @@ pub fn run() {
from = %from.display(), from = %from.display(),
to = %to.display(), to = %to.display(),
renamed_db, renamed_db,
"migrated legacy lumotia data dir to lumotia" "migrated legacy magnotia data dir to lumotia"
), ),
Ok(MigrationStatus::TargetAlreadyExists { .. }) => {} Ok(MigrationStatus::TargetAlreadyExists { .. }) => {}
Ok(MigrationStatus::NoLegacyFound) => {} Ok(MigrationStatus::NoLegacyFound) => {}

View File

@@ -1,11 +1,12 @@
/** /**
* Phase 7 of the lumotia -> lumotia rebrand cascade. Persisted UI state * Phase 7 of the magnotia -> lumotia rebrand cascade. Persisted UI state
* survives the rename via one-shot key migrations run at module-load * survives the rename via one-shot key migrations run at module-load
* inside the stores that own each key. * inside the stores that own each key.
* *
* `migrateLocalStorageKey` is idempotent and crash-safe: * `migrateLocalStorageKey` is idempotent and crash-safe:
* - If the new key already exists, the old key (if any) is removed * - If the new key already exists, the old (magnotia) key is removed
* silently — the lumotia value is authoritative. * silently — the new (lumotia) value is authoritative; the legacy
* (magnotia) key is removed.
* - If only the old key exists, its value is copied to the new key and * - If only the old key exists, its value is copied to the new key and
* the old key is removed. * the old key is removed.
* - If neither exists, this is a no-op. * - If neither exists, this is a no-op.

View File

@@ -1,7 +1,8 @@
/** /**
* Forward-compatible, versioned settings migration. * Forward-compatible, versioned settings migration.
* *
* Historically, `localStorage["lumotia_settings"]` was a bare JSON object * Historically, `localStorage["magnotia_settings"]` (now migrated to
* `lumotia_settings` via Phase 7 of the rebrand cascade) was a bare JSON object
* (whatever `SettingsState` looked like at write time). That shape * (whatever `SettingsState` looked like at write time). That shape
* tolerates new fields cleanly — spread over `defaults` — but does not * tolerates new fields cleanly — spread over `defaults` — but does not
* survive: * survive: