feat(refactor): MiniMaxConfig name collision across voxora-config and voxora-minimax (SemVer tripwire)
- Dominant language
- Rust
- Stars
- 0
- Forks
- 1
- Avg merge
- 11m
- Merged PRs (30d)
- 77
Description
## Problem
Both `voxora-config` and `voxora-minimax` define a struct named `MiniMaxConfig`:
- `voxora-config/src/minimax.rs` — the *user-facing* configuration struct (env-var cascade, CLI flag plumbing).
- `voxora-minimax/src/config.rs` — the *engine-internal* configuration struct (base URL, model name, timeouts).
When a downstream consumer writes `use voxora_config::MiniMaxConfig;` and `use voxora_minimax::MiniMaxConfig;` in the same file (the canonical pattern for any app that wires both the user config and the engine), the second import silently shadows the first. The struct appears twice in docs.rs search results with the same name and no disambiguation warning. This is a SemVer tripwire: the moment one of them adds a field, consumers' `use` statements become ambiguous at compile time.
## Recipe
Rename `voxora_minimax::MiniMaxConfig` → `MiniMaxEngineConfig` (or `MiniMaxSettings`) in 0.7.0. The user-facing `voxora_config::MiniMaxConfig` stays unchanged (the rename is purely internal to the engine crate). Add a deprecation alias `pub type MiniMaxConfig = MiniMaxEngineConfig;` in 0.6.x so consumers that hit the collision via the indirect re-export path (`voxora_bridge::MiniMaxConfig`) get a clear migration message.
## Acceptance
- `voxora-minimax::MiniMaxConfig` no longer exists by that name; only `MiniMaxEngineConfig` (or equivalent) is exported.
- The user-facing `voxora_config::MiniMaxConfig` is unchanged.
- A search of `crates.io` reverse-deps confirms no consumer is using `voxora_minimax::MiniMaxConfig` directly (it's a low-confidence check; the rename is safe because the engine crate's public docs are internal).
Contributor guide
Research direction
Compare voxora-config/src/minimax.rs with voxora-minimax/src/config.rs, then trace the engine type's exports and the voxora_bridge re-export mentioned in the issue. Check the package versioning and crates.io reverse-dependency information before choosing the compatibility path. Done means the engine configuration has a distinct public name, the user-facing name is unchanged, and the stated acceptance checks pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend-api-design
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100