refactor: rename Mode variants C/A to Lexical/Hybrid (closes #2)
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>
This commit is contained in:
+3
-3
@@ -19,7 +19,7 @@ enum Cmd {
|
||||
/// Suggest ICD codes for a dictation (FILE or - for stdin)
|
||||
Suggest {
|
||||
input: String,
|
||||
#[arg(long, default_value = "c")] mode: String,
|
||||
#[arg(long, default_value = "lexical")] mode: String,
|
||||
#[arg(long, default_value_t = 10)] top: usize,
|
||||
#[arg(long)] billable_only: bool,
|
||||
#[arg(long)] valid_only: bool,
|
||||
@@ -29,7 +29,7 @@ enum Cmd {
|
||||
},
|
||||
/// Run the eval harness
|
||||
Eval {
|
||||
#[arg(long, default_value = "c")] mode: String,
|
||||
#[arg(long, default_value = "lexical")] mode: String,
|
||||
#[arg(long, default_value_t = 200)] cases: usize,
|
||||
#[arg(long, default_value_t = 42)] seed: u64,
|
||||
},
|
||||
@@ -152,7 +152,7 @@ fn main() {
|
||||
}
|
||||
Cmd::Eval { mode, cases, seed } => {
|
||||
let modes: Vec<Mode> = if mode == "both" {
|
||||
vec![Mode::C, Mode::A]
|
||||
vec![Mode::Lexical, Mode::Hybrid]
|
||||
} else {
|
||||
vec![mode.parse().expect("mode")]
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user