- In a binary, `Box<dyn Error>` out of `main` is the entire error design. Write the enum the day a caller matches on a variant.
- A lifetime on a struct is a tax on every type that stores it. Own the data, or store an index; one clone off the hot path is the shorter true answer.
- Return `impl Iterator<Item = T> + '_` instead of a struct with a hand-written `next`. The adapter chain compiles to the state machine you were about to write.
- Take `&str`, `&[T]`, and `&Path`, not `impl AsRef<_>`. Callers deref-coerce for free, while the bound costs a monomorphized copy per argument type.
- A loop that pushes into a vector and returns early on the first error is an iterator chain you have not collected. `Result` short-circuits through `collect`, so let the adapters carry it.
