feat: #156 — error classification for text-mode output (Phase 2 of #77)

## Problem

#77 Phase 1 added machine-readable error `kind` discriminants to JSON error
payloads. Text-mode (stderr) errors still emit prose-only output with no
structured classification.

Observability tools (log aggregators, CI error parsers) parsing stderr can't
distinguish error classes without regex-scraping the prose.

## Fix

Added `[error-kind: <class>]` prefix line to all text-mode error output.
The prefix appears before the error prose, making it immediately parseable by
line-based log tools without any substring matching.

**Examples:**

## Impact

- Stderr observers (log aggregators, CI systems) can now parse error class
  from the first line without regex or substring scraping
- Same classifier function used for JSON (#77 P1) and text modes
- Text-mode output remains human-readable (error prose unchanged)
- Prefix format follows syslog/structured-logging conventions

## Tests

All 179 rusty-claude-cli tests pass. Verified on 3 different error classes.

Closes ROADMAP #156.
This commit is contained in:
YeonGyu-Kim 2026-04-22 00:21:32 +09:00
parent 14c5ef1808
commit f1e4ad7574

View File

@ -223,14 +223,21 @@ fn main() {
"hint": hint,
})
);
} else if message.contains("`claw --help`") {
eprintln!("error: {message}");
} else {
eprintln!(
"error: {message}
// #156: Add machine-readable error kind to text output so stderr observers
// don't need to regex-scrape the prose.
let kind = classify_error_kind(&message);
if message.contains("`claw --help`") {
eprintln!("[error-kind: {kind}]
error: {message}");
} else {
eprintln!(
"[error-kind: {kind}]
error: {message}
Run `claw --help` for usage."
);
);
}
}
std::process::exit(1);
}