Phase 2 QC found three explicit blockers + a broader sweep needed:
Explicit (QC-named):
- crates/mcp/src/lib.rs:15 — SERVER_NAME public MCP wire identity
- crates/transcription/build.rs:59 — panic message prefix
- crates/llm/tests/content_tags_smoke.rs:7 — docstring -p flag
Swept (string literals + dev env vars + doc comments + test fixtures):
- crates/mcp/src/main.rs — eprintln log prefixes
- src-tauri/src/commands/diagnostics.rs — diagnostic filename + MAGNOTIA_VERSION
- src-tauri/src/commands/audio.rs — recording filename pattern lumotia-<secs>-...wav
- src-tauri/src/commands/fs.rs — test placeholder path
- crates/transcription/src/model_manager.rs — .lumotia-verified marker
- crates/storage/src/database.rs — lumotia-storage-ro-<pid> temp dirs + doc comments
- crates/cloud-providers/src/keystore.rs — LUMOTIA_API_KEY_<PROVIDER> env var
- crates/audio/src/{wav,decode}.rs — lumotia_test_* / lumotia_decode_* test fixtures
- crates/core/src/tuning.rs — LUMOTIA_INFERENCE_THREADS env var
- All MAGNOTIA_LLM_TEST_MODEL / MAGNOTIA_WHISPER_TEST_* env vars
- Doc comments referencing crate names
Excluded (intentional Phase 4/5 scope):
- magnotia_preferences, magnotia_history, magnotia_morning_triage_last_shown
DB setting keys (Phase 5 paths.rs migration)
- magnotia_startup tracing target (Phase 4)
- crates/core/src/paths.rs (Phase 5 wholesale rewrite + migration shim)
cargo build --workspace passes. cargo test --workspace: 330 pass, 0 fail.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
74 lines
2.8 KiB
Rust
74 lines
2.8 KiB
Rust
//! Build-time guard for item #6 of the Whisper ecosystem pass.
|
|
//!
|
|
//! On Windows, linking `whisper-rs-sys` (MSVC C++ runtime) and the
|
|
//! `tokenizers` crate (which pulls a different MSVC CRT via its
|
|
//! onnxruntime + Rust-side dependencies) in the same binary has been a
|
|
//! repeated failure mode — most recently Whispering v7.11.0 shipped a
|
|
//! broken Windows build over exactly this conflict. Reference:
|
|
//! https://github.com/EpicenterHQ/epicenter/releases/tag/v7.11.0
|
|
//!
|
|
//! The easiest defence is to refuse to compile at all if any part of the
|
|
//! workspace ever pulls `tokenizers` into the dependency graph on a
|
|
//! Windows target. If we ever legitimately need it we can reintroduce
|
|
//! it via a sidecar (isolated process, separate CRT) rather than
|
|
//! linking it into `lumotia_lib`.
|
|
//!
|
|
//! The check is advisory on non-Windows targets — it still prints a
|
|
//! cargo:warning if `tokenizers` appears, so the Windows failure isn't
|
|
//! a surprise at CI time when we build cross-platform from Linux.
|
|
|
|
use std::env;
|
|
use std::fs;
|
|
use std::path::PathBuf;
|
|
|
|
fn main() {
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
|
|
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
|
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap_or_else(|_| ".".into()));
|
|
|
|
// Walk up to workspace root: crates/transcription/ -> crates/ -> root
|
|
let workspace_root = manifest_dir
|
|
.ancestors()
|
|
.find(|p| p.join("Cargo.lock").exists())
|
|
.map(PathBuf::from);
|
|
|
|
let Some(root) = workspace_root else {
|
|
// No lockfile yet (e.g. first-ever cargo run). Nothing to check.
|
|
return;
|
|
};
|
|
|
|
let lock_path = root.join("Cargo.lock");
|
|
println!("cargo:rerun-if-changed={}", lock_path.display());
|
|
|
|
let lock = match fs::read_to_string(&lock_path) {
|
|
Ok(s) => s,
|
|
Err(_) => return,
|
|
};
|
|
|
|
let has_tokenizers = lock
|
|
.lines()
|
|
.any(|line| matches!(line.trim(), "name = \"tokenizers\""));
|
|
|
|
if !has_tokenizers {
|
|
return;
|
|
}
|
|
|
|
if target_os == "windows" {
|
|
panic!(
|
|
"lumotia-transcription: the `tokenizers` crate appears in Cargo.lock and this is a \
|
|
Windows build. Linking `whisper-rs-sys` + `tokenizers` in the same binary has \
|
|
been a persistent MSVC C-runtime conflict (see Whispering v7.11.0). Route any \
|
|
tokenizer usage through an out-of-process sidecar instead, or gate it off for \
|
|
Windows. Brief item #6."
|
|
);
|
|
}
|
|
|
|
println!(
|
|
"cargo:warning=lumotia-transcription: `tokenizers` crate is in the dependency graph. \
|
|
This build is non-Windows so the link will succeed, but Windows builds will panic \
|
|
at build time per docs/whisper-ecosystem/brief.md item #6. Isolate tokenizer usage \
|
|
in a sidecar before a Windows ship."
|
|
);
|
|
}
|