From a55b6a7a059d9829874cc78431269d20fd6d9d36 Mon Sep 17 00:00:00 2001 From: "claude@clouddev1" Date: Wed, 13 May 2026 22:36:42 +0000 Subject: [PATCH] remove `q` quit alias MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `q` was introduced in round-5 as a peer Keyword variant alongside `quit`. Per ADR-0023's "alias miss" critique, that was the wrong shape — it surfaced `q` as a standalone command in completion (only one of its kind), and required parallel parser + usage + catalog + test entries. Drops the Keyword variant entirely; if this ever needs to come back, it should arrive as an alias annotation per ADR-0023, not as a peer keyword. Tests still 769 passing. --- src/completion.rs | 2 +- src/dsl/keyword.rs | 1 - src/dsl/parser.rs | 3 +-- src/dsl/usage.rs | 14 ++++---------- src/friendly/keys.rs | 1 - src/friendly/strings/en-US.yaml | 7 +++---- 6 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/completion.rs b/src/completion.rs index 70c5f91..f09d23e 100644 --- a/src/completion.rs +++ b/src/completion.rs @@ -640,7 +640,7 @@ mod tests { // App-lifecycle commands now appear alongside DSL // commands in the entry-keyword set. for expected in &[ - "quit", "q", "help", "rebuild", "save", "new", "load", "export", + "quit", "help", "rebuild", "save", "new", "load", "export", "import", "mode", "messages", ] { assert!( diff --git a/src/dsl/keyword.rs b/src/dsl/keyword.rs index a5c77e5..535af20 100644 --- a/src/dsl/keyword.rs +++ b/src/dsl/keyword.rs @@ -112,7 +112,6 @@ define_keywords! { // routing so these work in both simple and advanced modes // (per ADR-0003). Quit => "quit", - Q => "q", Help => "help", Rebuild => "rebuild", Save => "save", diff --git a/src/dsl/parser.rs b/src/dsl/parser.rs index 79467a4..f85c54c 100644 --- a/src/dsl/parser.rs +++ b/src/dsl/parser.rs @@ -469,8 +469,7 @@ fn command_parser<'a>() // BEFORE chumsky runs; the bare-keyword forms below // surface the `Path: None` / no-source variants for // empty-prompt completion + usage rendering. - let quit_cmd = choice((kw(Keyword::Quit), kw(Keyword::Q))) - .map(|()| Command::App(AppCommand::Quit)); + let quit_cmd = kw(Keyword::Quit).map(|()| Command::App(AppCommand::Quit)); let help_cmd = kw(Keyword::Help).map(|()| Command::App(AppCommand::Help)); let rebuild_cmd = kw(Keyword::Rebuild).map(|()| Command::App(AppCommand::Rebuild)); diff --git a/src/dsl/usage.rs b/src/dsl/usage.rs index e4aeacc..d6b311f 100644 --- a/src/dsl/usage.rs +++ b/src/dsl/usage.rs @@ -99,10 +99,6 @@ pub const REGISTRY: &[UsageEntry] = &[ entry: Keyword::Quit, catalog_key: "parse.usage.quit", }, - UsageEntry { - entry: Keyword::Q, - catalog_key: "parse.usage.quit", - }, UsageEntry { entry: Keyword::Help, catalog_key: "parse.usage.help", @@ -220,7 +216,6 @@ mod tests { Keyword::Delete, Keyword::Replay, Keyword::Quit, - Keyword::Q, Keyword::Help, Keyword::Rebuild, Keyword::Save, @@ -308,16 +303,15 @@ mod tests { fn entry_keywords_alphabetised_returns_unique_sorted_commands() { let keys = entry_keywords_alphabetised(); let names: Vec<&str> = keys.iter().map(|k| k.as_str()).collect(); - // Ten DSL entries plus the eleven app-lifecycle entries - // registered in REGISTRY (quit/q are two keywords with - // the same usage template; both surface here). + // Ten DSL entries plus the ten app-lifecycle entries + // registered in REGISTRY. assert_eq!( names, vec![ "add", "change", "create", "delete", "drop", "export", "help", "import", "insert", "load", "messages", "mode", - "new", "q", "quit", "rebuild", "rename", "replay", - "save", "show", "update", + "new", "quit", "rebuild", "rename", "replay", "save", + "show", "update", ], ); } diff --git a/src/friendly/keys.rs b/src/friendly/keys.rs index f0fa72d..25c8452 100644 --- a/src/friendly/keys.rs +++ b/src/friendly/keys.rs @@ -220,7 +220,6 @@ pub const KEYS_AND_PLACEHOLDERS: &[(&str, &[&str])] = &[ ("parse.token.keyword.null", &[]), ("parse.token.keyword.on", &[]), ("parse.token.keyword.pk", &[]), - ("parse.token.keyword.q", &[]), ("parse.token.keyword.quit", &[]), ("parse.token.keyword.rebuild", &[]), ("parse.token.keyword.relationship", &[]), diff --git a/src/friendly/strings/en-US.yaml b/src/friendly/strings/en-US.yaml index 6648a8c..ff13bec 100644 --- a/src/friendly/strings/en-US.yaml +++ b/src/friendly/strings/en-US.yaml @@ -190,7 +190,7 @@ help: . App-level commands (typed inside the app, available in both modes): - quit / q Exit cleanly. + quit Exit cleanly. mode simple|advanced Switch input mode. help Show this list of commands in-app. save Save the current temp project under a @@ -214,7 +214,7 @@ help: # math stays accurate. in_app_body: | Supported commands: - quit / q — exit + quit — exit help — this list mode simple|advanced — switch input mode messages — show current verbosity @@ -355,7 +355,7 @@ parse: # grammar that the parser accepts; the in-app `help` # listing in `help.in_app_body` carries the user-facing # description. - quit: "quit | q" + quit: "quit" help: "help" rebuild: "rebuild" save: "save | save as" @@ -406,7 +406,6 @@ parse: # App-lifecycle commands (per ADR-0003, surfaced through # the parser to drive completion + usage templates). quit: "`quit`" - q: "`q`" help: "`help`" rebuild: "`rebuild`" save: "`save`"