"Crate and build-lane migration map"

Crate and build-lane migration map

Single map for where code lives, which Cargo feature turns it on, and naming drift we are correcting. Pair with vox-cli-build-feature-inventory and CLI scope policy.

Nomenclature (canonical)

ConceptCanonical Rust / docs nameAvoid
Unified DB facade typevox_db::VoxDb or alias vox_db::CodexConfusing vox_codex:: in new code (use vox-codex crate only for legacy shims)
Arca store / schemavox_pm, CodeStoreMixing “Arca” and “Codex” without context
Mens corpus + runtime (no STT, no native train)feature mens-baseAssuming Oratio or vox-populi ML is always on when you enable gpu
Oratio STT CLIfeature oratioShipping vox-oratio in every default vox-cli build
Native train / QLoRAfeature gpu (alias mens-qlora)Expecting CUDA without mens-candle-cuda
Repo layout / repository_idvox-repositoryScattering repo-root logic in CLI ad hoc

Build lanes (what CI and vox ci build-timings measure)

Lane idCommand sketchPurpose
check_vox_cli_defaultcargo check -p vox-cliDefault contributor loop (mens-base, no Oratio, no vox-populi / gpu)
check_vox_cli_no_default_featurescargo check -p vox-cli --no-default-featuresCompiler + vox-db shell only
check_vox_cli_gpu_stub… --features gpu,mens-qlora,stub-checkML + TOESTUB integration
check_vox_cli_gpu_populi_candle_cuda… --features gpu,mens-candle-cudaCUDA compile gate (when nvcc on PATH)
check_vox_dbcargo check -p vox-dbData-plane baseline
check_vox_oratiocargo check -p vox-oratioSTT crate isolation
check_vox_mens_traincargo check -p vox-populi --features mens-trainNative training stack without linking full CLI
check_vox_cli_populi_oratiocargo check -p vox-cli --features oratioSTT / Oratio stack on top of default mens-base
check_vox_mcpcargo check -p vox-mcpMCP host binary (orchestrator + publisher + skills + Oratio rerank)

Run: vox ci build-timings and vox ci build-timings --crates (--json for CI artifacts). Soft budgets: docs/ci/build-timings/budgets.json only (loaded by the CLI — no second copy in Rust). Env: VOX_BUILD_TIMINGS_BUDGET_WARN=1 (missing lane keys + over cap), VOX_BUILD_TIMINGS_BUDGET_FAIL=1 (fail on over cap; warn not required).

Aggressive per-crate compile pressure (model, not a guarantee)

Rough cold cargo check -p … on a typical dev machine (order-of-magnitude):

Crate / laneCold check (indicative)Notes
vox-cli --no-default-features2–6 minLex/parser/typeck/codegen + vox-db
vox-cli default4–10 min+ vox-corpus, vox-runtime
vox-cli + oratio+3–8 min delta+ vox-oratio / Candle transformers
vox-cli + gpu+6–18 min delta+ vox-populi mens-train + vox-tensor
vox-cli + mens-candle-cuda+10–30 min deltanvcc / MSVC sensitive
vox-populi --features mens-train8–20 minBurn + Candle + qlora-rs
vox-oratio5–15 minWhisper / Candle path
vox-db1–4 minTurso stack

Use vox ci build-timings --crates to replace guesses with wall-clock numbers on your runner.

Measured sample (warm cache, not cold model)

Committed snapshot: docs/ci/build-timings/latest.jsonl (regenerate with SKIP_CUDA_FEATURE_CHECK=1 when CUDA is unavailable). Example row from a warm Windows run (2026-03-21): all lanes within aggressive cold bands from the table above (same order of magnitude or better because of cache).

Lane idWall-clock ms (sample)
check_vox_cli_default8845
check_vox_cli_gpu_stub11376
check_vox_cli_no_default_features4144
check_vox_db3892
check_vox_oratio826
check_vox_mens_train2444
check_vox_cli_populi_oratio9448

Treat these as telemetry, not SLA: refresh latest.jsonl after toolchain or dependency upgrades.

Deviation vs aggressive cold model + soft budgets

Use docs/ci/build-timings/snapshot-metadata.json with each latest.jsonl commit so reviewers know warm vs cold methodology.

Soft budgets (docs/ci/build-timings/budgets.json) are upper cold-check guards, not targets. The committed warm sample uses a tiny fraction of each budget (example: check_vox_cli_default1% of its 600_000 ms cap) — expected when target/ is warm.

Vs cold time bands (minutes, from the table above): a warm run that finishes in seconds does not contradict the cold model; it confirms incremental caching. Regression triage: compare new cold or CI wall-clock runs to bands, or enable VOX_BUILD_TIMINGS_BUDGET_WARN=1 on a clean CARGO_TARGET_DIR.

Migration matrix (aggressive reorg)

Old name / pathNew home / policyRationaleCompatibilityDeprecation
vox_codex::… imports in workspacevox_db::…Single data-plane mental model; Codex remains a type alias on VoxDbCrate vox-codex re-exports vox_db::*Retain facade until release notes removal
vox-codex crateStay as thin shim over vox-dbExternal crates / legacy pathspub use vox_db::* in crates/vox-codex/src/lib.rsDocument-only; no date until downstreams audited
Oratio in default CLIFeature oratioCandle/Whisper compile costvox-cli default = mens-base onlyDone
Native train / QLoRA in default CLIFeature gpu (+ mens-candle-cuda for NVIDIA kernels)Burn/Candle/qlora-rs blast radiusAliases mens-qloragpuDone
Ad-hoc repo root walks in new codevox_repository::…Stable repository_id, layout, scopesN/APolicy in external-repositories.md
vox mens without mens-baseEnable mens-base (default) or build vox-mens shimCommand surface gatevox-mens binary prepends mensDone
Shell timing scripts as SSOTvox ci build-timingsReproducible lanes in RustScripts remain optional delegatesDone

Lateral moves already applied or targeted

FromTo / policyWhy
vox-oratio on default mens-basefeature oratioCuts default vox-cli compile cost; STT is opt-in
vox_codex:: in vox-cli / vox-ludusvox_db::One data-plane mental model
vox-codex cratekeep as thin re-export over vox-dbExternal/legacy vox_codex path without duplicating logic
Dead vox-ludus / vox-codex deps in vox-lspremovedLess atomization in tooling crate

Deliverables checklist

  • oratio feature split in vox-cli
  • vox ci build-timings --crates
  • This migration map + inventory doc updates
  • Optional: deprecate vox-codex crate in a later release after downstreams migrate (breaking policy: allowed)