d83b10f939
The retrieval-mode enum used opaque single letters `Mode { C, A }`;
neither the identifier nor the operator-facing `--mode a` token
conveyed what the mode does. Rename to self-describing names that map
directly onto the glossary definitions:
Mode::C -> Mode::Lexical (BM25 + tag filter, offline, no IONOS)
Mode::A -> Mode::Hybrid (lexical u semantic -> RRF -> rerank)
Decisions taken (the issue's open questions, resolved):
- CLI canonical tokens are now `lexical` / `hybrid`; the default is
`lexical`. The legacy `c` / `a` tokens stay accepted as
case-insensitive input aliases (zero cost; protects hand-typed
invocations). A unit test pins the alias contract.
- The diagnostics `mode` string (Debug-derived) now emits
"Lexical"/"Hybrid". Verified safe: no downstream consumer parses it.
doctate is the future integrator and embeds the library (the `Mode`
enum), not the JSON string (design spec §103).
- The reserved, out-of-scope generative tier (spec's "Mode B") keeps
conceptual room: a future `Mode::Generative` does not collide with
the retrieval-strategy names Lexical/Hybrid.
Surface: enum + FromStr, CLI defaults and `eval --mode both`
expansion, the private `collect_mode_c`/`collect_mode_a` methods (now
`collect_lexical`/`collect_hybrid`) and their comments, the two
pipeline mode test files (renamed), the eval CLI test, the glossary
(old letter forms demoted to Avoid lists), and the spec CLI synopsis.
closes #2
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.4 KiB
Rust
33 lines
1.4 KiB
Rust
use std::process::Command;
|
|
|
|
#[test]
|
|
fn cli_suggest_outputs_json_with_codes() {
|
|
let out = Command::new(env!("CARGO_BIN_EXE_alpha-id"))
|
|
.args(["suggest", "--mode", "c", "--json", "-"])
|
|
.arg("--config").arg("config/default.toml")
|
|
.env("ALPHA_ID_STDIN", "Diabetes mellitus Typ 2")
|
|
.output().unwrap();
|
|
assert!(out.status.success(), "stderr: {}", String::from_utf8_lossy(&out.stderr));
|
|
let s = String::from_utf8_lossy(&out.stdout);
|
|
assert!(s.contains("\"icd_code\""));
|
|
assert!(s.contains("E11"));
|
|
}
|
|
|
|
/// The renamed canonical CLI token `--mode lexical` is accepted and the
|
|
/// diagnostics line reports the new variant name `Lexical` (not the legacy `C`),
|
|
/// confirming the enum rename reaches observable CLI output.
|
|
#[test]
|
|
fn cli_suggest_accepts_canonical_lexical_token() {
|
|
let out = Command::new(env!("CARGO_BIN_EXE_alpha-id"))
|
|
.args(["suggest", "--mode", "lexical", "-"])
|
|
.arg("--config").arg("config/default.toml")
|
|
.env("ALPHA_ID_STDIN", "Diabetes mellitus Typ 2")
|
|
.output().unwrap();
|
|
assert!(out.status.success(), "stderr: {}", String::from_utf8_lossy(&out.stderr));
|
|
let stdout = String::from_utf8_lossy(&out.stdout);
|
|
assert!(stdout.contains("E11"));
|
|
let stderr = String::from_utf8_lossy(&out.stderr);
|
|
assert!(stderr.contains("mode Lexical"),
|
|
"diagnostics should report canonical mode name; stderr: {stderr}");
|
|
}
|