mirror of
https://github.com/ultraworkers/claw-code.git
synced 2026-05-30 11:45:20 +08:00
This commit is contained in:
parent
ac925ed41c
commit
ddc71b5620
@ -7667,3 +7667,5 @@ Original filing (2026-04-18): the session emitted `SessionStart hook (completed)
|
|||||||
749. **`claw compact --output-format json` returned `hint: null` — `compact_interactive_only_error()` returned a single-line string with no `\n` between short error and remediation text, so `split_error_hint` couldn't populate the hint field** — identified by gaebal-gajae on `04eb661e`. Same class as #738 / #745 / #746. Fix: add `\n` before the remediation text in `compact_interactive_only_error`. Regression guard: extended `compact_subcommand_json_help_fails_fast_when_stdin_closed` to also assert `hint` is non-empty and mentions `/compact` or `--resume`. Source: gaebal-gajae dogfood on `04eb661e`, 2026-05-26.
|
749. **`claw compact --output-format json` returned `hint: null` — `compact_interactive_only_error()` returned a single-line string with no `\n` between short error and remediation text, so `split_error_hint` couldn't populate the hint field** — identified by gaebal-gajae on `04eb661e`. Same class as #738 / #745 / #746. Fix: add `\n` before the remediation text in `compact_interactive_only_error`. Regression guard: extended `compact_subcommand_json_help_fails_fast_when_stdin_closed` to also assert `hint` is non-empty and mentions `/compact` or `--resume`. Source: gaebal-gajae dogfood on `04eb661e`, 2026-05-26.
|
||||||
|
|
||||||
750. **`claw prompt --output-format json` (no text argument) returned `error_kind:"unknown"` and `hint: null`** — dogfooded 2026-05-26 on `2dfb7af6`. The error string `"prompt subcommand requires a prompt string"` had no prefix prefix for classifier and no `\n` for hint extraction. Fix: (a) prefix with `"missing_prompt: "` + newline before usage hint; (b) add `message.starts_with("missing_prompt:")` → `"missing_prompt"` classifier arm. Result: `error_kind:"missing_prompt"`, `hint:"Usage: claw prompt <text> or echo '<text>' | claw"`. Source: Jobdori dogfood on `2dfb7af6`, 2026-05-26.
|
750. **`claw prompt --output-format json` (no text argument) returned `error_kind:"unknown"` and `hint: null`** — dogfooded 2026-05-26 on `2dfb7af6`. The error string `"prompt subcommand requires a prompt string"` had no prefix prefix for classifier and no `\n` for hint extraction. Fix: (a) prefix with `"missing_prompt: "` + newline before usage hint; (b) add `message.starts_with("missing_prompt:")` → `"missing_prompt"` classifier arm. Result: `error_kind:"missing_prompt"`, `hint:"Usage: claw prompt <text> or echo '<text>' | claw"`. Source: Jobdori dogfood on `2dfb7af6`, 2026-05-26.
|
||||||
|
|
||||||
|
751. **ROADMAP #750 has no regression test: `claw prompt --output-format json` no-arg `error_kind` and `hint` could silently regress** — confirmed by gaebal-gajae on `ac925ed4`. Fix: add `prompt_no_arg_json_error_kind_750` test asserting nonzero exit, `error_kind:"missing_prompt"`, non-empty `hint` mentioning `claw prompt` or `echo`. Source: gaebal-gajae dogfood on `ac925ed4`, 2026-05-26.
|
||||||
|
|||||||
@ -1456,6 +1456,54 @@ fn diff_json_changed_file_count_deduplication_733() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn prompt_no_arg_json_error_kind_750() {
|
||||||
|
// #751/#750: `claw prompt --output-format json` with no prompt argument must emit
|
||||||
|
// error_kind:"missing_prompt" and a non-empty hint. Before #750 it returned
|
||||||
|
// error_kind:"unknown" + hint:null.
|
||||||
|
use std::process::Command;
|
||||||
|
let root = unique_temp_dir("prompt-no-arg");
|
||||||
|
fs::create_dir_all(&root).expect("temp dir");
|
||||||
|
let bin = env!("CARGO_BIN_EXE_claw");
|
||||||
|
|
||||||
|
let output = Command::new(bin)
|
||||||
|
.current_dir(&root)
|
||||||
|
.args(["--output-format", "json", "prompt"])
|
||||||
|
.output()
|
||||||
|
.expect("claw prompt should run");
|
||||||
|
assert!(
|
||||||
|
!output.status.success(),
|
||||||
|
"claw prompt with no arg must exit non-zero"
|
||||||
|
);
|
||||||
|
let stdout = String::from_utf8_lossy(&output.stdout);
|
||||||
|
let stderr = String::from_utf8_lossy(&output.stderr)
|
||||||
|
.lines()
|
||||||
|
.filter(|l| l.starts_with('{'))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join("");
|
||||||
|
let raw = if stdout.trim().starts_with('{') {
|
||||||
|
stdout.trim().to_string()
|
||||||
|
} else {
|
||||||
|
stderr
|
||||||
|
};
|
||||||
|
let parsed: serde_json::Value = serde_json::from_str(&raw).unwrap_or_else(|_| {
|
||||||
|
panic!("claw prompt (no arg) --output-format json must emit valid JSON; got: {raw}")
|
||||||
|
});
|
||||||
|
assert_eq!(
|
||||||
|
parsed["error_kind"], "missing_prompt",
|
||||||
|
"claw prompt no-arg must have error_kind:missing_prompt (#750); got: {parsed}"
|
||||||
|
);
|
||||||
|
let hint = parsed["hint"].as_str().unwrap_or("");
|
||||||
|
assert!(
|
||||||
|
!hint.is_empty(),
|
||||||
|
"claw prompt no-arg hint must be non-empty (#750)"
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
hint.contains("claw prompt") || hint.contains("echo"),
|
||||||
|
"hint should mention 'claw prompt' or 'echo': {hint}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn bare_slash_command_hint_745() {
|
fn bare_slash_command_hint_745() {
|
||||||
// #747/#745: claw <slash-cmd> --output-format json must return non-null hint.
|
// #747/#745: claw <slash-cmd> --output-format json must return non-null hint.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user