Errors go to stderr with enough context to diagnose without consulting logs.
Refer users to --debug or --verbose for more detail.
Build the stderr text and any --output json error payload from a structured error's fields
(code, context) at the CLI boundary — don't let one pre-formatted string be the only source for
both the human-readable and the machine-readable representation (see error_handling.md).
Acceptance scenarios in test/bdd/features/ drive the built binary, asserting on exit code,
stdout, and stderr; no server to start or stop, unlike a service.