We break down why, in a CLI, you cannot make decisions based on the text of
error, and we lock in the final error contract via the
AppError type with fields
Kind,
Op,
Err. We set up an unwrap chain via
Unwrap(), extract the category via
errors.As, introduce constructors (
Validation,
IO,
Internal), and show how this naturally yields predictable messages, logs, and exit codes.