agent: lumotia-rebrand — fix Codex cross-model review blockers
Codex independent review found 11 blockers post-cascade. All addressed.
CRITICAL (data-loss / crash):
10. crates/core/src/paths.rs — migrate_legacy_data_dir_inner used
fs::rename which fails with EXDEV when source + target are on
different filesystems (encrypted-home, bind mounts, separate
$XDG_DATA_HOME partition). Combined with the Phase 5 QC fix that
made migration errors fatal, this would crash on first launch
for any user whose data dir spans filesystems. Added
rename_or_copy_tree() that falls back to copy_dir_recursive +
remove_dir_all on CrossesDevices / errno 18 (EXDEV). Symlinks
preserved verbatim. Same fallback applied to magnotia.db ->
lumotia.db inside the dir.
11. Added 4 unit tests: copy_dir_recursive preserves nested
structure, rename_or_copy_tree same-filesystem happy path,
is_cross_device classifies CrossesDevices kind + raw errno 18.
Doc residuals (blockers 1-9):
1. crates/cloud-providers/Cargo.toml — "Wyrdnote pending rebrand"
description.
2. crates/cloud-providers/src/provider.rs — module docs + test
fixture Wyrdnote refs.
3. crates/transcription/src/orchestrator.rs — module docs + test
fixture Wyrdnote refs.
4. docs/roadmap/2026-05-10-pkm-phase-tooling-shortlist.md — phase
name + outputs/wyrdnote path refs.
5. docs/architecture-map/04-llm-formatting-mcp/llm-tests.md —
MAGNOTIA_LLM_TEST_MODEL env var.
6. .../cloud-providers-stubs.md — MAGNOTIA_API_KEY_*.
7. docs/architecture-map/03-audio-transcription/tests-and-fixtures.md
— MAGNOTIA_WHISPER_*.
8. docs/gpu-tuning/plan.md — MAGNOTIA_BENCH_RUN.
9. docs/superpowers/specs/2026-05-09-battery-gpu-aware-thread-tuning-
design.md + corresponding plan — MAGNOTIA_POWER_STATE_OVERRIDE,
MAGNOTIA_INFERENCE_THREADS.
cargo test --workspace: 343 pass / 0 fail (up from 339; +4 EXDEV
fallback tests).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
name = "lumotia-cloud-providers"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
description = "Provider trait and BYOK cloud STT scaffolding for Lumotia (Wyrdnote pending rebrand)"
|
||||
description = "Provider trait and BYOK cloud STT scaffolding for Lumotia (Lumotia)"
|
||||
|
||||
[dependencies]
|
||||
lumotia-core = { path = "../core" }
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
//!
|
||||
//! Living in `lumotia-cloud-providers` is deliberate: the AGPL OEM
|
||||
//! exception (≥£2k/yr) requires a clean trait surface that an OEM
|
||||
//! licensee can implement without depending on Wyrdnote's transcription
|
||||
//! licensee can implement without depending on Lumotia's transcription
|
||||
//! internals. The trait crate stays small; provider implementations
|
||||
//! sit alongside.
|
||||
//!
|
||||
@@ -175,10 +175,10 @@ mod tests {
|
||||
engine_id: ProviderId::new("local-whisper"),
|
||||
model_id: None,
|
||||
language: Some("en".to_string()),
|
||||
initial_prompt: Some("Wyrdnote".to_string()),
|
||||
initial_prompt: Some("Lumotia".to_string()),
|
||||
};
|
||||
let opts = profile.to_options();
|
||||
assert_eq!(opts.language, Some("en".to_string()));
|
||||
assert_eq!(opts.initial_prompt, Some("Wyrdnote".to_string()));
|
||||
assert_eq!(opts.initial_prompt, Some("Lumotia".to_string()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user