ref:main
# Raw stdout writes bypass the JSON contract: under `--json`, stdout must hold
# exactly one JSON value (see src/output.rs). A `println!`/`print!` in a command
# leaks human text into that stream. Route human output through `output::line`
# (and friends, which no-op under --json) and machine output through a returned
# `output::Response`. The renderer in `output.rs` — the one place that actually
# writes stdout — allows these explicitly with `#[allow(clippy::disallowed_macros)]`.
disallowed-macros = [
{ path = "std::println", reason = "use output::line / return an output::Response so --json stays clean" },
{ path = "std::print", reason = "use output::line / return an output::Response so --json stays clean" },
]