use std::path::PathBuf;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("I/O error reading '{path}': {source}")]
Io {
path: PathBuf,
#[source]
source: std::io::Error,
},
#[error("YAML parse error: {0}")]
Yaml(#[from] serde_yaml::Error),
#[error("Policy validation failed:\n{0}")]
Schema(String),
#[error("Invalid glob pattern '{pattern}': {source}")]
Glob {
pattern: String,
#[source]
source: globset::Error,
},
#[error("Invalid role name '{name}': use only lowercase letters, digits, and underscores")]
InvalidRoleName { name: String },
#[error("Render error for target '{target}': {source}")]
Render {
target: String,
#[source]
source: minijinja::Error,
},
#[error("Stale generated file: {}", path.display())]
CheckFailed { path: PathBuf },
#[error(
"No outputs are enabled. Add at least one target ID to `outputs` (e.g. `outputs: [agents-md]`)."
)]
NoOutputs,
#[error(
"Unknown output target '{id}'. Run `agent-policy list-targets` to see all supported targets."
)]
UnknownTarget { id: String },
}
pub type Result<T> = std::result::Result<T, Error>;